默然博客 - Docker
type: channel
link: https://moranyun.cn/tag/Docker/
items: Docker部署Typecho：5分钟搭建高可用博客

Docker部署Typecho：5分钟搭建高可用博客
type: item
date: 2026-03-13T12:36:00+08:00
description: Docker部署Typecho：5分钟搭建高可用博客引言大家好，我是默然，今天给大家分享一篇实战干货。这是我在实际工作中总结出来的经验，希望对大家有所帮助。很多朋友想搭建个人博客，但又被复杂的环境配置、依赖安装、数据库配置这些步骤劝退。今天我就教大家如何用Docker在5分钟内部署一个高可用的Typecho博客系统，全程只需要复制粘贴几个命令，不需要任何复杂的配置，新手也能轻松上手。正文部分1. 问题背景传统的Typecho部署方式需要手动安装Nginx/Apache、PHP、MySQL/MariaDB，还要配置虚拟主机、PHP扩展、数据库权限、文件权限等等，整个过程下来至少需要半小时，而且很容易因为环境差异出现各种奇怪的问题。而使用Docker部署的优势非常明显：环境一致性：所有依赖都打包在镜像中，不会出现"在我机器上能运行"的问题部署快速：几个命令就能完成部署，5分钟搞定易于维护：升级、备份、迁移都非常方便资源隔离：博客系统和其他服务互不影响高可用：可以很方便地配置负载均衡和数据持久化2. 实现思路我们将使用Docker Compose来编排整个服务，包含三个容器：Nginx：Web服务器，负责处理HTTP请求和静态资源PHP-FPM：处理PHP动态请求MariaDB：数据库存储博客内容同时我们会做数据持久化配置，确保容器删除重建后数据不会丢失，并且配置合理的资源限制和健康检查，保证服务的高可用性。整个架构非常轻量，1核2G的服务器就能轻松运行，完全满足个人博客的需求。3. 具体实现步骤3.1 环境准备首先你需要有一台服务器，推荐使用CentOS 7+/Ubuntu 18.04+系统，已经安装好Docker和Docker Compose。如果还没安装Docker，执行以下命令一键安装：# 安装Docker curl -fsSL https://get.docker.com | bash # 启动Docker并设置开机自启 systemctl start docker systemctl enable docker # 安装Docker Compose curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose # 验证安装 docker --version docker-compose --version3.2 创建项目目录mkdir -p /opt/typecho/{nginx,php,mysql,html} cd /opt/typecho3.3 编写Docker Compose配置文件创建docker-compose.yml文件：version: '3.8' services: nginx: image: nginx:alpine container_name: typecho_nginx restart: always ports: - "80:80" - "443:443" volumes: - ./html:/usr/share/nginx/html - ./nginx/conf.d:/etc/nginx/conf.d - ./nginx/logs:/var/log/nginx - ./cert:/etc/nginx/cert depends_on: - php networks: - typecho-network healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/"] interval: 30s timeout: 10s retries: 3 php: image: php:8.1-fpm-alpine container_name: typecho_php restart: always volumes: - ./html:/usr/share/nginx/html - ./php/php.ini:/usr/local/etc/php/php.ini networks: - typecho-network environment: - TZ=Asia/Shanghai healthcheck: test: ["CMD", "php-fpm", "-t"] interval: 30s timeout: 10s retries: 3 mysql: image: mariadb:10.6 co…