Docker部署 Ghost 博客
· 7 min read
Ghost 官方并没有提供 docker 镜像,是社区制作的。
本次实验环境为:
-
VPS: 2 核 CPU,4G 内存,8M 宽带
-
Linux: Ubuntu Server 20.04
-
Docker: v20.x
-
Ghost: 5.x
Docker Compose 配置
Ghost 支持两种数据库,本地开发默认 SQLite,Release 默认是 MariaDB。MariaDB 是 MySQL 的一个分支,完全兼容 MySQL。
本次部署采用 MariaDB,先创建一个空目录/home/ghost-blog
,然后在ghost-blog
创建一个docker-compose.yml
文件。
docker-compose.yml
具体配置如下:
# docker-compose.yml
version: '3.3'
services:
ghost:
# 这里采用最新的,为了方便
image: ghost:latest
# 主机重启时容器自动重启
restart: always
# 映射到本机的3050
ports:
- 3050:2368
depends_on:
- db
# 映射一下容器到主机的目录
volumes:
- /home/ghost/content:/var/lib/ghost/content
# Ghost blog 参数
environment:
# 域名
url: https://blog.zhangwen.site
# 数据库参数
database__client: mysql
database__connection__host: db
database__connection__user: ghost
database__connection__password: ghostdbpass
database__connection__database: ghostdb
db:
image: mariadb:latest
restart: always
environment:
# 改成自己的密码
MYSQL_ROOT_PASSWORD: xxxxxxx
MYSQL_USER: ghost
MYSQL_PASSWORD: ghostdbpass
MYSQL_DATABASE: ghostdb
volumes:
- /home/ghost/mysql:/var/lib/mysql
启动容器: docker-compose up -d
Nginx 配置
当然,首先确保已安装 Nginx,没有的话,一条命令就可以了:
sudo apt install nginx
然后创建配置 config 文件,这里一般我会取域名的名字blog.zhangwen.site
,因为我自己有几个二级域名,这样可以更容易区分配置文件。
sudo vim /etc/nginx/sites-available/blog.zhangwen.site
复制如下内容到配置文件,注意修改server_name
:
# Sample Nginx HTTP Configuration
server {
# Your server URL here
server_name blog.zhangwen.site;
listen [::]:80;
listen 80 ;
# disable any limits to avoid HTTP 413 for large image uploads
client_max_body_size 0;
# required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
chunked_transfer_encoding on;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://0.0.0.0:3050/;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
proxy_redirect off;
}
}
创建配置文件的软链接到/etc/nginx/sites-enabled/
,nginx -t
测试配置文件的有效性,最后重新启动 Nginx:
sudo ln -s /etc/nginx/sites-available/blog.zhangwen.site /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
添加 SSL
我们借助Certbot这个工具,它使用LetsEncrypt获取一个免费的证书,自动配置 ssl,过期了也会自动续期。
安装 Certbot
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx
配置 Nginx
sudo certbot --nginx -d blog.zhangwen.site
这个命令会提几个问题,其中有一个是问你是否重定向所有的 HTTP 请求到 HTTPS,我建议选择"2",即自动重定向。
完成之后,certbot 会修改你的/etc/nginx/sites-available/blog.zhangwen.site
文件,里面的端口改成了 443 等