docker-compose部署typecho
- 安装docker(略过)
- 创建typecho文件夹
- 配置php
在typecho目录下新建php目录mkdir php
在php目录创建Dockerfilenano Dockerfile
输入
FROM php:7.3.29-fpm
RUN apt-get update \
&& docker-php-ext-install pdo_mysql \
&& echo "output_buffering = 4096" > /usr/local/etc/php/conf.d/php.ini \
&& echo "date.timezone = PRC" >> /usr/local/etc/php/conf.d/php.ini在官方7.3.29镜像的基础上,添加了 PDO_MYSQL(如果使用 MySQL 作为 Typecho 的数据库,则需安装此扩展),并设置 buffer 为 4kb,即一个内存页。同时设置了时区为RPC
- 配置nginx
在typecho目录下新建nginx目录mkdir nginx
在nginx目录下创建配置文件nano default.conf
输入
server {
listen 80 default_server;
root /var/www/html;
index index.php;
access_log /var/log/nginx/typecho_access.log main;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
location / {
index index.html index.htm index.php;
if (!-e $request_filename) {
rewrite . /index.php last;
}
}
location ~ \.php(.*)$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
默认监听端口不可修改,php端口默认9000,不指定域名,待会儿直接npm反代。
- 下载typecho源码
cd /root/data/docker/typecho/typecho
wget https://github.com/typecho/typecho/releases/download/v1.2.0/typecho.zip
apt install zip -y
unzip typecho.zip- 创建docker-compose文件
cd /root/data/docker_data/typecho
nano docker-compose.yml
输入内容如下
version: "3"
services:
nginx: #第一个nginx
image: nginx
ports:
- "11090:80" # 左边可以改成任意没使用的端口
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./typecho:/var/www/html #在docker-compose目录下的typecho文件夹为网站目录
- ./nginx:/etc/nginx/conf.d #nginx配置文件目录
- ./logs:/var/log/nginx #nginx日志存放目录
depends_on: #随后启动php
- php
networks: #配置容器连接的网络
- web
php: #第一个php
build: php
restart: always
expose:
- "9000" #不暴露公网,故没有写9000:9000
volumes:
- ./typecho:/var/www/html #在docker-compose目录下的typecho文件夹为网站目录
environment:
- TZ=Asia/Shanghai
depends_on:
- nginx_wiki
networks:
- web
nginx_wiki: #第二个nginx
image: nginx
ports:
- "11092:80" # 左边可以改成任意没使用的端口
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./typecho_wiki:/var/www/html
- ./nginx_wiki:/etc/nginx/conf.d
- ./logs:/var/log/nginx
depends_on:
- php_wiki
networks:
- web
php_wiki:
build: php_wiki
restart: always
expose:
- "9000" # 不暴露公网,故没有写9000:9000
volumes:
- ./typecho_wiki:/var/www/html
environment:
- TZ=Asia/Shanghai
depends_on:
- mysql
networks:
- web
mysql:
# 镜像名
image: mysql:8.0.30
# 容器名(以后的控制都通过这个)
container_name: mysql
# 重启策略
restart: always
environment:
# 时区上海
TZ: Asia/Shanghai
# root 密码
MYSQL_ROOT_PASSWORD: 123456
# 初始化数据库(后续的初始化sql会在这个库执行)
MYSQL_DATABASE: cccc
# 初始化用户(不能是root 会报错, 后续需要给新用户赋予权限)
MYSQL_USER: cccc
# 用户密码
MYSQL_PASSWORD: 123456
# 映射端口
ports:
- 11091:3306
volumes:
# 数据挂载
- ./mysql/data/:/var/lib/mysql/
# 配置挂载
- ./mysql/conf/:/etc/mysql/conf.d/
# 初始化目录挂载
- ./mysql/init/:/docker-entrypoint-initdb.d/
command:
# 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
networks:
- web
networks:
web:
- npm反代,直接输入域名起飞