欢迎光临

VPS变身云端开发工作站:code-server + Docker + Gitea 完整搭建指南

为什么需要云端开发工作站?

对于程序员来说,拥有一台随时可用的开发环境至关重要。传统的本地开发模式存在几个明显的痛点:电脑关机后调试到一半的服务中断了、换电脑需要重新配置一套完整的环境、家里和办公室的代码不同步。而VPS作为云端开发工作站,恰好能完美解决这些问题。

本文将手把手教你在一台2核4GB的VPS上搭建一套完整的云端开发环境,包含VS Code Server(code-server)、Docker容器化开发环境、Git版本管理以及自动化部署流水线。无论你用的是Windows、macOS还是Linux,只要能SSH连接,就能即刻进入一个性能稳定、配置完整的开发工作站。

云端开发工作站概念图 - 程序员在多种设备上编码

相比于GitHub Codespaces等付费服务,自己搭建的VPS开发工作站唯一的开销就是服务器月费,而且完全掌控数据、配置和网络,不受第三方平台限制。对于个人开发者、自由职业者或小团队来说,这是性价比极高的方案。

基础环境配置:系统初始化

本文以Ubuntu 22.04 LTS为例。购买VPS后,第一步是SSH登录并完成基础配置。

更新系统并安装基础工具


1
2
3
4
5
6
7
8
9
10
# SSH登录
ssh root@你的VPS_IP

# 更新系统
apt update && apt upgrade -y

# 安装基础工具包
apt install -y curl wget git vim htop net-tools build-essential \\
    software-properties-common apt-transport-https ca-certificates \\
    gnupg lsb-release unzip zsh

创建普通用户并配置SSH密钥

为了安全,不建议直接使用root用户进行日常开发。创建一个专用开发用户:


1
2
3
4
5
6
7
8
9
# 创建用户
adduser dev
usermod -aG sudo dev

# 配置SSH密钥认证
su - dev
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "你的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

接着在本地机器的SSH配置文件中添加快捷连接:


1
2
3
4
5
6
7
# ~/.ssh/config
Host dev-vps
    HostName 你的VPS_IP
    User dev
    Port 22
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60

配置完成后,使用

1
ssh dev-vps

即可一键连接。

安装VS Code Server(code-server)

code-server是微软官方出品的开源项目,它让你在浏览器中运行完整的VS Code。配合VPS使用,你可以在iPad、手机甚至任何有浏览器的设备上编写代码,且运行环境始终保持在服务器端。

一键安装code-server


1
2
3
4
5
# 使用官方安装脚本
curl -fsSL https://code-server.dev/install.sh | sh

# 安装完成后,查看版本确认
code-server --version

配置code-server

配置文件位于

1
~/.config/code-server/config.yaml


1
2
3
4
bind-addr: 0.0.0.0:8080
auth: password
password: your-strong-password-here
cert: false

安全提示:不要将密码设得太简单。更安全的方式是配合Nginx反向代理并启用HTTPS,下文会详细介绍。

配置systemd服务实现开机自启


1
2
3
4
5
6
# 启用并启动code-server服务
systemctl --user enable code-server
systemctl --user start code-server

# 确认运行状态
systemctl --user status code-server

如果遇到

1
systemctl --user

无法在SSH登录后使用的问题,执行以下命令:


1
sudo loginctl enable-linger dev

此时,

1
http://你的VPS_IP:8080

即可访问code-server,输入密码后就能看到熟悉的VS Code界面了。

Docker容器化开发环境

直接在VPS上安装各种语言的运行时和依赖会很快把系统搞乱。使用Docker可以将每个项目的开发环境隔离在独立的容器中,互不干扰。

Docker容器化开发环境示意图

安装Docker和Docker Compose


1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

# 将dev用户加入docker组(避免每次sudo)
sudo usermod -aG docker $USER

# 退出并重新登录后安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker --version
docker-compose --version

为每个项目创建独立的开发容器

以下是一个通用的Docker Compose开发环境模板:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# docker-compose.dev.yml
version: '3.8'

