docker-machine + vultrでSymfonyで作ったwebアプリを動かす

docker-machine + vultrでSymfonyで作ったwebアプリを動かす

November 14, 2020,
tags: Symfony vultr docker


このエントリーをはてなブックマークに追加

前にsymfonyで作ったwebアプリをお客さんにdemoしたい。
でも環境を用意するのが若干面倒。

開発環境自体はdockerで構成されているものの、コストを書けずに安いプレビュー環境を用意してたくなったので、docker-machine + vultrでプレビュー環境を構築しました。

まずはdocker-machineのインストール

これは公式ドキュメント通りにインストールしました。

base=https://github.com/docker/machine/releases/download/v0.16.0 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/usr/local/bin/docker-machine &&
  chmod +x /usr/local/bin/docker-machine

docker-machine-vultrをインストール

janeczku/docker-machine-vultr

これもドキュメント通りに入れました。

$ curl -L https://github.com/janeczku/docker-machine-vultr/releases/download/v1.3.0/docker-machine-driver-vultr-`uname -s`-`uname -m` \
  -o /usr/local/bin/docker-machine-driver-vultr && chmod +x /usr/local/bin/docker-machine-driver-vultr

vultrでdocker-machineを動かしてみる

docker-machine create --driver vultr --vultr-api-key=your-api-key --vultr-region-id 25 --vultr-os-id 270 --vultr-plan-id 29 symfony-app

これでvultr側でサーバも起動している。

vultr用のdocker-composeを用意する

ローカルとファイルパスとか変わるのでdocker-compose.vultr.ymlを用意

version: "3"

services:
  db:
    build:
      context: ./docker/mysql/
      dockerfile: Dockerfile
    ports:
      - 3307:3306
    volumes:
      - /app/.data/db:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: symfony_app
  php:
    build:
      context: ./docker/php/
      dockerfile: Dockerfile
    volumes:
      - /app:/app
    depends_on:
      - db
  web:
    build:
      context: ./docker/nginx/
      dockerfile: Dockerfile
    ports:
      - 80:80
    depends_on:
      - php
    volumes:
      - /app:/app
      - /app/var/log/nginx:/var/log/nginx/

ファイルアップする

ローカルにあるファイルをサーバに送らなきゃなので docker-machine scp コマンドで送りました。 ディレクトリ指定して、再起で送ったら大変なんことになったのでとりあえず一つ一つ必要なファイルを送りました。 (なんかもっと良い方法ありあそう…)

docker-machine scp /src/polidog/symfony-app/assets map-app:/app -r
docker-machine scp /src/polidog/symfony-app/bin map-app:/app -r
docker-machine scp /src/polidog/symfony-app/config map-app:/app -r
docker-machine scp /src/polidog/symfony-app/public map-app:/app -r
docker-machine scp /src/polidog/symfony-app/src map-app:/app -r
docker-machine scp /src/polidog/symfony-app/templates map-app:/app -r
docker-machine scp /src/polidog/symfony-app/tests map-app:/app -r
docker-machine scp /src/polidog/symfony-app/translations map-app:/app -r
docker-machine scp /src/polidog/symfony-app/.env map-app:/app -r
docker-machine scp /src/polidog/symfony-app/composer.json map-app:/app -r
docker-machine scp /src/polidog/symfony-app/composer.lock map-app:/app -r
docker-machine scp /src/polidog/symfony-app/package.json map-app:/app -r
docker-machine scp /src/polidog/symfony-app/package-lock.json map-app:/app -r
docker-machine scp /src/polidog/symfony-app/symfony.lock map-app:/app -r
docker-machine scp /src/polidog/symfony-app/webpack.config.js map-app:/app -r

docker-composeでコンテナをビルドして起動する

$ docker-compose -f docker-compose.vultr.yml build
$ docker-compose -f docker-compose.vultr.yml up -d

Symfonyアプリのセットアップ

今回はwebpacke-encore使ってたのでnpmインストールとかもしています。

$ docker-compose -f docker-compose.vultr.yml exec php comopser install
$ docker-compose -f docker-compose.vultr.yml exec php bin/console doctrine:database:create
$ docker-compose -f docker-compose.vultr.yml exec php bin/console doctrine:migrations:migrate
$ docker-compose -f docker-compose.vultr.yml exec php npm install
$ docker-compose -f docker-compose.vultr.yml exec php npm run build

ブラウザアクセスしてみる

$ open http://$(docker-machine ip map-app)

これでうまくいけばアクセスできる。 最初クロームのアドレスバーにip直打ちしてアクセスしたらアクセスできなくて焦ったけど、ipだけコピペして貼り付けるとhttps としてリクエスト送ってただけでした😇

うまくSSHで接続できない問題

何も考えずにhost側(vultr)のOSをCoreOSにしたらうまくssh接続できなくて死にました。 自分の場合はUbuntuにしてregenerate-certsしたらうまくいきました。

$ docker-machine restart symfony-app
$ docker-machine regenerate-certs symfony-app

参考: Creating docker machine hangs on ‘Waiting machine to be running’

最後に

ちょっとした確認のための環境構築ならこの程度で十分だなぁと。 Vultrなら東京リージョンもあるし、ほんと便利です。

comments powered by Disqus