2017年6月27日火曜日

Mastodon を立ててみたときのメモ

ローカル な Mastodon を Windows 10 + Docker + VirtualBox で立ててみた

環境

  • Windows 10
  • Docker Toolbox
    • docker-machine version 0.10.0, build 76ed2a6
    • docker version 17.03.0-ce, build 60ccb22
    • docker-compose version 1.11.2, build f963d76f
  • VirtualBox
  • Mastodon 1.3.1

準備

  1. ソースコード取得
    1. mastodon を clone
    2. 最新の tag を checkout
  2. Docker Quickstart Terminal なりでホストを起動しておく

Configuration

  1. docker-compose.yml を開いて以下のコメントを外す
    db:
      restart: always
      image: postgres:alpine
    ### Uncomment to enable DB persistance
    #    volumes:
    #      - ./postgres:/var/lib/postgresql/data
    
    redis:
      restart: always
      image: redis:alpine
    ### Uncomment to enable REDIS persistance
    #    volumes:
    #      - ./redis:/data
    
  2. .env.production.sample をコピーして .env.production を作成
  3. SECRET の作成
    1. 以下のコマンドを実行

      docker-compose run --rm web rake secret

    2. 生成されたキーをコピー

    3. .env.production の PAPERCLIP_SECRET にペースト

      PAPERCLIP_SECRET=70414fade63bce99d2c233c1038ea661e79717db2e833967e2c77ead631078ca62e21a8162af3e0693bfd15ec176d94f3d3339cf61797185ed72e2ed91058eb6
      SECRET_KEY_BASE=
      OTP_SECRET=
      
    4. 上記操作を繰り返して残りの2つも設定する

  4. .env.production を編集する
    1. LOCAL_DOMAIN
      # Federation
      LOCAL_DOMAIN=localhost:3000
      LOCAL_HTTPS=false
      
      (とりあえず動けばいいのでこれでいい)
    2. SMTP の設定
      今回は gmail を使う ※2段階認証が無効だと安全性の低いアプリと判断され、ブロックされる。 http://karur4n.hatenablog.com/entry/2015/03/07/234600
      SMTP_SERVER=smtp.gmail.com
      SMTP_PORT=587
      SMTP_LOGIN=ユーザー
      SMTP_PASSWORD=アプリケーションパスワード
      SMTP_FROM_ADDRESS=アドレス
      SMTP_DOMAIN=gmail.com
      #SMTP_DELIVERY_METHOD=smtp # delivery method can also be sendmail
      #SMTP_AUTH_METHOD=plain
      #SMTP_OPENSSL_VERIFY_MODE=peer
      #SMTP_ENABLE_STARTTLS_AUTO=true
      
  5. マウントボリュームの編集 (docker-compose.yml)
    マウントデータの永続化ができていなかったので、デフォルトのマウントパスを以下のように書き換えます
    ./xxxx → /mnt/sda1/docker/mastodon/xxxx

ビルド

  1. ビルド

    docker-compose build

  2. データベース初期化

    docker-compose run --rm web rails db:migrate

  3. アセットのプリコンパイル

    docker-compose run --rm web rails assets:precompile

起動

  1. 以下のコマンドを実行

    docker-compose up -d

    起動には少し時間がかかります
    様子をみるときは

    docker-compose logs -f

  2. 192.168.99.100:3000 にアクセスする
    ※ VirtualBox 上の Docker ホストの場合はホストの IP にアクセス
    ホストの IP はターミナル起動したときに表示されます。(たいてい 192.168.99.100 ?)

  3. 停止

    docker-compose stop

  4. 破棄

    docker-compose down

view raw READEME.md hosted with ❤ by GitHub

2017年6月19日月曜日

[Visual Studio 2017] インデント問題を解決する? .editorconfig を使ってみた

Visual Studio 2017 からプラグインインストール不要で EditorConfig が使えるようになったので、遅ればせながら使ってみました。
2017 のリリース直後に試して、ブログにしようと思ってましたが、なんだかんだでこの時期になってしまいました。
なので、特に"これ"という情報はありません(;´・ω・)。が、editorconfig 便利だなーということだけ紹介します。

EditorConfig とは?
EditorConfig はインデントのタブ派 vs スペース派などのルールを書式化し、個人のエディタ設定によらず、コーディングスタイルの統一ができるようになるものです。


チーム内のスタイル統一が容易になるのもメリットですが、個人的には1つのエディタでプロジェクトごとの設定を意識せずにコーディングできるとこが便利だなーと思いました。

Visual Studio の場合ですと、インデントの設定はグローバルに1つだけなので、タブ派なプロジェクトとスペース派なプロジェクトを跨いで作業するのは大変でした。
これが、Visual Studio 2017 から EditorConfig が使えるようになったので、とっても捗ります!
(※ 2017 以前でも拡張機能をインストールすることで使用できます)

