如何将运行中的应用程序从 AWS EC2 迁移到 DigitalOcean?— 步骤概述
在本分步技术指南中,我们将解释如何 如何将运行中的应用程序从 AWS EC2 迁移到 DigitalOcean 传输过程尽量减少停机时间,并兼顾安全性和网络安全性。.
- 资源初步评估和清点(EC2、EBS、RDS、S3、ELB、安全组、IAM)
- 在 DigitalOcean 中设计目标架构(Droplet、VPC、Volumes、Spaces、负载均衡器、托管数据库)
- 数据传输(文件、S3 → Spaces、数据库 → 托管数据库或副本)
- 应用程序部署(恢复、容器化或使用应用平台/Kubernetes)
- 以最短停机时间完成切换(复制、浮动 IP、DNS TTL)
- AWS清理和最终审查,以及安全措施和监控
第一阶段——评估与准备
资源编目
列出所有相关资源的完整清单:EC2 实例、EBS 卷和快照、安全组、负载均衡器、IAM 角色/策略以及其他依赖服务,例如 S3、RDS、ElastiCache 和 CloudFront。.
确定应用程序类型 必填:该应用是有状态的(例如带有数据库)、无状态的(例如前端)、容器化的,还是需要 GPU/渲染的?
确定功能和位置需求
指定网络延迟、GPU 要求、最大 IOPS 和输出带宽等参数。.
如果您需要低延迟进行交易或游戏,请选择靠近最终用户的服务器位置。DigitalOcean 也提供不同的区域——请查看哪个 DO 数据中心离您最近。.
2. 在 DigitalOcean 中设计目标架构
建议的组件
该建筑设计方案包括以下内容:
- 液滴 用于应用程序和服务(VPS)
- 托管数据库 (Postgres / MySQL)消除了复制和备份的复杂性
- 空格 (与 S3 兼容)用于从 S3 传输对象
- 块存储卷 大数据和持久性
- 负载均衡器 和 浮动知识产权 实现无停机切换
- VPC 用于网络隔离和防火墙的访问控制
- 如果需要GPU,请使用GPU服务器或专用计算服务器。
选择液滴尺寸和类型
对于 CPU 密集型应用,使用 CPU 优化型 droplet;对于内存密集型应用,使用高 RAM droplet 或托管服务。.
对于交易或游戏而言,建议使用位于合适位置、具有低延迟和专用网络资源的专用VPS。.
3. 传输文件和对象(S3 → 空间 / EBS → 卷)
S3 → 空间转移
要将对象从 S3 传输到 Spaces,请使用与 S3 兼容的工具,例如 rclone 或者 s3cmd 使用。.
rclone config
rclone sync s3:my-bucket spaces:my-space --progress您也可以使用 aws cli 导出,然后使用 doctl 或 s3cmd 上传。.
服务器文件传输(EBS → Droplet)
对于大量静态内容 rsync 要同步,请使用:
rsync -azP --delete -e "ssh -i /path/to/key.pem" ubuntu@ec2-ip:/var/www/ /home/ubuntu/www/如果需要快照,请先从 EBS 获取快照,压缩内容,然后将其传输到 Droplet。.
4. 数据库迁移(RDS → 托管数据库或自托管数据库)
基于数据库类型的选项
MySQL/MariaDB:
为了最大限度地减少停机时间,请在 DigitalOcean 上设置一个副本,然后执行切换。如果您使用的是 RDS:
- 在 DO 中创建托管数据库。.
- 从 RDS 建立外部副本或使用 mysqldump。.
mysqldump -u user -p --single-transaction --quick --lock-tables=false dbname > dump.sql
mysql -h do-managed-host -u user -p dbname < dump.sqlPostgreSQL: 对于几乎零确定性的情况,建议使用逻辑复制(pg_dump/pg_restore)或流复制。.
pg_dump -Fc -h aws-rds-host -U user dbname > db.dump
pg_restore -d dbname -h do-host -U user db.dump无停机解决方案(MySQL 示例)
一般流程:
- 在 AWS 中启用二进制日志记录。.
- 在 DigitalOcean 上创建一个 MySQL 副本服务器,并将其作为从服务器连接到 AWS 上的主服务器。.
- 同步完成后,将应用程序推送到副本并将其提升。.
5. 应用程序部署 — 选项和命令
方法一——容器化和镜像仓库
使用 Docker/Kubernetes 进行容器化是无需依赖 AMI 即可进行迁移的最佳方式。在 CI 系统中构建镜像,然后推送到 Docker Hub 或 GitLab Registry。.
在 DO 中,您可以使用托管 Kubernetes 或带有 docker-compose 的 droplets。.
docker-compose pull
docker-compose up -d --remove-orphans方法二——传统修复
传统方法是,安装软件包,使用 rsync 传输代码,然后使用 systemd 或 PM2 等进程管理器运行服务。.
npm install --production
pm2 start app.js --name myapp使用应用平台和托管服务
DigitalOcean 应用平台可提供 CI/CD、自动扩展和自动 SSL,如果您不想管理底层服务器,则适合 Web 应用。.
6. 网络、安全和无停机切换
浮动IP和负载均衡器
为了实现无停机切换,您可以在 DigitalOcean 中设置负载均衡器并使用 浮动知识产权 或者换个目标群体。.
战略 蓝绿色 它通常包括以下步骤:
- 在 DO 中建立绿色环境并全面发布应用程序
- 健康检查
- 更改负载均衡器中的浮动 IP 或更改目标组
DNS TTL 缩短 不要忘记预先切换(例如 TTL=300 秒或更短),以加快传播速度。.
防火墙和安全
为您的 DO 帐户添加 SSH 密钥并禁用密码登录:
Edit /etc/ssh/sshd_config: PermitRootLogin no, PasswordAuthentication no使用 UFW 进行基本访问管理:
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable在 DigitalOcean 中使用云防火墙,并实施类似于 AWS 安全组的规则。 失败2禁止 此外,建议使用 Certbot 或由负载均衡器管理的证书进行 SSL 加密。.
7. 操作技巧和脚本
doctl 示例
DO CLI 安装和身份验证:
doctl auth init --access-token <TOKEN>创建 Droplet 的示例:
doctl compute droplet create my-droplet --size s-2vcpu-4gb --image ubuntu-22-04-x64 --region nyc3 --ssh-keys <KEY_ID> --vpc-uuid <VPC_ID> --waitdoctl compute cdn create --origin my-space.nyc3.digitaloceanspaces.com ...使用 rsync 进行增量同步
rsync -azP --delete -e "ssh -i ~/.ssh/do_key" /var/www/ user@do-ip:/var/www/8. 迁移后——测试和优化
绩效考核与监控
使用 Prometheus/Grafana 或 New Relic 等工具检查日志、延迟和吞吐量。使用 ab 或 siege 等工具进行负载测试,并检查 IOPS 和网络带宽至关重要。.
备份和灾难恢复
为 Droplets 和托管数据库启用快照和自动备份,并测试恢复计划。.
9. 成本和资源管理技巧
比较 AWS(EC2 + EBS + RDS + S3)和 DO 组合(Droplets + Volumes + Managed DB + Spaces)的成本。.
如果您的应用需要广泛的网络,使用 CDN 和 BGP/任播可以降低全球延迟。.
10. 常见问题及解决方案
- 数据库版本差异 → 使用逻辑转储在暂存环境中进行兼容性测试和迁移。.
- 大文件和慢传输 → 使用 tar+gzip 压缩,通过 rsync 恢复,并使用 Spaces 来分发内容。.
- 切换后出现 SSL 和 CORS 错误 → 检查证书链和 Nginx/负载均衡器设置。.
11. 负载均衡器和上游 Droplet 的 Nginx 配置示例
upstream app {
server 10.0.0.5:3000;
server 10.0.0.6:3000;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}12. 安全提示和最佳实践遵守情况
- 使用 SSH密钥 和激活 双因素认证 云账户
- 限制 IAM 访问权限和 API 密钥
- 执行漏洞扫描和补丁管理
- 根据需要启用 DDoS 防护和 WAF
结论
将实时应用程序从 AWS EC2 迁移到 DigitalOcean 是一项挑战,但通过适当的规划(包括仔细清点、数据库复制以及使用浮动 IP 或负载均衡器进行切换),您可以最大限度地减少停机时间,并充分利用 Droplets、Spaces 和托管数据库。.
该团队已准备好协助进行基础设施的设计和实施,特别是对于需要 GPU、专用交易或游戏 VPS、CDN 和复杂网络解决方案的场景。.









