本教程在 Debian 11 (bullseye) 测试,理论适用于所有还在生命周期的 Debian/Ubuntu 系统。 ``` apt update && apt install curl -y curl -sSL https://get.docker.com/ | sh systemctl start docker systemctl enable docker ``` docker-compose.yml 文件: ``` version: '3' networks: typecho_network: external: false name: typecho_network services: typecho_web: image: joyqi/typecho:1.2.0-php8.0-apache expose: - 80 environment: - TYPECHO_SITE_URL=http://your-site.name - TIMEZONE=Asia/Shanghai - TYPECHO_INSTALL=0 - TYPECHO_DB_ADAPTER=Pdo_Mysql - TYPECHO_PORT=3306 - TYPECHO_DB_USER=root - TYPECHO_DB_PASSWORD=typecho - TYPECHO_DB_DATABASE=typecho volumes: - ./typecho:/app restart: unless-stopped depends_on: typecho_mysql: condition: service_healthy networks: - typecho_network typecho_mysql: image: mysql:8.0 environment: - MYSQL_DATABASE=typecho - MYSQL_ROOT_PASSWORD=typecho volumes: - ./mysql:/var/lib/mysql restart: unless-stopped networks: - typecho_network healthcheck: test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"] timeout: 5s retries: 20 interval: 5s ``` 官方提供的镜像里还有 php-fpm 和 php built-in server 版本,此处仅以 apache 为例。 如果不写 health check 的话,可能导致 mysql 刚刚启动,但还没有准备好接受 3306 端口传输的信息,此时 typecho 已经有请求发出。 随后运行 `docker compose up -d && docker compose down` 拉取 typecho 程序文件到映射的 volume。 typecho 迁移只需要备份 `./usr` 目录(插件主题等)和数据库。 `./usr` 的迁移只需要覆盖 `./typecho/usr` 下的文件即可。 mysql 迁移: ``` docker ps # 查看 docker 的 container id, 比如为 3e2d.... docker cp backup.sql 3e2d:/backup.sql docker exec -it 3e2d bash mysql -uroot -p -D typecho < /backup.sql # then enter password ``` 域名的配置只需要一个反向代理,Nginx Proxy Manager 是个好东西。 Loading... 本教程在 Debian 11 (bullseye) 测试,理论适用于所有还在生命周期的 Debian/Ubuntu 系统。 <pre class="corepress-code-pre"><div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"><div class="enlighter-toolbar"><div class="enlighter-btn enlighter-btn-raw"></div></div></div></pre> ``` apt update && apt install curl -y curl -sSL https://get.docker.com/ | sh systemctl start docker systemctl enable docker ``` docker-compose.yml 文件: <pre class="corepress-code-pre"><div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"><div class="enlighter-toolbar"><div class="enlighter-btn enlighter-btn-raw"></div></div></div></pre> ``` version: '3' networks: typecho_network: external: false name: typecho_network services: typecho_web: image: joyqi/typecho:1.2.0-php8.0-apache expose: - 80 environment: - TYPECHO_SITE_URL=http://your-site.name - TIMEZONE=Asia/Shanghai - TYPECHO_INSTALL=0 - TYPECHO_DB_ADAPTER=Pdo_Mysql - TYPECHO_PORT=3306 - TYPECHO_DB_USER=root - TYPECHO_DB_PASSWORD=typecho - TYPECHO_DB_DATABASE=typecho volumes: - ./typecho:/app restart: unless-stopped depends_on: typecho_mysql: condition: service_healthy networks: - typecho_network typecho_mysql: image: mysql:8.0 environment: - MYSQL_DATABASE=typecho - MYSQL_ROOT_PASSWORD=typecho volumes: - ./mysql:/var/lib/mysql restart: unless-stopped networks: - typecho_network healthcheck: test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"] timeout: 5s retries: 20 interval: 5s ``` 官方提供的镜像里还有 php-fpm 和 php built-in server 版本,此处仅以 apache 为例。 如果不写 health check 的话,可能导致 mysql 刚刚启动,但还没有准备好接受 3306 端口传输的信息,此时 typecho 已经有请求发出。 随后运行 `docker compose up -d && docker compose down` 拉取 typecho 程序文件到映射的 volume。 typecho 迁移只需要备份 `./usr` 目录(插件主题等)和数据库。 `./usr` 的迁移只需要覆盖 `./typecho/usr` 下的文件即可。 mysql 迁移: ``` docker ps # 查看 docker 的 container id, 比如为 3e2d.... docker cp backup.sql 3e2d:/backup.sql docker exec -it 3e2d bash mysql -uroot -p -D typecho < /backup.sql # then enter password ``` 域名的配置只需要一个反向代理,Nginx Proxy Manager 是个好东西。 最后修改:2025 年 11 月 01 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