写在前面
在当今数字化时代,个人博客和网站已经成为分享知识、展示作品和交流思想的重要平台。Typecho 作为一款轻量级的开源博客系统,以其简洁高效的设计和灵活的扩展性,受到了广大用户的喜爱。然而,如何在服务器上高效地部署和管理 Typecho,尤其是在保证安全性和性能的前提下,仍然是许多用户面临的挑战。
本教程旨在帮助读者在 Ubuntu 系统上使用 Docker Compose 部署 Typecho,并通过 Nginx 进行反向代理。通过详细的步骤讲解和配置示例,读者可以轻松地搭建一个稳定、高效的 Typecho 博客平台。无论你是刚接触 Docker 的新手,还是有一定经验的开发者,本教程都将为你提供有价值的参考和指导。希望通过本教程,你能顺利完成 Typecho 的部署,并享受博客创作的乐趣。
1. 安装 Docker 和 Docker Compose
确保你已经安装了 Docker 和 Docker Compose。如果没有安装,可以使用以下命令进行安装:
# 1. 更新系统包
sudo apt update
# 2. 安装 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 docker-buildx-plugin docker-compose docker-compose-plugin
sudo systemctl start docker
sudo systemctl enable docker
# 3. 验证安装
docker-compose --version
2. 创建 Docker Compose 文件
新建项目目录,本文以 ~/typecho 为例
mkdir ~/typecho
cd ~/typecho
本文提供两种场景的 Docker Compose 配置文件,请根据你的需要选择一种。
在你的项目目录中创建一个docker-compose.yaml
文件,并添加以下内容:
Typecho + Postgres
version: '3.7'
services:
postgres:
image: postgres:15.4
environment:
POSTGRES_DB: typecho
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
interval: 10s
timeout: 5s
retries: 5
volumes:
- ./postgres_data:/var/lib/postgresql/data
networks:
- typecho_network
typecho:
image: joyqi/typecho:nightly-php7.4-apache
restart: unless-stopped
environment:
- TYPECHO_SITE_URL=${TYPECHO_SITE_URL}
- MAX_POST_BODY=1024M
- TYPECHO_INSTALL=1
- TYPECHO_DB_ADAPTER=Pdo_Pgsql
- TYPECHO_DB_HOST=postgres
- TYPECHO_DB_USER=${POSTGRES_USER}
- TYPECHO_DB_PASSWORD=${POSTGRES_PASSWORD}
- TYPECHO_DB_DATABASE=typecho
- TYPECHO_USER_NAME=${TYPECHO_USER_NAME}
- TYPECHO_USER_PASSWORD=${TYPECHO_USER_PASSWORD}
- TYPECHO_USER_MAIL=${TYPECHO_USER_MAIL}
ports:
- "${TYPECHO_PORT}:80"
volumes:
- ./typecho_data:/app/usr
networks:
- typecho_network
depends_on:
postgres:
condition: service_healthy
networks:
typecho_network:
Typecho + MySQL
version: '3.7'
services:
mysql:
image: mysql:8.2.0
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: typecho
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
restart: unless-stopped
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 20s
retries: 10
volumes:
- ./mysql_data:/var/lib/mysql
networks:
- typecho_network
typecho:
image: joyqi/typecho:nightly-php7.4-apache
restart: unless-stopped
environment:
- TYPECHO_SITE_URL=${TYPECHO_SITE_URL}
- MAX_POST_BODY=1024M
- TYPECHO_INSTALL=1
- TYPECHO_DB_HOST=mysql
- TYPECHO_DB_USER=${MYSQL_USER}
- TYPECHO_DB_PASSWORD=${MYSQL_PASSWORD}
- TYPECHO_DB_DATABASE=typecho
- TYPECHO_USER_NAME=${TYPECHO_USER_NAME}
- TYPECHO_USER_PASSWORD=${TYPECHO_USER_PASSWORD}
- TYPECHO_USER_MAIL=${TYPECHO_USER_MAIL}
ports:
- "${TYPECHO_PORT}:80"
volumes:
- ./typecho_data:/app/usr
networks:
- typecho_network
depends_on:
mysql:
condition: service_healthy
networks:
typecho_network:
创建.env
文件并添加以下内容:
# PostgreSQL 配置
POSTGRES_USER=typecho
POSTGRES_PASSWORD=yourpassword
# Typecho 配置
TYPECHO_SITE_URL=https://yourdomain.com
TYPECHO_PORT=9000
TYPECHO_USER_NAME=typecho_user # Typecho用户名
TYPECHO_USER_PASSWORD=yourpassword
TYPECHO_USER_MAIL=example@example.com
# MySQL 配置
MYSQL_USER=typecho
MYSQL_ROOT_PASSWORD=yourpassword # 数据库root用户密码
MYSQL_PASSWORD=yourpassword
# Typecho 配置
TYPECHO_SITE_URL=https://yourdomain.com
TYPECHO_PORT=9000
TYPECHO_USER_NAME=typecho_user # Typecho用户名
TYPECHO_USER_PASSWORD=yourpassword
TYPECHO_USER_MAIL=example@example.com
3. 配置 Nginx
输入sudo nano /etc/nginx/sites-available/typecho
在你的 Nginx 配置目录中创建一个新的配置文件,并添加以下内容:
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://localhost:9000;
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;
}
}
请将yourdomain.com
替换为你的实际域名。
4. 启动 Docker Compose
在项目目录中运行以下命令以启动 Typecho 服务:
sudo docker-compose up -d
5. 启用 Nginx 配置
创建一个符号链接到/etc/nginx/sites-enabled/
目录:
sudo ln -s /etc/nginx/sites-available/typecho /etc/nginx/sites-enabled/
然后重新加载 Nginx 配置:
sudo systemctl reload nginx
6. 访问 Typecho
打开浏览器,访问你的域名(例如http://yourdomain.com
),因为本文选择了快速安装的方式,已经配置好了数据库和用户,你应该能够直接看到 Typecho 的主页界面。