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:
然后根据查询的ip和上面的端口做映射即可。
4、typecho配置和坑
映射完成打开点击下一步,如果出现上传目录无法写入,请手动安装目录下的/usr/uploads 目录权限XXX
这句话,cd到根目录,直接执行:
然后就可往下配置了,数据库地址也可填docker内部的,或者直接docker名称也可,localhost无效。
坑1:第一遍配置完一切正常,卸载了重新配置就一直找不到路径或者文件。然后用find命令找到目录内有一个.user.ini文件,把这个删除即可正常。