Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

在 Docker 安裝、運行 Mastodon

Posted on 2022 年 11 月 20 日2023 年 1 月 19 日 By 日落 在〈在 Docker 安裝、運行 Mastodon〉中尚無留言

以下是 Mastdodon v4.0.2 在 Linux 上的安裝步驟。不同版本可能會有一些差異,請自行調整。

若沒有特別需求,Mastodon 也可以透過代理商安裝、運行,不必自行架設伺服器。

硬體需求

我自己是在 Raspberry Pi 4 上測試的,Pi 4 跑得起來只是比較慢了一些,若你的硬體配備比 Pi 4 好的話,其實沒什麼需要擔心的。

  • 雙核心處理器,建議時脈在 2 GHz 以上
  • 記憶體至少 2 GB 4 GB (隨著資料量增加,使用的記憶體也會增加)
Mastodon 運行時的 docker stats
Mastodon 運行時的 docker stats

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

其他:

  • 清除 Masdoton 快取
Tags:Linux, Mastodon, 網路架站

文章導覽

Previous Post: UbuntuMate 錯誤:Unsupported Window Manager
Next Post: PHP 各版本的重大改變

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


其他

關於我  (About me)

小額贊助

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.