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

自從 Ghost 預告將 database 轉成 MySQL 就知道這次升級無可避免要重新安裝所有東西,果然在 Docker 安裝 MySQL 遇到很多問題。記錄這次重要的升級,希望可以幫到遇到相同問題的朋友!
由於上次使用的 CoreOS 已經沒有再更新,所以我使用了 Alpine Linux 為基底,可以參考這篇如何在 Alpine 安裝 Docker CE。

然後就是準備好我的 Docker Compose 檔案。
今次會使用 nginx-proxy 做自動的 SSL 更新,詳情可以參考這篇文章。

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 了!