1.安装docker和docker-compose
这一步不再赘述,详情参考博客文章 ubuntu安装docker和docker-compose
2.需要的镜像
今天笔者这里使用以下三个镜像:
- nginx
- dawn/php:7.2.3-fpm
- mysql:5.7
(PS:笔者这样做是为了留出单独的php
和nginx
环境以便后续使用,如果直接使用typecho镜像会更加简单,有兴趣的可以研究一下, 这里不做赘述!)
其中nginx
和mysql:5.7
为官方镜像,dawn/php:7.2.3-fpm
是在官方的基础上添加了pdo_mysql
(这样可以使用mysql
作为博客的数据库)
dawn/php:7.2.3-fpm
的Dockerfile如下:
FROM php:7.2.3-fpm
LABEL maintainer="dawn" \
email="****@qq.com" \
version="7.2.3"
RUN apt-get update \
&& docker-php-ext-install pdo_mysql \
&& echo "output_buffering = 4096" > /usr/local/etc/php/conf.d/php.ini
3.配置
新建blog
文件夹,其目录结构如下:
|--mysql //mysql持久化目录
| └──conf //mysql配置目录
| |--data //mysql数据库目录
| |--db //单独建的存放sql文件的目录
| |--logs //mysql日志目录
|--nginx //nginx 配置文件的持久化目录
| └──conf //nginx配置目录
| └──nginx.conf //nginx全局配置文件
| |--blog.conf //博客站点配置文件
| |--logs //nginx日志目录
|--ssl //SSL证书目录
|--www //php站点根目录
|--tomcat //tomcat持久化目录(博客用不到,不展开叙述)
|--docker-compose.yml //docker-compose 配置文件
|--Dockerfile //Dockerfile文件
|--mysql.env //mysql配置信息
3.1 配置docker-compose.yml
version: '3'
services:
nginx:
image: nginx:latest
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./www/:/var/www/html
- ./ssl/:/var/www/ssl
- ./nginx/blog.conf:/etc/nginx/conf.d/blog.conf
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/logs:/var/log/nginx
restart: always
depends_on:
- fpm
- mysql
environment:
- TZ=Asia/Shanghai
fpm:
build: ./
image: dawn/php:7.2.3-fpm
container_name: php_fpm
ports:
- "9000:9000"
volumes:
- ./www/:/var/www/html
restart: always
depends_on:
- mysql
environment:
- TZ=Asia/Shanghai
mysql:
image: mysql:5.7
container_name: mysql
ports:
- "3306:3306"
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/logs:/var/log/mysql
- ./mysql/conf:/etc/mysql/conf.d
restart: always
env_file:
- mysql.env
其中:
version
指定docker-compose版本image
指定镜像名称build
指定Dockerfile上下文目录ports
指定端口映射container_name
指定容器名字volumes
指定文件挂载映射depends_on
指定服务启动时的先后顺序,指定的服务会先于当前服务启动
3.2 配置nginx
全局配置文件nginx.conf
,参考内容如下:
user www-data;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
站点配置目录blog.conf
,参考内容如下:
server {
listen 80;
server_name dawnsite.cn www.dawnsite.cn; # 更换为你的站点域名
# http重定向到https
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name dawnsite.cn www.dawnsite.cn; # 更换为你的站点域名
root /var/www/html/build; # 有的为/var/www/html,这里视项目情况更改
index index.php index.html index.htm;
ssl on;
ssl_certificate /var/www/ssl/4884437_dawnsite.cn.pem; # 更换为你的站点证书
ssl_certificate_key /var/www/ssl/4884437_dawnsite.cn.key; # 更换为你申请的私钥
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
# 伪静态规则
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
# 非www开头->www开头 更换为你的站点域名
if ($host ~ '^dawnsite.cn'){
return 301 https://www.dawnsite.cn$request_uri;
}
location ~ \.php$ {
fastcgi_pass fpm: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;
}
}
3.3 配置mysql
mysql配置信息mysql.env
,参考内容如下:
# MySQL的root用户默认密码,这里自行更改
MYSQL_ROOT_PASSWORD=password
# MySQL镜像创建时自动创建的数据库名称
MYSQL_DATABASE=typecho
# MySQL镜像创建时自动创建的用户名
MYSQL_USER=user
# MySQL镜像创建时自动创建的用户密码
MYSQL_PASSWORD=password
# 时区
TZ=Asia/Shanghai
4.安装
4.1 编排容器
在blog
目录下执行以下命令:
docker-compose up -d
查看进程
docker-compose ps
4.2 安装typecho
4.2.1 下载typecho
容器编排成功后,进入blog
目录下的www
目录开始下载typecho操作
wget http://typecho.org/downloads/1.1-17.10.30-release.tar.gz
解压
tar -xzvf 1.1-17.10.30-release.tar.gz
解压后所有文件会在一个build
文件夹内,这也就是我为什么在blog.conf
中那样配置root的原因,当然你也可以把他从build
移出来放到www
目录下,这样blog.conf
就会变成大多数人说的那样啦
4.2.2 配置typecho
浏览器输入域名URL,进入typecho安装页面
PS:数据库地址需填入mysql镜像的名称(与docker-compose.yml
中的配置相对应),数据库名与 mysql.env
中创建的数据库名一致
如果出现以上界面,只需要按照提示在你的typecho软件目录下新建
config.inc.php
文件,并写入内容即可
5.博客迁移
迁移时只需要把整个blog
目录打包传输至安装有docker和docker-compose的新服务器,然后重新编排即可
docker-compose up -d
如果是将原有博客结构升级为docker容器的话,只需要将你的typecho文件夹复制到
www
文件夹中,然后将你的数据库sql文件导入到新建的数据库内即可!PS:记得修改
config.inc.php
数据库配置和mysql.env
对应噢,或者你直接把config.inc.php
删掉,重新初始化一下