برنامه نویسی

نحوه استفاده از Docker با برنامه های Ruby on Rails.

داکر چیست؟ و چگونه می توان از آن با روبی در برنامه های ریل استفاده کرد؟ و مزایای استفاده از داکر

Docker پلتفرمی برای ساخت، حمل و نقل و اجرای برنامه‌ها در کانتینرها است. کانتینر یک بسته نرم افزاری سبک وزن، مستقل و قابل اجرا است که شامل همه چیزهایی است که برای اجرای یک برنامه لازم است، از جمله کد، زمان اجرا، کتابخانه ها، ابزارهای سیستم و تنظیمات. Docker بسته بندی یک برنامه کاربردی و تمام وابستگی های آن را در یک کانتینر آسان می کند، که سپس می تواند در هر محیطی که از Docker پشتیبانی می کند مستقر شود.

Docker راهی برای بسته بندی و توزیع برنامه شما به عنوان یک کانتینر ارائه می دهد که مدیریت وابستگی ها را آسان تر می کند، محیط های سازگار در سرورهای مختلف را تضمین می کند و استقرار را ساده می کند.

**در اینجا برخی از مزایای استفاده از Docker با برنامه های Ruby on Rails آورده شده است:

محیط های توسعه سازگار: با استفاده از Docker برای ایجاد کانتینری که حاوی تمام وابستگی ها و ابزارهای لازم برای برنامه شما باشد، می توانید اطمینان حاصل کنید که همه توسعه دهندگان در یک محیط کار می کنند. این می تواند به جلوگیری از مشکلات ناشی از تفاوت در سیستم عامل ها یا نرم افزارهای نصب شده کمک کند.

استقرار آسان تر: Docker به شما امکان می دهد برنامه خود و وابستگی های آن را در یک کانتینر بسته بندی کنید، که سپس می تواند در هر سروری که از Docker پشتیبانی می کند مستقر شود. این باعث می شود برنامه خود را بین محیط های توسعه، مرحله بندی و تولید راحت تر منتقل کنید.

مقیاس پذیری بهبود یافته: ظروف Docker را می توان به راحتی تکرار و به صورت افقی مقیاس بندی کرد و به شما این امکان را می دهد تا با چرخاندن کانتینرهای اضافی در صورت نیاز، ترافیک بیشتری را مدیریت کنید. این می تواند به بهبود عملکرد و قابلیت اطمینان برنامه شما کمک کند.

تعمیر و نگهداری ساده: با Docker، می‌توانید برنامه خود و وابستگی‌های آن را از سیستم میزبان جدا کنید، که نگهداری و به‌روزرسانی برنامه‌تان را بدون تأثیر بر سایر برنامه‌های در حال اجرا در همان سرور آسان‌تر می‌کند.

به طور کلی، استفاده از برنامه‌های Docker with Ruby on Rails می‌تواند به ساده‌سازی توسعه، استقرار و نگهداری کمک کند، در حالی که عملکرد و مقیاس‌پذیری برنامه شما را بهبود می‌بخشد.

در اینجا یک مثال گام به گام از نحوه استفاده از Docker با برنامه Ruby on Rails، Sidekiq، Redis و PostgreSQL آورده شده است:

مرحله 1: Docker را نصب کنید
قبل از اینکه بتوانید از Docker استفاده کنید، باید آن را روی سیستم خود نصب کنید. می توانید Docker را از وب سایت رسمی دانلود و نصب کنید.

مرحله 2: یک برنامه جدید Rails ایجاد کنید
با فرض اینکه Ruby را روی سیستم خود نصب کرده اید، می توانید یک برنامه Rails جدید با دستور زیر ایجاد کنید:
$ rails new myapp

مرحله 3: Sidekiq را به برنامه خود اضافه کنید
برای استفاده از Sidekiq با برنامه Rails خود، باید جم sidekiq را به Gemfile خود اضافه کنید و نصب باندل را اجرا کنید. همچنین باید با دستور زیر یک فایل config/sidekiq.yml ایجاد کنید:
$ bundle exec sidekiq --config config/sidekiq.yml

