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 回饋給我!

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

已經寫了 104 篇文章, 總共 16.1 萬字
使用 Hugo 建立
主題 StackJimmy 設計