前にsymfonyで作ったwebアプリをお客さんにdemoしたい。
でも環境を用意するのが若干面倒。
開発環境自体はdockerで構成されているものの、コストを書けずに安いプレビュー環境を用意してたくなったので、docker-machine + vultrでプレビュー環境を構築しました。
まずはdocker-machineのインストール
これは公式ドキュメント通りにインストールしました。
1
2
3
|
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
これもドキュメント通りに入れました。
1
2
|
$ 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を動かしてみる
1
|
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
を用意
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
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
コマンドで送りました。
ディレクトリ指定して、再起で送ったら大変なんことになったのでとりあえず一つ一つ必要なファイルを送りました。
(なんかもっと良い方法ありあそう…)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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でコンテナをビルドして起動する
1
2
|
$ docker-compose -f docker-compose.vultr.yml build
$ docker-compose -f docker-compose.vultr.yml up -d
|
Symfonyアプリのセットアップ
今回はwebpacke-encore使ってたのでnpmインストールとかもしています。
1
2
3
4
5
|
$ 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
|
ブラウザアクセスしてみる
1
|
$ open http://$(docker-machine ip map-app)
|
これでうまくいけばアクセスできる。
最初クロームのアドレスバーにip直打ちしてアクセスしたらアクセスできなくて焦ったけど、ipだけコピペして貼り付けるとhttps
としてリクエスト送ってただけでした😇
うまくSSHで接続できない問題
何も考えずにhost側(vultr)のOSをCoreOSにしたらうまくssh接続できなくて死にました。
自分の場合はUbuntuにしてregenerate-certsしたらうまくいきました。
1
2
|
$ docker-machine restart symfony-app
$ docker-machine regenerate-certs symfony-app
|
参考: Creating docker machine hangs on ‘Waiting machine to be running’
最後に
ちょっとした確認のための環境構築ならこの程度で十分だなぁと。
Vultrなら東京リージョンもあるし、ほんと便利です。