AWSって便利ですよね、Elastic BeansTalkを使えば環境構築がすぐに終わり
DBもキャッシュサーバもロードバランサも構築されます。
(EBは関係ないですが必然的にS3も使うことでしょう)
今日の弊社の開発環境
- 開発はローカルサーバ(Docker or Vagrant)
- ステージングは共用のステージング専用サーバ
- プロダクションはAWS
ローカル、ステージングをAWSの外に置くことにより開発時のランニングコストを押さえています。
しかし、S3だけは常にAWSを利用していました。
問題点
ローカルサーバはDBも開発者それぞれ、
しかし、S3のバケットは共用なため
他の人にファイルを上書きされたり
勝手に消されたりしてしまう懸念があります。
そこで(本題)
AWSライクな開発環境をDockerで構築した件
レシピ
version: "2.0"
services:
lb:
image: nginx
ports:
- 10081:80
volumes:
- ./nginx:/etc/nginx/conf.d
links:
- web1
- web2
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- db
ports:
- 10082:80
environment:
PMA_HOST: hoge
PMA_USER: hoge
PMA_PASSWORD: hoge
web1:
build: ./
links:
- db
- redis
- maildev
volumes:
- ./:/var/www
web2:
build: ./
links:
- db
- redis
- maildev
volumes:
- ./:/var/www
db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: hoge
MYSQL_DATABASE: hoge
MYSQL_USER: hoge
MYSQL_PASSWORD: hoge
redis:
image: redis
maildev:
image: djfarrelly/maildev
ports:
- 10084:80
minio:
image: minio/minio
ports:
- "10085:9000"
volumes:
- "./storage/files:/export"
environment:
MINIO_ACCESS_KEY: AKIAIOSFODNN7EXAMPLE
MINIO_SECRET_KEY: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
command: server /export
なにをしているのか
lbコンテナ
ロードバランシングをしてもらっています。
Elastic Loadbarancingの代わりです。
upstream web {
server web1;
server web2;
}
server {
listen 80;
location / {
proxy_pass http://web;
}
}
web1,web2コンテナ
EC2の代わりのウェブサーバです。
build先のDockerfileはPHP7-apacheに
redisエクステンションを組み込んだものになってますので
各自自由に構築してください
db
RDSの代わりです。MariaDBを採用
redis
ElasticCacheのかわりです
minio
S3の代わりです。
詳しく設定を加えたことがないんですが
読み書きだけなら
environmentを設定するだけでいけたので採用しました!
おまけ
phpmyadmin コンテナ
MariaDBの確認用においておきました。
maildev コンテナ
メール確認用に、maildevをSMTP先に設定すれば
外部にメールがとぶことはありません
総括
これで、よく使うAWSのサービスをローカルで再現して開発ができ・・・るはずです!
イニシャルコストを払わずに開発を開始できるため、フリーランスやスタートアップにぴったりだと思います!