Skip to content

Instantly share code, notes, and snippets.

@fedorkk
Last active October 6, 2023 19:20
Show Gist options
  • Save fedorkk/036dedc915364d4a6b351b2661ababf3 to your computer and use it in GitHub Desktop.
Save fedorkk/036dedc915364d4a6b351b2661ababf3 to your computer and use it in GitHub Desktop.
docker-compose template for local development
# Makefile
SHELL := /bin/zsh # could be changed to your shell
# all tasks should be added here, otherwise Make tries to create the folder with the same name and skip the task if folder exists
.PHONY: env db console stop prepare test yarn front
dev: env db server
prepare: env db yarn
bundle install
bundle exec rake db:prepare
bundle exec rake webpacker:install
bundle exec rake assets:clobber
- bundle exec rake webpacker:compile
yarn:
yarn add bootstrap@5.0.0-beta2
yarn add @popperjs/core@2.0.0-alpha.1
yarn add chart.js
env:
source ./.env.development
db:
docker-compose -f docker-compose-local.yml up -d
console:
bundle exec rails c
server:
bundle exec rails s
test:
bundle exec rspec
stop:
docker-compose -f docker-compose-local.yml down
front:
bundle exec ./bin/webpack-dev-server
------------------------------------------------------------
# .env.development
POSTGRES_USER=db_user
POSTGRES_PASSWORD=123qweasd
DATABASE_HOST=127.0.0.1
------------------------------------------------------------
# docker-compose-local.yml
---
version: "3.9"
services:
redis:
image: 'redis:alpine'
ports:
- '6379:6379'
db:
image: 'postgres'
env_file:
- .env.development
volumes:
- db-data:/var/lib/postgresql/data/
ports:
- '5432:5432'
# sidekiq:
# depends_on:
# - 'db'
# - 'redis'
# build: .
# command: bundle exec sidekiq
# volumes:
# - '.:/project'
# - '/project/tmp' # don't mount tmp directory
# environment:
# - REDIS_URL_SIDEKIQ=redis://redis:6379/1
volumes:
db-data:
------------------------------------------------------------
# database.yml.example
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
port: 5432
local_default: &local_default
<<: *default
user: <%= ENV.fetch("POSTGRES_USER", 'postgres') %>
password: <%= ENV.fetch("POSTGRES_PASSWORD", '') %>
host: <%= ENV.fetch("DATABASE_HOST", 'localhost') %>
development:
<<: *local_default
database:
test:
<<: *local_default
database:
production:
<<: *default
database:
username:
password:
------------------------------------------------------------
Makefile позволяет выполнять все в одну короткую команду. (Фактически набор алиасов для проекта). Например make dev выполняет директиву dev в которую вложены env и db. Первая загружает .env.development в переменные окружения, вторая запускает docker-compose с указанным файлом настроек. В докер композе прописаны конфиги для базы и редиса (сайдкик мне не нужен обычно в докере, так что он закоменчен). Переменные окружения для базы берутся из того же .env файла. После этого можно сразу создавать rails проект и работать.
# make dev
# make test
и.т.п.
docker-compose файл указан отдельно, что позволяет иметь один для dev машины и стандартный docker_compose.yml для прода (если нужен).
Все что применимо к фронту я обычно удаляю за ненадобностью (фронт я стараюсь не трогать вообще).
Раньше у меня rails new тоже был, но я его выкинул потому что всегда нужны разные версии руби и рельс и разные флаги запуска, так что унифицировать толком не получается. То же самое с Dockerfile и web контейнером в compose.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment