Ubuntu24云端编程环境一键搭建指南
【摘要】 概述本文档描述如何在 Ubuntu 主机上部署 code-server(即“网页版 VS Code”),并通过 autossh 将服务反向隧道到跳板机、使用 Nginx 反向代理域名访问、以及使用 certbot 配置 HTTPS。适合在多设备间共享同一开发环境、并解决个人主机动态公网 IP 的访问问题。本文要点:使用 code-server 提供浏览器可访问的开发环境使用 autossh...
概述
本文档描述如何在 Ubuntu 主机上部署 code-server(即“网页版 VS Code”),并通过 autossh 将服务反向隧道到跳板机、使用 Nginx 反向代理域名访问、以及使用 certbot 配置 HTTPS。适合在多设备间共享同一开发环境、并解决个人主机动态公网 IP 的访问问题。
本文要点:
- 使用 code-server 提供浏览器可访问的开发环境
- 使用 autossh 建立反向隧道到跳板机,避免暴露个人主机公网地址
- 在跳板机上用 Nginx 反向代理到域名
- 用 certbot 配置有效的 TLS/HTTPS
- 提供必要的安全提示与故障排查方法
先决条件
- 目标主机:运行 Ubuntu(本文以 Ubuntu 为例)
- 跳板机:具有固定公网 IP 或已配置域名,可做反向代理
- 域名:已在 DNS 中解析到跳板机(A 或 CNAME 记录)
- 本地与跳板机之间可做 SSH 连接(可通过密钥认证)
- 具有 sudo 权限的用户
一、部署 code-server(目标主机)
建议:将 code-server 绑定到 localhost 或内部端口,再通过跳板机/Nginx 暴露到公网,避免直接把 code-server 绑定到 0.0.0.0(除非有额外防护)。
- 安装 code-server(官方脚本)
curl -fsSL https://code-server.dev/install.sh | sh
- 打开并编辑配置文件(路径因版本可能不同,常见为 ~/.config/code-server/config.yaml)
nano /home/$USER/.config/code-server/config.yaml
- 建议的 config.yaml 关键项(示例)
- 如果通过跳板机和 Nginx 暴露,建议 bind 到 localhost 并使用内部端口(例如 127.0.0.1:8080)
- 新版 code-server 常用 auth 字段
示例:
bind-addr: 127.0.0.1:8080
auth: password
password: "请使用强密码或从环境变量/secret 管理"
cert: false
安全提示:
- 更安全的做法是使用反向代理的 TLS(Nginx + certbot),并在 code-server 中禁用直接证书管理(cert: false)。
- 如需更高安全性,可考虑配合 OAuth、OIDC 或组织内反向代理认证。
- 启动并管理 systemd 服务(脚本通常已创建 service)
sudo systemctl daemon-reload
sudo systemctl start code-server@${USER}
sudo systemctl enable code-server@${USER}
sudo systemctl status code-server@${USER}
验证(在目标主机上):
addr=$(grep -E '^\s*bind-addr' /home/$USER/.config/code-server/config.yaml | cut -d ':' -f 2- | tr -d ' ')
curl -i http://${addr}
# 如果绑定到 localhost,请用 localhost 替代或先确认端口监听
ss -tlnp | grep 8080
二、使用 autossh 建立反向隧道(目标主机 -> 跳板机)
目标:在目标主机上运行 autossh,将 code-server 的本地端口反向映射到跳板机的某个端口(跳板机上监听该端口,供 Nginx 转发到域名)。
- 安装 autossh(目标主机)
sudo apt update
sudo apt install -y autossh
- 配置 SSH 密钥(目标主机生成并把公钥拷到跳板机)
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_code_server
ssh-copy-id -i ~/.ssh/id_rsa_code_server.pub user@jumphost.example.com
# 测试无密码登录
ssh -i ~/.ssh/id_rsa_code_server user@jumphost.example.com
- 在目标主机创建 systemd 服务文件 /etc/systemd/system/autossh-code-server.service(示例)
[Unit]
Description=autossh reverse tunnel for code-server
After=network-online.target
Wants=network-online.target
[Service]
User=your_local_user
# 如果使用特定私钥,确保权限正确
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -M 0 -N -T \
-i /home/your_local_user/.ssh/id_rsa_code_server \
-o "ServerAliveInterval=30" -o "ServerAliveCountMax=3" \
-R 127.0.0.1:12345:127.0.0.1:8080 user@jumphost.example.com
Restart=always
RestartSec=5
KillMode=process
[Install]
WantedBy=multi-user.target
说明:
- 把 12345 换成跳板机上要映射的端口(跳板机需保证该端口可用)
- 如果需要远程任何地址可访问(非仅 localhost),在 -R 中去掉 127.0.0.1 前缀,但这会扩大暴露面,慎用。
- 启动并启用服务
sudo systemctl daemon-reload
sudo systemctl start autossh-code-server
sudo systemctl enable autossh-code-server
sudo systemctl status autossh-code-server
- 跳板机注意事项
- 在跳板机上确保所用端口在防火墙/云安全组中已放行(TCP)。
- 若跳板机使用 OpenSSH 的 GatewayPorts 设置,可能需要在 /etc/ssh/sshd_config 中配置 GatewayPorts yes(重启 sshd)。
三、跳板机:Nginx 反向代理配置
在跳板机上安装 Nginx,并将跳板机上由 autossh 映射出的端口反向代理到你的域名,提供 websocket 支持与 TLS 协议终端。
- 安装 Nginx
sudo apt update
sudo apt install -y nginx
- 放行防火墙端口(示例使用 ufw)
sudo ufw allow 'Nginx Full' # 放行 80 和 443
sudo ufw reload
- 创建 Nginx 配置文件,例如 /etc/nginx/sites-available/code-server.conf
示例配置(把 domain.example 和 12345 替换为真实值):
server {
listen 80;
server_name domain.example.com;
# 可选:强制 HTTPS(如果希望自动跳转到 HTTPS,可把下行取消注释)
# return 301 https://$host$request_uri;
location / {
proxy_pass http://127.0.0.1:12345/;
# websocket & headers
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 关闭缓冲以改善 websocket 实时性
proxy_buffering off;
}
}
- 启用站点并测试 Nginx 配置
sudo ln -s /etc/nginx/sites-available/code-server.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
- 测试(在跳板机上)
curl -i http://domain.example.com/
# 或直接请求映射端口
curl -i http://127.0.0.1:12345/
四、在跳板机上配置 HTTPS(certbot)
使用 certbot 的 nginx 插件自动为 Nginx 站点获取与安装证书。
- 安装 certbot 与插件
sudo apt update
sudo apt install -y certbot python3-certbot-nginx
- 运行 certbot(交互式,会自动修改 Nginx 配置并重载)
sudo certbot --nginx -d domain.example.com
- 自动续期(certbot 会添加系统 timer,亦可手动测试)
sudo certbot renew --dry-run
- 验证 HTTPS
curl -I https://domain.example.com/
安全提示:
- 确保 DNS 指向正确并且 80/443 已被放行,certbot 才能完成域名验证。
- 确保 Nginx 配置没有开放不必要的代理路径。
五、安全建议与最佳实践
- 永远使用密钥登录 SSH,禁用密码登录(/etc/ssh/sshd_config)。
- 把 code-server 绑定到 localhost,只通过受控的跳板机和 TLS 暴露服务。
- 在跳板机上限制映射端口的访问来源(防火墙规则),如仅允许来自特定 IP 段访问管理端口。
- 为 code-server 使用强密码或集成 SSO/OAuth。
- 定期更新系统与相关组件(code-server、nginx、certbot、autossh)。
- 监控日志(/var/log/nginx、journalctl -u autossh-code-server、systemctl status code-server@${USER})。
六、常见故障排查
- 无法通过域名访问:
- 检查 DNS 是否已生效(dig 或 nslookup)。
- 检查跳板机 Nginx 是否运行(sudo systemctl status nginx)。
- 检查 autossh 隧道是否建立(在跳板机 ss -tlnp | grep 12345)。
- code-server 页面空白或认证失败:
- 确认 code-server 正在目标主机上监听正确端口(ss -tlnp)。
- 查看 code-server 日志:journalctl -u code-server@${USER} -f
- certbot 验证失败:
- 确保 80 端口可访问(临时关闭防火墙或允许来自 Let’s Encrypt 的访问),并确认域名解析到跳板机。
七、示例整体流程(简洁步骤)
- 在目标机安装并配置 code-server(bind 到 127.0.0.1:8080)。
- 在目标机生成 SSH 密钥并将公钥上送跳板机。
- 在目标机用 autossh 建立 -R 隧道到跳板机端口 12345,并把其设为 systemd 服务。
- 在跳板机安装 Nginx,配置反向代理 domain.example -> 127.0.0.1:12345。
- 在跳板机用 certbot 为 domain.example 申请证书并启用 HTTPS。
- 验证并关注日志、定期更新与备份。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)