Typecho博客搭建

1、起因

因为很多服务都是搞的容器化,而外面单独起一个nginx搞博客又浪费,故想着也干脆容器化。

2、安装

2.1 创建安装目录

1
2
mkdir -p /data/typecho
cd /data/typecho

2.2 配置MYSQL

1
2
3
4
5
6
7
8
nano mysql.env

// 感觉这步可不用配,因为后面安装时会让填mysql信息
// 填入下面内容
MYSQL_ROOT_PASSWORD=root_pass
MYSQL_DATABASE=typecho
MYSQL_USER=username
MYSQL_PASSWORD=password

2.3 php构建配置

1
2
3
4
5
mkdir php

cd php

nano Dockerfile

输入下面的内容

1
2
3
4
5
6
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

2.4 nginx配置

1
2
3
4
5
mkdir nginx

cd nginx

nano default.conf

输入下面的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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;
}
}

2.5 typecho包下载

1
2
3
4
wget https://github.com/typecho/typecho/releases/download/v1.2.0/typecho.zip

yun install zip -y
unzip typecho.zip

2.6 创建构建镜像文件

在根目录创建docker-compose.yml文件,详细内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
version: "3"

services:
nginx:
image: nginx
ports:
- "8223:80" # 左边可以改成任意没使用的端口
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./typecho:/var/www/html
- ./nginx:/etc/nginx/conf.d
- ./logs:/var/log/nginx
depends_on:
- php
networks:
- web

php:
build: php
restart: always
expose:
- "9000" # 不暴露公网,故没有写9000:9000
volumes:
- ./typecho:/var/www/html
environment:
- TZ=Asia/Shanghai
depends_on:
- mysql
networks:
- web

mysql:
image: mysql:5.7
restart: always
environment:
- TZ=Asia/Shanghai
expose:
- "3306" # 不暴露公网,故没有写3306:3306
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/logs:/var/log/mysql
- ./mysql/conf:/etc/mysql/conf.d
env_file:
- mysql.env
networks:
- web

networks:
web:

如果已安装mysql可把mysql相关配置删除,上面php关联的depends_on:也要删除。

2.7 构建

1
2
3
4
5
6
7
8
9
// 先查询端口使用
lsof -i:666
netstat -lnp | grep 6666

// 有占用可执行杀掉
kill -9 6666

// 没问题执行
docker-compose up -d

3、反向代理

直接使用Nginx Proxy Manager,查看docker的ip:

1
ip addr show docker0

然后根据查询的ip和上面的端口做映射即可。

4、typecho配置和坑

映射完成打开点击下一步,如果出现上传目录无法写入,请手动安装目录下的/usr/uploads 目录权限XXX这句话,cd到根目录,直接执行:

1
chmod -R 777 typecho

然后就可往下配置了,数据库地址也可填docker内部的,或者直接docker名称也可,localhost无效。
坑1:第一遍配置完一切正常,卸载了重新配置就一直找不到路径或者文件。然后用find命令找到目录内有一个.user.ini文件,把这个删除即可正常。