安装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迁移
如果要迁移,直接将整个文件夹迁移到新的服务器,然后执行docker-compose up -d即可快速进行迁移