ども。こんばんは。
なんか流行ってるね。ってことで、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とやらをいれてきます。
こちらを参考に。
・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などへのプロキシ適用はこちら。
「/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
$ createdb 決めた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
今日はここまで。
ではでは。またの機会に。


