以下是 Mastdodon v4.0.2 在 Linux 上的安裝步驟。不同版本可能會有一些差異,請自行調整。
若沒有特別需求,Mastodon 也可以透過代理商安裝、運行,不必自行架設伺服器。
硬體需求
我自己是在 Raspberry Pi 4 上測試的,Pi 4 跑得起來只是比較慢了一些,若你的硬體配備比 Pi 4 好的話,其實沒什麼需要擔心的。
- 雙核心處理器,建議時脈在 2 GHz 以上
- 記憶體至少
2 GB4 GB (隨著資料量增加,使用的記憶體也會增加)
Nginx 設定
Nginx 主要目的是:作為 reverse proxy、負責 HTTPS (SSL 憑證),照著官方文件的步驟操作即可。
reverse proxy 的設定大概如下 (如果 port 不同記得自行修改):
map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { # .... location / { try_files $uri @proxy; } location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) { add_header Cache-Control "public, max-age=31536000, immutable"; try_files $uri @proxy; } location /sw.js { add_header Cache-Control "public, max-age=0"; try_files $uri @proxy; } 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://127.0.0.1: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; } }
準備 Docker 和環境設定檔
到 Mastodon Github 上,下載 docker-compose.yml
和 .env.production.sample
二個檔案,其他的可以先不管。
下載後重新命名環境設定檔:
cp .env.production.sample .env.production
修改 docker-compose.yml
中 web
section 的參數,將 build
註解掉,用官方的 docker image 就好:
web: #build: . # 只要看到 `build` 就註解掉 image: tootsuite/mastodon restart: always env_file: .env.production
接下來建立儲存資料需要用到的目錄:
mkdir -p postgres14/ redis/ public/system/
產生 secret token
.env.production
中需要二個 secret token,執行以下指令二次,透過 rake 產生二個 token,並填入 SECRET_KEY_BASE
和 OTP_SECRET
中:
docker-compose run --rm web bundle exec rake secret daa4b5e9c224e166442 ...........
另外還需要二個 web push 使用的 key,一樣是執行二次指令產生 key,並填入 VAPID_PRIVATE_KEY
和 VAPID_PUBLIC_KEY
中:
docker-compose run --rm web bundle exec rake mastodon:webpush:generate_vapid_key 4a8dwqI5oBBSap .....
在 PostgreSQL 建立資料庫
若前面二個步驟都有正常執行,應該會看到類似下面的訊息:
$ docker-compose run --rm web bundle exec rake secret Starting socialzeroplextw_db_1 ... done Starting socialzeroplextw_redis_1 ... done ...
表示 PostgreSQL 和 Redis 的 docker container 已經建立,且運作中。
先連到 PostgreSQL 的 container,建立資料庫給 Mastodon 使用:
$ docker exec -it socialzeroplextw_db_1 bash # docker container 中 bash-5.1# su postgres -c 'psql' psql (14.6) Type "help" for help. postgres=#
看到 postgres=#
的 prompt 表示成功進入 PostgreSQL 命令列中,貼上以下指令建立 mastodon
資料庫:
CREATE USER mastodon CREATEDB; CREATE DATABASE mastodon OWNER mastodon; \q
透過初始化工具產生環境參數
以下工具可以協助產生正確的 .env.production
設定檔,但如果你知道要怎麼設定,其實也必特別跑這個工具。若需要執行初始化工具,則執行以下指令:
docker-compose run --rm web bundle exec rake mastodon:setup
接著按照指示,把網域名稱、資料庫名稱、mail server 參數等輸入,過程跑完會產生 .env.production
檔,確認資料都正確,就可以準備來啟動 Mastodon。
啟動 Mastodon
這是一個最沒有內容的章節,直接執行以下指令即可:
docker-compose up -d
docker-compose 會把需要的 container 都啟動,然後就可以從瀏覽器來檢查是否能正常運作了。
建立管理員帳號
之後的操作,都可以在 Mastodon 的「Setting up your new instance」章節中找到,不一定需要按照這邊的說明操作。
先在自己的 Mastodon 網站中申請一個帳號。剛申請好的帳號沒有管理權限,需要透過 Mastodon 的指令來賦予管理員權限。
先進入 web container (可以透過 docker ps
找到 contatiner ID / name):
docker exec -it socialzeroplextw_web_1 bash
進入 container 以後,執行 Mastodon 的指令來賦予使用者權限 (記得將 user ID 改掉):
RAILS_ENV=production bin/tootctl accounts modify MyUserID --role Owner
Ruby 需要一點時間執行,看到「OK」就可以關閉終端機,然後到 Mastodon「編輯個人檔案」的頁面,在中下方的選單中,會出現「站務」、「管理介面」等頁籤,就表示已有管理權限:
參考資料:
- 架設你自己的 mastodon instance | by poga | Medium
- Mastodon Documentation
- Mastodon Docker Setup by TrillCyborg
其他: