ハイパーマッスルエンジニア

Vim、ShellScriptについてよく書く

【メモ】PHPフレームワークSlimをdocker-composeで環境構築する

f:id:rasukarusan:20210501121545p:plain
 

途中でまとめるのが面倒になってしまったのでメモ書きとして残しておく

リポジトリ github.com

環境

  • M1 MacBookAir(Big Sur)
  • Docker Desktop(3.3.0)

初期ディレクトリ構築

mkdir php-slim
cd php-slim

# slimのインストール
composer create-project slim/slim-skeleton:3.1 app

migrationの導入

Phinxを使う。

# インストール
composer require robmorgan/phinx
# 初期化
php vendor/bin/phinx init

# 必要なディレクトリ作成
mkdir db
mkdir db/migrations
mkdir db/seeds

# マイグレーションファイルの作成
php vendor/bin/phinx create Logs

phinx.phpにDB接続情報を書く。 docker-compose.ymlが下記のような感じだったら、

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: app
      MYSQL_USER: docker
      MYSQL_PASSWORD: docker
    ports:
    - 3306:3306

phinx.phpはこんな感じ。

<?php

return
[
    'paths' => [
        'migrations' => '%%PHINX_CONFIG_DIR%%/db/migrations',
        'seeds' => '%%PHINX_CONFIG_DIR%%/db/seeds',
    ],
    'environments' => [
        'default_migration_table' => 'phinxlog',
        'default_environment' => 'development',
        'development' => [
            'adapter' => 'mysql',
            'host' => '127.0.0.1',
            'name' => 'app',
            'user' => 'docker',
            'pass' => 'docker',
            'port' => '3306',
            'charset' => 'utf8',
        ],
    ],
    'version_order' => 'creation',
];

マイグレーションファイルの作成コマンドを実行するとdb/migrations/20210406131917_logs.phpみたいなファイルが生成される。このファイルにテーブルの情報を書いていく。

db/migrations/20210406131917_logs.php

<?php

use Phinx\Migration\AbstractMigration;

final class Logs extends AbstractMigration
{
    /**
     * Change Method.
     *
     * Write your reversible migrations using this method.
     *
     * More information on writing migrations is available here:
     * https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method
     *
     * Remember to call "create()" or "update()" and NOT "save()" when working
     * with the Table class.
     */
    public function change(): void
    {
        $table = $this->table('logs');
        $table->addColumn('level', 'string', [
            'default' => null,
            'limit' => 255,
            'null' => true,
            'comment' => 'INFO/WARN/ERROR',
        ]);
        $table->addColumn('created', 'timestamp', [
            'default' => 'CURRENT_TIMESTAMP',
        ]);
        $table->create();
    }
}

マイグレーションの実行

php vendor/bin/phinx migrate

ロールバック

php vendor/bin/phinx rollback -e development

composer.jsonのscriptsとして書いておくと便利ですね。

composer.json

"scripts" : {
    "migrate" : [
        "php vendor/bin/phinx migrate"
    ],
    "rollback" : [
        "php vendor/bin/phinx rollback -e development"
    ]
}

実行

composer migrate
composer rollback

詰まった箇所

apache2のルートディレクトリの変更

変更箇所は2箇所

/etc/apache2/httpd.conf
/etc/apache2/site-available/000-default.conf

どちらのファイルにも/var/www/htmlになっている箇所があるのでそれを変更する

ルートディレクトリを変更したらInternalServerErrorがでた

https://qiita.com/YAJIMA/items/68de1bdeb71a921a718d

エラー文

Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration

解決方法

a2enmod rewrite
# 再起動
service apache2 restart

それでもNot Foundと出る

AllowOverride Allになっていることを確認する。Noneになっていたらpublic配下の.htaccessが読み込めなくなってしまう。 apache2.conf

<Directory /var/www/html/public>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>