!13-vps-ops-deploy_index.png (../../public/images/Advanced/13-vps-ops-deploy_index.png)
第十三章:云服务器运维与项目部署
序言
假如你囊中不羞涩,真的去买了一台服务器;或者你发现某云厂商的福利活动,可以领取试用机。
在选择服务器地区时,老师傅建议最好选择 中国香港 或海外节点。 原因很简单:国内大陆节点的服务器绑域名必须备案,而香港节点免备案,能让你省去数周的等待时间,即买即用。
总之,你获得了一个公网 IP、用户名(通常是 root)和密码。 你发现服务器不像 Windows 那样有远程桌面,只能通过终端 (Terminal) 操作。你学会了使用 SSH 命令连接服务器: ssh root@1.2.3.4
SSH
管理远程服务器需要 SSH 连接。SSH 是安全的方式远程登录服务器。在**【第10章】** 你已经详细讲解了 SSH 原理和配置。 拿到服务器后,老师傅并没有让你直接开始敲代码,而是先教了你几条服务器初始化的铁律(比如更新系统、设置防火墙等)。
1Panel 面板
为了降低运维难度,老师傅推荐你安装 1Panel 面板, 这是一个现代化的 Linux 服务器可视化运维管理软件。
这也体现了"通过配置而非代码"来扩展能力的理念。正如之前我们使用 MCP 让 AI 连接外部工具,Hooks 让 AI 自动执行任务,Skills 让 AI 掌握专业能力。它们都是配置驱动的系统。
你按照官方文档的一行命令学会了安装,并且一键安装了 Docker,并顺手配置了镜像加速(这在国内网络环境下至关重要)。
Docker 容器
什么是 Docker? 1Panel 的核心其实就是 Docker。虽然这听起来又是一个新名词,但你可以把它理解为集装箱。
- 隔离性:每一个应用(你的网站、数据库)都被打包在一个独立的集装箱里运行,互不干扰,也不污染你的服务器系统。
- 一致性:你在面板里点的每一次安装应用,本质上就是在拉取和运行这些 Docker 集装箱。
这种隔离机制让你明白了一个铁律:永远不要直接在服务器上写代码或修改文件。 服务器是用来"跑"代码的生产环境 (Production),而写代码、调试 Bug 应该永远在你的本地电脑的开发环境 (Development) 里完成,然后通过 Git 同步上去。
安全组
当你兴奋地输入 1Panel 给出的 http://IP:端口 访问面板时,浏览器却转圈圈直到超时。 你以为是面板配置错了,但老师傅告诉你,云服务器通常有第一道安全门——云厂商的安全组。
安全组相当于云厂商在机房门口设的防火墙。 默认情况下,除了 SSH (22) 等少数端口,其他端口都是封死的。你必须去云厂商的控制台后台,手动开放安全组规则(放行 1Panel 的端口),外面的请求才能摸到你的服务器边缘。
自建数据库
如果不使用使用云端的 Supabase数据库,现在我们有了服务器,完全可以自己部署一个。你打开 1Panel 的"应用商店",一键安装了 PostgreSQL。 在安装过程中,你设置了数据库端口、管理员账户(通常是 postgres)和密码。
安装完成后,你在面板的“数据库”页面中新建了一个具体的数据库(比如 my_app_db)。 这里老师傅给你科普了一个常识:数据库软件 (DBMS) vs 数据库 (Database)。
- DBMS (PostgreSQL):就像是 Excel 软件本身。
- Database:就像是 Excel 打开的一个个
.xlsx文件。 安装一次 PostgreSQL 软件,可以创建无数个独立的数据库文件供不同的项目使用。
在数据库的"连接信息"里,你看到了两个主机名。老师傅告诉你,这决定了你怎么填 .env 里的 DATABASE_URL:
容器网络
在 Docker 环境中配置连接字符串时,容易搞混 localhost 和容器名。老师傅强调,理解容器网络的关键是:localhost = 当前环境自己,容器名 = 同一 Docker 网络的邻居,127.0.0.1 = 主机的 localhost。
- 场景一:Node 项目通过 1Panel "运行环境" 启动(推荐) 此时你的项目运行在 Docker 容器里,数据库也在 Docker 容器里。它们互为邻居。 你应该填写 Docker 容器名(例如
postgresql或1panel-postgres-x),而不是localhost。这就好比在局域网里喊邻居的名字。 - 场景二:在服务器终端手动调试 如果你 SSH 进服务器,在命令行里运行脚本。此时你是站在服务器主机上(Host)去访问容器。 你应该填写 **
127.0.0.1或者localhost**。因为数据库容器的端口映射到了主机的 localhost 上。填错连接字符串会导致连接失败,而这个错误很难排查,因为配置看起来没问题。
端口映射
老师傅告诉你,可以直接通过面板的运行环境功能快速部署 Node.js 项目。 你发现这上面的填空题——选择 node 版本、构建命令、环境变量等——竟然跟之前在 Vercel 上做的一模一样。 唯一的区别是:服务器需要先从 GitHub 拉取代码,然后你要配置端口映射并允许端口外部访问。
你之前很疑惑,为什么你的服务器只有一个公网 IP,却可以同时运行好几个都在内部监听 3000 端口的项目? 原来,Docker 为每个容器提供了隔离的网络环境。
- 你的应用 A 在容器里监听 3000。
- 你的应用 B 在容器里监听 3000。 它们互不冲突。
当你部署时,通过端口映射技术:
- 把服务器的 3001 端口 -> 映射到 应用 A 的 3000。
- 把服务器的 3002 端口 -> 映射到 应用 B 的 3000。
这样,外部用户访问 IP:3001 和 IP:3002 时,流量会被准确地转发给对应的容器。这就解决了端口冲突的问题,让一台服务器能同时跑多个应用。
你通过 http://IP:端口 成功访问到了服务器上的应用,但在面板绑定域名后却打不开。 原来是没有做 DNS 解析。你熟练地去域名服务商那里添加了一条 A 记录,指向服务器的公网 IP。
访问成功了,但浏览器显示一个巨大的"不安全"红色标志。
SSL 证书
老师傅告诉你需要申请 SSL 证书。于是你在面板的网站-证书设置里,一键申请了免费证书,并开启了 HTTPS。 看着地址栏的小绿锁,你终于完成了一次真正的全栈独立部署。
SRE 入门意识
看着服务器上稳定运行的应用,老师傅说:"现在你已经是半个运维工程师了。"
他向你介绍了 SRE(Site Reliability Engineering,站点可靠性工程) 的理念:用软件工程的思维解决运维问题。
传统运维靠人手熬夜修故障,SRE靠自动化系统保持稳定。你现在已经掌握了基础:
- 监控:通过日志和统计工具了解系统状态
- 自动化:通过Docker一键部署、通过Git一键回滚
- 容灾:通过备份和恢复策略保护数据
老师傅说:"SRE不是大厂的专利,而是每个产品都应该有的意识。你的产品哪怕只有一个用户,也应该可靠。"
这让你意识到,技术不仅是创造,更是守护。部署上线不是结束,而是长期责任的开始。
日志
部署完成几天后,有朋友告诉你页面打不开了。你赶紧自己访问,发现一切正常。你开始怀疑是不是朋友的问题,或者网络不稳定。
老师傅告诉你,不要猜,要看日志。
日志是程序运行时自动记录的流水账。它记录了什么时间发生了什么,有没有报错,用户做了什么操作。就像飞机的黑匣子,出了事故可以调出来看看发生了什么。
在哪里看
如果你用的是无服务器部署平台,它们会提供网页版的日志查看界面。每次部署、每次用户请求、每次报错,都会被记录下来。你可以按时间筛选,按关键词搜索,很快就能找到问题所在。
如果你用的是自己的服务器,可以通过面板查看实时日志。日志会持续滚动,显示最新的运行状态。
看什么
新手看到日志可能一头雾水,全是密密麻麻的文字。老师傅告诉你,其实你只需要关注几个关键词:
第一个是错误这个词。日志里如果出现这个词,后面通常跟着具体的报错信息,告诉你哪里出了问题。
第二个是警告。虽然不是错误,但意味着有些地方可能有问题,建议你检查一下。
第三个是你自己写的日志。在开发时,你可以在关键位置加上一些说明,比如"用户开始注册了"、"数据库连接成功了"。这样出问题时,你能知道程序执行到了哪一步。
常见问题模式
老师傅总结了一些常见的日志模式:
如果看到"找不到模块",说明有些依赖包没装好,需要重新安装。
如果看到"连接被拒绝",通常是数据库连接失败,可能地址错了,或者数据库没启动。
如果看到"超时",说明某个操作太慢了,可能是网络问题,也可能是代码逻辑有问题。
遇到这些,你不需要自己硬着头皮分析,把日志里的关键信息复制下来,让 AI 帮你诊断。
日志不会永远保留。平台通常会保留几天到一个月,之后会自动删除。所以如果遇到了重要问题,记得及时把日志内容保存下来。而且,日志里可能包含敏感信息,你在分析日志时要小心,不要把这些内容截屏发到公开的地方。
本章小节
1. **13.1 VPS 概念 (./01-VPS概念.md)** 🟢
理解 VPS、云服务器、虚拟机的概念和区别,学会如何选择合适的服务器配置。
2. **13.2 服务器购买与配置 (./02-服务器购买与配置.md)** 🔴
如何购买和初始化配置云服务器,包括选择配置、安全组配置和系统优化。
3. **13.3 SSH 连接配置 (./03-SSH连接配置.md)** 🔴
掌握 SSH 远程连接服务器的各种方式,包括密钥认证、配置文件和高级技巧。
4. **13.4 1Panel 面板安装 (./04-1Panel面板安装.md)** 🟡
安装并使用 1Panel 可视化服务器管理面板,降低运维门槛,提高效率。
5. **13.5 Docker 容器详解 (./05-Docker容器详解.md)** 🟡
理解 Docker 容器的概念和基本使用,掌握镜像、容器、仓库和 Docker Compose。
6. **13.6 Docker 容器网络 (./06-Docker容器网络.md)** 🔴 **[核心小节]**
深入理解 Docker 容器网络原理和配置。掌握 localhost、容器名、端口映射的核心概念,理解容器间通信和网络隔离机制。
7. **13.7 安全组配置 (./07-安全组配置.md)** 🔴
理解并配置云服务器安全组,保护服务器安全。这是云服务器的第一道防线。
8. **13.8 自建数据库 (./08-自建数据库.md)** 🟡
使用 Docker 和 1Panel 自建 PostgreSQL 数据库,理解 DBMS 与 Database 的区别。
9. **13.9 SSL 证书配置实战 (./09-SSL证书配置实战.md)** 🟡
在服务器上配置 SSL 证书,启用 HTTPS。包括 Let's Encrypt 免费证书的申请和自动续期。
10. **13.10 端口映射实战 (./10-端口映射实战.md)** 🔴
理解并配置 Docker 端口映射,实现多应用部署。掌握如何在一台服务器上同时运行多个应用。