从零部署:韩国服务器 + Nginx + Let's Encrypt

2026年6月20日 blogTech 4 分钟阅读 16 次阅读
📖 文章摘要

韩国服务器 + Nginx 反代 + Let's Encrypt + systemd 服务管理。本文详解从安全组配置到一键部署脚本的完整流程。

部署架构

博客部署在韩国首尔服务器,域名vue2.xyz

服务器配置

  • 机房: 韩国首尔
  • OS: Ubuntu
  • SSH 端口: 2894(非默认 22,降低扫描攻击)
  • 认证: SSH 密钥免密登录(禁止密码登录)
  • 安全组: 仅放行 80(HTTP)和 443(HTTPS)

Nginx 反向代理

Nginx 是所有请求的唯一入口,按路径分发到后端服务:

server {
    listen 443 ssl;
    server_name blog.vue2.xyz;

    # API 请求 → FastAPI 后端
    location /api/ {
        proxy_pass http://127.0.0.1:8001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # 上传文件 → Nginx 直出(不走 Python)
    location /uploads/ {
        alias /root/blog/data/uploads/;
        expires 3d;
        add_header Cache-Control "public, immutable";
    }

    # Nuxt 构建资源 → Nuxt SSR
    location /_nuxt/ {
        proxy_pass http://127.0.0.1:3000;
    }

    # 其余页面 → Nuxt SSR
    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

关键设计:后端服务绑定 127.0.0.1,外部无法直接访问 API,所有流量经过 Nginx 统一管控。

端口策略

之前踩过一个坑——用冷门端口(比如 2893)容易被 GFW 特征识别。坚持只用 80/443 看起来像正常网站。

SSL 证书

通过 Let's Encrypt + Certbot 自动管理 HTTPS:

certbot --nginx -d blog.vue2.xyz

证书每 90 天自动续期,certbot 注册了 systemd timer,无需手动维护。

systemd 服务管理

两个系统服务分别管理前后端:

blog-api.service(后端)

[Service]
User=root
WorkingDirectory=/root/blog/backend
ExecStart=/root/blog/backend/venv/bin/uvicorn main:app --host 127.0.0.1 --port 8001
Restart=always

blog-web.service(前端 SSR)

[Service]
User=root
WorkingDirectory=/root/blog/frontend
ExecStart=/usr/bin/node /root/blog/frontend/.output/server/index.mjs
Restart=always

一键部署脚本

deploy/deploy.py 自动化部署流程:

1. npm run build (本地构建前端)
2. Python tarfile 打包(后端代码 + 前端 .output)
3. SCP 上传到服务器
4. SSH 远程解压 + systemctl restart 两个服务

部署脚本排除了 venv__pycache__node_modules 等不必要的目录,打包体积在 5-10MB 之间。

数据库同步

deploy/deploy.py 的第二个功能是数据库同步:

  • 下载 — 服务器先停 API → SCP 下载 db 和 uploads → 启动 API
  • 上传 — SCP 上传本地 db → 重启 API

这样可以在本地修改数据后推送到生产环境。

最后更新:2026年6月29日CC BY-NC-SA 4.0

评论

暂无评论,来写第一条吧

© 2026 My Blog. Built with Nuxt.js + FastAPI.