1.
准备与选型(机房与镜像)
- 选择香港或邻近机房(低延迟):常见供应商有阿里云香港、腾讯云香港、UCloud、Vultr(HK 节点)或专业机房托管。
- 规格建议:4 vCPU / 8GB 内存 起步(根据游戏并发增长),SSD、带宽按峰值估计(TCP/UDP)。
- 系统镜像:推荐 Ubuntu 22.04 LTS 或 Debian 12,稳定且社区支持好。
2.
基础系统配置与安全硬化
- 更新系统并安装必要工具:sudo apt update && sudo apt upgrade -y;安装 curl, git, jq, apt-transport-https 等。
- 设置时区、NTP:sudo timedatectl set-timezone Asia/Hong_Kong && sudo apt install -y chrony。
- 用户与权限:创建非 root 用户并加入 docker 组(后面安装 Docker):sudo adduser gameadmin && sudo usermod -aG sudo,docker gameadmin。
3.
安装 Docker 与 Docker Compose
- 安装 Docker(官方脚本):curl -fsSL https://get.docker.com | sh。
- 安装 Docker Compose v2:sudo apt install -y docker-compose-plugin 或手动下载 compose v1 二进制并放 /usr/local/bin/docker-compose。
- 验证:docker run --rm hello-world;docker compose version。
4.
示例:为 Minecraft 搭建容器化镜像
- 创建目录:mkdir -p ~/minecraft && cd ~/minecraft。
- Dockerfile(示例):
FROM openjdk:17-jdk-slim
WORKDIR /opt/minecraft
RUN useradd -m mcuser
USER mcuser
VOLUME ["/data"]
EXPOSE 25565/tcp
COPY start.sh /opt/minecraft/start.sh
CMD ["/opt/minecraft/start.sh"]
- start.sh 脚本包含 java -Xmx4G -jar server.jar nogui,存档挂载到 /data。
5.
docker-compose 实战(快速部署)
- docker-compose.yml 示例:
version: '3.8'
services:
mc:
build: .
container_name: mc-server
network_mode: "host" # 推荐 UDP / TCP 性能要求高的游戏使用 host
volumes:
- ./data:/data
environment:
EULA: "TRUE"
restart: unless-stopped
- 启动:docker compose up -d --build;查看日志:docker logs -f mc-server。
6.
网络、端口与防火墙配置
- 香港机房往往需要打开防火墙端口(控制面板)和系统防火墙。常见命令:sudo ufw allow 25565/tcp;sudo ufw allow 27015/udp(CS/Source)。
- 对 UDP 强烈建议使用 host 网络或 macvlan,避免端口映射导致丢包或 NAT 性能问题。
7.
系统内核与性能调整
- TCP 参数优化(/etc/sysctl.d/99-game.conf):
net.core.somaxconn=1024
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_fin_timeout=15
net.core.rmem_max=16777216
net.core.wmem_max=16777216
- 应用生效:sudo sysctl --system。
- ulimit 设置(/etc/security/limits.conf):gameuser soft nofile 65536。
8.
使用 k3s / Kubernetes 做容器编排
- 轻量 k8s(k3s)安装:curl -sfL https://get.k3s.io | sh -,worker 按需加入。
- 示例 Deployment(Minecraft):
apiVersion: apps/v1
kind: Deployment
metadata: {name: mc-dep}
spec:
replicas: 1
template:
spec:
containers:
- name: mc
image: yourregistry/mc:latest
ports: [{containerPort:25565}]
volumeMounts: [{name: data, mountPath: /data}]
volumes: [{name: data, persistentVolumeClaim: {claimName: mc-pvc}}]
- 对于 UDP 强依赖的游戏,可使用 hostNetwork: true 或 DaemonSet。
9.
持久化存储与备份策略
- 使用 PVC + 本地 PV 或网络存储(NFS、Ceph)。定期备份 world 文件或配置:rsync 或 tar 并上传到对象存储(MinIO / S3)。
- 自动化备份脚本(cron):每天压缩并上传,保留周期与版本控制。
10.
CI/CD:自动构建镜像并发布
- 使用 GitHub Actions / GitLab CI:在代码推送时构建镜像并推到私有仓库(Harbor / Docker Hub)。
- 示例 GitHub Actions 步骤:
- name: Build and push
uses: docker/build-push-action@v3
with:
push: true
tags: yourrepo/mc:latest
- 部署阶段使用 kubectl apply 或 ssh 执行 docker compose pull && docker compose up -d。
11.
监控与日志(Prometheus / Grafana / Loki)
- 部署 node-exporter、cAdvisor、Prometheus 抓取指标,Grafana 看板展示 TPS、延迟、CPU/RAM。
- 日志收集:fluentd/filebeat -> Loki/ELK,保留玩家行为日志与异常日志,便于排查。
12.
自动扩缩容与高可用(HA)
- 在 k8s 下启用 metrics-server 并设置 HPA(基于 CPU 或自定义指标)。
- 多节点与负载均衡:对状态不敏感的游戏可以做多副本和 LB;有状态游戏请考虑分片(如 Minecraft 分服)或用 Proxy(BungeeCord)。
13.
安全与运维最佳实践
- 镜像最小化、禁用不必要的端口、使用非 root 运行容器、限制容器资源(limits)、开启 seccomp 与 read-only rootfs(如可能)。
- 定期更新镜像与宿主机补丁,做好备份与回滚策略(保留旧镜像)。
14.
常见问题排查清单
- 无法连通:检查机房防火墙、宿主机 ufw/iptables、容器网络模式。
- 性能下降:查看 CPU/IO/网络带宽瓶颈、检查 TCP 参数和磁盘 IOPS。
- 自动化失败:检查 CI 日志、镜像权限、kubeconfig 或 SSH 密钥。
15.
问:在香港服务器上运行 UDP 游戏,是否一定要用 host 网络?
- 回答:不一定“必须”,但强烈建议对高实时性、对等连接要求高的 UDP 游戏使用 hostNetwork 或宿主机端口直通(macvlan/NAT 性能差异会导致丢包/延迟)。如果使用 NAT 模式,请充分测试并优化内核网络参数与 UDP 缓冲区。
16.
问:如何实现零停机自动化部署(滚动更新/回滚)?
- 回答:在 k8s 中使用 Deployment 与 RollingUpdate 策略配合 readinessProbe 保证准备好后再切换流量;使用 liveness/readiness 检查避免流量引导到未就绪实例。CI/CD 在发布前先构建并推送镜像,发布时先在灰度或小流量环境验证,失败时用 kubectl rollout undo 回滚。
17.
问:我没有 k8s 经验,想快速上线小型服务器,推荐什么方案?
- 回答:以 Docker + docker-compose 为首选,快速、可理解、易于调试。结合 systemd 的 docker-compose@service(或写一个简单的 systemd unit)保证重启;随后逐步将镜像与部署流程接入 GitHub Actions,实现按 git push 自动构建与远程部署,待规模增大再迁移到 k3s/k8s。
来源:香港服务器怎么搭建游戏 使用容器与自动化部署的最佳实践