mastodonのインスタンスを立てる

ども。こんばんは。

なんか流行ってるね。ってことで、CentOS 7の練習とかDockerの勉強のために立ててみます。

いい加減にCentOS7も触っとかないとな~と最近つくづく思ってたのでいいネタですね。

Dockerとか名前しか知らない謎技術だわ。。

じゃぁ新しくCentOS 7を立てていきます。

vSphere Host ClientでVM構築するのも初めてだなー。

とりあえず、

CPU:4コア
メモリ:2GB
HDD:500GB(Thin)
OS:CentOS Linux release 7.3.1611 (Core)

で、作ります。

あかん!これはあかん!さっぱりわからん・・・ことはないけど。。。

いまこんな画面なんだ。。。

とりあえずネットワークの設定(IPv4のみ)、DNS、NTP、ホスト名を設定。
ソフトウェアは・・・昔みたいなカスタマイズ方法がわからずとりあえず最小構成で。

パーティションももうそのままでいいや。どうせLVMでしょ。

あれ、Xは入るのかな。LVMの操作はやっぱりGUIがいいよね。後からいれれるかなー。まぁいいか。。。

で、インストール開始。開始中にrootユーザのパスワード決めたり、追加ユーザ作るのね。

インストール早っ。10分くらいでできるみたい。ほげー。

じゃぁSSHで入ってまず色々確認

[root@mstdn ~]# df -h

ファイルシス              サイズ  使用  残り 使用% マウント位置
/dev/mapper/cl_mstdn-root    50G 1020M   49G    2% /
devtmpfs                    910M     0  910M    0% /dev
tmpfs                       920M     0  920M    0% /dev/shm
tmpfs                       920M  8.6M  912M    1% /run
tmpfs                       920M     0  920M    0% /sys/fs/cgroup
/dev/sda1                  1014M  139M  876M   14% /boot
/dev/mapper/cl_mstdn-home   447G   33M  447G    1% /home
tmpfs                       184M     0  184M    0% /run/user/1000

うわ。やっぱパーティションレビューすべきやったorz

そんな/homeに容量いらねーっつの。もういいや・・・。

時計は・・・・あれ、ntpqないよ??あれ、インストール時に決めたのに。。。
→すでに時代遅れな俺orz。最近はchronyっていうNTPクライアントらしい。

ってことでこんな感じ。

[root@mstdn ~]# chronyc sources

210 Number of sources = 2
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================

^+ xxx                  2   6    37    10   +926us[ +918us] +/-   37ms
^* xxx             2   6    37    10   -779us[ -787us] +/-   31ms

 

続いてとりあえずアップデートかける。ここは普通にyum updateで。70個くらいでした。

yumのプロキシは「/etc/yum.conf」に以下のように追記

#20170417 add@tomo
proxy=http://xxx.xxx.xxx.xxx:8080

さぁて、firewall(iptablesなのか?)と、SELinuxはどうしよう。
切っとくかー。(逃げ、甘え)

SElinuxはこれまで通りsysconfigでいいね。
getenforceのコマンドも使える。

firewallはiptablesではなくてfirewalldというやつになっているらしい。
※あれiptables -nvLとかしたら普通に出ましたけど。。。

とりあえず止めます。
※クラウドとかVPSの方は気をつけてくださいね!!!うちは手前のFWで制御しますので、OS側では今回はオフにします。

お、ついにきたなsystemctl。

[root@mstdn ~]# systemctl is-enabled firewalld
enabled

で、止めて自動起動無効化。

