Typecho博客搭建
1、起因
因为很多服务都是搞的容器化,而外面单独起一个nginx搞博客又浪费,故想着也干脆容器化。
2、安装
2.1 创建安装目录
| 12
 
 | mkdir -p /data/typechocd /data/typecho
 
 | 
2.2 配置MYSQL
| 12
 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构建配置
| 12
 3
 4
 5
 
 | mkdir php
 cd php
 
 nano Dockerfile
 
 | 
输入下面的内容
| 12
 3
 4
 5
 6
 
 | FROM php:7.3.29-fpmRUN 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配置
| 12
 3
 4
 5
 
 | mkdir nginx
 cd nginx
 
 nano default.conf
 
 | 
输入下面的内容
| 12
 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包下载
| 12
 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文件,详细内容如下:
| 12
 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 构建
| 12
 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:
然后根据查询的ip和上面的端口做映射即可。
4、typecho配置和坑
映射完成打开点击下一步,如果出现上传目录无法写入,请手动安装目录下的/usr/uploads 目录权限XXX这句话,cd到根目录,直接执行:
然后就可往下配置了,数据库地址也可填docker内部的,或者直接docker名称也可,localhost无效。
坑1:第一遍配置完一切正常,卸载了重新配置就一直找不到路径或者文件。然后用find命令找到目录内有一个.user.ini文件,把这个删除即可正常。