Docker compose 安裝 Ghost 5.0

自從 Ghost 預告將 database 轉成 MySQL 就知道這次升級無可避免要重新安裝所有東西,果然在 Docker 安裝 MySQL 遇到很多問題。記錄這次重要的升級,希望可以幫到遇到相同問題的朋友!

Docker compose 安裝 Ghost 5.0
install Ghost 5.0 with Docker

自從 Ghost 預告將 database 轉成 MySQL 就知道這次升級無可避免要重新安裝所有東西,果然在 Docker 安裝 MySQL 遇到很多問題。記錄這次重要的升級,希望可以幫到遇到相同問題的朋友!

由於上次使用的 CoreOS 已經沒有再更新,所以我使用了 Alpine Linux 為基底,可以參考這篇如何在 Alpine 安裝 Docker CE。

用 Alpine Linux 取代 CoreOS
自從 CoreOS 被 Redhat 收購後就傳出會停止開發的消息,最終在2020年5月26日停止更新。雖然之後有釋後其後繼平台 Fedora CoreOS,一套跟 Redhat 原本的 container OS - Fedora Atomic Host 合而為一的 OS。但是各大 VPS 一直也沒有提供安裝,要自訂 Image 也太麻煩了,經過幾次測試後,決定用 Docker Image 愛用的 Alpine Linux 取代 CoreOS 作為 Docker 的基底 OS。

然後就是準備好我的 Docker Compose 檔案。

今次會使用 nginx-proxy 做自動的 SSL 更新,詳情可以參考這篇文章。

Docker 一分鐘完成自動更新 SSL 証書的 nginx-proxy 設置
一分鐘即可以簡單的完成nginx-proxy + 自動更新 SSL的docker compose設定。
services:

  # nginx-proxy的設置
  nginx-proxy:
    image: nginxproxy/nginx-proxy:alpine
    container_name: nginx-proxy
    restart: always
    ports:
      - 80:80
      - 443:443
    volumes:
      - conf:/etc/nginx/conf.d
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - dhparam:/etc/nginx/dhparam
      - certs:/etc/nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
    environment:
      - ENABLE_IPV6=true
    networks:
      - nginx-proxy

  # 自動更新SSL
  acme-companion:
    image: nginxproxy/acme-companion
    container_name: acme-companion
    volumes_from:
      - nginx-proxy
    volumes:
      - certs:/etc/nginx/certs:rw
      - acme:/etc/acme.sh
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      - DEFAULT_EMAIL=你的電郵地址.com
    networks:
      - nginx-proxy  
      
  # Ghost的設置
  ghost:
    image: ghost:alpine
    container_name: ghost
    restart: always
    volumes: # 將 content mount /ghost/content
      - ./ghost/content:/var/lib/ghost/content
    environment:
      - database__client=mysql
      - database__connection__host=db #連到下面db
      - database__connection__user=root #一定要root
      - database__connection__password=password #改成你的密碼
      - database__connection__database=ghost #一定要ghost
      - url=https://yourdomain.com #網址全寫連https
      - VIRTUAL_HOST=yourdomain.com
      - LETSENCRYPT_HOST=yourdomain.com
    depends_on:
      - db
    links:
      - db
    networks:
      - nginx-proxy
      - ghost

  db: # 如果改了名要對感上面的 db host
    image: mysql:latest
    container_name: db
    restart: unless-stopped
    ports:
      - 3306:3306
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=password #改成你的密碼
    command: 
      - --default-authentication-plugin=mysql_native_password
    networks:
      - ghost


volumes:
  conf: {}
  vhost: {}
  html: {}
  dhparam: {}
  certs: {}
  acme: {}
  db:
    driver: local
    
networks:
  nginx-proxy: {}
  ghost: {}

要注意的重點:

  • Ghost 跟 nginx-proxy及acme-companion 一定要放同一個network
  • Ghost 要depends_on MySQL 及 links MySQL
  • 初次 docker compose up 時 MySQL 因為要初始化,Ghost 可能會發出不能找到 database 的訊息,等一下 MySQL ready 就可以
  • 密碼跟 domain 要改成你自己的

整個結構會如下:

初次 docker compose up 時 acme-companion 會自動申請 SSL Cert 然後儲起。只要第一次取得 SSL 成功,之後也會自動定時檢查及更新。用家瀏覽你的 Ghost 時會經nginx-proxy 取得 Ghost 的內容,同時也有 cache 及保護作用。

如果還在用 Sqlite 做 database 的 Ghost 用家,就要快點升級 5.0 用 MySQL database 了,因為下個版本更新就完全強制做用 MySQL 了!

Read more

Unity AI Assistant 2.7.0 將不再支援 MCP 連接

Unity AI Assistant 2.7.0 將不再支援 MCP 連接

相信有不少人用 Unity AI MCP 來連接 Claude Code / Codex 等 AI 工具進行開發,近日隨著 Unity AI 進入公測,Unity 官方 Package com.unity.ai.assistant 亦升級到 v2.7.0-pre.2 。這個新版本的 Unity AI Assistant 在 Unity MCP Server 上加上了限制,Connected Clients limit 在 0 個 direct connection(以前是 Unlimited),就是不讓開發者使用其他 AI 工具來支援開發。 官方也有說明可以怎樣做,

Game Engine 的選擇

Game Engine 的選擇

在前陣子在決定寫 game 的期間,我試用了三大主流 Game Engine 來實作 demo,現在比較一下 Unreal,Unity 及 Godot 適合什麼開發者。 自我定位 在開始選擇前,我首先要確定自己是什麼開發者,以什麼角度去選擇 Game Engine。 * 首先我是獨立開發者,就是一個人會負責所有東西,繪圖設計,故事劇情,程式開發,宣傳銷售,後續經營,所以簡單很重要。 * 我使用 Macbook Pro M1 來開發,由於我沒有 desktop,單靠效能有限的主機來開發,所以效能夠不夠對我來說也是很重要。 * 遊戲平台,我的初期目標是 Steam/Andriod/iOS,如果有成果才會推向各大主機,雖然三大 Game Engine 都支持多平台輸出,但實際上調查後發現還是有一些限制,我會在下面解釋。 * 遊戲類型,