0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

既存のLaravel5.xプロジェクトをDocker環境に移行する

Posted at

新規でプロジェクトを立ち上げるならLaravel Sailを使えば楽々Docker環境を構築できますが、
既存のHomesteadで動かしている古臭いプロジェクトをDockerに移行出来ないかなというのが本記事の趣旨です。

Laravel Sailとやっていることは似ていて、

  • ローカル環境でcomposer installなどをして環境構築
  • docker-composeなどでコンテナ作成
    という流れになっています。

HomesteadからDockerに移す利点

  • 簡単に環境を用意できる
  • 毎日の起動が圧倒的に早い
  • VMを起動するより軽量

構築環境

  • Windows11
  • Ubuntu 22.04 LTS(Microsoft Storeで置いているやつ)
  • Laravel 5.5.50のプロジェクト

php7.xの用意とcomposer install

特に何も考えないでWindowsやUbuntuにphpをインストールすると、バージョンが8.xになっていると思います。(バージョンはphp -vで確認できます)
Laravel5.xのような古いバージョンはphp7.xでないと動作しません。
Windowsの環境変数のPathを変える方法もありますが、バージョンの切り替えが面倒なので、Ubuntu内にupdate-alternativesを入れて切り替える方法を取りたいと思います。
こうするとPowerShellは最新版、Ubuntuは任意のバージョンのphp環境となり、ターミナルのタブ切り替えだけでphpのバージョン違いに対応できるためおススメです。

7.xのphpを用意する(参照

参照先ままで、Ubuntuで以下の操作を行います。

sudo add-apt-repository ppa:ondrej/php 

でリポジトリを追加した後、

sudo apt install -y php7.3
sudo apt install -y php7.4
sudo apt install -y php8.0

など好きなphpバージョンをインストールします。

sudo update-alternatives --install /usr/bin/php php /usr/bin/php7.3 100 //最後の数字は
sudo update-alternatives --install /usr/bin/php php /usr/bin/php7.4 110 //優先度で、
sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.0 120 //高い程優先される

sudo update-alternatives --config phpでバージョン切り替えが出来るようになります。

composer install

次にLaravelプロジェクトのgit clone先にあるcomposer.json内を編集します。

composer.json
    "config": {
        "platform": {
            "php": "7.3"        
        }
    }

composerがphp7.3に対応したパッケージを取ってくるようにします。7.3の部分に任意で変更できます。
後はcomposer installを行えばOKです。

遭遇したエラー一覧

Script @php artisan package:discover –ansi handling the post-autoload-dump event returned with error code 1
phpのバージョンが違うとこのエラーが出てきます。他にもAPP_ENVの指定忘れでも起きるそうです。

class ○○Provider not found
色々な原因がありますが、自分の場合はProviderディレクトリ内のhogehogeディレクトリが'h'ogehogeとなっていたのが原因でした。Laravelのapp内のファイル/ディレクトリ名は全部大文字から始めないとphp artisan時には見つけてくれないようです。Hogehogeと変更したら解決しました。命名規則はとても大切

Dockerの設定

Laravelプロジェクト内にdocker-compose.yamlとDockerfileという名前のファイルを作ります。
docker-compose.yamlはLaravel Sailのものを流用します。service、volumes,networks名やportsは自由に変更できますが、整合性に気を付けてください。

docker-compose.yaml
version: '3'
services: 
    laravel:
        image: 'bitnami/laravel'
        build: 
            context: .
            dockerfile: Dockerfile
        command: 'php artisan serve --host=0.0.0.0'
        volumes:
            - '.:/var/www/html'
        networks:
            - sail
        depends_on:
            - mysql
        ports:
            - 8000:8000
    mysql:
        image: 'mysql/mysql-server:8.0'
        ports:
            - '3306:3306'
       #.env内が参照されます
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ROOT_HOST: '%'
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 1
        volumes:
            - 'sail-mysql:/var/lib/mysql'
        networks:
            - sail
        healthcheck:
            test:
                - CMD
                - mysqladmin
                - ping
            retries: 3
            timeout: 5s
networks:
    sail:
        driver: bridge
volumes:
    sail-mysql:
        driver: local

Dockerfileは、こちらの記事のコピペでほぼ問題ありません。最後のcomposer installは不要なので消しています。

# 任意のバージョンを入力
FROM php:7.3-fpm-alpine

RUN docker-php-ext-install pdo pdo_mysql sockets
RUN curl -sS https://getcomposer.org/installer​ | php -- \
    --install-dir=/usr/local/bin --filename=composer

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# docker-compose.yaml内のLaravelサービスのvolumesと一致させる
WORKDIR /var/www/html
COPY . .

後はdocker-compose up -dで立ち上がると思います。Build作業はPCスペックによりますが、contextを.としているため時間がかかります。

まとめ

Dockerfileやdocker-compose.yamlをコピペして作るのは初めてだったので、普段使ってるsail up -dの裏側や原理を学習する良い機会となりました。
dbや他イメージ(wordpressなど)を組み合わせることでHomesteadよりも素早く、共有可能な環境構築が出来るのは、学習コストに不釣り合いなくらいな大きな利点なので、今後も継続して学習しモノにしたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?