Typecho 迁移到 Docker 的过程记录

知了小站
2020-08-24 / 7 评论 / 2,746 阅读

前言

之前博客搭建在阿里云的机器上,现在快过期了,加上原机器带宽太小,就不打算续费了,现在就需要将 Typecho 博客迁移到新机器上。以前使用的是宝塔面板搭建的,现在不想把机器环境搞得乱七八糟,因此选择使用 Docker 来搭建 Typecho。

安装Docker

使用一键脚本安装Docker

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun && systemctl start docker && systemctl enable docker

如果提示 curl 命令不存在,就需要先安装 curl

# Centos
yum -y install curl

# Ubuntu、Debian
apt -y install curl

配置镜像加速

如果你机器是国内的机器,那么需要配置镜像加速

阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

image.png

修改 /etc/docker/daemon.json,文件不存在就创建一个

{
  "registry-mirrors": [
    "你的加速地址"
  ]
}

安装数据库

这里选择的是 Mariadb,可自行选择数据库镜像,这里配置参数就不做解释了,懂的都懂

docker run -d -v /home/mysql:/var/lib/mysql \
-p 3306:3306 -e MYSQL_ROOT_PASSWORD=密码 \
--privileged=true --restart=always --name mariadb mariadb

安装 PHP

安装官方的 php:7.2-fpm 镜像后,还需要进入容器安装 mysql pdo 才能使用 Mysql 数据库,比较麻烦,这里我自己在 php:7.2-fpm 的基础上构建了个带 mysql pdo 的镜像,可以选择性使用。

docker run -d -v /home/nginx/html:/var/www/html \
-p 8080:8080 --link mariadb:mariadb --name php dqjdda/php

安装 Nginx

docker run -d \
--link php:php \
--name nginx --restart always \
-p 80:80 -p 443:443 \
-e "TZ=Asia/Shanghai" \
-v /home/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/conf.d:/etc/nginx/conf.d \
-v /home/nginx/logs:/var/log/nginx \
-v /home/nginx/cert:/etc/nginx/cert \
-v /home/nginx/html:/var/www/html \
nginx

配置 Nginx

  • /home/nginx/conf.d 用于放配置文件
  • /home/nginx/logs 存放日志
  • /home/nginx/cert 存放证书
  • /home/nginx/html 存放网页

/home/nginx/conf.d 目录创建文件 blog.conf

server {

    listen 443 ssl http2;
    server_name  izlzl.com;
    gzip on;

    # 缓存SSL
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    # 证书配置
    ssl_certificate       /etc/nginx/cert/ydyno.com/ydyno.com_chain.crt;
    ssl_certificate_key   /etc/nginx/cert/ydyno.com/ydyno.com_key.key;

    root /var/www/html/ydyno;
    index index.php;

    # 伪静态
    if (!-e $request_filename) {
       rewrite ^(.*)$ /index.php$1 last;
    }
  
   location ~ .*\.php(\/.*)*$ {
        include        fastcgi_params;
        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;
        fastcgi_index  index.php;
        fastcgi_pass   php:9000;
       }

   location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
       expires 5d;
   }

   # deny access to . files, for security
   location ~ /\. {
       log_not_found off;
       deny all;
   }
}

server {
    listen 80;
    server_name  izlzl.com ydyno.com;
    return 301 https://izlzl.com$request_uri;
}

迁移博客

直接将老服务器的博客目录移动到 /var/www/html/ydyno ,然后将数据库导出,然后导入到新库即可

本文共 338 个字数,平均阅读时长 ≈ 1分钟
2

打赏

评论 (7)

取消
  1. 头像
    海有水涡
    Windows 10 · Google Chrome

    知了你好,请问数据库导入到新库是如何操作的?我的docker看到mysql 5.7启动?谢谢

    回复
    1. 头像
      知了小站 作者
      MacOS · Google Chrome
      @ 海有水涡

      我是用数据库工具 navicat 连接后导入的

      回复
      1. 头像
        海有水涡
        Windows 10 · Google Chrome
        @ 知了小站

        好的,我试试看不通过工具可以导入嘛,

        回复
  2. 头像
    MelodyJerry
    Windows 10 · Google Chrome

    大佬的博客主题什么呀

    回复
    1. 头像
      知了小站 作者
      MacOS · Google Chrome
      @ MelodyJerry

      主题:https://78.al

      回复
  3. 头像
    sksa
    Windows 10 · Google Chrome

    大哥nginx跳转php报错502是怎么解决的

    回复
    1. 头像
      知了小站 作者
      MacOS · Google Chrome
      @ sksa

      我踩坑的时候也遇到过,原因是 nginx 和 php 挂载的路径不一致,nginx 和 php 都需要使用 /var/www/html/ 映射到宿主机的同一目录 /home/nginx/html,然后在 html 目录新增个文件夹存放 php 网站内容。我这样操作后,就没出现 502 了

      回复