I'm deploying a Rails Application with Capistrano. It doesn't have any problem in normally way with Nginx and Passenger.
Now, I move to use docker-compose.
Capfile
# Load DSL and set up stages
require "capistrano/setup"
require "capistrano/deploy"
Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }
deploy.rb
namespace :deploy do
desc "docker compose task"
task docker_compose: :updated do
on roles(:web, :app), in: :groups, limit: 3, wait: 10 do
within release_path do
execute "cd #{release_path} && docker-compose up --build -d"
end
end
end
after 'deploy:updated', 'deploy:docker_compose'
end
docker-compose.yml
version: '2'
services:
db:
image: mysql/mysql-server:5.7
environment:
- MYSQL_ROOT_PASSWORD=myapp12345
redis:
image: 'redis:3.2-alpine'
command: redis-server
ports:
- '6379:6379'
volumes:
- 'redis:/var/lib/redis/data'
website:
depends_on:
- 'redis'
- 'db'
build: .
image: namle/myapp_api
ports:
- '3001:3000'
volumes:
- '.:/myapp_ruby'
environment:
- REDIS_URL=redis://redis
env_file:
- '.env'
sidekiq:
depends_on:
- 'redis'
- 'db'
build: .
command: bundle exec sidekiq
environment:
- REDIS_URL=redis://redis
volumes:
- '.:/myapp_ruby'
env_file:
- '.env'
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- 80:80
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
volumes:
redis:
website:
sidekiq:
nginx-proxy:
It runs OKAY.
But I have PROBLEM
Docker-compose will create new network groups, volumes, images, containers after deploy because of release_path changed.
How to fix it?