缘起
由于上周企鹅云学生机超级大促销,恰逢千万云和在香港的云主机都快要到期,果断薅了6年多的低配主机,由于涉及到博客的迁移,为了让以后的更加省事儿和方便,决定将typecho搭建的博客全部用docker进行部署。在这里记录下,方便后期。
安装docker
docker官网很详细,安装教程见https://docs.docker.com/install/,选择具体的平台一步一步进行安装即可
不过由于大家都懂的原因,国内的云服务器如果不采用镜像的话,从docker官方仓库拉取仓库那是相当地。。。慢,更改一下docker镜像仓库。把docker国内官方镜像https://registry.docker-cn.com
加入配置即可,这里以Ubuntu为例,假设按照官方教程安装后,只需要修改/etc/docker/daemon.json
文件并添加上registry-mirrors
键值,如下:
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
安装docker-compose
因为typecho需要nginx(或者apache,caddy等webserver)
,php
和mysql
才能运行,因此我们需要至少3个镜像,为了方便管理,我们这里采用docker-compose
来进行管理,由于docker-compose在Ubuntu下默认并未安装,因此需要安装docker-compose,官方安装教程见https://docs.docker.com/compose/install/
构建php镜像
由于官方的PHP镜像中没有安装pdo_mysql扩展,因此我们需要自行构建一个带有pdo_mysql的PHP镜像,使用Dockerfile如下进行构建:
FROM php:7.2.3-fpm
MAINTANER scofield<mail@pjf.name>
RUN apt-get update
RUN docker-php-ext-install pdo_mysql
执行命令docker build -t scofieldpeng/php:7.2.3-fpm
进行构建,构建完毕后执行docker images|grep scofieldpeng/php:7.2.3-fpm
如果不为空即为构建成功
启动和运行typecho
一切就绪后,我们准备下面文件:
# app文件夹下
- docker-compose.yml
- mysql(mysql文件夹,用来存放mysql数据,方便后期导出)
- mysql.env(mysql镜像的环境)
- typecho.conf(nginx配置文件)
- typecho(typecho的安装文件,github下下载即可,注意最新的正式版有安装问题,直接从master分支下拉取)
其中mysql.env
文件内容为:
# MySQL的root用户默认密码,这里自行更改
MYSQL_ROOT_PASSWORD=123456
# MySQL镜像创建时自动创建的数据库名称
MYSQL_DATABASE=typecho
# MySQL镜像创建时自动创建的用户名
MYSQL_USER=typecho
# MySQL镜像创建时自动创建的用户密码
MYSQL_PASSWORD=123456
typecho.conf的内容为:
server {
listen 0.0.0.0:80;
server_name xxx(这里写自己博客的域名,例如pjf.name);
root /app;
index index.php;
access_log /var/log/nginx/typecho_access.log main;
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-fpm:9000;
}
}
然后是docker-compose.yml文件的内容:
version: '2'
services:
nginx:
image: nginx:1.13.9-alpine
ports:
- "80:80"
restart: always
volumes:
- ./typecho:/app
- ./typecho.conf:/etc/nginx/conf.d/default.conf
- logs:/var/log/nginx
links:
- php-fpm
depends_on:
- php-fpm
php-fpm:
image: scofieldpeng/php:7.2.3-fpm
restart: always
volumes:
- ./typecho:/app
links:
- db
depends_on:
- db
db:
image: mysql:5.7.21
restart: always
ports:
- 127.0.0.1:13306:3306
volumes:
- ./mysql:/var/lib/mysql
- logs:/var/logs/mysql
env_file:
- mysql.env
volumes:
logs:
然后执行docker-compose up -d
,然后浏览器输入域名或者服务器IP即可进行访问
迁移
如果要迁移,直接将整个文件夹迁移到新的服务器,然后执行docker-compose up -d
即可快速进行迁移