趣味・業務共にアプリを載せるサーバーは VPS か Heroku しか経験がない。
ということでAWSの中で比較的敷居が低そうなElastic Beanstalkでこんにちはしてみた。
用意されたPHP環境にデプロイすることもできるが、Dockerfileを組むのが好きなのでDockerで。
環境
- OSX High Sierra
- eb-cli インストール済
- laravel/installer インストール済
Laravel プロジェクト作成
laravel new myproject
cd myproject
プロジェクト直下にDockerfile作成
myproject/Dockerfile
FROM dyoshikawa/laravel:latest
RUN apk add nginx
RUN mkdir /run/nginx
COPY nginx.conf /etc/nginx/conf.d/default.conf
RUN sed -i -e "s/www-data/nginx/g" /usr/local/etc/php-fpm.d/www.conf
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . .
RUN chmod +x start.sh
RUN composer install
RUN chown -R nginx:nginx /usr/src/app
EXPOSE 80
CMD bash start.sh
ベースイメージはDockerhubで公開している。
myproject/start.sh
#!/bin/bash
nginx
php-fpm
myproject/nginx.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name localhost;
root /usr/src/app/public;
index index.php index.html;
location / {}
location ~ \.php$ {
root /usr/src/app/public;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/src/app/public$fastcgi_script_name;
include fastcgi_params;
}
error_page 404 /404.html;
location = /40x.html {}
}
下のEB用設定ファイルも作成。
myproject/Dockerrun.aws.json
{
"AWSEBDockerrunVersion": "1",
"Ports" : [{ "ContainerPort": "80" }]
}
eb init, create, deploy
eb init
対話で色々聞かれる。
-
Select a default region
→9) ap-northeast-1 : Asia Pacific (Tokyo)
-
Do you wish to continue with CodeCommit?
→n
eb create
これも聞かれる。
-
Enter Environment Name
→Enter
-
Enter DNS CNAME prefix
→Enter
-
Select a load balancer type
→2) application
eb deploy
待つだけ。
環境変数
php artisan key:generate --show
を叩いて出力されるkeyをコピーする。
AWS EBのWebコンソールから 設定
→ ソフトウェア 変更
→ 環境プロパティ
で環境変数をセットできる。
ここで APP_KEY={コピーしたkey}
を設定。
最後に
こんにちはを見たかっただけなのでRDSは建てていない。
趣味用途を考えるとHerokuの方が簡単だし安いので環境は消した。
消さないと課金されていくので注意(当たり前だけど一応)。
参考
Rails on DockerをElastic Beanstalkにデプロイする | Developers.IO
AWS + Nginx + PHP + Laravel - Qiita