Створення шаблону для Rails, готового до виробництва, з Docker, PostgreSQL та AWS

Вступ

Зі збільшенням складності веб-додатків, зростає й важливість наявності міцної та масштабованої основи. У цьому посібнику ми пройдемо через створення надійного, готового до виробництва шаблону для Rails додатка з використанням Docker, PostgreSQL та AWS. Використовуючи Docker для послідовних середовищ, PostgreSQL для надійного зберігання даних і AWS для масштабованого розгортання, ця налаштування забезпечує плавний досвід розробки, тестування та роботи в продакшн середовищі.

pic

Попередні вимоги

Перед тим, як почати, переконайтеся, що у вас встановлені наступні інструменти:

Крок 1: Налаштування Docker для Rails

Використання Docker дозволяє нам контейнеризувати додаток та його залежності, забезпечуючи надійне середовище для різних машин.

1.1 Створення Dockerfile

Dockerfile визначає середовище для Rails додатка. Ми будемо базувати його на офіційному Ruby образі і встановимо необхідні залежності, включаючи Node.js та клієнт PostgreSQL.

# Dockerfile  
# Використовуємо офіційний образ Ruby  
FROM ruby:3.0  

# Встановлюємо залежності  
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client  

# Встановлюємо робочу директорію  
WORKDIR /app  

# Копіюємо Gemfile та Gemfile.lock для встановлення гемів  
COPY Gemfile /app/Gemfile  
COPY Gemfile.lock /app/Gemfile.lock  
RUN bundle install  

# Копіюємо код додатка  
COPY . /app  

# Відкриваємо порт сервера Rails  
EXPOSE 3000  

# Запускаємо сервер Rails  
CMD ["rails", "server", "-b", "0.0.0.0"]

1.2 Налаштування Docker Compose

Docker Compose дозволяє нам визначати і управляти багатоконтейнерними додатками. Тут ми налаштуємо сервіси для Rails додатка та PostgreSQL, а також визначимо мережеві конфігурації для їх безперебійної взаємодії.

# docker-compose.yml  
version: '3.8'  

services:  
 db:  
 image: postgres:13  
 environment:  
 POSTGRES_USER: myuser  
 POSTGRES_PASSWORD: mypassword  
 volumes:  
 - db-data:/var/lib/postgresql/data  

 web:  
 build: .  
 command: bash -c "rm -f tmp/pids/server.pid && rails server -b '0.0.0.0'"  
 volumes:  
 - .:/app  
 ports:  
 - "3000:3000"  
 depends_on:  
 - db  

volumes:  
 db-data:

Крок 2: Налаштування PostgreSQL для Rails

Для того, щоб Rails міг взаємодіяти з PostgreSQL, потрібно налаштувати параметри з’єднання з базою даних у файлі config/database.yml. В Docker сервіси з’єднуються за іменем сервісу, тому ми використовуємо db як хост для PostgreSQL.

# config/database.yml  
default: &default  
 adapter: postgresql  
 encoding: unicode  
 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>  
 host: db  
 username: myuser  
 password: mypassword  

development:  
 <<: *default  
 database: myapp_development  

test:  
 <<: *default  
 database: myapp_test  

production:  
 <<: *default  
 database: myapp_production

Запустіть команду docker-compose up для запуску контейнерів, а потім створіть бази даних за допомогою:

docker-compose run web rails db:create db:migrate

Крок 3: Підготовка до розгортання на AWS

AWS надає кілька керованих сервісів, які полегшують розгортання, зокрема Elastic Beanstalk (EB) для хостингу та RDS (Relational Database Service) для баз даних PostgreSQL. Ось як це налаштувати:

3.1 Налаштування AWS Elastic Beanstalk

Спочатку налаштуйте Elastic Beanstalk для підтримки Docker додатка.

# Ініціалізація середовища EB для Docker  
eb init -p docker myapp --region us-east-1

Ця команда налаштує середовище EB під ім’ям myapp в регіоні us-east-1.

3.2 Налаштування бази даних на RDS

У AWS RDS створіть екземпляр бази даних PostgreSQL.

Під час налаштування, налаштуйте екземпляр так, щоб він був доступний тільки в межах тієї ж VPC, що й екземпляр Elastic Beanstalk.

Після створення екземпляра RDS оновіть конфігурацію database.yml для продакшн середовища з хостнеймом RDS, іменем користувача та паролем.

Крок 4: Налаштування захищених змінних середовища

Використовуйте змінні середовища AWS Elastic Beanstalk для безпечного зберігання конфіденційної інформації, такої як облікові дані бази даних та секретні ключі.

  1. Встановіть ці змінні середовища за допомогою EB CLI або через консоль Elastic Beanstalk в розділі Configuration > Software.
  2. Оновіть файл database.yml, щоб отримати ці змінні:
production:  
 <<: *default  
 database: <%= ENV['RDS_DB_NAME'] %>  
 username: <%= ENV['RDS_USERNAME'] %>  
 password: <%= ENV['RDS_PASSWORD'] %>  
 host: <%= ENV['RDS_HOSTNAME'] %>

Крок 5: Тестування та запуск додатка локально

Щоб переконатися, що все працює, як очікується, протестуйте налаштування Docker локально:

  1. Запустіть контейнери: docker-compose up
  2. Перейдіть на http://localhost:3000, щоб перевірити додаток Rails.

Крок 6: Розгортання додатка на AWS

Після того як ви перевірили все локально, час розгорнути додаток на AWS Elastic Beanstalk.

  1. Створіть середовище і розгорніть:
eb create myapp-env  
eb deploy

2. Моніторинг журналів та здоров'я: Після розгортання слідкуйте за додатком за допомогою eb logs і eb health, щоб переконатися, що він працює коректно.

Висновок

Цей посібник охоплює основи створення готового до виробництва шаблону для Rails з Docker, PostgreSQL і AWS. Дотримуючись цих кроків, ви отримаєте надійне налаштування, яке є масштабованим, підтримуваним і ідеальним для сучасних хмарних додатків. Цей підхід гнучкий і може бути легко адаптований до більш складних архітектур в міру зростання вашого додатка.

З цим шаблоном ви готові запускати Rails додатки з високим рівнем надійності, безпечним управлінням даними та простим шляхом до масштабування.

Перекладено з: Building a Production-Ready Rails Boilerplate with Docker, PostgreSQL, and AWS

Leave a Reply

Your email address will not be published. Required fields are marked *