Skip to main content
← Back to articles
devops

راهنمای جامع CI/CD و Docker برای توسعه‌دهندگان | rgdesign.ir

November 3, 2025

یاد بگیرید CI/CD چیست، چرا اهمیت دارد، چگونه GitHub Actions و Docker فرآیند استقرار را خودکار می‌کنند، و چطور می‌توانید کد خود را به‌صورت خودکار از محیط توسعه تا سرور VPS مستقر کنید.

راهنمای جامع CI/CD و Docker برای توسعه‌دهندگان

زمان مطالعه تقریبی: ۱۵ دقیقه · منتشر شده در آبان ۱۴۰۴

اگر هنوز پروژه‌هایتان را با scp به سرور می‌فرستید و به‌صورت دستی nginx و pm2 را راه‌اندازی می‌کنید، وقت آن است که وارد دنیای مدرن DevOps شوید. در این مقاله، با مفاهیم CI/CD، نقش GitHub Actions و قدرت Docker آشنا می‌شوید تا بتوانید فرآیند استقرار را به‌صورت خودکار، سریع و بدون دردسر انجام دهید.

فهرست مطالب

  1. CI/CD چیست و چرا اهمیت دارد؟
  2. Pipeline یا خط استقرار چیست؟
  3. نقش GitHub Actions در خودکارسازی
  4. Docker چیست و چرا باید از آن استفاده کنیم؟
  5. نمونه واقعی از CI/CD با GitHub Actions
  6. ادغام Docker با CI/CD
  7. مقایسه روش سنتی و مدرن
  8. جمع‌بندی و مسیر بعدی

۱) 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
      
با Docker، دیگر نیازی به تنظیم دستی محیط‌ها و نسخه‌ها در سرور ندارید. هر چیزی درون کانتینر تعریف می‌شود.

۵) مثال واقعی از 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).

هشدار: هر Pipeline را روی شاخه‌ی خاصی مثل main یا release فعال کنید تا از استقرار تصادفی جلوگیری شود.

۷) مقایسه روش سنتی و مدرن

ویژگیروش سنتی (scp, دستی)CI/CD مدرن (GitHub + Docker)
استقراردستی و زمان‌برکاملاً خودکار
یکسان بودن محیطمتفاوت در هر سروریکسان در همه جا
Rollbackدستیبازگشت با یک تگ ساده
امنیتوابسته به SSH و کاربرمدیریت‌شده با Secrets
مقیاس‌پذیریضعیفساده با Docker Compose یا Kubernetes

۸) جمع‌بندی و مسیر بعدی

CI/CD و Docker دو ستون اصلی توسعه مدرن‌اند. با این ابزارها:

  • هر commit سالم به‌صورت خودکار تست و مستقر می‌شود.
  • وابستگی‌ها و تنظیمات همیشه یکسان می‌مانند.
  • خطای انسانی به حداقل می‌رسد.
قدم بعدی شما می‌تواند یادگیری Docker Compose و ابزارهای orchestration مثل Kubernetes باشد.

کلیدواژه‌ها: CI/CD, DevOps, Docker, GitHub Actions, استقرار خودکار

تگ‌ها: برنامه‌نویسی, بک‌اند, سرور, لینوکس, توسعه نرم‌افزار

توضیح متا: مقاله‌ای کامل و کاربردی درباره CI/CD و Docker برای توسعه‌دهندگان و تیم‌های نرم‌افزاری مدرن.

© 2025 rgdesign.ir · نوشته شده توسط تیم فنی · “پیشرفت با هر commit.”

Topics
#devops#docker#rgdesign#github#actions#vps

Share this article

Help others discover it across your favourite communities.

Comments

Join the discussion. We keep comments private to your device until moderation tooling ships.

0 comments