安装方式
了解到部署架构与wordpress
类似,主要使用 lamp
,手动部署还是要一番功夫的。发现有 docker 镜像,所以干脆在 nas 上使用容器来运行了
docker 镜像地址: https://hub.docker.com/r/joyqi/typecho
建议下载稳定版本,目前仍然是 1.2.1
部署过程
typecho部署
主要的部署流程和注意事项如下:
- 考虑到个人基本上只使用nginx,但 typecho 的 docker 没有直接使用nginx的镜像,所以拉取了
php-fpm
的镜像,然后再部署nginx反向代理 - 还需要一个mysql数据库,使用mysql8也可以
- 为了后续便捷的扩展插件、主题等,可以把容器内目录 /app 挂载到本地
启动命令如下:
docker run -it -d --name typecho-server -p 9000:9000 \
-e TYPECHO_DB_HOST=192.168.0.10 \
-e TYPECHO_DB_USER=typecho \
-e TYPECHO_DB_PASSWORD=TypeCho_20250717 \
-e TYPECHO_DB_DATABASE=typecho \
-e TYPECHO_SITE_URL=https://yuc.pub:12345 \
-v /volume2/docker/typecho:/app \
joyqi/typecho:1.2.1-php7.4-fpm-alpine
注意:为了使用自建 nginx,所以把 9000 端口映射了出来,一定要做好安全措施,建议防火墙只允许本机访问
nginx部署
启动命令如下:
docker run --name nginx -it -d -p 12345:12345 \
-v /volume2/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /volume2/docker/nginx/conf.d:/etc/nginx/conf.d \
-v /volume2/docker/typecho:/app \
nginx:stable-alpine3.21-perl
挂载出默认的配置文件和自定义的配置目录,以支持后续的配置扩展
注意:nginx 的目录一定要和 typecho 的路径一致,否则无法正常访问
nginx的默认配置
user root;
events {
use epoll;
worker_connections 10240;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.p.log main;
#error_log logs/error.p.log debug;
sendfile on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
proxy_cache_path /etc/nginx/conf.d/cache levels=1:2 keys_zone=my_cache:100m max_size=500m;
server_tokens off;
}
typecho相关的配置
server {
listen 12345;
server_name www.yuc.pub;
root /app/;
index index.html index.htm index.php;
# gravatar
location ^~ /avatar/ {
proxy_set_header Host www.gravatar.com;
valid_referers none blocked .yuc.pub;
if ($invalid_referer) {
add_header Cache-Control "no-store";
return 401;
}
if ($http_referer !~* ^https?://([^/]+\.)?yuc\.pub(:\d+)?(/.*)?$) {
add_header Cache-Control "no-store";
return 403;
}
proxy_cache_valid 200 7d;
proxy_max_temp_file_size 10m;
if ($args = "") {
rewrite ^(.*)$ $1?auth=XXX666 break;
}
if ($args != "") {
rewrite ^(.*)$ $1?$args&auth=XXX666 break;
}
proxy_cache my_cache;
proxy_cache_valid 200 30d;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
add_header X-Cache-Status $upstream_cache_status;
proxy_pass https://43.xxx.xxx.xxx;
}
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
}
location ~ .*\.php(\/.*)*$ {
include fastcgi.conf;
fastcgi_pass 192.168.0.10:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
远程avatar配置
location /avatar {
if ($arg_auth != "XXX666" ) {
return 401;
}
rewrite ^/avatar\?auth=.*&?(.*)$ /avatar?$1 last;
proxy_set_header Host www.gravatar.com;
proxy_pass https://www.gravatar.com;
}
配置解析:
- avatar 段的配置解决了头像在国内无法正常访问,导致的请求缓慢,然后也做了一些安全限制
- 后续的location配置是 typecho 的配置
评论 (0)