⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议
Skip to content

!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 容器名(例如 postgresql1panel-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:3001IP: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 端口映射,实现多应用部署。掌握如何在一台服务器上同时运行多个应用。