- چگونه یک اپلیکیشن زنده را از AWS EC2 به DigitalOcean منتقل کنیم؟ — نمای کلی گامها
- 1. مرحله اول — ارزیابی و آمادهسازی
- 2. طراحی معماری هدف در DigitalOcean
- 3. انتقال فایل و اشیاء (S3 → Spaces / EBS → Volume)
- 4. انتقال پایگاه داده (RDS → Managed DB یا self-hosted)
- 5. استقرار اپلیکیشن — گزینهها و دستورات
- 6. شبکه، امنیت و Cutover بدون Downtime
- 7. نکات عملیاتی و اسکریپتها
- 8. پس از مهاجرت — تست و بهینهسازی
- 9. نکات هزینه و مدیریت منابع
- 10. مشکلات رایج و راهحلها
- 11. نمونه کانفیگ Nginx برای Load Balancer و upstream Droplets
- 12. نکات امنیتی و رعایت best practices
- نتیجهگیری
- سؤالات متداول
چگونه یک اپلیکیشن زنده را از AWS EC2 به DigitalOcean منتقل کنیم؟ — نمای کلی گامها
در این راهنما گامبهگام و فنی توضیح میدهیم چگونه How to Migrate a Live Application from AWS EC2 to DigitalOcean را با کمترین downtime و حفظ ملاحظات امنیتی و شبکه منتقل کنید.
- ارزیابی اولیه و فهرستبرداری منابع (EC2، EBS، RDS، S3، ELB، Security Groups، IAM)
- طراحی معماری هدف در DigitalOcean (Droplet، VPC، Volumes، Spaces، Load Balancer، Managed DB)
- انتقال دادهها (فایلها، S3 → Spaces، DB → Managed DB یا replica)
- استقرار اپلیکیشن (ریاستور، کانتینریشدن، یا استفاده از App Platform/Kubernetes)
- Cutover با کمترین downtime (replication، floating IP، DNS TTL)
- پاکسازی AWS و بررسی نهایی، و اقدامات امنیتی و مانیتورینگ
1. مرحله اول — ارزیابی و آمادهسازی
فهرستبرداری منابع
فهرست کامل تمام منابع مرتبط را تهیه کنید: EC2 instances، EBS volumes و snapshots، security groups، load balancers، IAM roles/policies و دیگر سرویسهای وابسته مانند S3، RDS، ElastiCache و CloudFront.
تعیین نوع اپ الزامی است: آیا اپ stateful (مثلاً دارای DB)، stateless (مثلاً frontend)، کانتینری یا نیاز به GPU/رندرینگ دارد؟
تعیین نیازهای عملکردی و لوکیشن
پارامترهایی مانند تأخیر شبکه، نیاز به GPU، بیشینه IOPS و پهنای باند خروجی را مشخص کنید.
اگر نیاز به پینگ پایین برای ترید یا گیم دارید، لوکیشن نزدیک به کاربران نهایی را انتخاب کنید. DigitalOcean نیز مناطق مختلفی دارد—بررسی کنید کدام دیتاسنتر DO نزدیکتر است.
2. طراحی معماری هدف در DigitalOcean
اجزا پیشنهادی
پیشنهاد معماری شامل موارد زیر است:
- Droplet برای اپلیکیشنها و سرویسها (VPS)
- Managed Databases (Postgres / MySQL) برای حذف پیچیدگی replication و backups
- Spaces (S3-compatible) برای انتقال اشیاء از S3
- Block Storage Volumes برای دیتاهای بزرگ و persistence
- Load Balancer و Floating IP برای cutover بدون downtime
- VPC برای ایزوله کردن شبکه و firewall برای کنترل دسترسی
- در صورت نیاز به GPU از سرورهای GPU یا سرورهای محاسباتی اختصاصی استفاده کنید
انتخاب سایز و نوع Droplet
برای اپهای CPU-bound از CPU-optimized droplets و برای اپهای حافظهمحور از dropletهای با RAM بالا یا سرویسهای Managed استفاده کنید.
برای ترید یا گیم، VPS مخصوص با پینگ پایین و منابع شبکه اختصاصی در لوکیشن مناسب پیشنهاد میشود.
3. انتقال فایل و اشیاء (S3 → Spaces / EBS → Volume)
انتقال S3 → Spaces
برای انتقال اشیاء از S3 به Spaces از ابزارهای S3-compatible مثل rclone یا s3cmd استفاده کنید.
rclone config
rclone sync s3:my-bucket spaces:my-space --progressهمچنین میتوانید با aws cli export کنید و سپس با doctl یا s3cmd آپلود نمایید.
انتقال فایلهای سرور (EBS → Droplet)
برای حجمهای بزرگ و محتواهای استاتیک از rsync برای همگامسازی استفاده کنید:
rsync -azP --delete -e "ssh -i /path/to/key.pem" ubuntu@ec2-ip:/var/www/ /home/ubuntu/www/در صورت نیاز به snapshot، ابتدا snapshot از EBS بگیرید، محتویات را فشرده کنید و سپس به Droplet منتقل کنید.
4. انتقال پایگاه داده (RDS → Managed DB یا self-hosted)
گزینهها براساس نوع DB
MySQL/MariaDB:
برای downtime کم، replica در DigitalOcean راهاندازی کنید و سپس switchover انجام دهید. اگر از RDS استفاده میکنید:
- در DO یک Managed Database ایجاد کنید.
- از RDS یک replica خارجی برقرار کنید یا از 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: از logical replication (pg_dump/pg_restore) یا streaming replication برای نزدیک به صفر قطعی پیشنهاد میشود.
pg_dump -Fc -h aws-rds-host -U user dbname > db.dump
pg_restore -d dbname -h do-host -U user db.dumpراهکار بدون downtime (مثال MySQL)
روند کلی:
- در AWS binary logging را فعال کنید.
- در DigitalOcean یک سرور MySQL replica ایجاد کنید و آن را به عنوان slave به master در AWS متصل کنید.
- پس از همگامسازی، اپلیکیشن را به replica هدایت کرده و آن را promote کنید.
5. استقرار اپلیکیشن — گزینهها و دستورات
روش 1 — کانتینریشدن و رجیستری
کانتینریشدن با Docker/Kubernetes بهترین روش برای مهاجرت بدون وابستگی به AMI است. ایمیج را در CI بسازید و به Docker Hub یا GitLab Registry پوش کنید.
در DO میتوانید از Managed Kubernetes یا droplets با docker-compose استفاده کنید.
docker-compose pull
docker-compose up -d --remove-orphansروش 2 — ریاستور سنتی
در روش سنتی پکیجها را نصب، کد را با rsync منتقل و سرویس را با systemd یا process manager مثل PM2 اجرا کنید.
npm install --production
pm2 start app.js --name myappاستفاده از App Platform و Managed Services
DigitalOcean App Platform میتواند CI/CD، autoscaling و SSL خودکار را فراهم کند و برای اپهای وب مناسب است اگر نمیخواهید سرور پایینسطح مدیریت کنید.
6. شبکه، امنیت و Cutover بدون Downtime
Floating IP و Load Balancer
برای cutover بدون downtime میتوانید Load Balancer در DO راهاندازی کرده و از Floating IP یا تغییر target group استفاده کنید.
استراتژی blue-green معمولاً شامل این مراحل است:
- راهاندازی محیط green در DO و انتشار کامل اپ
- Health checks
- تعویض Floating IP یا تغییر Target Group در Load Balancer
کاهش TTL DNS قبل از cutover را فراموش نکنید (مثلاً TTL=300s یا کمتر) تا propagation سریعتر انجام شود.
فایروال و امنیت
به حساب DO خود SSH key اضافه کنید و ورود پسوردی را غیرفعال نمایید:
Edit /etc/ssh/sshd_config: PermitRootLogin no, PasswordAuthentication noاز UFW برای مدیریت دسترسی پایه استفاده کنید:
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enableاز cloud firewall در DO استفاده و قواعد مشابه security groups در AWS را پیادهسازی کنید. نصب fail2ban و استفاده از SSL با Certbot یا certificate مدیریتشده توسط Load Balancer نیز توصیه میشود.
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 برای sync incremental
rsync -azP --delete -e "ssh -i ~/.ssh/do_key" /var/www/ user@do-ip:/var/www/8. پس از مهاجرت — تست و بهینهسازی
بررسی عملکرد و مانیتورینگ
بازرسی لاگها، latency و throughput با ابزارهایی مثل Prometheus/Grafana یا New Relic انجام شود. تست بار با ابزارهایی مثل ab یا siege و بررسی IOPS و پهنای باند شبکه ضروری است.
backup و Disaster Recovery
Snapshots و automated backups برای Droplets و Managed Databases فعال کنید و پلان restore را آزمایش نمایید.
9. نکات هزینه و مدیریت منابع
مقایسه هزینهها بین AWS (EC2 + EBS + RDS + S3) و ترکیب DO (Droplets + Volumes + Managed DB + Spaces) را انجام دهید.
اگر اپ شما نیاز به شبکه گسترده دارد، استفاده از CDN و BGP/Anycast میتواند تأخیر جهانی را کاهش دهد.
10. مشکلات رایج و راهحلها
- اختلاف نسخهی پایگاه داده → تست compatibility و انجام migration در staging، استفاده از logical dumps.
- فایلهای بزرگ و انتقال کند → فشردهسازی tar+gzip، resume با rsync و استفاده از Spaces برای تحویل محتوا.
- SSL و ارورهای CORS پس از cutover → بررسی certificate chain و تنظیمات Nginx/Load Balancer.
11. نمونه کانفیگ Nginx برای Load Balancer و upstream Droplets
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. نکات امنیتی و رعایت best practices
- استفاده از SSH Keys و فعالسازی 2FA در حسابهای cloud
- محدود کردن دسترسی IAM و کلیدهای API
- اجرای vulnerability scans و patch management
- فعالسازی DDoS protection و WAF در صورت نیاز
نتیجهگیری
مهاجرت یک اپلیکیشن زنده از AWS EC2 به DigitalOcean چالشبرانگیز است اما با برنامهریزی صحیح—شامل inventory دقیق، replication برای DB، و استفاده از Floating IP یا Load Balancer برای cutover—میتوان downtime را حداقل کرد و از مزایای Droplet، Spaces و Managed Databases بهره برد.
تیم آماده است تا در طراحی و پیادهسازی زیرساخت، بهویژه برای سناریوهای نیازمند GPU، VPS مخصوص ترید یا گیم، CDN و راهکارهای شبکهای پیچیده کمک کند.









