課金が怖いのでサーバー部分をDockerコンテナで代用してみました
こちらの本で課金とかガチャのやり方を勉強しようと思って買ったのですが、
中身読んでみると、
phpをインストールし、
Larabelをインストールし、
Mysqlを準備して…
というのをAWS上で行っていたんですよね。
無料枠内の説明ではあったのですが、
一定期間超えると課金が発生してしまうのは個人的に嫌だなと思い、
じゃあ、サーバー部分はDockerにすればいいじゃん
と思い色々試した所、取りあえず準備完了までは出来ました。
まだ途中な感じですが、サーバー準備までのやり方をブログにまとめましたので、
よろしければ参考にしてください。
使用したDockerコンテナ
フォルダ構造
backend以外はgithubからclone してきたものになります。
. |-- LICENSE |-- Makefile |-- README.md |-- backend # SampleProject_server.zipを解凍したもの |-- docker-compose.yml |-- infra | `-- docker | |-- mysql | | |-- Dockerfile | | `-- my.cnf | |-- nginx | | |-- Dockerfile | | `-- default.conf | `-- php | |-- Dockerfile | |-- php-fpm.d | | `-- zzz-www.conf | `-- php.ini
修正点
init: docker compose up -d --build docker compose exec app composer self-update --1 #追加 docker compose exec app composer install docker compose exec app cp .env.example .env docker compose exec app php artisan key:generate docker compose exec app php artisan storage:link docker compose exec app chmod -R 777 storage bootstrap/cache @make fresh
composer のバージョンを1に下げました
infra/docker/php/Dockerfile
FROM php:8.0-fpm-buster
FROM php:7.2-fpm-buster
phpのバージョンをサンプルで使用している7.2に合わせました
infra/docker/mysql/my.cnf
[mysqld] ...<中略>... default_authentication_plugin=mysql_native_password #追加 ...<以下略>...
passwordの認証方式を旧来のものに変更しました。
backend/.env.example
[修正前]
<...以上略...> DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret <...以下略...>
[修正後]
...<中略>... DB_CONNECTION=mysql WEB_PORT=80 DB_PORT=3306 DB_NAME=laravel_local DB_USER=phper DB_PASS=secret ...<以下略>...
環境変数をdocker-laravel側に合わせました。
設定のやり方
docker-laravelのコンテナは新規プロジェクトを作る場合と既存のプロジェクトを使う場合でコマンドが異なります。
既存のプロジェクトを使う場合はrootディレクトリでmake init
を実行すると設定が始まります。*1
makeが使えない場合はこちらのmakeの欄を見ながら
makeをインストールしておいてください。
Migration table created successfully.
まで出たら設定は完了です。
ハマった部分
- mysqlが更新されない
->docker-composeの 永続volumeが残っているせい。
消しても問題ない場合はdocker compose down -v
で消せます。 - migrateが出来ない
->user passwordが記載されているものが間違っていないか?
->変更したにもかかわらず、mysqlの永続volumeをそのままにしていないか?
make db
でdbコンテナに入り、mysqlにログインして確認してみましょう。
ログイン後にshow databases;
で設定されているデータベースが確認できるので
名前ミスなどが無いか確認しましょう。
終わりに
この後の流れとしてはクライアント側も立ち上げ、
ユーザーの登録とかガチャ部分をサンプルプロジェクトを通じて実際に動かしていくみたいです。
私自身はphpでlaravelよりpythonでflaskを使っている人のため、
基本的な仕組みが分かったら置き換えてく形になるのかなと思います。
このあたりの勉強はかなり楽しいので、
引き続き理解を深められたらなと思います。
それではまた会いましょう。