راهنمای جامع CI/CD و Docker برای توسعهدهندگان
اگر هنوز پروژههایتان را با scp به سرور میفرستید و بهصورت دستی nginx و pm2 را راهاندازی میکنید، وقت آن است که وارد دنیای مدرن DevOps شوید. در این مقاله، با مفاهیم CI/CD، نقش GitHub Actions و قدرت Docker آشنا میشوید تا بتوانید فرآیند استقرار را بهصورت خودکار، سریع و بدون دردسر انجام دهید.
فهرست مطالب
- CI/CD چیست و چرا اهمیت دارد؟
- Pipeline یا خط استقرار چیست؟
- نقش GitHub Actions در خودکارسازی
- Docker چیست و چرا باید از آن استفاده کنیم؟
- نمونه واقعی از CI/CD با GitHub Actions
- ادغام Docker با CI/CD
- مقایسه روش سنتی و مدرن
- جمعبندی و مسیر بعدی
۱) CI/CD چیست و چرا اهمیت دارد؟
CI/CD مخفف Continuous Integration و Continuous Deployment است. این دو مفهوم به زبان ساده یعنی: «کد جدیدی که نوشتید، باید بهصورت خودکار ساخته، تست و در صورت موفقیت، به سرور مستقر شود.»
- CI (ادغام مداوم): بهمحض ارسال کد به مخزن Git، فرایند ساخت و تست خودکار اجرا میشود.
- CD (استقرار مداوم): وقتی تستها موفق بودند، نسخه جدید به محیط اصلی (مثلاً VPS) منتشر میشود.
هدف نهایی CI/CD این است که هر commit سالم، در کوتاهترین زمان ممکن، در سرور تولید (Production) در دسترس باشد.
۲) Pipeline یا خط استقرار چیست؟
Pipeline مجموعهای از مراحل خودکار است که از لحظهی commit تا اجرای نهایی اپلیکیشن شما را طی میکند:
Developer → Push code → CI (Build/Test) → CD (Deploy to Server)
- Build: نصب وابستگیها و آمادهسازی پروژه.
- Test: اجرای تستهای خودکار برای اطمینان از صحت کد.
- Deploy: انتقال نسخهی نهایی به سرور و راهاندازی.
۳) GitHub Actions چیست و چطور کار میکند؟
GitHub Actions یک سرویس CI/CD رایگان از خود گیتهاب است. شما تنها کافی است یک فایل YAML در مسیر .github/workflows/ بسازید تا گیتهاب بداند هنگام هر commit چه کارهایی باید انجام دهد.
name: Deploy Pipeline
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '20'
- run: npm ci
- run: npm run build
- name: Deploy via SSH
uses: appleboy/[email protected]
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USER }}
key: ${{ secrets.VPS_KEY }}
script: |
cd /var/www/project
git pull origin main
npm ci
pm2 restart all
در اینجا تمام اطلاعات حساس مثل IP و کلید خصوصی در بخش Secrets گیتهاب نگهداری میشود. هر بار که به شاخهی main push کنید، استقرار بهصورت خودکار انجام میشود.
۴) Docker چیست و چرا باید از آن استفاده کنیم؟
Docker ابزاری برای containerization است — یعنی بستهبندی کل برنامه شما به همراه وابستگیها، سیستمعامل پایه، و تنظیمات در یک واحد مستقل به نام کانتینر.
- با Docker، برنامه شما در همه جا یکسان اجرا میشود (توسعه، تست، تولید).
- بهجای نصب Node یا Python روی VPS، فقط Docker را اجرا میکنید.
FROM node:20
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
CMD ["npm", "start"]
حالا فقط کافیست بنویسید:
docker build -t myapp .
docker run -p 80:3000 myapp
۵) مثال واقعی از CI/CD با Docker
در این مثال، pipeline شما ابتدا ایمیج Docker را میسازد، سپس آن را به Docker Hub ارسال کرده و در VPS مستقر میکند:
- name: Build Docker image
run: docker build -t myapp:latest .
- name: Push Docker image
run: |
echo "${{ secrets.DOCKER_TOKEN }}" | docker login -u ${{ secrets.DOCKER_USER }} --password-stdin
docker tag myapp:latest mydockeruser/myapp:latest
docker push mydockeruser/myapp:latest
- name: Deploy to VPS
uses: appleboy/[email protected]
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USER }}
key: ${{ secrets.VPS_KEY }}
script: |
docker pull mydockeruser/myapp:latest
docker stop myapp || true
docker rm myapp || true
docker run -d -p 80:3000 --name myapp mydockeruser/myapp:latest
۶) ادغام Docker و GitHub Actions
این ترکیب باعث میشود که هر commit شما منجر به ساخت یک نسخه جدید Docker شود که قابل ردیابی و rollback است. بهجای پکیج فایلها، اکنون تنها با نسخههای Docker سروکار دارید (مثلاً myapp:v1.3.2).
main یا release فعال کنید تا از استقرار تصادفی جلوگیری شود.۷) مقایسه روش سنتی و مدرن
| ویژگی | روش سنتی (scp, دستی) | CI/CD مدرن (GitHub + Docker) |
|---|---|---|
| استقرار | دستی و زمانبر | کاملاً خودکار |
| یکسان بودن محیط | متفاوت در هر سرور | یکسان در همه جا |
| Rollback | دستی | بازگشت با یک تگ ساده |
| امنیت | وابسته به SSH و کاربر | مدیریتشده با Secrets |
| مقیاسپذیری | ضعیف | ساده با Docker Compose یا Kubernetes |
۸) جمعبندی و مسیر بعدی
CI/CD و Docker دو ستون اصلی توسعه مدرناند. با این ابزارها:
- هر commit سالم بهصورت خودکار تست و مستقر میشود.
- وابستگیها و تنظیمات همیشه یکسان میمانند.
- خطای انسانی به حداقل میرسد.
Comments
Join the discussion. We keep comments private to your device until moderation tooling ships.