Mastodon with IIS (Mastodon편)

      Mastodon with IIS (Mastodon편)에 댓글 없음

출처 : 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_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_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측의 설정에 계속됩니다만, 피곤해서 나중에 씁니다..

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다