Linux部署学习

关于部署过程

Linux 与 Ubuntu 手动部署学习

[!summary] 这份笔记的用途 记录 Y1shu Personal Blog 从 Windows 开发机手动部署到 Ubuntu VPS 的过程。重点不是背命令,而是理解:命令在哪里执行、以谁的身份执行、改变了什么、怎样验证、出错后看哪里。

![[Linux学习索引.base#学习笔记]]

0. 当前部署进度

[!success] 已正式上线 https://y1shucheng.online 与 https://www.y1shucheng.online 均已返回 200 OK。HTTP 会以 301 跳转到 HTTPS,Certbot 自动续期演习成功。

上线主线:已完成

  • [x] DigitalOcean VPS 与 Ubuntu 24.04 基线检查
  • [x] SSH Key 登录、Host Key 与管理员 cheng
  • [x] 创建无登录权限的服务用户 y1shu
  • [x] 系统更新、新内核与 1 GiB Swap
  • [x] /srv/y1shu 代码、venv、配置和数据目录
  • [x] GitHub 只读 Deploy Key、仓库转移与 remote 更新
  • [x] Python venv、生产依赖和真实环境变量
  • [x] SQLite 一致性迁移、权限与完整性校验
  • [x] Gunicorn 直连测试及 Control Socket 权限问题修复
  • [x] systemd 安装、启动、日志与开机启用
  • [x] Nginx 安装、静态目录权限、反向代理和默认站点移除
  • [x] 域名 A/CNAME 记录与 DNS 验证
  • [x] Nginx server_name 与 Flask TRUSTED_HOSTS 同步
  • [x] Let’s Encrypt HTTPS 证书和 HTTP 301 跳转
  • [x] Certbot 自动续期 --dry-run

当前生产状态

项目 当前值
正式网址 https://y1shucheng.online
别名网址 https://www.y1shucheng.online
VPS DigitalOcean SGP1
系统 Ubuntu 24.04.4 LTS
公网 IP 165.22.50.111
资源 1 vCPU / 512 MB RAM / 10 GB SSD
内核 6.8.0-138-generic
Swap /swapfile,1 GiB
管理用户 cheng
程序用户 y1shu
Nginx 用户 www-data
Gunicorn systemd 服务 y1shu.service,127.0.0.1:8000
项目代码 /srv/y1shu/app
虚拟环境 /srv/y1shu/venv
生产配置 /srv/y1shu/config/y1shu.env
数据库 /srv/y1shu/data/blog.db
GitHub Y1shu-cheng/y1shu-personal-blog
已部署提交 097144b

Phase 7 剩余运维收尾

  • [ ] 浏览器验证管理员登录、退出、文章、评论和静态资源
  • [ ] 配置 UFW,并用第二条 SSH 会话验证没有锁死
  • [ ] 做一次真实 SQLite 备份与恢复演习
  • [ ] 完整重启 VPS,验证 systemd、Nginx、HTTPS 和数据写入
  • [ ] 演练以后如何安全更新 Git 代码
  • [ ] 演练分层故障排查
  • [ ] 理解恢复方案后决定是否启用 HSTS

[!note] “已经上线”与“所有运维演练完成”是两件事 网站公网与 HTTPS 主线已经完成;UFW、备份恢复、重启恢复等属于上线后的可靠性和维护验收。


1. 先看懂整个网站架构

flowchart LR
    B[浏览器] -->|HTTP 80 / HTTPS 443| N[Nginx]
    N -->|转发到本机| G[Gunicorn]
    G --> F[Flask 应用]
    F --> D[(SQLite)]
    S[systemd] -.启动/重启/记录状态.-> G

每一层的职责

组件 是什么 主要职责 是否直接暴露公网
Nginx Web 服务器、反向代理 接收公网请求、HTTPS、静态文件、转发请求 是,80/443
Gunicorn Python WSGI 生产服务器 运行 Flask 应用,管理工作进程 否,只监听服务器本机
Flask Python Web 框架 路由、登录、文章、评论等业务逻辑 由 Gunicorn 调用
SQLite 文件型数据库 保存文章、评论等业务数据 否
systemd Linux 服务管理器 开机启动、异常重启、状态和日志管理 不适用

一句话:Nginx 守公网入口,Gunicorn 运行 Python 网站,Flask 处理业务,SQLite 保存数据,systemd 负责让服务稳定运行。

[!important] 为什么 Gunicorn 不直接暴露公网 Gunicorn 擅长运行 Python 应用,但 TLS、静态文件、公网连接管理、安全响应头等不是它的主要职责。让 Nginx 做公网边界,职责更清楚,也更容易维护。

读者留言

READER NOTES

  1. 测试

    哇哦

留言经审核后显示。