--- title: "第十四章:云服务器运维与项目部署" --- # 第十四章:云服务器运维与项目部署 ![img](/images/Advanced/mll08oqx-9a52a9d3a1e83c5d.jpg) ## 序言 小明的网站跑在 Serverless 平台上,域名绑好了,HTTPS 也亮着绿锁,一切顺利。 但他心里一直有个念头——如果平台倒了怎么办?如果想装点平台不支持的东西呢? 老师傅看出了他的心思:"想要完全的控制权,就得有自己的服务器。" ### SSH 小明在云厂商的新用户活动页面挑了一台香港轻量服务器——免备案、即买即用。下单后,他拿到了三样东西:公网 IP、用户名(`root`)和密码。 他打开终端,输入 `ssh root@1.2.3.4`——屏幕上弹出指纹确认,他紧张地输入 yes,然后输入密码。黑底白字的命令提示符出现了:`root@xxx:~#`。 "我进来了!"小明有点兴奋。这台机器没有桌面、没有图标,只有一个闪烁的光标。在第 10 章他已经了解过 SSH 的原理,但真正连上一台远在千里之外的服务器,感觉还是不一样——像是拿到了一间空房子的钥匙,接下来要自己装修。 ### 锁好门窗 老师傅拦住了他:"先别急着装东西,先锁好门窗。裸奔的服务器在互联网上,平均几分钟就会被扫描到。"就像新手机号刚开通就收到骚扰电话——号段是公开的,有人在批量拨打试探。服务器的公网 IP 也一样,上线几分钟就有自动化脚本在挨个试密码。 于是小明跟着老师傅更新了系统、配置了安全组、改了 SSH 端口、装了 Fail2Ban。这些步骤不复杂,但每一步都是必做项。 ### 1Panel 面板 安全加固完成后,老师傅让小明装了 **1Panel**——一个现代化的 Linux 服务器管理面板。小明在浏览器里打开面板地址,看到了一个网页版的控制台:"这比命令行友好多了。" 1Panel 的核心是 Docker。小明一键安装了 Docker,顺手配置了镜像加速——不配加速的话,国内拉镜像能等到天荒地老。 ### Docker 容器 "Docker 是什么?"小明问。 老师傅打了个比方:"集装箱。每个应用——你的网站、数据库、监控工具——都被打包在独立的集装箱里运行,互不干扰,也不会弄脏你的服务器系统。装错了?直接删掉重来。" 小明打开 1Panel 的应用商店,发现里面有数据库、Web 服务器、监控工具……点一下就能安装。"这不就是手机应用商店吗?" "差不多。你在面板里点的每一次'安装',本质上就是在拉取和运行一个 Docker 集装箱。" 这种隔离机制让小明明白了一条铁律:**永远不要直接在服务器上写代码**。服务器是跑代码的生产环境,写代码和调试应该在本地的开发环境完成,通过 Git 同步上去。 ### 安全组 小明兴奋地输入 1Panel 给出的 `http://IP:端口` 访问面板——浏览器转圈圈,直到超时。他以为是面板没装好,但老师傅告诉他:云服务器有**第一道安全门——安全组**。 安全组是云厂商在机房门口设的防火墙。默认只放行 SSH(22 端口),其他端口全锁着。你装了新应用要用新端口,得先去控制台跟"保安"说一声。就像小区门禁——默认不让陌生人进,你搬了新家具,得先跟物业报备让货车通过大门。小明去云厂商控制台手动开放了面板端口,刷新页面——面板出来了。 ### 自建数据库 小明打开 1Panel 的应用商店,一键安装了 PostgreSQL。安装时设置了端口、管理员账户和密码。 装完后,他在面板的"数据库"页面新建了一个具体的数据库 `my_app_db`。老师傅趁机科普了一个常识:**数据库软件(DBMS)和数据库(Database)是两回事**。 - **DBMS(PostgreSQL)**:就像 Excel 软件本身。 - **Database**:就像 Excel 里打开的一个个 `.xlsx` 文件。安装一次 PostgreSQL,可以创建无数个独立的数据库供不同项目使用。 ### 容器网络 小明配 `.env` 里的 `DATABASE_URL` 时,习惯性地填了 `localhost`——连接失败。报错信息是 `Connection refused`,看起来像是数据库没启动,但数据库明明在跑。 老师傅解释:"你在家喊'妈',你妈会应。你在朋友家喊'妈',应的是朋友的妈。容器里的 `localhost` 也一样——每个容器的 `localhost` 都是它自己,不是服务器主机。容器之间要用名字喊。" 三句话总结: - **容器找邻居**:用容器名(如 `postgresql`) - **主机找容器**:用 `localhost` 或 `127.0.0.1` - **外部访问**:用服务器公网 IP + 映射端口 ### 端口映射 小明很疑惑:服务器只有一个公网 IP,怎么同时跑好几个应用? 原来,Docker 为每个容器提供了隔离的网络环境。应用 A 在容器里监听 3000,应用 B 也在容器里监听 3000——互不冲突。通过端口映射,把服务器的 3001 端口转发给应用 A,3002 端口转发给应用 B。外部用户访问 `IP:3001` 和 `IP:3002`,流量就被准确地送到对应的容器。 一栋楼只有一个地址,但有很多房间。服务器只有一个 IP,端口号就是房间号。 ### SSL 证书 小明通过 `http://IP:端口` 成功访问到了应用,但在面板绑定域名后,浏览器显示一个巨大的"不安全"红色标志。你在网上填银行卡号时,会下意识看一眼地址栏有没有小锁——没有锁的网站,用户也会本能地不信任。 老师傅告诉他需要 SSL 证书。小明在面板的证书设置里,一键申请了 Let's Encrypt 免费证书,开启 HTTPS。看着地址栏的小绿锁,他终于完成了一次真正的全栈独立部署。 ### SRE 入门意识 看着服务器上稳定运行的应用,老师傅说:"部署上线只是开始。现在你已经是半个运维工程师了。" 他向小明介绍了 **SRE(Site Reliability Engineering,站点可靠性工程)** 的理念:用软件工程的思维解决运维问题。传统运维靠人手熬夜修故障,SRE 靠自动化系统保持稳定。就像你家从手动浇花升级成自动灌溉系统——不用每天惦记,但要定期检查系统本身有没有问题。小明现在已经掌握了基础: - **监控**:通过日志和统计工具了解系统状态 - **自动化**:通过 Docker 一键部署、通过 Git 一键回滚 - **容灾**:通过备份和恢复策略保护数据 "SRE 不是大厂的专利,而是每个产品都应该有的意识。你的产品哪怕只有一个用户,也应该可靠。" 小明听完,觉得自己不只是在学技术,更是在学一种责任感。以前写完代码扔上去就不管了,现在他开始关心"它还在跑吗?""用户体验怎么样?""数据安全吗?" ### 日志 部署完成几天后,有朋友告诉小明页面打不开了。小明自己访问,一切正常。他开始怀疑是朋友的网络问题。 老师傅说:"不要猜,要看日志。" 日志是程序运行时自动记录的流水账——什么时间发生了什么,有没有报错。就像飞机的黑匣子,出了事故可以调出来看。在 1Panel 里点击容器的"日志"按钮就能看到实时输出;如果用的是 Serverless 平台,平台也有网页版的日志查看界面。 **看什么?** 新手只需要关注三个关键词: - **Error**:错误,后面跟着具体报错信息,告诉你哪里出了问题 - **Warning**:警告,不是错误但值得检查 - **你自己写的日志**:比如"用户开始注册""数据库连接成功",帮你定位程序执行到了哪一步 **常见模式**:看到"找不到模块"——依赖没装好;看到"连接被拒绝"——数据库地址错了或没启动;看到"超时"——网络问题或代码逻辑有问题。遇到这些,把日志关键信息复制下来,让 AI 帮你诊断。日志里可能包含敏感信息(如数据库连接字符串),分析时注意不要把这些内容截屏发到公开的地方。 小明照做了——在日志里搜到一条 `Error: connect ECONNREFUSED 127.0.0.1:5432`,复制给 Claude Code,几秒钟就定位到问题:`DATABASE_URL` 里的主机名应该填容器名,不是 `localhost`。改完,页面恢复了。 技术不仅是创造,更是守护。部署上线不是结束,而是长期责任的开始。 --- ## 本章小节 1. [14.1 VPS 选购指南](./01-vps-selection.md) — 主流云厂商对比、配置选择、机房位置、操作系统选择 2. [14.2 VPS 初始化与安全配置](./02-vps-setup.md) — SSH 连接、安全组设置、1Panel 安装、安全加固 3. [14.3.1 应用商店与 Docker 基础](./03-1-docker-apps.md) — Docker 核心概念、应用商店、容器管理、数据持久化、容器网络 4. [14.3.2 部署 Next.js 应用](./03-2-deploy-nextjs.md) — 运行环境配置、环境变量、构建启动、端口映射 5. [14.3.3 部署静态网站](./03-3-deploy-static.md) — OpenResty 静态站点、文件上传、SPA 路由、缓存策略 6. [14.3.4 部署前后端分离应用](./03-4-deploy-fullstack.md) — 多容器编排、反向代理、环境变量管理、数据备份 7. [14.4 配置域名与证书](./04-domain-ssl.md) — DNS 解析、SSL 证书申请、HTTPS 跳转、证书续期 8. [14.5 其他好玩的应用](./05-cool-apps.md) — Umami 统计、n8n 自动化、Uptime Kuma 监控 --- **上一章**:[第十三章:域名、DNS 与网络接入](../13-domain-dns/index.md) **下一章**:[第十五章:SEO、分享与数据统计](../15-seo-analytics/index.md)