在 VPS 上部署你的第一个后端网站:使用 Caddy 实现自动 HTTPS、可扩展部署

使用 Caddy 在 VPS 上部署你的第一个后端服务(Golang为例)

文章目录

新手刚拿到一台 Ubuntu 系统的 VPS,完成系统初始化后(参考:新服务器初始化教程),通常会面临下一个问题:

“我开发好的 Web 程序,怎么部署到服务器上?怎么用自己的域名访问它?还能自动支持 HTTPS 吗?”

这篇文章将以实际案例为例,教你如何使用 Caddy 来部署你的 Go Web 后端服务。支持自动 HTTPS、安全、简单、可拓展,让你快速上线项目,未来部署更多服务也不成问题。

对于已经完成服务器初始化的新手开发者来说,下一步通常就是上线你的第一个项目。你可能已经完成了自己的 Golang Web 服务编译,现在你需要的是一个 安全、稳定、自动续签 HTTPS 证书、支持多站点扩展 的生产环境部署方案。

本教程将以 Caddy + Systemd + Golang 服务 为核心,教你如何构建生产可用的网站服务环境。

👉 点击查看《建站系列教程》文章目录

在《建站系列教程》系列文章中,我们将详细介绍如何从0到1搭建自己的网站。以下是该系列文章的全部内容:

  1. 如何在 Dynadot 上购买域名(完整图文教程)
  2. 如何正确选择服务器节点?国内外VPS/云服务器推荐与选择指南:独立开发建站必读
  3. 国外云服务器购买教程:如何在CLAWCLOUD上购买VPS?
  4. 新手必看:VPS 新服务器到手后该做什么?完整初始化配置教程
  5. 国外域名如何解析到服务器?Dynadot DNS 设置+Cloudflare 加速全攻略

前提准备

  • 一台已经初始化的 VPS,系统为 Ubuntu 22.04+
  • 一个已备案(或国外使用可免备案)的域名
  • 已完成 DNS 设置,将 example.comwww.example.com 指向服务器公网 IP
  • 你已经编译好一个 Go 的 Web 后端程序,生成了可执行文件(比如 myapp

为什么选择 Caddy?

Caddy 是一个现代、自动化、默认支持 HTTPS 的 Web 服务器。相比 Nginx 它更加简洁智能,适合新手快速部署,同时又具备强大功能。

Caddy 的最大优势就是:

  • 自动获取并续签 HTTPS 证书
  • 配置简单(一个文件搞定所有反代规则)
  • 默认支持 HTTP/2 / TLS 1.3
  • 内置静态文件服务器、反向代理、负载均衡等功能
  • 支持热更新,不重启服务即可更改配置

为什么要使用 HTTPS?Caddy 自动开启 HTTPS 的 4 大好处

Caddy 的最大优势就是自动配置 HTTPS,你只写了个域名,它就搞定了证书获取、安装、续签。

那 HTTPS 有什么用?必须得用吗?

答案是:当然必须。

1. 加密数据传输,防止中间人攻击

HTTP 是明文传输的,HTTPS 能有效防止信息被劫持或篡改。

2. 浏览器不会显示“不安全”警告

没启用 HTTPS 的网站会被 Chrome、Firefox 直接打红叉,大大影响用户体验。

3. 提高 SEO 排名

Google 明确表示:HTTPS 是搜索排名的正向因素,启用 HTTPS 更容易被收录和排名靠前。

4. 支持新技术

现代前端功能(如 HTTP/2、Service Worker)很多都强制要求 HTTPS 才能使用。

第一步:安装 Caddy

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy -y

第二步:上传你的 Go 可执行程序

假设你的程序是 myapp,上传到服务器的 /opt/myapp/ 目录:

mkdir -p /opt/myapp/
scp ./myapp user@your-server-ip:/opt/myapp/

第三步:设置 systemd 服务守护你的程序

创建 systemd 启动服务文件:

sudo vim /etc/systemd/system/myapp.service

内容如下:

[Unit]
Description=My Go Web App
After=network.target

[Service]
Type=simple
User=www-data
Group=www-data

WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/myapp

Restart=on-failure
RestartSec=3
LimitNOFILE=4096

Environment=GOTRACEBACK=crash

[Install]
WantedBy=multi-user.target

配置说明:

配置项 含义
User=www-data / Group=www-data 以普通非 root 用户运行程序,提高安全性
Restart=on-failure 程序异常退出(非正常退出码)时自动重启,避免误重启
RestartSec=3 失败重启前等待 3 秒,避免疯狂重启
LimitNOFILE=4096 调高可打开文件句柄数,预防高并发时的资源限制问题
Environment=PORT=8080 设置环境变量,可用于 Go 程序动态读取
GOTRACEBACK=crash 捕捉崩溃日志,有利于诊断问题

延伸阅读:linux systemd 配置项详解

保存并启用服务:

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable --now myapp

检查服务状态:

sudo systemctl status myapp

相关阅读:Linux 后端守护进程方案对比:systemd vs supervisord vs pm2

第四步:配置 Caddy 实现反向代理和 HTTPS

用 Caddy 暴露你的服务,支持 HTTPS + 域名

编辑配置文件:

sudo vim /etc/caddy/Caddyfile

将原有的内容全部替换为以下配置:

# 主站 HTTPS 反向代理
example.com {
    reverse_proxy localhost:8080

    log {
        output file /var/log/caddy/example.access.log
        format json
    }
}

# 将 www 重定向到主域名
www.example.com {
    redir https://example.com{uri} permanent
}

🔒 如果你还没换域名记得改 example.com 成你自己的域名!

重启 Caddy:

sudo systemctl restart caddy

Caddy 会自动获取并启用 HTTPS 证书。

了解更多关于 Caddy 的配置,请查看文章:Caddy 配置详解

第五步:打开浏览器测试访问

在浏览器中访问:

https://example.com

可以看到你自己的 Go 后端页面或返回的数据,且已经自动启用 HTTPS 加密。

第六步:更新你的 Go 程序(部署更新)

每次你更新了本地程序后,只需上传替换原文件并重启服务:

# 上传新版本
scp ./myapp user@your-server-ip:/opt/myapp/
# 重启服务(不中断已有请求)
sudo systemctl restart myapp

若更新频繁,推荐使用 CI/CD 自动部署,或写一个简单的 Shell 脚本做版本切换。

附加建议:扩展你的 Caddy 为多服务门户

你可以在 Caddyfile 中添加多个站点或子域名配置,例如:

api.example.com {
    reverse_proxy localhost:8081
}

admin.example.com {
    reverse_proxy localhost:8082
}

你也可以配置静态页面站点(如你的个人主页):

example.com {
    root * /var/www/personal
    file_server
}

总结

部署 Go 项目不必复杂。用好 Caddy,配置清晰、HTTPS 自动、易于维护和拓展。

如果你还在用 nginx 手动配证书,是时候换成 Caddy 了。

如果你觉得本文有用,欢迎收藏本站或查看其他相关教程:

如需完整示例或遇到问题欢迎留言!


也可以看看