正在加载文章…
从准备服务器、SSH 连接,到发布静态网站、绑定域名和 HTTPS,再安排更新、回退与备份。
把本地的网站, 放到线上运行。
以 GreenCloudVPS 为服务器示例,用静态页面走通 SSH、网站发布、域名与 HTTPS,再说明已有应用如何接入。
打开服务商官网先用一个静态页面走通上线流程,再接入自己的项目。 GreenCloudVPS 在本文中提供 Linux 服务器,Caddy 负责对外提供网站和 HTTPS; 相同思路也适用于其他有公网地址的 Linux VPS。
这里按官方资料整理命令和配置,没有把示例部署到新的 GreenCloud 实例。 下文面向一台尚未承载其他网站的 Ubuntu / Debian 服务器; 如果已经使用 Nginx、Nginx Proxy Manager 或其他入口,沿用已有入口添加站点,避免让多个服务争用 80 / 443。
选择资源前,先确认项目需要静态托管还是常驻应用,是否包含数据库,以及访问者主要在哪个地区。 内存要考虑构建时的额外占用; 配置小的服务器可以在本机或 CI 构建,再上传产物。 本文不提供套餐价格、线路排名或实测性能结论。
| 准备项 | 操作前确认 |
|---|---|
| 系统 | 使用仍受支持、与项目依赖兼容的 Ubuntu / Debian 版本 |
| 公网地址 | 控制面板中的 IPv4;有 IPv6 不代表网站已能通过 IPv6 访问 |
| 连接方式 | SSH 用户、端口、密钥或初始密码,以及服务商控制台入口 |
| 域名 | 可编辑 DNS;后面使用 example.com 作为占位名称 |
| 权限 | 下文系统配置需要 root 或具备 sudo 权限的账号 |
GreenCloud 的实例管理入口和操作可参见官方 KVM VPS 管理说明。 不要在已有数据的实例上为了跟随教程重装系统; 重装会影响原有文件与服务。
在自己的电脑上连接。 替换地址、用户名与端口; 203.0.113.10 是文档示例地址,不能直接使用。
ssh -p 22 root@203.0.113.10首次连接时核对主机指纹; 可通过服务商控制台运行 ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub 查看对应指纹。 控制面板分配的用户名不一定是 root,应以实际信息为准。
进入服务器后确认系统和当前监听:
cat /etc/os-release
free -h
df -h
sudo ss -lntp若 80 / 443 已被占用,先确认已有服务用途。 不要直接停止不认识的进程。 使用 SSH 密钥、保留可用的控制台恢复入口; 调整 SSH 或防火墙前,先确保新连接能成功。
网站需要对外放行 TCP 80 和 443,SSH 端口也要保留。 服务商侧过滤规则和系统防火墙都可能影响访问。 若你已经选择使用 UFW,可以先查看状态,再按实际 SSH 端口添加规则:
sudo ufw status
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp上面不自动启用 UFW; 自定义 SSH 端口必须替换 22。 已有防火墙时按现有规则管理,不要同时套用多套配置。
在服务器准备独立目录,先写入一个最小测试页:
sudo install -d -m 755 /srv/www/example
printf '%s\n' '<!doctype html><html lang="zh-CN"><meta charset="utf-8"><title>网站已上线</title><h1>网站已上线</h1></html>' | sudo tee /srv/www/example/index.html > /dev/null
sudo chmod 644 /srv/www/example/index.html要换成自己的静态网站,在本机先上传到登录用户有权限写入的临时目录,例如:
scp -P 22 -r ./dist root@203.0.113.10:/tmp/example-site首次发布时,在服务器把上传的静态产物复制到站点目录,并设置读取权限:
sudo cp -R /tmp/example-site/. /srv/www/example/
sudo find /srv/www/example -type d -exec chmod 755 {} \;
sudo find /srv/www/example -type f -exec chmod 644 {} \;这里假设本机构建目录是 dist,实际可能是 out 等; 只能把可公开的静态产物放入网站根目录,不上传 .env、私钥或数据库。 更新已有网站时使用后文的版本目录方式,避免新旧文件混杂。
按 Caddy 官方安装文档安装适用于 Debian / Ubuntu 的稳定软件包。 官方仓库安装步骤如下,需在服务器执行:
sudo apt update
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl gnupg
curl -fsSL https://dl.cloudsmith.io/public/caddy/stable/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -fsSL https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
sudo chmod o+r /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install -y caddy先按域名注册与解析教程把 example.com 指向 VPS。 这里只配置主域名; 若还需要 www,需同时添加它的解析,并把它加入 Caddy 的站点名称。
在服务器用编辑器修改 /etc/caddy/Caddyfile。 下面是新服务器的静态站点示例,已有配置时先备份,再添加自己的站点块:
example.com {
root * /srv/www/example
file_server
}保存后校验配置,成功后才重载:
sudo caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile
sudo systemctl reload caddy
sudo systemctl status caddy --no-pagerDNS 指向正确、80 / 443 可达且 Caddy 能写入持久化数据目录时,它可以为公共域名自动申请和续期证书,并处理 HTTP 到 HTTPS 的跳转。 条件和限制见 Caddy 自动 HTTPS 文档。
在自己电脑上验证:
curl -I http://example.com
curl -I https://example.comHTTP 应跳转到 HTTPS,HTTPS 应返回预期网站的响应。 再打开浏览器检查页面、样式、图片和链接。 命令成功不等于所有页面交互均已验证。
Node.js、Python 等服务端应用需要先按各自项目说明安装依赖、配置环境变量,并用 systemd 或既有进程管理方式保持运行。 Caddy 只提供访问入口,不会替你安装或启动应用。
假设应用已经以独立服务运行在本机 127.0.0.1:3000,先在服务器验证:
curl -I http://127.0.0.1:3000确认应用正常后,把前面的静态站点块替换为下面的反向代理配置; 不要同时为同一个域名保留两个互相冲突的站点块:
example.com {
reverse_proxy 127.0.0.1:3000
}同样先校验、再重载,并从公网验证。 代理地址与端口按应用实际监听值填写; 应用只供本机代理访问时,无需额外把 3000 端口开放到公网。 配置语义参见官方反向代理说明。
| 环节 | 推荐做法 | 验证标准 |
|---|---|---|
| 更新静态网站 | 上传到新的版本目录,确认文件齐全,再修改 Caddy 的 root 并校验、重载 | 新页面和资源均可访问 |
| 更新动态应用 | 保留旧构建和运行配置,按项目发布流程切换并检查应用服务 | 本机应用和公网入口都正常 |
| 回退 | 静态站切回旧目录;动态应用恢复旧版本及兼容配置 | 页面、接口与关键操作恢复 |
| 备份 | 独立保存配置、用户上传和数据库,数据库使用适合它的一致性备份方式 | 在独立位置实际恢复并检查数据 |
代码仓库不能代替用户数据备份; 同一块盘上的旧版本也不能应对整机损坏。 数据库迁移需要单独确认兼容性,切回代码并不保证数据库也能回退。 备份工作流可参考备份流程。
| 现象 | 先检查 |
|---|---|
| SSH 连接失败 | 实例状态、地址、SSH 用户和端口,必要时使用服务商控制台 |
| 域名指向错误 | 当前 DNS 提供商及 A / AAAA / CNAME |
| 网站连接超时 | 系统和服务商侧防火墙、80 / 443 监听情况 |
| 证书申请失败 | DNS、IPv6、端口可达性,以及 Caddy 日志 |
| 静态文件返回 403 / 404 | root 目录、index.html、目录遍历与文件读取权限 |
| 反向代理返回 502 | 应用进程、监听端口、本机 curl 结果 |
在服务器查看入口服务近期日志:
sudo journalctl -u caddy -n 80 --no-pager分享日志前隐藏令牌、私人地址与请求参数。 不要为了绕过证书错误而关闭校验; 先定位 DNS、证书和服务配置。
改为 VPS 网站部署教程
迁入教程与指南,补充 SSH、静态网站发布、Caddy 与 HTTPS、应用代理、更新回退和排错。
整理服务器服务导览
介绍资源选择、应用部署与维护的基本关系。
资料核对日期:2026-11-01。 本文命令为文档示例,未在新购实例上从零实测; 不涉及本站生产服务器的凭据或实际部署配置。