[root@mstdn ~]# systemctl stop firewalld
[root@mstdn ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
[root@mstdn ~]#
[root@mstdn ~]# systemctl is-enabled firewalld
disabled

ふぅ。慣れって大事。

じゃぁそろそろmastodonとやらをいれてきます。

こちらを参考に。

CentOS7でmastodonを建てる

・nginxをいれる ※これもなにげに初めて。リポジトリをいれます。

# yum install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

インストールします。

# yum install nginx

・続いてDocker

普通にyumでいれたけど・・・いいのかな。

# yum install docker

めっちゃ色々入るなー。

audit-libs-python        x86_64   2.6.5-3.el7_3.1              updates    70 k
checkpolicy              x86_64   2.5-4.el7                    base      290 k
container-selinux        noarch   2:2.9-4.el7                  extras     26 k
docker-client            x86_64   2:1.12.6-11.el7.centos       extras    4.4 M
docker-common            x86_64   2:1.12.6-11.el7.centos       extras     71 k
libcgroup                x86_64   0.41-11.el7                  base       65 k
libseccomp               x86_64   2.3.1-2.el7                  base       56 k
libsemanage-python       x86_64   2.5-5.1.el7_3                updates   104 k
oci-register-machine     x86_64   1:0-1.11.gitdd0daef.el7      extras    1.1 M
oci-systemd-hook         x86_64   1:0.1.4-9.git671c428.el7     extras     29 k
policycoreutils-python   x86_64   2.5-11.el7_3                 updates   445 k
python-IPy               noarch   0.75-6.el7                   base       32 k
setools-libs             x86_64   3.3.8-1.1.el7                base      612 k
skopeo-containers        x86_64   1:0.1.18-1.el7               extras    7.6 k
yajl                     x86_64   2.0.4-4.el7                  base       39 k

しかも知らないパッケージがおおいなー。

起動と自動起動

[root@mstdn src]# systemctl enable docker

Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

[root@mstdn src]#

[root@mstdn src]# systemctl start docker

[root@mstdn src]# systemctl status docker
※長いので結果略

バージョンを見てみる。

[root@mstdn src]# docker version
Client:
Version:         1.12.6
(略)
Server: ← startしてないと出ない。
Version:         1.12.6
(略)

・続いてgit

# yum install git

・docker-composeを入れる。※Dockerのコンテナを便利に管理するツールらしい。

https://github.com/docker/compose/releases

こんな感じでインストール(ダウンロード)。上のリンクのとおりですがいきなり/usr/local/binですねw

# curl -L https://github.com/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
※プロキシ必要な方は「-x x.x.x.x:8080」とかでどうぞ。

# chmod +x /usr/local/bin/docker-compose

・mastodonを入れる。

結局nginxでリバプロで公開するんだろうと予想しつつ、一応ここからはwwwユーザを作ってそのホームディレクトリで作業してみます。

さて、mastodonとやらをいれていきます。が、その前にgitのproxyを。

$ git config –global http.proxy http://x.x.x.x:8080
$ git config –global https.proxy http://x.x.x.x:8080
$ git config –global url.”https://”.insteadOf git://
※最後の行はおまけ。「git://」を使えるようにするコマンド。らしい。

しまった。SSL復号化の弊害が・・・。insecure的なオプションあるんかな。

$ git clone https://github.com/tootsuite/mastodon.git
Cloning into ‘mastodon’…
fatal: unable to access ‘https://github.com/tootsuite/mastodon.git/’: Peer’s certificate issuer has been marked as not trusted by the user.

お。ありますね。SSL証明書チェックの無効化(=自己署名証明書の許可)。コンフィグもできるらしいですが、今回はこれで。

$ git -c http.sslVerify=false clone https://github.com/tootsuite/mastodon.git

できました。

・Dockerを設定していく。

.env.production.sampleを.env.productionにmv。←なぜmvしたし。。。

LOCAL_DOMAIN=xxxx
DB_USER=xxxxx
DB_NAME=xxxx
DB_PASS=xxxx

シークレットとやらを作る。

$ docker-compose run –rm web rake secret
ERROR: Couldn’t connect to Docker daemon at http+docker://localunixsocket – is it running?
If it’s at a non-standard location, specify the URL with the DOCKER_HOST environment variable

おお?ここからはrootでやるのか?そりゃそうか?確かに追加したユーザだとdocker versionが通らない。
やば。久々に無知全開。とりあえずrootで。

とりあえずsecretとやらを3つ作るらしい。一回目の実行でredisとかが入れようとして、proxy通らずコケたみたい。

# docker-compose run –rm web rake secret ← 「ーーrm」ハイフン2つです。
Creating network “mastodon_default” with the default driver
Pulling redis (redis:alpine)…
Trying to pull repository docker.io/library/redis …
Pulling repository docker.io/library/redis
ERROR: Network timed out while trying to connect to https://index.docker.io/v1/repositories/library/redis/images. You may want to check your internet connection or if you are behind a proxy.

dockerのpullなどへのプロキシ適用はこちら。

防火壁の中の Docker

「/etc/systemd/system/docker.service.d/http-proxy.conf」を作ったら(ディレクトリも作った)、

# systemctl daemon-reload ←このコマンドあとで調べる。
# systemctl restart docker

再トライ!が、またSSLのあれが。もうめんどいので一旦FortiGateのSSL復号化を外す。

余談ですが、気軽にSSL復号化をやろうという輩には「一度あなたのお家で試してあげましょうか?」ということにしています。だって本当に大変だもの。

お、redis、postgres、rubyがpullされた!

へーdockerってこういうものなんだね。

ぐぉおおおお。

コンテナ上のAlpineで実行しているコマンドがネットに繋いでるっぽい。

もういい。443全開にしてやったぜ!超快適だぜ!プロキシなんて、ましてやSSL復号化なんていらんのや!

さて、secretの生成に戻ります。一回目はかなり時間がかかるみたい。

ってかゲストが固まったorz

一旦再起動。

二回目移行はすぐ終わります。

3回実行して、「.env.production」の以下に書き込み。

PAPERCLIP_SECRET
SECRET_KEY_BASE
OTP_SECRET

続いてSMTPの設定。うちは自鯖なので自鯖の設定を。ここはわかりやすいので省略します。

・ビルドする

docker-compose build

これはすぐ終わった。ここまででdocker imagesはこんな感じになっていた。

# docker images

REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
gargron/mastodon     latest              ほげ?隠す必要ある?        7 minutes ago       708.5 MB
docker.io/postgres   alpine              ほげ?        9 days ago          37.7 MB
docker.io/ruby       2.4.1-alpine        ほげ?        3 weeks ago         56.24 MB
docker.io/redis      alpine              ほげ?        6 weeks ago         19.82 MB

・コンテナ群の立ち上げ

# docker-compose up -d
mastodon_redis_1 is up-to-date
mastodon_db_1 is up-to-date
Creating mastodon_sidekiq_1
Creating mastodon_web_1
Creating mastodon_streaming_1

ほー。

・イメージに入ってDBの設定

こうやってdockerに入るんですね。

# docker exec -it mastodon_db_1 /bin/bash
# su – postgres
$ createuser -P 決めたDBユーザ名 ←こっからPostgres
$ c
reatedb 決めたDB名 -O 作ったユーザ名

・DBのマイグレート(何やってるかはよくわからん)とアセットのコンパイル(同じく)

# docker-compose run –rm web rails db:migrate ← 「ーーrm」です。
# docker-compose run –rm web rails assets:precompile ← 「ーーrm」です。

DBのマイグレートはすぐ終わるけど、アセットのコンパイルは数分かかる感じかな。

・コンテナ再起動

# docker stop $(docker ps -a -q) && docker-compose up -d

・nginxの設定

 この辺参考に「/etc/nginx/conf.d/mastodon.conf」を作る。とりあえず証明書は既存でもってるオレオレで。
おいおい証明書とるかなー。

https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md

 

nginxのrestartして、あと自動起動をして・・・・

動いたー。

早速ユーザ登録したけど、メールサーバの設定ミスってた。。。

さて、どう修正するか。

とりあえず止める。

# docker-compose stop

そもそも間違っていたのはメールサーバの認証設定。
うちはオンプレなので認証不要。

ってことで、「.env.production」の以下の設定を入れる。(デフォルトplainを修正)

SMTP_AUTH_METHOD=none

ビルド

# docker-compose build

上げる

# docker-compose up -d

あれ、直らね。手順違うのかな。

あー、なるほど。コメントにはLOGINとPASSWORDをブランクにしとけって書いてるけど、これコメントアウトしないとダメだね。

てことで、登録できました・・・が。

ログインしてもまっくろやんけー!!!!

何も表示されないorz

今日はここまで。

ではでは。またの機会に。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。