Вступ
Зі збільшенням складності веб-додатків, зростає й важливість наявності міцної та масштабованої основи. У цьому посібнику ми пройдемо через створення надійного, готового до виробництва шаблону для Rails додатка з використанням Docker, PostgreSQL та AWS. Використовуючи Docker для послідовних середовищ, PostgreSQL для надійного зберігання даних і AWS для масштабованого розгортання, ця налаштування забезпечує плавний досвід розробки, тестування та роботи в продакшн середовищі.
Попередні вимоги
Перед тим, як почати, переконайтеся, що у вас встановлені наступні інструменти:
- Docker
- Docker Compose
- AWS CLI та Elastic Beanstalk CLI
Крок 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 для безпечного зберігання конфіденційної інформації, такої як облікові дані бази даних та секретні ключі.
- Встановіть ці змінні середовища за допомогою EB CLI або через консоль Elastic Beanstalk в розділі Configuration > Software.
- Оновіть файл
database.yml
, щоб отримати ці змінні:
production:
<<: *default
database: <%= ENV['RDS_DB_NAME'] %>
username: <%= ENV['RDS_USERNAME'] %>
password: <%= ENV['RDS_PASSWORD'] %>
host: <%= ENV['RDS_HOSTNAME'] %>
Крок 5: Тестування та запуск додатка локально
Щоб переконатися, що все працює, як очікується, протестуйте налаштування Docker локально:
- Запустіть контейнери:
docker-compose up
- Перейдіть на
http://localhost:3000
, щоб перевірити додаток Rails.
Крок 6: Розгортання додатка на AWS
Після того як ви перевірили все локально, час розгорнути додаток на AWS Elastic Beanstalk.
- Створіть середовище і розгорніть:
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