本教程在 Debian 11 (bullseye) 测试,理论适用于所有还在生命周期的 Debian/Ubuntu 系统。

docker 安装

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 是个好东西。

最后修改:2022 年 11 月 21 日
如果觉得我的文章对你有用,请随意赞赏