Featured image of post 使用 Postiz 來同步貼文到每一個社群平台

使用 Postiz 來同步貼文到每一個社群平台

Postiz 的基本介紹、自架流程、以及我如何使用 Postiz

為什麼我需要把貼文發布到不同平台

我一直都奉行著 不要把公開貼文當成獨家資訊送給封閉社群平台 的原則,自從我發現要從 Meta 的平台取得資訊是異常地困難之後,我就一直這麼做了。Meta 的平台用 API 或爬蟲基本上都不太容易取得資訊,唯一的方法就是用他們 非常不尊重使用者 的官方網頁或是 App。

這個事件讓我決定以聯邦宇宙當成我的主力社群平台,我不想要我的親友或是追蹤者為了要取得我的資訊而要忍受 那散發著惡臭的 官方 App。但我不可能強迫那些 想當韭菜 不想離開的人們在聯邦宇宙追蹤我,所以我把我的貼文同步到那些主流平台上,一開始是手動把貼文複製到各個平台,後來則是自己用 AI 寫了一個同步發文工具,同時發文到好幾個平台。

我的同步發文工具

這個自己寫的工具我用了好一陣子,用起來沒什麼太大的問題,唯一的問題就是太土砲了,流程跟使用情景也非常地限制:輸入文字之後會產生一張 9:16 的圖,這張圖會當成 IG story 發出去;在 Mastodon 和 Threads 則是文字帶著圖一起發出去。所以如果我想發的文字比較長,字就會滿到畫面外;也無法支援在一則貼文內放 2 張以上的圖片

這也是我後來比較喜歡在部落格分享的原因——文字、圖片的排版沒有太嚴格的限制,想怎麼擺就怎麼擺。雖然如此,但還是免不了在社群平台發文的需求,所以我最近決定開始慢慢把我的土砲發文工具換掉,而我選擇的是:Postiz。

Postiz 功能簡介

Postiz 的核心功能很簡單:排程並同時發文到所有平台。以文章撰寫當下,Postiz支援以下平台:

Postiz 支援平台

除了排程發文以外,Postiz 還有整合社群數據分析、圖片製作、RSS 轉發、API、MCP、Webhook 等等功能。

Postiz 是完全開源的,官方有提供 SaaS 服務,起步價是 $29 鎂 / 月,當然也可以選擇免費自架。自架不用付費也可以使用所有功能,但得自己串接 OpenAI 等等外部 API,如果不需要的話也可以不串接。

另外,目前 Postiz 還正在積極開發中,幾乎每個禮拜都會有新的 release,大家可以期待新功能陸陸續續推出。

Postiz 自架步驟

  1. 使用 官方文件 提供的 docker-compose.yaml,把 domain 改成自己的(你可能也會想調一下網路 & volume),然後就可以 docker compose up -d 把服務起起來。
 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
services:
  postiz:
    image: ghcr.io/gitroomhq/postiz-app:latest
    container_name: postiz
    restart: always
    environment:
      # You must change these. Replace `postiz.your-server.com` with your DNS name - this needs to be exactly the URL you're accessing Postiz on.
      MAIN_URL: "https://postiz.your-server.com"
      FRONTEND_URL: "https://postiz.your-server.com"
      NEXT_PUBLIC_BACKEND_URL: "https://postiz.your-server.com/api"
      JWT_SECRET: "random string that is unique to every install - just type random characters here!"
 
      # These defaults are probably fine, but if you change your user/password, update it in the
      # postiz-postgres or postiz-redis services below.
      DATABASE_URL: "postgresql://postiz-user:postiz-password@postiz-postgres:5432/postiz-db-local"
      REDIS_URL: "redis://postiz-redis:6379"
      BACKEND_INTERNAL_URL: "http://localhost:3000"
      IS_GENERAL: "true" # Required for self-hosting.
      DISABLE_REGISTRATION: "false" # Only allow single registration, then disable signup
      # The container images are pre-configured to use /uploads for file storage.
      # You probably should not change this unless you have a really good reason!
      STORAGE_PROVIDER: "local"
      UPLOAD_DIRECTORY: "/uploads"
      NEXT_PUBLIC_UPLOAD_DIRECTORY: "/uploads"
    volumes:
      - postiz-config:/config/
      - postiz-uploads:/uploads/
    ports:
      - 5000:5000
    networks:
      - postiz-network
    depends_on:
      postiz-postgres:
        condition: service_healthy
      postiz-redis:
        condition: service_healthy
 
  postiz-postgres:
    image: postgres:17-alpine
    container_name: postiz-postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: postiz-password
      POSTGRES_USER: postiz-user
      POSTGRES_DB: postiz-db-local
    volumes:
      - postgres-volume:/var/lib/postgresql/data
    networks:
      - postiz-network
    healthcheck:
      test: pg_isready -U postiz-user -d postiz-db-local
      interval: 10s
      timeout: 3s
      retries: 3
  postiz-redis:
    image: redis:7.2
    container_name: postiz-redis
    restart: always
    healthcheck:
      test: redis-cli ping
      interval: 10s
      timeout: 3s
      retries: 3
    volumes:
      - postiz-redis-data:/data
    networks:
      - postiz-network
 
 
volumes:
  postgres-volume:
    external: false
 
  postiz-redis-data:
    external: false
 
  postiz-config:
    external: false
 
  postiz-uploads:
    external: false
 
