출처 : https://tetsupc.wordpress.com/2017/04/25/mastodon-with-iis-mastodon%E7%B7%A8/
번역기를 사용한 문서입니다.
그런 연유로 했습니다, Mastodon인스턴스 구축.”서버를 스스로 세운다”것으로 알고 안 할 이유가 없는 성격이라서 어쩔 수 없군.
이번에는 Mastodon본체의 구축이란도 거의공식 문서(Production guide)에 준거합니다.
다음 절차에 대해서는 기사 집필 시점의 공식 문서에 따른 것입니다. 공식 문서는 자주 갱신되기 때문에 최신의 순서에 따르세요.
주의 사항 등
- 서버의 구축 등은 학습 목적으로 가고 있습니다. 오류와 개선해야 할 점 등을 포함하는 전제에서 보세요.
- 신용 카드가 없다( 만드는 것도 현재 불가)등의 이유로 클라우드 이용은 원래 선택 사항에 없어요.
- 이번에는 비 Docker환경에서 구축합니다. 원래 Docker에 대한 지식이 부족함 등이 이유입니다.
- 구축부터의 환경 등의 상세에 대해서는, 구축 후 인스턴스 “주먹 대파”의 about/more페이지에 기재하고 있습니다.
필요 패키지 설치
Production guide의 “General dependencies””Redis””Postgres”에 따르고 설치합니다.
General dependencies
Nginx는 apt-get install안에 없지만, OS에 들어가지 않으니 넣어 버렸어요.
1
2
3
4
5
6
|
sudo apt install imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev nodejs file git curl nginx curl -sL https: //deb .nodesource.com /setup_4 .x sudo bash - sudo apt install nodejs sudo npm install -g yarn |
Redis
도로 설치
1
|
sudo apt install redis-server redis-tools |
Postgres
설치
1
|
sudo apt install postgresql postgresql-contrib |
Mastodon용 사용자의 작성
사용자를 Postgresql에 의해서 작성된 사용자”postgres”로 전환하고 Postgresql의 콘솔에 로그인하고 데이터베이스 관리의 신규 유저”mastodon”을 작성한다.
1
2
3
4
5
6
7
8
|
sudo su - postgres psql # ↓新規ユーザー "mastodon" をデータベース作成権限を与えて作成 CREATE USER mastodon CREATEDB; # ↓Postgresql のコンソールを終了 \q |
기타
상기의 “\q”아래”Under Ubuntu 16.04,…”라고 적었는데 Ubuntu 16.04 미만의 경우 필요한 조작이라 Ubuntu Server 16.04를 이용한 이번은 관계 없음.
신규 Linux사용자의 작성
Mastodon은 전용의 사용자 계정으로 실행하는 관계에서 신규의 유저”mastodon”을 작성한다.참고
1
2
3
|
sudo adduser mastodon # パスワード入力後、色々聞かれるが何も入力せず4回ほどEnter。最後 "これで良いか" という問いは "y" と入力しEnter でユーザーの作成を完了する。 gpasswd -a mastodon sudo |
사용자의 작성과 sudo권한 부여가 완료 후, sudo su– mastodon에서 작성한 계정으로 전환한다.
이후의 작업은 이 계정에서 실시한다.
Rbenv
Ruby설치/관리를 하는 rbenv의 준비
“Production guide”에 있는 대로 rbenv의 공식 문서에 있는 방법으로 설치한다. GCC등이 필요하므로,”어쨌든 좋아”라고 말하고 apt install build-essential을 하였다.
rbenv의 설치가 완료 후
1
2
|
rbenv install 2.4.1 rbenv global 2.4.1 |
그래서 Ruby ver.2.4.1의 설치와 글로벌 버전의를 설정하였다.
Ruby설치 시 필요한 패키지가 부족하여 빌드가 넘어지기도 했다. 콘솔 상의 오류 메시지 내에 부족한 패키지가 표시된다(libreadline-dev등)것으로, 그에 따른 추가로 설치한다.
Mastodon본체의 설치와 추가 설치
Git를 이용하고 Mastodon본체를 서버상에 끌어들일 필요 패키지의 추가 설치한다.
인입
git clone에서 그대로 끌어들인다. 장소는 특히 바꾸는 이유가 없었기 때문에 공식 문서에 따랐다.
1
2
3
4
5
6
|
cd ~ # /home/mastodon git clone https: //github .com /tootsuite/mastodon .git live # /home/mastodon/live/ 以下に clone cd live # master(開発版)はバグが入り込みやすく不安定なため、安定版のバージョンのコードを引き込む git checkout $(git tag tail -n 1) |
추가 패키지 설치
여기서 “gem명령이 설치되지 않은 “등의 에러가 나설 경우 Ruby설치에 실패했을 가능성이 있으므로 rbenv에서 수정.
1
2
3
|
gem install bundler bundle install --deployment --without development test yarn install --pure-lockfile |
Mastodon의 설정
Mastodon의 전체적인 설정한다.
설정 파일의 작성
기존의. env.production.sample파일을. env.production으로서 카피본.
1
|
cp . env .production.sample . env .production |
설정
디폴트의 설정에서 변경만 열거는 변경 부분을 미기재. DB의 패스워드는 공식 문서에 있듯이 빈 채로 둔다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
REDIS_HOST=localhost DB_HOST=/var/run/postgresql DB_USER=mastodon DB_NAME=mastodon_production # Mastodonで利用するドメイン名 LOCAL_DOMAIN=mstdn.taiha.net # ~/live/ 以下で rake secret コマンドを1回ずつ実行して、生成された乱数を入れる。なので計3回実行することになる。 PAPERCLIP_SECRET=(乱数) SECRET_KEY_BASE=(乱数) OTP_SECRET=(乱数) # Mastodon サイトアクセス時に、既定で表示に使われる言語 DEFAULT_LOCALE=ja # アカウントの確認用に送信するE-Mail設定。 # 今回は Mailgunを試したものの無料アカウントの制限が厳しかったため、新規に取得した Gmail のアカウントを利用することにした。 SMTP_SERVER=smtp.gmail.com SMTP_PORT=587 SMTP_LOGIN=(Gmail アカウントのメールアドレス 例: hogehoge@gmail.com) SMTP_PASSWORD=(Gmail アカウントのパスワード) |
기타
사용자의 아이콘과 헤더, 업로드되는 화상이나 동영상의 보존처도 변경하고 싶었는데”PAPERCLIP_ROOT_PATH”도 설정했지만 언론이 저장되는 것에 거기서 읽지 못하는 사건이 발생했기 때문에 기본 저장소인 “~/live/public/system”에 대해서, 마운트 할 드라이브에서 상징적 링크를 설치했다. 드라이브의 해당 폴더의 소유자는 “mastodon”사용자에게 변경 후.
1
2
3
|
cd ~ /live/public mv . /system . /system .bak # 一旦名前を変える ln -s /mnt/mstdn_media/system system |
Mastodon의 셋업
데이터베이스와 CSS와 JavaScript의 준비.
데이터베이스의 작성
데이터베이스 및 테이블의 작성.
1
|
RAILS_ENV=production bundle exec rails db:setup |
CSS와 JavaScript의 precompile
1
|
RAILS_ENV=production bundle exec rails assets:precompile |
Systemd서비스의 작성
Mastodon의 각 과정을 systemd의 서비스로서 등록한다.
- /etc/systemd/system/mastodon-web.service
- /etc/systemd/system/mastodon-sidekiq.service
- /etc/systemd/system/mastodon-streaming.service
상기의 3가지를 Production guide에서 각각 그대로 복사해서 설치.
그 뒤 OS기동시의 자동 시작 활성화와 수동으로 시작한다.
1
2
3
4
5
|
# 3つのサービスの自動開始有効化 sudo systemctl enable /etc/systemd/system/mastodon- *.service # 手動開始 sudo systemctl start mastodon-web.service mastodon-sidekiq.service mastodon-streaming.service |
Nginx의 설정
지금까지 설정한 Mastodon에 접속할 수 있도록 Nginx의 프록시 등의 설정을 실시한다.
이번 Mastodon인스턴스의 서버상에서 함께 Nginx가 동작하지만, 그 상위에서 또 다른 서버에 있는 IIS를 경유하여 클라이언트로부터의 액세스를 수행할 수 있도록 Producion guide에 있는 Nginx의 설정 예부터 아래 부분을 변경했다.
Let’s Encrypt를 이용한 암호화(HTTPS)은 상위 IIS에서 하기 때문에 관련된 설정은 모두 무효화.
server_name에는 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
|
#server { # listen 80; # listen [::]:80; # server_name example.com; # # 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; listen 80; listen [::]:80; server_name mstdn.taiha.net; # ssl_protocols TLSv1.2; # ssl_ciphers EECDH+AESGCM:EECDH+AES; # ssl_ecdh_curve prime256v1; # ssl_prefer_server_ciphers on; # ssl_session_cache shared:SSL:10m; # ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # ssl_dhparam /etc/ssl/certs/dhparam.pem; keepalive_timeout 70; sendfile on; client_max_body_size 0; root /home/mastodon/live/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; } |
설정을 기술하면,/etc/nginx/sites-available/mastodon로 저장하고/etc/nginx/sites-enabled/default를 삭제의 위/etc/nginx/sites-enabled/mastodon으로 상징적 링크를 작성한다.
1
2
|
cd /etc/nginx/sites-enabled sudo ln -s /etc/nginx/sites-available/mastodon mastodon |
그 뒤 Nginx서비스를 재시작 한다.
1
|
sudo service nginx restart |
이상으로 Mastodon측의 설정은 종료. 다음은 IIS측의 설정에 계속됩니다만, 피곤해서 나중에 씁니다..