services:
  dev:
    image: mcr.microsoft.com/devcontainers/base:ubuntu
    container_name: my-project-dev
    working_dir: /workspace
    volumes:
      - .:/workspace:cached
      - ~/.ssh:/home/vscode/.ssh:ro
      - ~/.gitconfig:/home/vscode/.gitconfig:ro
      - dev-home:/home/vscode
    ports:
      - "3000:3000"  # 前端开发服务器
      - "8080:8080"  # 后端API
      - "5432:5432"  # 数据库(如需要)
    environment:
      - NODE_ENV=development
      - PYTHONUNBUFFERED=1
    command: sleep infinity

volumes:
  dev-home:

启动开发环境只需要一条命令:


1
2
docker-compose -f docker-compose.dev.yml up -d
docker exec -it my-project-dev bash

在容器内,你可以安装项目特定的语言版本、工具链和依赖,而不会影响宿主机或其他项目。

Nginx反向代理与HTTPS配置

直接通过IP和端口访问code-server既不安全也不优雅。使用Nginx反向代理配合Let’s Encrypt免费SSL证书,配置一个HTTPS域名访问。这里假设你已经有一个域名

1
code.yourdomain.com

指向了VPS的IP。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 安装Nginx
sudo apt install -y nginx

# 创建Nginx配置
sudo tee /etc/nginx/sites-available/code-server <<EOF
server {
    listen 80;
    server_name code.yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host \$host;
        proxy_set_header Upgrade \$http_upgrade;
        proxy_set_header Connection upgrade;
        proxy_set_header Accept-Encoding gzip;
        proxy_set_header X-Real-IP \$remote_addr;
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto \$scheme;
       
        # WebSocket支持(code-server需要)
        proxy_http_version 1.1;
        proxy_read_timeout 86400;
    }
}
EOF

# 启用站点
sudo ln -s /etc/nginx/sites-available/code-server /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

接下来安装Certbot获取免费SSL证书:


1
2
3
4
5
6
7
8
# 安装Certbot
sudo apt install -y certbot python3-certbot-nginx

# 获取并自动配置SSL证书
sudo certbot --nginx -d code.yourdomain.com

# 证书自动续期测试
sudo certbot renew --dry-run

完成后,你就可以通过

1
https://code.yourdomain.com

安全地访问云端VS Code了。

搭建Git私有仓库与自动化部署

有了云开发环境,下一步就是建立高效的代码管理流程。你可以使用Gitea搭建轻量级Git服务,并结合Git Hooks实现自动化部署。

使用Docker部署Gitea


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 创建目录
mkdir -p ~/gitea && cd ~/gitea

# docker-compose.yml
cat <<EOF > docker-compose.yml
version: "3"

services:
  server:
    image: gitea/gitea:latest
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=sqlite3
    volumes:
      - ./data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "22:22"
    restart: always
EOF

# 启动Gitea
docker-compose up -d

访问

1
http://你的VPS_IP:3000

完成Gitea的初始配置。首次访问会引导你设置管理员账号,之后就能创建仓库、管理团队了。

配置Git Hook实现自动部署

以Node.js项目为例,在Gitea仓库中配置Webhook或Gitea Actions来实现推送代码后自动部署到生产环境。这里我们使用更直接的Post-Receive Hook:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash
# .git/hooks/post-receive(在VPS的生产代码目录下)

TARGET="/var/www/myapp"
BRANCH="main"

while read oldrev newrev refname
do
    if [ "$refname" = "refs/heads/$BRANCH" ]; then
        echo "=== 检测到 $BRANCH 分支有推送,开始自动部署 ==="
       
        # 切换到目标目录并拉取最新代码
        cd $TARGET || exit
        unset GIT_DIR
        git pull origin $BRANCH
       
        # 安装依赖(根据项目类型选择)
        docker-compose -f docker-compose.prod.yml build
        docker-compose -f docker-compose.prod.yml up -d
       
        # 运行数据库迁移
        docker exec app-container npx prisma migrate deploy
       
        echo "=== 部署完成 ==="
    fi