networks:
  postiz-network:
    external: false
  1. 如果使用 reverse proxy 的話,參考文件提供的架構圖,只需要把 container 內部 Caddy listen 的 port 5000 expose 出來即可

Postiz 架構圖

  1. 進到 Web UI 後,第一次註冊的帳號會是管理員。如果需要使用 Google 登入的話,則需要事先 另外設定

Postiz 註冊畫面

  1. 如果成功登入的話,就可以準備來綁各種平台的帳號。但需要先去各個平台拿到 API key,然後回到 docker-compose.yaml設定
    以 Mastodon 為例,跟著 說明文件 做就可以拿到 client_idclient_secret,然後就可以填到 docker-compose.yaml 設定成環境變數然後重新建立 container,如果是 Mastodon 則需要另外設定 MASTODON_URL

註:如果是 Meta 的平台盡量以會拿來綁定的帳號去建立 Meta 的 App,我曾經因為用不同的帳號導致權限問題無法登入。

1
2
3
4
5
6
services:
  postiz:
    environment:
      MASTODON_URL: "<mastodon_instance_url>"
      MASTODON_CLIENT_ID: "<拿到的 client_id>"
      MASTODON_CLIENT_SECRET: "<拿到的 client_secret>"
  1. 設定完的話就可以回 Web UI,點左邊的 Add Channel 來綁平台的帳號。如果成功的話,會自動 redirect 回來,並且可以在左邊看到綁好的帳號
    失敗的話就得拿著錯誤訊息去 debug 了,比較常遇到的問題可能是 key 打錯、redirect URL 填錯、綁定的帳號沒有被加到 OAuth APP 的測試清單內……等等,這就要慢慢去找出原因了。

綁定成功的樣子

Postiz 發文方式說明

綁定成功就可以按左邊的 + Create Post 來寫文章啦!
左上角可以選擇要發布到哪些帳號,上方也可以調整發文時間和頻率。
中間是貼文內容編輯,在下面一點的地方編輯可以在發文的時候一起發出去的回覆(在 Twitter、Threads 等字數有限制的 microblog 發長文的時候可以用)。
最下面可以把貼文存成草稿、設定排程、或是直接發出去。

要特別注意的是:編輯器雖然可以渲染 HTML,但實際上會是以原始碼的方式儲存、然後發布。我就曾經踩過這個坑,發出去之後才看到我的貼文裡面一堆 HTML tag,還要刪掉重發。

文章編輯畫面

點紅框處選擇帳號,然後按下紅色 Edit 的話,可以針對不同的帳號客製內容。右手邊切到 Settings 的話也有針對不同平台的設定,像是 Instagram 就可以選擇是一般的 Post 或是 Story。

各帳號客製內容

排程成功的話就會在日曆上顯示出來,這時候可以點它們來編輯,但如果一次排程好幾個帳號的話會直接被展開,需要一個一個編輯

排程成功

發布時間到了 job 會自動執行,把貼文發出去,無論成功或失敗都會在右上角收到通知

發文通知

Postiz 的其他功能

Postiz 可以在事件發生的時候觸發 Webhooks,可以拿來串接通知,或是利用這個功能去觸發一些還沒整合進 Postiz 的發文系統

WebhooksWebhooks 詳細設定

Postiz 也可以設定用 RSS 來觸發自動發文

RSS 轉發設定

Postiz 可以使用 API 或 MCP 來串接,可以省去手動建立貼文的過程。

API、MCP

其他還有一些像是串接 AI、簽名、貼文模版、團隊帳號管理、社群後台數據查看……等等的功能,不過這些功能我沒有什麼在用就不特別貼出來。Postiz 自己的特點還是由 他們的官網 來呈現是最清楚的。

我使用 Postiz 的方式

我之所以會使用 Postiz 的原因,是因為我自己寫的工具還是有一些限制,但 Postiz 現階段也還是不能直接取代,大部分時候是互相搭配著使用。

舉例來說,如果我需要發 IG Story 的話,我必須要有一張圖片,而且如果這張圖片不是接近 9:16 的比例,我還需要透過各種方式去轉換才能正常在 Story 顯示(這很蠢,我不曉得這樣的設計大家為什麼會喜歡)。
在這種情況下,我就必須要從自己的工具產生好圖片,然後再貼到 Postiz 來。
Postiz 現在其實 已經有類似 plugin 的系統,可以用來串接第三方工具來產生圖片,但似乎還沒有看到相關的開發文件,目前可能得爬 source code 才知道要怎麼加。

也因為 Postiz 有 API 可以打,或許把我自己寫的工具後面處理發文邏輯的部分直接用 Postiz 整個替換掉,也可能是一個不錯的選擇。

3rd party integrations

另外,目前也還有不少社群平台是 Postiz 還沒有支援的,例如同樣是聯邦宇宙一環的 Misskey、部落格系統 Ghost、或是比較台灣本土化的方格子、噗浪等等。
Postiz 官方針對如何新增平台有 特別寫了一頁文件,但我可能還沒有太多時間去研究怎麼去寫(畢竟資工小廢物也沒有很會寫程式 XD),這些平台可能就要有勞各路大神去貢獻了 m(_ _ )m

新增平台文件

與你的連結,是我寫部落格的動力

喜歡這篇文章的話,歡迎 在下方留言 或是 寄 Email 回饋給我!

也可以去 誰來我家 簽個到,或是去 看看其他文章 ~~

使用 Hugo 建立
主題 StackJimmy 設計