iutest の .editorconfig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root = true
  
 [*]
 indent_style = space
 indent_size = 4
 insert_final_newline = true
  
 [Makefile]
 indent_style = tab
  
 [*.{cpp,hpp,ipp}}
 charset = utf-8-bom
  
 [*.py]
 charset = utf-8
  
 [*.{yml,html}]
 indent_size = 2

これをルートディレクトリに配置するだけで、Visual Studio が自動的に設定を読み込んで、インデントなど指定した通りに編集できるようになります。

設定できる項目
公式にまとまっているので、そちらを参照してください。

https://github.com/editorconfig/editorconfig/wiki/EditorConfig-Properties




editorconfig、本当に便利なんで、会社でもリポジトリに突っ込んでいこうと思いました。
今回は以上です。ではでは。

2017年6月12日月曜日

[Docker] docker-compose で作成されるデフォルト network でハマった備忘録

こんにちは。
ブログズミ: [Docker] 始めてみたけど躓きまくってるので備忘録として残しておくよ
上記記事から、一ヶ月くらい経って、docker-compose も使うようになってきました。
Docker はもとより、ネットワークとかの知識がほとんどない素人ですが、多少覚えてきました。

それにしても、docker-compose 便利ですね!
環境変数とか設定を Dockerfile から追い出せるし、--build-arg も docker-compose.yml に書けるし、
Docker ホストが起動したときに自動起動したい場合も、"restart: always" を書いとけば OK ですし、
ブログズミ: [Windows][Docker] Host および コンテナの起動をスタートアップに登録」とか、
いらんかったわ!って感じです。

でもハマった
まぁ、でもハマりますよね。
今回ハマったのはネットワーク絡み。

Dockerfile からビルドして docker run したコンテナからは通じるのに、
それを docker-compose で run すると通じない…
そんなことがありました。

docker-compose が作成する network
docker-compose run すると、{サービス名}_default という名前で network が作成されます。

$ docker-compose up -d
Creating network "hoge_hoge_default" with the default driver

こんな感じでログが出ていると思います。

Docker 管理下のネットワークは docker network ls で確認できます。
$ docker network ls
a8c84238aaaa        bridge             bridge              local
f9b622381b6a        host               host                local
7061554ce0f1        hoge_hoge_default  bridge              local
f1c24d1dda82        none               null                local

さらに、詳細を docker network inspect {ネットワーク名} で確認できます。

$ docker network inspect hoge_hoge_default
[
    {
        "Name": "hubot2_bridge",
        "Id": "1d3906e507b39eb08cf6d7326058eb62c447772371c4d2b692765c25778a4d11",
        "Created": "2017-05-23T11:41:13.819782229Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1/16"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Containers": {
            "72917816824f2d5fe76ba854a49766787fd1bb54928fd903d251fc9dfa5a2f69": {
                "Name": "hoge_hoge_1",
                "EndpointID": "219cb4cbd809b4d3d7e5f4d1118abe87fe5e4d44222ace5e6022119366827d60",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]


で、これが目的のネットワークと衝突してて通じてなかったようです。

解決方法
docker-compose.yml にネットワークの設定を書き足します。
参考:https://github.com/docker/compose/issues/2582

1
2
3
4
5
6
7
8
9
10
11
12
13
services:
  hoge:
    networks:
      - bridge
 
networks:
  bridge:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 172.16.238.0/24
        gateway: 172.16.238.1

これで、network の subnet/gateway を指定できるので、都合の良い設定すれば解決するはずです。



また、1つ docker のことがわかった気がします。
今回は以上です。では。

2017年6月5日月曜日

Wandbox のコンパイラー追加を通知する環境を作った

Wandbox で対応コンパイラーが増えたら、自分宛てにツイートしてくれる環境を作りました。



構成
Appveyor + Zapier

概要
https://github.com/srz-zumix/wandbox-news
ソースコードをみていただければ、どんなことやっているかはわかると思います。
特に難しいことはしてなくて、Wandbox API で取ってきたリストを成果物として保存して、前回との差分があれば Webhook を投げます。
あとは、Zapier で Webhook を受け取ってツイートするだけです。

その他
最初は、Google App Engine とか Circle CI とか使おうと思ってましたが、定期ビルド、Webhook Notification、成果物の保存・取得ができる Appveyor に落ち着きました。

あとは、Notification でカスタム json を作るのに、ちょっと手間取りました。
デフォルトで送ると Zapier で message を取るのがめんどくさかった(というか、うまくできない?)ので、カスタムで送るようにしてます。
url が secure 指定できなかったので、Web UI 設定にしてますが、appveyor.yml にコメントで書いてあるので参考にしてください。

では。


※更新なしが FAIL 更新ありが PASS になっているが、どちらも PASS にできるならしたい。
※Webhook を発行するトリガーとして、ステータスを利用しているため。
※最初は逆だったが、成果物取得で落ちてくるのが lastSuccessBuild のものだったため、更新があったときを PASS にしている。

※Zapier で tweet する際に改行がスペースに置換されてしまっている。
※改行のまま tweet したい。