課金が怖いのでサーバー部分をDockerコンテナで代用してみました

こちらの本で課金とかガチャのやり方を勉強しようと思って買ったのですが、

中身読んでみると、

phpをインストールし、

Larabelをインストールし、

Mysqlを準備して…

というのをAWSで行っていたんですよね。


無料枠内の説明ではあったのですが、

一定期間超えると課金が発生してしまうのは個人的に嫌だなと思い、

じゃあ、サーバー部分はDockerにすればいいじゃん

と思い色々試した所、取りあえず準備完了までは出来ました。

まだ途中な感じですが、サーバー準備までのやり方をブログにまとめましたので、

よろしければ参考にしてください。

使用したDockerコンテナ

qiita.com

github.com

フォルダ構造

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

修正点

makefile

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を使っている人のため、

基本的な仕組みが分かったら置き換えてく形になるのかなと思います。


このあたりの勉強はかなり楽しいので、

引き続き理解を深められたらなと思います。

それではまた会いましょう。

*1:詳しいコマンドはMakefileをご確認ください