docker-compose重建typecho博客

文章最后更新时间为:2021年04月29日 21:08:58

最近阿里云的 ecs 快要到期了,打算继续续费,没想到我这1核2G1M的小主机一年竟然要一千多块钱,看来毕业了是真的用不了套路云了,于是打算把博客搬个家,搬到前段时间四年四百块买的良心云上去。

话说我这个小博客是大一的时候利用 lnmp 搭建的,迁移起来也很麻烦,尤其是我还改过数据库的字段,直接利用 typecho 的备份功能是不行的。于是想着一劳永逸用 docker-compose 搭一套新的,下次迁移就直接复制整个目录就行了,备份数据也很方便。

目录如下

.
├── docker-compose.yml
├── logs
├── mysql
├── mysql.env
├── nginx
│   └── default.conf
├── php
│   └── Dockerfile
└── typecho

和lnmp一样,涉及到三个镜像 mysql + php-fpm + nginx

docker-compose

  • ./docker-compose.yml

    version: "3"
    
    services:
      nginx:
        image: nginx:1.19.10
        ports:
          - "80:80"
        restart: always
        environment:
          - TZ=Asia/Shanghai
        volumes:
          - ./typecho:/var/www/html
          - ./nginx:/etc/nginx/conf.d
          - ./logs:/var/log/nginx
        depends_on:
          - php
        networks:
          - web
    
      php:
        build: php
        restart: always
        expose:
          - "9000"
        volumes:
          - ./typecho:/var/www/html
        environment:
          - TZ=Asia/Shanghai
        depends_on:
          - mysql
        networks:
          - web
    
      mysql:
        image: mysql:5.7
        restart: always
        environment:
          - TZ=Asia/Shanghai
        expose:
          - "3306"
        volumes:
          - ./mysql/data:/var/lib/mysql
          - ./mysql/logs:/var/log/mysql
          - ./mysql/conf:/etc/mysql/conf.d
        env_file:
          - mysql.env
        networks:
          - web
    
    networks:
      web:
    

mysql

没什么好说的

  • ./mysql.env

    MYSQL_ROOT_PASSWORD=root_pass
    MYSQL_DATABASE=typecho
    MYSQL_USER=username
    MYSQL_PASSWORD=password

php-fpm

其中 php 目录为 php-fpm 的 Dockerfile,在官方镜像的基础上,添加了 PDO_MYSQL(如果使用 MySQL 作为 Typecho 的数据库,则需安装此扩展),并设置 buffer 为 4kb,即一个内存页。同时设置了时区为RPC,来源于issue: https://github.com/typecho/typecho/issues/1090

  • ./php/Dockerfile

    FROM php:7.2.3-fpm
    
    RUN apt-get update \
        && docker-php-ext-install pdo_mysql \
        && echo "output_buffering = 4096" > /usr/local/etc/php/conf.d/php.ini \
        && echo "date.timezone = PRC" >> /usr/local/etc/php/conf.d/php.ini

nginx

nginx 的配置要注意的是需要有 rewrite 规则,如果需要指定域名的话,需要写 server_name 字段。这里我并没有指定443端口,因为我的博客的 ssl 是在 cdn 那里做的。

  • ./nginx/default.conf

    server {
        listen 80 default_server;
        root /var/www/html;
        index index.php;
    
        access_log /var/log/nginx/typecho_access.log main;
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php$1 last;
        }
        location / {
            index index.html index.htm index.php;
    
            if (!-e $request_filename) {
                rewrite . /index.php last;
            }
        }
        location ~ .*\.php(\/.*)*$ {
            fastcgi_pass   php:9000;
            fastcgi_index  index.php;
            fastcgi_param  PATH_INFO $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED $document_root$fastcgi_path_info;
            fastcgi_param  SCRIPT_NAME $fastcgi_script_name;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
        
    }
    

其他

  • 无法上传图片

    sudo chmod -R 777 /path/to/blog/usr/uploads
  • mysql数据导入导出

docker-compose起来后,需要导入mysql数据。

mysql导入导出语句:

# 导出typecho数据库
mysqldump -uroot -p --databases typecho >/tmp/typecho.sql

# 导入typecho数据库
mysql -u root -p
mysql>use typecho
mysql>source /tmp/typecho.sql
  • 复制源码到typecho目录下

将之前的目录复制到typecho目录下即可。

  • 之后的备份迁移

之后迁移只需要复制整个目录,然后重启docker-compose up即可。

1 + 7 =
1 评论
    2Chrome 90Windows 10
    5月19日 回复

    666