typecho的安装部署
侧边栏壁纸
博主昵称
yuc

  • 累计撰写 291 篇文章
  • 累计收到 0 条评论

typecho的安装部署

yuc
yuc
2025-07-30 / 最后修改: 2025-07-30 07:14 / 0 评论 / 1 阅读 / 正在检测是否收录...
安装方式

了解到部署架构与wordpress类似,主要使用 lamp,手动部署还是要一番功夫的。发现有 docker 镜像,所以干脆在 nas 上使用容器来运行了

docker 镜像地址: https://hub.docker.com/r/joyqi/typecho

建议下载稳定版本,目前仍然是 1.2.1

部署过程
typecho部署

主要的部署流程和注意事项如下:

  1. 考虑到个人基本上只使用nginx,但 typecho 的 docker 没有直接使用nginx的镜像,所以拉取了 php-fpm 的镜像,然后再部署nginx反向代理
  2. 还需要一个mysql数据库,使用mysql8也可以
  3. 为了后续便捷的扩展插件、主题等,可以把容器内目录 /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;
    }

配置解析:

  1. avatar 段的配置解决了头像在国内无法正常访问,导致的请求缓慢,然后也做了一些安全限制
  2. 后续的location配置是 typecho 的配置
0

评论 (0)

取消