1.
准备越南云服务器与环境选择
在越南选供应商(VNG Cloud、FPT、Viettel或区域节点的AWS/GCP)。建议Ubuntu 20.04或22.04,2-4 CPU、4GB内存、公网IP。准备SSH密钥对(ssh-keygen),在控制台放入公钥,记录登录用户名(通常是 ubuntu 或 root)。
2.
初始化与安全配置
SSH登录后执行:sudo apt update && sudo apt upgrade -y;添加非root用户:adduser deploy && usermod -aG sudo deploy;设置防火墙:sudo ufw allow OpenSSH; sudo ufw allow 80,443; sudo ufw enable。禁用密码登录:编辑 /etc/ssh/sshd_config,PermitRootLogin no,PasswordAuthentication no,重启 ssh。
3.
安装Docker与docker-compose
按照官方步骤:sudo apt install -y ca-certificates curl gnupg lsb-release;curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg;sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io -y;启动并加入开机:sudo systemctl enable --now docker。安装 Compose 插件:sudo apt install -y docker-compose-plugin 或使用 docker compose。
4.
容器化应用(Dockerfile 与 本地构建)
示例(Node.js):创建 Dockerfile:FROM node:16-alpine; WORKDIR /app; COPY package*.json ./; RUN npm ci; COPY . .; RUN npm run build; CMD ["node","dist/index.js"]。本地构建并测试:docker build -t myapp:latest .; docker run -p 3000:3000 myapp:latest。确认健康后准备镜像推送。
5.
推镜像到镜像仓库
可选 Docker Hub、GitLab Container Registry 或自建 Harbor。以 Docker Hub 为例:docker login; docker tag myapp:latest youruser/myapp:v1.0; docker push youruser/myapp:v1.0。在越南地区,若网络慢,可选择就近私有注册表或使用镜像加速器。
6.
在服务器上用 docker-compose 部署
示例 docker-compose.yml 包含 app、nginx、数据库:定义镜像、环境变量、端口、卷。部署流程:在服务器 pull 镜像 docker pull youruser/myapp:v1.0;在目录放置 docker-compose.yml,执行 sudo docker compose up -d。检查:sudo docker compose ps;查看日志:sudo docker compose logs -f app。
7.
用 GitHub Actions 实现CI/CD(构建->推镜像->远程部署)
在仓库添加 .github/workflows/ci.yml,关键步骤:checkout、docker/login-action 登录 Docker、docker/build-push-action 构建并推送、通过 appleboy/ssh-action 远程 SSH 执行部署脚本(docker pull && docker compose up -d)。在仓库 Secrets 放入 DOCKER_USERNAME/DOCKER_PASSWORD、DEPLOY_HOST、DEPLOY_USER、DEPLOY_SSH_KEY。
8.
示例 GitHub Actions 工作流片段
核心步骤示例:- name: Build and push uses docker/build-push-action@v4 with credentials; - name: Deploy uses appleboy/ssh-action@master with host: ${{ secrets.DEPLOY_HOST }},key: ${{ secrets.DEPLOY_SSH_KEY }},script: ["cd /opt/myapp","docker pull youruser/myapp:${{ github.sha }}","docker compose up -d"]. 这样每次推送自动构建并远端更新容器。
9.
使用 k3s / Kubernetes 的替代方案
若要编排,服务器集群可安装 k3s(轻量k8s):curl -sfL https://get.k3s.io | sh -。在本地生成 Deployment/Service/Ingress YAML,并在CI中使用 kubectl(将 kubeconfig 作为 Secret)执行 kubectl apply -f。推荐使用镜像标签和 rolling update 策略以实现零停机。
10.
运维、安全与监控要点
启用 HTTPS:使用 nginx + certbot 获取 Let’s Encrypt 证书(sudo apt install certbot python3-certbot-nginx;sudo certbot --nginx)。安装 fail2ban、设置 UFW 限制。日志用 ELK/Promtail+Loki,性能用 Prometheus+Grafana 监控容器资源。定期更新镜像、备份数据库。
11.
问:越南云服务器选择对部署有什么影响?
答:区域和提供商影响网络带宽、延迟与本地合规;就近节点可降低延迟,选供应商时看可用镜像仓库接入、快照/备份、流量费用与支持 SLA。
12.
问:我能在单台越南云服务器上运行 k3s + CI 吗?
答:可以用于测试和小规模生产。单节点 k3s 简单部署但缺少高可用,CI/CD(GitHub Actions/GitLab CI)可通过 SSH 或 Kubernetes API 部署到该节点,注意资源与备份。
13.
问:部署失败如何快速回滚?
答:用 docker-compose:保留旧镜像标签,部署前先 docker pull 旧标签并 docker compose up -d 指定旧镜像;Kubernetes 可用 kubectl rollout undo deployment/your-deploy --namespace=prod。CI 中保留版本化标签和自动回滚脚本最佳。
来源:如何在越南 云服务器上部署容器化应用与CI CD流水线