一、文件目录:
Traefik2 配置文件一律继承 前面的配置,docker-compose 文件目录如下:
1.1 创建目录:
mkdir typecho1
: 创建 typecho1 目录为项目根目录,存放docker-compose.yml文件
mkdir tp-db-data
mkdir typecho
以上两文件夹可自行创建,也可由docker-compose自动创建
touch docker-compose.yml
创建 docker-compose 文件
1.2 Typecho 的docker-compose配置文件:
version: '3.7'
services:
db:
image: mysql:5.7
container_name: typecho-db-1
volumes:
- ./tp-db-data:/var/lib/mysql
networks:
- default
restart: always
environment:
MYSQL_ROOT_PASSWORD: spuerrootpass
MYSQL_DATABASE: typecho
MYSQL_USER: typecho
MYSQL_PASSWORD: typechodbpass
typecho:
depends_on:
- db
image: 80x86/typecho:latest
container_name: typecho-blog-1
environment:
PHP_TZ: Asia/Shanghai
PHP_MAX_EXECUTION_TIME: 600
volumes:
- ./typecho:/data
networks:
- proxy
- default
restart: always
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy"
- "traefik.http.routers.typecho-secure.entrypoints=websecure"
- "traefik.http.routers.typecho-secure.rule=Host(`blog.yourdomain.com`)"
- "traefik.http.routers.typecho-secure.service=typecho-service"
- "traefik.http.services.typecho-service.loadbalancer.server.port=80"
volumes:
tp-db-data:
name: tp-db-data
typecho:
name: typecho
networks:
proxy:
external: true
新配置如下,去掉labels,改在 dynamic.yml 中 统一控制。
dynamic.yml位置:
/root/traefik2/data/configurations
version: '3.7'
services:
db:
image: mysql:5.7
container_name: typecho-db2
volumes:
- ./tp-db-data:/var/lib/mysql
networks:
- default
restart: always
environment:
MYSQL_ROOT_PASSWORD: spuerrootpass
MYSQL_DATABASE: typecho
MYSQL_USER: typecho
MYSQL_PASSWORD: typechodbpass
typecho:
depends_on:
- db
image: 80x86/typecho:latest
container_name: typecho-blog2
environment:
PHP_TZ: Asia/Shanghai
PHP_MAX_EXECUTION_TIME: 600
volumes:
# normal sites
- ./nginx:/etc/nginx/sites-enabled
- ./typecho:/data
- type: tmpfs
target: /tmp
networks:
- proxy
- default
restart: always
volumes:
tp-db-data:
name: tp-db-data
typecho:
name: typecho
networks:
proxy:
external: true
1.2.1 配置文件解释
- 选用最热的 typecho镜像:80x86/typecho:latest, 镜像自带Typecho 安装程序,Php 和 Nginx,配置已设置好
- 需要给 typecho镜像建一个数据库
- db部分:
镜像选用 mysql:5.7,挂载到 typecho1/tp-db-data文件夹下, networks 选择default, 不让typecho以外的容器接触。
typecho部分:
镜像选用 80x86/typecho:latest,配置要求根据镜像使用示例来改:
镜像数据挂载 在 typecho1/typecho文件夹下,且networks 选择default,proxy,能让Traefik与容器可以交互。
docker run -d \ --name=typecho-blog \ --restart always \ --mount type=tmpfs,destination=/tmp \ -v /srv/http/typecho:/data \ -e PHP_TZ=Asia/Shanghai \ -e PHP_MAX_EXECUTION_TIME=600 \ -p 90:80 \ 80x86/typecho:latest
1.2.2 部署要修改的地方
新配置:
基本也与旧配置一样,修改db数据即可:
1.3 配置Traefik的动态配置文件dynamic.yml
1.3.1 增加 routers
routers:
# Roter3: typecho-2
typecho-2:
entryPoints:
- "websecure"
service: typecho-service2
rule: "Host(`youdomain.com`)"
1.3.2 增加 services
services:
# service2: typecho-2-service
typecho-service2:
loadBalancer:
servers:
- url: "http://172.18.0.5"
查找容器url,用docker inspect --format='{{.NetworkSettings.Networks.proxy.IPAddress}}' typecho-blog2
命令。
命令更详细解释,可跳转:https://www.zctou.com/2055.html#cl-7。
1.4 创建nginx的 config文件
位置:/root/typecho2/nginx
创建文件
cd /root/typecho2/nginx
touch default
在新建的default中,输入下面的内容:
server {
listen 80; ## listen for ipv4; this line is default and implied
listen [::]:80 default ipv6only=on; ## listen for ipv6
root /app;
index index.php index.html index.htm;
location ~ .*\.php(\/.*)*$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
try_files $uri /index.php =404;
fastcgi_pass unix:/var/run/php7-fpm.sock;
# Mitigate https://httpoxy.org/ vulnerabilities
fastcgi_param HTTP_PROXY "";
fastcgi_index index.php;
include fastcgi.conf;
fastcgi_connect_timeout 300;
fastcgi_read_timeout 600;
fastcgi_send_timeout 300;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 128k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
#unless the request is for a valid file (image, js, css, etc.), send to bootstrap
if (!-e $request_filename)
{
rewrite ^(.*)$ /index.php$1 last;
break;
}
location / {
index index.php
try_files $uri $uri/ /index.php?$query_string;
}
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc|ttf|ttc|otf|eot|woff)$ {
try_files $uri /index.php?$query_string;
expires max;
access_log off;
log_not_found off;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
location ~* \.(?:css|js)$ {
try_files $uri /index.php?$query_string;
expires 1y;
add_header Cache-Control "public";
}
# deny access to . files, for security
location ~* (?:^|/)\. {
access_log off;
log_not_found off;
deny all;
}
location ~* (?:\.(?:bak|config|db|sql|fla|psd|ini|log|sh|inc|swp|dist)|~)$ {
deny all;
access_log off;
log_not_found off;
}
}
1.5 启动docker-compose
准备好所有文件,一键部署: docker-compose up -d
即可。
二、踩过的坑
2.1 新站只能加一个volumes映射
全新站,一开始只能加这个映射,加其他映射会报错。
volumes:
- ./typecho:/data
./typecho
要加上./
,不加的话文件目录会被 加载到 /var/lib/docker/volumes
目录下
2.2 不能连接数据库错误
如果你卡在“对不起, 无法连接数据库, 请先检查数据库配置再继续进行安装”位置。网上提供的修复方向有两个
2.2.1 检查权限
权限的问题,把typecho CMS的根目录,权限改0755为0777即可。但这个Typecho image不存在这种错误。
2.2.2 检查数据库填写数据
数据库数据填写错误方面,通常是3个。
- pdo驱动,本文用的 mysql;
- 数据库地址:本镜像要填 db:33067;
- 用户名用数据库名,注意 区分