done

在开发流程中,你在code-server中写完代码,推送(push)到Gitea仓库,自动触发生产环境部署。整个过程无需登录服务器手动操作。

数据备份与安全性加固

云端开发最重要的就是数据安全。以下是必须做的几件事:

配置自动备份

使用cron定时将重要数据备份到对象存储(如Backblaze B2、阿里云OSS):


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
# ~/backup.sh - 每日备份脚本

BACKUP_DIR="/tmp/backups"
DATE=$(date +%Y%m%d)
mkdir -p $BACKUP_DIR

# 备份code-server配置和数据
tar czf $BACKUP_DIR/code-server-$DATE.tar.gz ~/.local/share/code-server ~/.config/code-server

# 备份Docker volumes
docker run --rm -v myapp_dev-home:/data -v $BACKUP_DIR:/backup \\
    alpine tar czf /backup/dev-home-$DATE.tar.gz -C /data .

# 备份Gitea数据
tar czf $BACKUP_DIR/gitea-$DATE.tar.gz ~/gitea/data

# 推送到远程存储(以rclone为例)
rclone copy $BACKUP_DIR remote:bucket/dev-backups/

# 保留最近30天本地备份,删除旧的
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete

echo "备份完成:$DATE"

在crontab中配置每天凌晨执行:


1
0 3 * * * /home/dev/backup.sh >> /home/dev/backup.log 2>&1

安全加固清单

项目 操作 重要性
SSH配置 禁用密码登录,仅使用密钥认证;更改默认端口 极高
防火墙 使用UFW只开放必要端口(22, 80, 443) 极高
Fail2ban 安装fail2ban防止暴力破解
自动更新 启用unattended-upgrades自动安装安全补丁
Docker安全 避免使用–privileged模式运行容器
日志监控 配置logwatch或自定义监控脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 快速安全配置
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

# 安装fail2ban
sudo apt install -y fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

# 配置SSH禁用密码登录
sudo sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart sshd

使用场景与效率提升技巧

搭建好云端开发工作站后,以下场景会让你感受到它的价值:

  • 跨设备无缝切换:在公司用Windows工作,回家打开iPad通过浏览器继续编码,环境和进度完全一致
  • 团队协作:团队成员共享一台高性能VPS,通过code-server的协作功能实时结对编程
  • CI/CD测试:在本地写代码,推送后VPS自动构建、测试、部署,整个过程不到30秒
  • 学习新语言:不需要污染本地环境,在独立的Docker容器中折腾任何新框架或语言
  • 高带宽下载/上传:VPS通常有更好的网络环境,适合处理大文件或抓取数据

一些提升效率的小技巧:

  • 在code-server中安装Remote – SSH扩展,直接编辑VPS上的文件
  • 使用tmux在终端中管理多个会话,防止SSH断开导致任务中断
  • 配置VS Code设置同步(Settings Sync),让本地和云端VS Code的配置保持一致
  • 使用
    1
    mosh

    替代SSH,在高延迟或不稳定网络下体验更好

总结

通过本文的步骤,你将一台普通的VPS变成了一套功能齐全的云端开发工作站。核心组件包括:code-server提供浏览器IDE、Docker提供隔离的开发环境、Gitea管理代码仓库、Nginx+Let’s Encrypt确保安全访问。整套方案适用于个人开发者和中小团队,成本仅为一台VPS的月费,远低于商业SaaS方案。

搭建完成后,建议定期回顾和优化:检查是否有未使用的Docker镜像占用磁盘、更新各个组件的版本、分析日志发现潜在问题。好的开发环境需要持续维护,但带来的效率提升是巨大的。

你有在VPS上搭建开发环境的经验吗?或者有其他好的技巧?欢迎在评论区分享你的心得!

【本站文章皆为原创,未经允许不得转载】:汤不热吧 » VPS变身云端开发工作站:code-server + Docker + Gitea 完整搭建指南
分享到: 更多 (0)