Mastodon というものが流行っているらしいので、立ててみました。
Ubuntuのアップグレード Dockerのインストール docker-composeのインストール Mastodonのインストール nginxの設定 アカウント登録と管理者権限の設定
1. Ubuntuのアップグレード しばらく放置されていたさくらVPSのインスタンスが1台あったんですが、12.04とだいぶ古いのでアップグレードしました。Mastodonとは関係無いので、読み飛ばしてもらって結構です。
一旦、12.04の状態を最新に更新します。
1 $ sudo apt-get update
2 $ sudo apt-get upgrade
do-release-upgrade
で順番にアップグレードしていきます。今回は 12.04 → 14.04 → 16.04 という段階を経てアップグレードしました。
1 $ sudo do -release-upgrade -c
2 $ sudo do -release-upgrade
14.04 から 16.04 にアップグレードする時に以下のようなエラーが出ました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Error in sys.excepthook:
Traceback ( most recent call last) :
File "/tmp/ubuntu-release-upgrader-wsnfwle8/DistUpgrade/DistUpgradeViewText.py" , line 145, in _handleException
"\n" .join( lines))
File "/tmp/ubuntu-release-upgrader-wsnfwle8/DistUpgrade/DistUpgradeViewText.py" , line 179, in error
print( twrap( summary))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-13: ordinal not in range(128)
Original exception was:
Traceback (most recent call last):
File "/tmp/ubuntu-release-upgrader-wsnfwle8/xenial", line 8, in <module>
sys.exit(main())
File "/tmp/ubuntu-release-upgrader-wsnfwle8/DistUpgrade/DistUpgradeMain.py", line 229, in main
app = DistUpgradeController(view, options, datadir=options.datadir)
File "/tmp/ubuntu-release-upgrader-wsnfwle8/DistUpgrade/DistUpgradeController.py", line 119, in __init__
self._view.updateStatus(_("Reading cache"))
File "/tmp/ubuntu-release-upgrader-wsnfwle8/DistUpgrade/DistUpgradeViewText.py", line 159, in updateStatus
print(msg)
UnicodeEncodeError: ' ascii' codec can' t encode characters in position 0-10: ordinal not in range( 128)
以下のフォーラムに解決策がありました。
https://ubuntuforums.org/showthread.php?t=2328729
つぎの環境変数付きで実行することで解決しました。
1
$ LC_ALL = en_US.UTF-8 LANG = en_US.UTF-8 LANGUAGE = en_US.UTF-8 sudo do -release-upgrade -d
2. Dockerのインストール 以下の公式のドキュメントがあるのでその通りにインストールしました。
https://docs.docker.com/engine/installation/linux/ubuntu/
Dockerのインストールに必要となるツール等をインストールします。
1
2
3
4
5
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
GPGキーをインストールします
1
2
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
Docker用のaptリポジトリを追加しましす
1
2
3
4
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$( lsb_release -cs) \
stable"
apt-get update しておきます
Docker本体をインストールします。バージョン指定もできるようですが今回は最新のDockerが取得できれば良いので、以下のコマンドでインストールしています。
1
$ sudo apt-get install docker-ce
以下のコマンドで正常にインストールできたか確認します。
1
$ sudo docker run hello-world
sudo して docker コマンドを入力しなくていいように以下のコマンドで自分自身を docker グループに追加しておきます。
1
2
$ sudo gpasswd -a $USER docker
$ sudo service docker restart
3. docker-composeのインストール Mastodon は docker-compose を使っているようなので、これもインストールします。
docker-composeをダウンロードしてきて、実行権限つけるだけです。
1
2
3
$ sudo curl -L https://github.com/docker/compose/releases/download/1.12.0/docker-compose-` uname -s` -` uname -m` > docker-compose
$ sudo mv docker-compose /usr/local/bin/
$ sudo chmod +x /usr/local/bin/docker-compose
4. Mastodonのインストール GitHubからクローンしてきます。
1
$ git clone https://github.com/tootsuite/mastodon.git
取得してきたら、.env.production, docker-compose.ymlの2つのファイルを編集します。まず、.env.productionをコピーして編集します。
1
2
3
$ cd mastodon
$ cp .env.production.sample .env.production
$ vi .env.production
LOCAL_DOMAIN: サーバのドメインを指定します(social.zealot.co.jp) LOCAL_HTTPS: true PAPERCLIP_SECRET: 次に説明するシークレットを設定 SECRET_KEY_BASE: 次に説明するシークレットを設定 OTP_SECRET: 次に説明するシークレットを設定 DEFAULT_LOCALE: ja (日本語をデフォルトにしました) SMTP_SERVER: smtp.gmail.com (Gmailを使って送信するようにしました。その他のSMTP_*の設定も変更します) 上記3つのSECRETを生成するコマンドも用意されているので、以下のコマンドを3回実行してSECRETを取得します。(最初にイメージの取得などを行うのでちょっと時間がかかります)
1
2
$ docker-compose build
$ docker-compose run --rm web rake secret ← このコマンドを3回実行します
DBにPostgreSQL、Redisを利用しているようです。データを永続化するには、以下のファイルのコメントアウトされている volumes の設定を有効にしておきます。
1
$ vi docker-compose.yml
このあたりです。
1
2
3
4
5
6
7
8
9
10
11
12
13
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 # この部分
テーブルの作成と、アセットファイル(CSSやJS)のプリコンパイルを実行します。
1
2
$ docker-compose run --rm web rake db:migrate
$ docker-compose run --rm web rake assets:precompile
docker-compose run で起動します。PostgreSQL, Redis、Mastodonのアプリケーション本体等のコンテナが起動します。(-d でデーモンとして起動します。最初は、-dなしでフォアグラウンドで起動して問題なければ -d で起動しっぱなしにすると良いです)
5. nginxの設定 SSL経由でアクセスしたいので、nginxをインストールして設定します。
まず、nginxをインストールします。
1
$ sudo apt install nginx
以下に、nginxの設定例があったので持ってきます。
https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md
日本語でコメントしているところを変更しています。
sudo vi /etc/nginx/sites-available/mastodon
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
map $http_upgrade $connection_upgrade {
default upgrade ;
'' close ;
}
server {
listen 80 ;
listen [::]:80 ;
server_name social.zealot.co.jp ; # ここを変更
# Useful for Let's Encrypt
location /.well-known/acme-challenge/ { allow all ; }
location / { return 301 https:// $host$request_uri ; }
}
server {
listen 443 ssl ;
listen [::]:443 ssl ;
server_name social.zealot.co.jp ; # ここを変更
ssl_protocols TLSv1.2 ;
ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA ;
ssl_prefer_server_ciphers on ;
ssl_session_cache shared:SSL:10m ;
ssl_certificate /etc/ssl/certs/social.zealot.co.jp.crt ; # ここを変更
ssl_certificate_key /etc/ssl/private/social.zealot.co.jp.key.nopass ; # ここを変更
#ssl_dhparam /etc/ssl/certs/dhparam.pem;
keepalive_timeout 70 ;
sendfile on ;
client_max_body_size 0 ;
root /var/opt/mastodon/mastodon/public/ ; # ここを変更(Mastodonをクローンしてきたディレクトリの下のpublicディレクトリを指定)
gzip on ;
gzip_disable "msie6" ;
gzip_vary on ;
gzip_proxied any ;
gzip_comp_level 6 ;
gzip_buffers 16 8k ;
gzip_http_version 1 .1 ;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript ;
add_header Strict-Transport-Security "max-age=31536000" ;
location / {
try_files $uri @proxy ;
}
location /assets {
add_header Cache-Control "public, max-age=31536000, immutable" ;
}
location @proxy {
proxy_set_header Host $host ;
proxy_set_header X-Real-IP $remote_addr ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
proxy_set_header X-Forwarded-Proto https ;
proxy_set_header Proxy "" ;
proxy_pass_header Server ;
proxy_pass http://127.0.0.1:3000 ;
proxy_buffering off ;
proxy_redirect off ;
proxy_http_version 1 .1 ;
proxy_set_header Upgrade $http_upgrade ;
proxy_set_header Connection $connection_upgrade ;
tcp_nodelay on ;
}
location /api/v1/streaming {
proxy_set_header Host $host ;
proxy_set_header X-Real-IP $remote_addr ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
proxy_set_header X-Forwarded-Proto https ;
proxy_set_header Proxy "" ;
proxy_pass http://localhost:4000 ;
proxy_buffering off ;
proxy_redirect off ;
proxy_http_version 1 .1 ;
proxy_set_header Upgrade $http_upgrade ;
proxy_set_header Connection $connection_upgrade ;
tcp_nodelay on ;
}
error_page 500 501 502 503 504 /500.html ;
}
シンボリックリンクをはります。
1
$ sudo ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/
nginxを起動します
1
$ sudo service nginx start
6. アカウント登録と管理者権限の設定 ここまで出来たらセットアップは完了です。
今回は、 social.zealot.co.jp としてセットアップしたので、 https://social.zealot.co.jp にアクセスします。以下の新規登録画面が表示されたらインストール成功です。
適当にアカウントを登録します。アカウント登録が出来たら、以下のコマンドを実行して管理者権限をつけておきます。(存在するユーザに権限を付けているだけなので、最初にアカウントを作成しておく必要があります)
1
$ docker-compose run --rm web bundle exec rails mastodon:make_admin USERNAME = hironemu
以下のURLで管理画面にアクセスできます。 https://ホスト名/admin/settings
以上でインストールの完了です。Dockerだと簡単にインストールできて良いですね。