LaravelをローカルのPCに展開する。
導入するサービスは
WEBサーバー:Nginx
DBサーバー:MySQL
DBクライアントツール:phpMyAdmin
環境は、
MAC OS Catalina ver.10.15.7 (19H1217)
Docker for MACはインストール済み。
laradock % docker --version
Docker version 20.10.6, build 370c289
参考にしたサイトは
https://tadaken3.hatenablog.jp/entry/laradock-laravel
作業用のディレクトリを作成し、そこでgithubからクローンする。
Docker用のディレクトリを作ってあるので、その下に
mkdir lara-heroku-test3
でディレクトリを作る。
中に入って、
lara-heroku-test3 % git clone https://github.com/laradock/laradock.git
で、ファイルを展開する。
すると、
lara-heroku-test3 % ls -al
total 0
drwxr-xr-x 3 hnakase staff 96 6 27 01:32 .
drwxr-xr-x 16 hnakase staff 512 6 27 01:24 ..
drwxr-xr-x 101 hnakase staff 3232 6 27 01:37 laradock
と、ディレクトリが出来ているので、中に入る。
他のサイトには、
% cp env-example .env
と書いてあるのだが、
laradock % cp env-example .env
cp: env-example: No such file or directory
で見つからない。
https://readouble.com/laravel/5.7/ja/configuration.html
を見ると、.env.exampleがある、と記載がある。名称が変わったか?
で、コピーをすると、ファイルが出来た。
laradock % cp .env.example .env
laradock % ls -al .env*
-rw-r--r-- 1 hnakase staff 32781 6 27 01:47 .env
-rw-r--r-- 1 hnakase staff 32781 6 27 01:32 .env.example
.envファイルの編集は、
'# .env
'# Choose storage path on your machine. For all storage systems
- DATA_PATH_HOST=~/.laradock/data
- DATA_PATH_HOST=.laradock/data
と、
'# .env
'### MYSQL '#################################################
MYSQL_VERSION=5.7.22 # versionを固定
MYSQL_DATABASE=homestead #データベース名を変更
MYSQL_USER=homestead #ユーザー名を変更
MYSQL_PASSWORD=hogehoge #パスワードを変更
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=root
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
の2箇所。
mysqlのデータを記録するディレクトリの変更と、
mysqlへのログイン情報の変更。
で、次は、docker-composeでコンテナを立ち上げる。
過去にビルドされていない時は、warningを出しながら、
ちゃんとbuildしてくれる。
docker-compose up -d nginx mysql phpmyadmin
初めてのコマンドだと、数分かかります。
で、
WARNING: Image for service nginx was built because it did not already exist. To rebuild this image you must use docker-compose build
or docker-compose up --build
.
Creating laradock_docker-in-docker_1 ... done
Creating laradock_mysql_1 ... done
Creating laradock_workspace_1 ... done
Creating laradock_phpmyadmin_1 ... done
Creating laradock_php-fpm_1 ... done
Creating laradock_nginx_1 ... done
laradock %
となったら完了。docker dashboardで起動を確認すると良い。
https://localhost/
で、
404 not found
nginx
と表示されたらOK。
https://localhost:8080
で,
phpmyadminツールが立ち上がる、と書いてあるが、
「このページは動作していません」
だと!?
Docker Dashboardで確認すると、
あれ〜、laradock_phpmyadmin_1のポート番号が8081になってる!
で、
http://localhost:8081
でアクセス成功。
次、laravel_workspace_1の起動を確認して、
laradock % docker-compose exec --user=laradock workspace bash
laradock@ed2c876cc7b9:/var/www$
で、workspaceのコンテナに入る。
workspaceコンテナ内でcomposerを使いLaravelのプロジェクトを作成。
laradock@ed2c876cc7b9:/var/www$ composer create-project laravel/laravel src
Creating a "laravel/laravel" project at "./src"
Installing laravel/laravel (v8.5.20)
- Downloading laravel/laravel (v8.5.20)
- Installing laravel/laravel (v8.5.20): Extracting archive
Created project in /var/www/src
@php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
https://repo.packagist.org could not be fully loaded (curl error 7 while downloading https://repo.packagist.org/p2/symfony/string.json: Failed to connect to repo.packagist.org port 443: Connection refused), package information was loaded from the local cache and may be out of date
[Composer\Downloader\TransportException]
curl error 7 while downloading https://repo.packagist.org/p2/symfony/string.json: Failed to connect to repo.packagist.org port 4
43: Connection refused
create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--prefer-install PREFER-INSTALL] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--add-repository] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--remove-vcs] [--no-install] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--ask] [--] [] [] []
laradock@ed2c876cc7b9:/var/www$
何だこのエラーは?
と調べてみると、IPv6での接続がNGらしい。
https://blog.kubou.net/2019/04/09/231536/
に記載があった。
そこで、MACのネットワーク設定を開き、TCP/IPのタブで、
IPv6の設定:リンクローカルのみ
を選択して適用。
laradock@ed2c876cc7b9:/var/www$ rm -rf src
で、srcを削除して(削除しないとsrcが空じゃない、とエラーがでる)
laradock@ed2c876cc7b9:/var/www$ composer create-project laravel/laravel src
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: fruitcake/laravel-cors
Discovered Package: laravel/sail
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
74 packages you are using are looking for funding.
Use the composer fund
command to find out more!
@php artisan key:generate --ansi
Application key set successfully.
laradock@ed2c876cc7b9:/var/www$
完了。
laradock@ed2c876cc7b9:/var/www$ cd src
で、srcディレクトリに入って、
laradock@ed2c876cc7b9:/var/www/src$ vi .env
で.envファイルを編集。
'#.env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=hogehoge
で、データベースに関する情報を更新して、保存。
引き続き、
laradock@ed2c876cc7b9:/var/www/src$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (47.84ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (39.11ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (39.60ms)
laradock@ed2c876cc7b9:/var/www/src$ php artisan key:generate
Application key set successfully.
laradock@ed2c876cc7b9:/var/www/src$
で完了。
exitでコンテナを抜けて、laravelの.envを編集。
'############################'
'# General Setup'
'############################'
'### Application Path'
'# Point to your application code, will be available at /var/www
.'
APP_CODE_PATH_HOST=../src/
で、保存したら、
nginxを再起動。
laradock % docker-compose up -d nginx
Docker Compose is now in the Docker CLI, try docker compose up
Recreating laradock_docker-in-docker_1 ... done
Recreating laradock_workspace_1 ... done
Recreating laradock_php-fpm_1 ... done
Recreating laradock_nginx_1 ... done
hnakase@HironoMacBook-Pro laradock %
これで、
https://localhost/
にアクセスすると、Laravelのindexページが表示されて完了。