docker-compose を使用してリモート ホストにデプロイしています。これは私の設定がどのように見えるかです:
# stacks/web.yml
version: '2'
services:
postgres:
image: postgres:9.6
restart: always
volumes:
- db:/var/lib/postgresql/data
redis:
image: redis:3.2.3
restart: always
web_server:
depends_on: [postgres]
build: ../sources/myapp
links: [postgres]
restart: always
volumes:
- nginx_socks:/tmp/socks
- static_assets:/source/public
sidekiq:
depends_on: [postgres, redis]
build: ../sources/myapp
links: [postgres, redis]
restart: always
volumes:
- static_assets:/source/public
nginx:
depends_on: [web_server]
build: ../sources/nginx
ports:
- "80:80"
volumes:
- nginx_socks:/tmp/socks
- static_assets:/public
restart: always
volumes:
db:
nginx_socks:
static_assets:
# stacks/web.production.yml
version: '2'
services:
web_server:
command: bundle exec puma -e production -b unix:///tmp/socks/puma.production.sock
env_file: ../env/production.env
sidekiq:
command: bundle exec sidekiq -e production -c 2 -q default -q carrierwave
env_file: ../env/production.env
nginx:
build:
args:
ENV_NAME: production
DOMAIN: production.yavende.com
私は以下を使用して展開します:
eval $(docker-machine env myapp-production)`
docker-compose -f stacks/web.yml -f stacks/web.production.yml -p myapp_production build -no-deps web_server sidekiq
docker-compose -f stacks/web.yml -f stacks/web.production.yml -p myapp_production up -d
これはローカルで完全に機能し、過去にこの方法でデプロイを成功させましたが、「web_server」サービスを構築するときにハングし、最終的にこの問題で説明するようにタイムアウト エラーが表示されます。
この問題は、接続が遅い (アルゼンチン -> 米国の DigitalOcean サーバー) ことと、ハブでホストされているイメージを使用する代わりにイメージを作成してプッシュしようとしていることが原因であると思います。
構成設定をサーバーに複製し、docker-compose
そこで直接実行することで、展開を行うことができました。
問題は、このプロセスを自動化するより良い方法はないかということです。その場でイメージを構築するために docker-compose を使用することをお勧めしますか?
ソースをサーバーに複製して何かを実行するこのプロセスを自動化することを考えていましたがdocker-compose
、この問題を解決するためのより良いツールがあるかもしれません。