Docker 部署
偏好容器?服务端有现成的单镜像:
bash
podman pull ghcr.io/yinyue123/16code:latest # docker 同理容器需要宿主机提供两样东西,都要持久化:
| 宿主机路径 | 挂载到 | 用途 |
|---|---|---|
/etc/code.yaml | /etc/code.yaml | 配置文件——见配置文件 |
/var/lib/code | /var/lib/code/data | 全部数据,包括 HTTPS 证书缓存。不持久化的话,每次重建容器都重签证书,很快触发 Let's Encrypt 限流。 |
容器内进程以非 root 用户(uid 10001)运行,两个路径的属主都要给它。
准备
bash
# 1. 配置——从示例开始改(至少改 tlsDomains、cookieSecure)
sudo curl -fsSL -o /etc/code.yaml \
https://raw.githubusercontent.com/yinyue123/16code/main/deploy/server.example.yaml
sudo $EDITOR /etc/code.yaml
# 2. 数据目录 + 容器用户属主
sudo mkdir -p /var/lib/code
sudo chown 10001:10001 /etc/code.yaml /var/lib/code运行
bash
podman run -d --name code-server --network host \
--cap-add NET_BIND_SERVICE \
-v /etc/code.yaml:/etc/code.yaml \
-v /var/lib/code:/var/lib/code/data \
--restart always \
ghcr.io/yinyue123/16code:latest--network host——服务器直接绑定 80/443;对 ACME 验证和 WebSocket 都最省事。--cap-add NET_BIND_SERVICE——允许非 root 进程绑定 1024 以下的端口。改用高端口就不需要。- 配置文件读写挂载(不加
:ro),这样可以在容器里现场编辑:
bash
podman exec -it code-server code-server-setupCtrl+S 保存后服务器原地重载——不用重启容器。
作为 systemd 服务(Podman quadlet)
写入 /etc/containers/systemd/code-server.container,然后 systemctl daemon-reload && systemctl start code-server:
ini
[Unit]
Description=code cloud server
[Container]
Image=ghcr.io/yinyue123/16code:latest
ContainerName=code-server
Network=host
Volume=/etc/code.yaml:/etc/code.yaml
Volume=/var/lib/code:/var/lib/code/data
AddCapability=CAP_NET_BIND_SERVICE
[Service]
Restart=always
[Install]
WantedBy=multi-user.target在已有反向代理后面
如果这台机器上已有 nginx/Caddy/隧道在终结 TLS,就不开自动 HTTPS,把服务器放到环回高端口:/etc/code.yaml 里设 tlsDomains: []、listen: "127.0.0.1:5080",去掉 AddCapability,代理指向 127.0.0.1:5080(必须透传 WebSocket)。
升级
bash
podman pull ghcr.io/yinyue123/16code:latest
podman restart code-server # quadlet 用: systemctl restart code-server配置、数据、历史、证书全在宿主机卷上——升级镜像什么都不会动。