写在前面
在当今数字化时代,个人博客和网站已经成为分享知识、展示作品和交流思想的重要平台。Typecho 作为一款轻量级的开源博客系统,以其简洁高效的设计和灵活的扩展性,受到了广大用户的喜爱。本教程将引导您如何在 Ubuntu 服务器上使用 Docker Compose 快速部署 Typecho 博客平台,并使用宿主机的 Nginx 进行反向代理,使您的 Typecho 站点可以通过域名正常访问。本教程将会提供 PostgreSQL 和 MariaDB 两种数据库的配置方案,你可以根据自己的需求选择使用。
准备工作
在开始之前,请确保你的 Ubuntu 系统已经安装了以下软件:
Docker: 用于容器化运行 Typecho 和数据库。
Docker Compose: 用于编排和管理多容器 Docker 应用。
Nginx: 用作反向代理服务器。
安装 Docker 和 Docker Compose:
# 更新系统包
sudo apt update
# 安装 Docker
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 备选源(如果官方源无法连接)
curl -fsSL https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
docker-compose --version
安装 Nginx:
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginx
步骤 1: 创建目录结构
首先,在你的用户目录下创建一个用于存放 Typecho Docker Compose 配置文件的目录,例如 ~/typecho
:
mkdir ~/typecho
cd ~/typecho
在这个目录下,我们将创建 docker-compose.yml
文件。
步骤 2: 创建 Docker Compose 配置文件 (docker-compose.yml)
本文提供两个版本的 docker-compose.yml
文件,分别对应 PostgreSQL 和 MariaDB 数据库。
版本一:PostgreSQL 数据库
在 typecho
目录下,创建名为 docker-compose-pgsql.yml
的文件,并将以下内容粘贴进去:
version: '3.7'
services:
typecho:
image: joyqi/typecho:nightly-php7.4-apache
container_name: typecho-server
restart: always
ports:
- "8080:80" # 容器80端口映射到宿主机8080端口,供Nginx反向代理
volumes:
- ./typecho-data:/app/usr # 将宿主机 ./typecho-data 目录挂载到容器 /app/usr 用于持久化数据
environment:
- TYPECHO_SITE_URL=http://localhost # 站点 URL,这里使用 localhost,Nginx 反向代理后会通过域名访问
- TYPECHO_DB_ADAPTER=Pdo_Pgsql
- TYPECHO_DB_HOST=pgsql
- TYPECHO_DB_PORT=5432
- TYPECHO_DB_USER=typecho_user
- TYPECHO_DB_PASSWORD=typecho_password
- TYPECHO_DB_DATABASE=typecho_db
pgsql:
image: postgres:15.4
container_name: typecho-db-pgsql
restart: always
environment:
- POSTGRES_USER=typecho_user
- POSTGRES_PASSWORD=typecho_password
- POSTGRES_DB=typecho_db
volumes:
- ./pgsql-data:/var/lib/postgresql/data # 将宿主机 ./pgsql-data 目录挂载到容器数据目录用于持久化
ports:
- "5432:5432" # 可选,如果需要从宿主机直接连接数据库可以映射端口,生产环境通常不需要
volumes:
typecho-data:
pgsql-data:
版本二:MariaDB 数据库
在 typecho
目录下,创建名为 docker-compose-mariadb.yml
的文件,并将以下内容粘贴进去:
version: '3.7'
services:
typecho:
image: joyqi/typecho:nightly-php7.4-apache
container_name: typecho-server
restart: always
ports:
- "8080:80" # 容器80端口映射到宿主机8080端口,供Nginx反向代理
volumes:
- ./typecho-data:/app/usr # 将宿主机 ./typecho-data 目录挂载到容器 /app/usr 用于持久化数据
environment:
- TYPECHO_SITE_URL=http://localhost # 站点 URL,这里使用 localhost,Nginx 反向代理后会通过域名访问
- TYPECHO_DB_ADAPTER=Pdo_Mysql
- TYPECHO_DB_HOST=mariadb
- TYPECHO_DB_PORT=3306
- TYPECHO_DB_USER=typecho_user
- TYPECHO_DB_PASSWORD=typecho_password
- TYPECHO_DB_DATABASE=typecho_db
mariadb:
image: mariadb:10.6-focal
container_name: typecho-db-mariadb
restart: always
environment:
- MYSQL_ROOT_PASSWORD=root_password # 设置 MariaDB root 用户密码,根据需要更改
- MYSQL_USER=typecho_user
- MYSQL_PASSWORD=typecho_password
- MYSQL_DATABASE=typecho_db
volumes:
- ./mariadb-data:/var/lib/mysql # 将宿主机 ./mariadb-data 目录挂载到容器数据目录用于持久化
ports:
- "3306:3306" # 可选,如果需要从宿主机直接连接数据库可以映射端口,生产环境通常不需要
volumes:
typecho-data:
mariadb-data:
配置文件说明:
version: '3.7'
: 指定 Docker Compose 文件版本。services
: 定义需要运行的服务,这里包含typecho
和数据库 (pgsql
或mariadb
) 服务。typecho
服务:image: joyqi/typecho:nightly-php7.4-apache
: 使用joyqi/typecho
官方镜像,nightly-php7.4-apache
标签表示使用 nightly 版本,基于 PHP 7.4 和 Apache。你可以根据需要选择其他标签,例如latest-php8.1-apache
。container_name: typecho-server
: 容器名称。restart: always
: 容器总是重启。ports: - "8080:80"
: 将容器的 80 端口映射到宿主机的 8080 端口。注意,这里我们没有将容器的 80 端口直接映射到宿主机的 80 端口,因为宿主机的 80 端口将会被 Nginx 使用。volumes: - ./typecho-data:/app/usr
: 将当前目录下的typecho-data
目录挂载到容器的/app/usr
目录。Typecho 的数据(主题、插件、上传文件等)将会保存在宿主机的typecho-data
目录中,实现数据持久化。environment
: 设置 Typecho 运行所需的环境变量:TYPECHO_SITE_URL=http://localhost
: Typecho 站点 URL,这里暂时设置为http://localhost
,因为最终会通过 Nginx 反向代理使用域名访问。TYPECHO_DB_ADAPTER
,TYPECHO_DB_HOST
,TYPECHO_DB_PORT
,TYPECHO_DB_USER
,TYPECHO_DB_PASSWORD
,TYPECHO_DB_DATABASE
: 数据库连接信息,根据选择的数据库类型 (PostgreSQL 或 MariaDB) 进行配置。TYPECHO_DB_HOST
设置为数据库服务的service name
,Docker Compose 会自动解析。
pgsql
服务 (PostgreSQL 版本) /mariadb
服务 (MariaDB 版本):image: postgres:15.4
/image: mariadb:10.6-focal
: 使用官方 PostgreSQL 或 MariaDB 镜像。container_name: typecho-db-pgsql
/container_name: typecho-db-mariadb
: 数据库容器名称。restart: always
: 容器总是重启。environment
: 设置数据库服务的环境变量,例如用户名、密码、数据库名 (PostgreSQL) 或 root 密码、用户名、密码、数据库名 (MariaDB)。volumes: - ./pgsql-data:/var/lib/postgresql/data
/volumes: - ./mariadb-data:/var/lib/mysql
: 将宿主机目录挂载到容器的数据目录,实现数据库数据持久化。ports: - "5432:5432"
/ports: - "3306:3306"
: 可选的端口映射,仅在需要从宿主机直接连接数据库时使用。
volumes
根节点:定义了 Docker Compose 管理的卷,用于持久化数据。
选择数据库版本:
请根据你的需求选择使用 docker-compose-pgsql.yml
(PostgreSQL 版本) 或 docker-compose-mariadb.yml
(MariaDB 版本)。
步骤 3: 创建 Nginx 配置文件
在宿主机的 Nginx 配置目录下(通常是 /etc/nginx/sites-available/
),创建一个新的配置文件,例如 typecho
:
sudo nano /etc/nginx/sites-available/typecho
将以下内容粘贴到 typecho
文件中,并根据你的实际域名进行修改:
HTTP 配置 (如果你还没有 HTTPS 证书)
server {
listen 80;
server_name yourdomain.com; # 将 yourdomain.com 替换为你的域名
location / {
proxy_pass http://localhost:8080; # 反向代理到 Docker Compose 运行的 Typecho 容器的 8080 端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
HTTPS 配置 (推荐,如果你有 SSL 证书)
你需要提前获取 SSL 证书,并将证书文件 (例如 yourdomain.com.crt
和 yourdomain.com.key
) 放置在合适的目录,例如 /etc/nginx/ssl/
。
server {
listen 80;
server_name yourdomain.com;
return 301 https://$server_name$request_uri; # 将 HTTP 请求重定向到 HTTPS
}
server {
listen 443 ssl;
server_name yourdomain.com; # 将 yourdomain.com 替换为你的域名
ssl_certificate /etc/nginx/ssl/yourdomain.com.crt; # 替换为你的证书路径
ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key; # 替换为你的私钥路径
location / {
proxy_pass http://localhost:8080; # 反向代理到 Docker Compose 运行的 Typecho 容器的 8080 端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
配置文件说明:
server { listen ...; server_name ...; }
: 定义一个 Nginx 服务器块,监听指定的端口和域名。listen 80;
/listen 443 ssl;
: 监听 HTTP (80 端口) 或 HTTPS (443 端口)。server_name yourdomain.com;
: 将yourdomain.com
替换为你的实际域名。return 301 https://$server_name$request_uri;
(HTTPS 配置的 HTTP 服务器块): 将所有 HTTP 请求 301 重定向到 HTTPS。ssl_certificate ...; ssl_certificate_key ...;
(HTTPS 配置): 指定 SSL 证书和私钥的路径。location / { ... }
: 定义根路径/
的配置。proxy_pass http://localhost:8080;
: 将请求反向代理到http://localhost:8080
,即 Docker Compose 运行的 Typecho 容器的 8080 端口。proxy_set_header ...;
: 设置一些必要的请求头,以便 Typecho 正确获取客户端 IP 和协议等信息。
步骤 4: 启用 Nginx 站点并测试配置
创建 Nginx 站点的符号链接,启用站点:
sudo ln -s /etc/nginx/sites-available/typecho /etc/nginx/sites-enabled/
测试 Nginx 配置文件是否正确:
sudo nginx -t
如果测试输出 syntax is ok
和 test is successful
,则配置文件正确。
重启 Nginx 服务以应用配置:
sudo systemctl restart nginx
步骤 5: 启动 Docker Compose
根据你选择的数据库版本,使用相应的 Docker Compose 配置文件启动 Typecho 和数据库容器。
PostgreSQL 版本:
docker-compose -f docker-compose-pgsql.yml up -d
MariaDB 版本:
docker-compose -f docker-compose-mariadb.yml up -d
-d
参数表示在后台运行。
步骤 6: 访问 Typecho 安装向导
稍等片刻,待 Docker 容器启动完成后,在浏览器中访问你的域名 yourdomain.com
(或者你在 Nginx 配置文件中设置的 server_name
)。你将会看到 Typecho 的安装向导页面。
按照安装向导的提示,填写站点信息、管理员账号等,并完成 Typecho 的安装。
注意事项:
域名解析: 请确保你的域名
yourdomain.com
已经正确解析到你的 Ubuntu 服务器的公网 IP 地址。防火墙: 如果你的服务器启用了防火墙 (例如 UFW),请确保开放了 80 端口和 443 端口 (HTTPS)。
数据持久化: Typecho 数据和数据库数据都通过 Volume 挂载到宿主机目录,实现了数据持久化。即使容器被删除,数据也不会丢失。
容器端口: Docker Compose 配置文件中,Typecho 容器的 80 端口被映射到了宿主机的 8080 端口,并通过 Nginx 反向代理到 80 或 443 端口。你可以根据需要修改宿主机映射端口,但需要同时修改 Nginx 配置文件中的
proxy_pass
指向。环境变量: 你可以在
docker-compose.yml
文件中通过environment
节点设置更多的 Typecho 环境变量,例如TIMEZONE
(时区),MEMORY_LIMIT
(PHP 内存限制) 等,详细环境变量列表请参考https://github.com/typecho/Dockerfile 的 "Environment Variables" 部分。安全性: 本教程提供的是基本部署方案,生产环境请务必加强安全性配置,例如配置 HTTPS, MariaDB root 用户设置强密码, 定期备份数据等。
总结
恭喜你!你已经成功使用 Docker Compose 部署了 Typecho 博客系统,并使用了宿主机的 Nginx 进行了反向代理。现在你可以通过你的域名访问 Typecho 站点,开始你的博客之旅了。 希望这个教程对你有所帮助!