カラクリサイクル

『輝かしい青春』なんて失かった人の雑記

DigitalOceanにCoreOSを突っ込んでIRC環境を整えた

概要: という話。


はい、もう眠いと言うか、もう寝る準備万端でこの記事を書いてます。にゃるらコト岡村 直樹(26)です。正直寝たいです。

えーっと、確かここ最近の内に、

で、

が、サポートされたとかなんとか、って言う記事を見かけたんですね。

で、それはそれで、

ヲッ!?

と思ってスルー(ぉぃしてたんですが、

そういや、IRC 環境崩壊してたんだっけな……

と思い出したので、今日復旧も兼ねて、

で、IRC 環境を整えた話を書きたいと思います。

1. DigitalOceanにCoreOSをぶっ込む

これについては、オフィシャルのコミュニティで、

という記事が書かれているので、それに従ってCoreOSをDropletを立ち上げればおk、って感じだったんですが、2014年9月現在のCoreOSの初期化には、

  • cloud-config

が必要で、それは大体こんな感じでした:

#cloud-config
coreos:
  etcd:
    name:      private
    discovery: https://discovery.etcd.io/<token>
    addr:      $private_ipv4:4001
    peer:      $private_ipv4:7001
  fleet:
    public_ip: $private_ipv4
  units:
    - name: etcd.service
      command: start
    - name: fleet.service
      command: start
    - name: docker.service
      command: start
ssh_authorized_keys:
    - ssh-rsa AAAA...

2. 次に各種 IRC Gateway と IRC Bouncer (ZNC) をぶっ込む

で、次のステップとして、

辺りの Dockerfile を整理しつつ、Docker containerを作ってました。

で、そのDocker containerをdeployするのに、今回はfleetを使っていて、例えば、ZNCで言うなら、

[Unit]
Description=ZNC
After=docker.service
Requires=docker.service

[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill znc
ExecStartPre=-/usr/bin/docker rm znc
ExecStart=/usr/bin/docker run --name znc -p 0.0.0.0:7000:7000 -v /home/core/data/znc/state:/znc/state nyarla/znc:latest admin password
ExecStop=/usr/bin/docker stop znc

と言うような docker-znc.service ファイルを作った上で、

$ fleetctl start docker-znc.service

して、Docker conatinerをdeployしました。

で、あと今回は、 (Twitter|Lingr) IRC Gateway をListenさせる際のBinding Portを、 Docker BridgeのデフォルトゲートウェイのIP にBindさせていたりしました。ちなみにこれするとZNCの設定が楽になって良いです。はい。

で、今回はコトの次いでとして、

  1. ZNCへのSSL接続を有効にした上で
  2. SSL/TLS Client Authentication を有効にした Certificate を使い
  3. Global settings で certauth を有効にする

という感じにして、お漏らしは危険だけれども、Certificateを抜かれない限り、自分以外接続できない、という感じの構成にしてみました。ちなみにこれは趣味です。

3. データの外だしの為に Bittorrent Syncを使った。そしてハマった

で、最後。

今回、僕はローカルからCoreOSへファイルを転送するのには、

  • scp

を使って、テケトーにコピーしてたんですが、CoreOS上のDocker Containerのデータは、

  • /home/core/data

というディレクトリに保存するようにしむけてたりしました。

で、それは良いんですが、そのままの状態では自動同期もクソもないので、

という Dockerfile で BitTorrent Syncを起動する Docker Container を作り、

  1. btsync containerを起動する際に /data/home/core/data をマウントする
  2. 次に Web UIのListen portをlocalhostに設定し、Coccinellidaで、SSH Port Forwardする
  3. その後、SSH Port Forward 経由で、BitTorrent Sync のWeb UIで基本的な設定を済ます
  4. あとは、OSXの方のBitTorrent Sync で同期を取る

というようなコトをやっておりました。

で、この時ハマったのが、

  1. btsync の初期起動の時に、btsync の設定が保存されない!
  2. あとなんか btsync の API が500 error 吐いてるんですけど!
  3. 何が悪いんや!

という感じの事で、これは、

  • btsync の初期起動時に、 設定ファイルを指定しない

という回避方法でなんとかしました。で、ちなみにこれは、

のコメント欄に載ってた。ArchLinux 万歳!

というコトで以上です。

眠い。

もう寝ます。