مرحله 4: Redis را به برنامه خود اضافه کنید
برای استفاده از Redis با Sidekiq، باید redis gem را به Gemfile خود اضافه کنید و نصب باندل را اجرا کنید. شما همچنین باید Redis را در خود پیکربندی کنید config/sidekiq.yml فایل.

مرحله 5: PostgreSQL را به برنامه خود اضافه کنید
برای استفاده از PostgreSQL با برنامه Rails خود، باید pg gem را به Gemfile خود اضافه کنید و نصب بسته را اجرا کنید. شما همچنین باید خود را به روز کنید config/database.yml فایل برای استفاده از PostgreSQL.

مرحله 6: یک Dockerfile ایجاد کنید
یک فایل جدید به نام Dockerfile در ریشه دایرکتوری برنامه Rails خود ایجاد کنید. این فایل تصویر Docker را برای برنامه شما تعریف می کند. در اینجا یک نمونه Dockerfile برای یک برنامه Rails با Sidekiq، Redis و PostgreSQL آورده شده است:

# Use an official Ruby runtime as a parent image
FROM ruby:3.0.3

# Set the working directory
WORKDIR /app

# Install dependencies
RUN apt-get update && \
    apt-get install -y \
    build-essential \
    nodejs \
    postgresql-client && \
    rm -rf /var/lib/apt/lists/*

# Install gems
COPY Gemfile Gemfile.lock ./
RUN gem install bundler && \
    bundle install --jobs 4

# Copy the application code
COPY . .

# Expose ports
EXPOSE 3000

# Set the entrypoint command
CMD ["rails", "server", "-b", "0.0.0.0"]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 7: ایجاد یک docker-compose.yml فایل
یک فایل جدید به نام ایجاد کنید docker-compose.yml در ریشه دایرکتوری برنامه Rails شما. این فایل خدمات Docker را برای برنامه شما تعریف می کند. در اینجا یک مثال است docker-compose.yml فایل برای یک برنامه Rails با Sidekiq، Redis و PostgreSQL:

version: "3"
services:
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    ports:
      - "3000:3000"
    depends_on:
      - db
      - redis
  db:
    image: postgres:12
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: myapp_development
  redis:
    image: redis:6.0
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 8: کانتینرهای Docker را بسازید و راه اندازی کنید
برای ساخت و راه اندازی کانتینرهای Docker برای برنامه خود، دستور زیر را در ریشه دایرکتوری برنامه Rails خود اجرا کنید:
$ docker-compose up --build

این تصاویر Docker را ساخته و کانتینرهای برنامه شما، Sidekiq، Redis و PostgreSQL را شروع می کند.

مرحله 9: به برنامه خود دسترسی پیدا کنید
هنگامی که کانتینرهای Docker آماده و اجرا می شوند، باید بتوانید به برنامه Rails خود در مرورگر وب خود در آدرس دسترسی داشته باشید http://localhost:3000. همچنین باید بتوانید به رابط وب Sidekiq در آدرس دسترسی داشته باشیدhttp://localhost:3000/sidekiq.

مرحله 10: ظروف Docker را متوقف کرده و خارج کنید
پس از پایان کار با برنامه خود، می توانید کانتینرهای Docker را با دستور زیر در ریشه دایرکتوری برنامه Rails خود متوقف کرده و حذف کنید:
$ docker-compose stop

این کار باعث توقف و حذف ظروف Docker برای برنامه شما، Sidekiq، Redis و PostgreSQL می شود.

خودشه! اکنون از Docker برای اجرای برنامه Ruby on Rails با Sidekiq، Redis و PostgreSQL استفاده کرده‌اید. با داکر، می توانید به راحتی برنامه خود را در هر محیطی بسته بندی و اجرا کنید، و به آسانی می توانید برنامه خود را در صورت نیاز گسترش دهید و مقیاس دهید.

چگونه با تولید این کار را انجام دهیم؟

در اینجا مثالی از نحوه استقرار برنامه Ruby on Rails در محیط تولید با استفاده از Docker و Docker Compose آورده شده است:

مرحله 1: تصویر Docker خود را بسازید

ابتدا باید تصویر Docker خود را برای برنامه Rails خود بسازید. در ریشه دایرکتوری برنامه Rails خود، دستور زیر را اجرا کنید:
$ docker build -t myapp .

این یک تصویر Docker به نام myapp را بر اساس Dockerfile در فهرست برنامه Rails شما ایجاد می کند.

مرحله 2: تصویر Docker خود را به یک رجیستری فشار دهید

در مرحله بعد، باید تصویر Docker خود را به یک رجیستری فشار دهید تا بتواند در محیط تولید شما مستقر شود. می توانید از یک رجیستری عمومی مانند Docker Hub یا یک رجیستری خصوصی مانند Amazon ECR یا Google Container Registry استفاده کنید.

برای انتقال تصویر Docker خود به Docker Hub، اگر قبلاً حسابی ندارید، ابتدا یک حساب کاربری ایجاد کنید. سپس، تصویر Docker خود را با نام کاربری Docker Hub و نام مخزن تصویر خود تگ کنید:

$ docker tag myapp your-dockerhub-username/myapp:latest

در نهایت، تصویر Docker خود را به Docker Hub فشار دهید:
$ docker push your-dockerhub-username/myapp:latest

مرحله 3: یک فایل تولیدی Docker Compose ایجاد کنید

یک فایل جدید به نام ایجاد کنید docker-compose.prod.yml در ریشه دایرکتوری برنامه Rails شما. این فایل خدمات Docker را برای محیط تولید شما تعریف می کند. در اینجا یک مثال است docker-compose.prod.yml فایل برای یک برنامه Rails با Sidekiq، Redis و PostgreSQL:

version: "3"
services:
  web:
    image: your-dockerhub-username/myapp:latest
    environment:
      RAILS_ENV: production
      DATABASE_URL: "postgres://postgres:password@db/myapp_production"
      REDIS_URL: "redis://redis:6379/0"
    ports:
      - "80:3000"
    depends_on:
      - db
      - redis
    restart: always
  db:
    image: postgres:12
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_DB: myapp_production
    volumes:
      - db_data:/var/lib/postgresql/data
    restart: always
  redis:
    image: redis:6.0
    restart: always
volumes:
  db_data:
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توجه داشته باشید که ویژگی تصویر برای وب سرویس به نام تصویر Docker شما در Docker Hub تنظیم شده است. ویژگی های محیط متغیرهای محیطی را تنظیم می کند که برنامه Rails شما از آنها برای اتصال به PostgreSQL و Redis استفاده می کند. ویژگی پورت ها، پورت 80 هاست را به پورت 3000 در کانتینر نگاشت می کند. خاصیتdependent_on مشخص می کند که وب سرویس به سرویس های db و redis بستگی دارد. ویژگی restart مشخص می کند که در صورت عدم موفقیت سرویس ها باید مجدداً راه اندازی شوند.

مرحله 4: برنامه خود را در یک سرور مستقر کنید

برای استقرار برنامه Rails خود بر روی سرور، باید Docker و Docker Compose را روی سرور نصب کنید.

پس از نصب Docker و Docker Compose، خود را کپی کنید docker-compose.prod.yml فایل را به سرور منتقل کنید و دستور زیر را در دایرکتوری که فایل در آن قرار دارد اجرا کنید:

$ docker-compose -f docker-compose.prod.yml up -d
با این کار کانتینرهای Docker برای برنامه Rails شما، Sidekiq، Redis و PostgreSQL در پس‌زمینه شروع می‌شود.

مرحله 5: به برنامه خود دسترسی پیدا کنید

هنگامی که کانتینرهای Docker آماده و اجرا می شوند، باید بتوانید به برنامه Rails خود در مرورگر وب خود در http://your-server-ip-address دسترسی داشته باشید. همچنین باید بتوانید به رابط وب Sidekiq در آدرس دسترسی داشته باشید http://your-server-ip-address/sidekiq

مرحله 6: برنامه خود را به روز کنید

برای به روز رسانی برنامه خود، باید یک تصویر Docker جدید برای کد به روز شده خود بسازید و آن را به رجیستری Docker خود فشار دهید. سپس، در سرور، می توانید تصویر جدید را بکشید و با استفاده از دستورات زیر یک ظرف جدید راه اندازی کنید:

$ docker pull your-dockerhub-username/myapp:latest
$ docker-compose -f docker-compose.prod.yml up -d

این تصویر جدید Docker را می کشد و یک ظرف جدید برای برنامه شما راه اندازی می کند، در حالی که پایگاه داده و داده های Redis شما دست نخورده باقی می ماند.

مرحله 7: برنامه خود را نظارت کنید

برای نظارت بر برنامه Rails خود در تولید، می توانید از ابزاری مانند New Relic یا Scout استفاده کنید. این ابزارها نظارت و هشدار در زمان واقعی را برای برنامه شما فراهم می کنند، بنابراین می توانید به سرعت هر مشکلی را که ایجاد می شود شناسایی و برطرف کنید.

مرحله 8: برنامه خود را مقیاس کنید

برای مقیاس‌بندی برنامه Rails خود در تولید، می‌توانید از Docker Compose برای اجرای چندین کانتینر از برنامه Rails خود در پشت یک متعادل کننده بار استفاده کنید. در اینجا یک مثال است docker-compose.prod.yml فایل برای اجرای چندین کانتینر برنامه Rails شما:

version: "3"
services:
  web:
    image: your-dockerhub-username/myapp:latest
    environment:
      RAILS_ENV: production
      DATABASE_URL: "postgres://postgres:password@db/myapp_production"
      REDIS_URL: "redis://redis:6379/0"
    ports:
      - "80:3000"
    depends_on:
      - db
      - redis
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure
      update_config:
        parallelism: 2
        delay: 10s
      resources:
        limits:
          cpus: "0.5"
          memory: 512M
        reservations:
          cpus: "0.25"
          memory: 256M
  db:
    image: postgres:12
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_DB: myapp_production
    volumes:
      - db_data:/var/lib/postgresql/data
  redis:
    image: redis:6.0
volumes:
  db_data:
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توجه داشته باشید که وب سرویس دارای ویژگی deploy است که مشخص می کند باید با 3 replica اجرا شود. ویژگی update_config مشخص می‌کند که به‌روزرسانی‌ها باید با حداکثر موازی 2 و تاخیر 10 ثانیه بین به‌روزرسانی‌ها منتشر شوند. ویژگی منابع محدودیت منابع و رزرو را برای کانتینرها تنظیم می کند.

با این پیکربندی، می توانید از یک متعادل کننده بار مانند Nginx یا HAProxy برای توزیع ترافیک در چندین کانتینر برنامه Rails خود استفاده کنید.

یک پروکسی معکوس مانند Nginx یا Apache را پیکربندی کنید تا درخواست‌های HTTP ورودی را به کانتینر Docker که برنامه Rails شما را اجرا می‌کند هدایت کند. می‌توانید پروکسی معکوس را برای گوش دادن به پورت 80 یا 443 و ارسال درخواست‌ها به پورت 3000، که پورت پیش‌فرض برای برنامه‌های Rails است، پیکربندی کنید. همچنین می توانید رمزگذاری SSL/TLS را برای اتصالات امن پیکربندی کنید. در اینجا نمونه ای از فایل پیکربندی Nginx برای برنامه Rails آمده است:

upstream myapp {
  server localhost:3000;
}

server {
  listen 80;
  server_name example.com;

  location / {
    proxy_pass http://myapp;
    proxy_set_header Host $host
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با تشکر،
خشن

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا