[Laravel7] Laradockで開発するための準備
目的
新しい環境を構築する際に、手順が確立していないと面倒なことが多かったので、
Laradockで作る簡単な手順をココに記載しておこうと思う。
※なお、docker for macでのdocker環境があること前提で記載している。
1.Laradock設定
1-1.Laradockの準備
laradockはこちらから入手する。
コマンドは、
git clone https://github.com/laradock/laradock.git
1-2.Laradockの設定
・ mysqlのversionの指定があれば、
MYSQL_VERSION=5.7.12
として指定する。
・管理画面にVoyagerを使うため
PHP_FPM_INSTALL_EXIF=true
としておく。
ARG INSTALL_EXIF=true
こちらも設定すること。
1-3.nginx conf設定
・[XXX]はhost名にしておくこと
server {
listen 80;
listen [::]:80;
server_name [XXX].local;
root /var/www/[XXX]/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass php-upstream;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fixes timeouts
fastcgi_read_timeout 600;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
error_log /var/log/nginx/app_error.log;
access_log /var/log/nginx/app_access.log;
}
1-4.hosts設定
・macの場合
sudo vi /etc/hosts
127.0.0.1 [XXX].local
これで、http://[XXX].local/
としてアクセスできるようになる。
1-5.laradock立ち上げ
docker-compose up -d nginx mysql workspace redis
1-6.mysql database作成
.mysqlコンテナに入る
docker-compose exec mysql bash
・mysql起動
mysql -uroot -proot
・database作成&権限付与
CREATE DATABASE IF NOT EXISTS
[XXX]_dbCOLLATE 'utf8_general_ci' ;
GRANT ALL ON
[XXX]_db.* TO 'default'@'%' ;
2.Laravel設定
2-1.Laravel 準備
このようにLaradockと同じ場所にLaravel projectを設置する。
composer create-project --prefer-dist laravel/laravel [XXX]
2-2. .env作成
workspaceに入って、[XXX]に遷移。
docker-compose exec workspace sh
cd [XXX]
.envを作成する。
cd [XXX]
cp .env.example .env
そして、key:generateしておく。
php artisan key:generate
2-3. .env Mysql設定
Laravel [XXX]直下の.env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_HOST_READ=mysql
DB_PORT=3306
DB_DATABASE=[XXX]_db
DB_USERNAME=default
DB_PASSWORD=secret
※マスター/スレーブ構成の準備としてDB_HOST_READ=mysql
を追記している
2-4. .env redis設定
Laravel [XXX]直下の.env
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
2-5. .env Voyager設定
Laravel [XXX]直下の.env
SESSION_COOKIE=auth
SESSION_COOKIE_ADMIN=auth-admin
2-6. laravel/ui設定(ログイン機能)
composer require laravel/ui
npm install && npm run dev
php artisan ui vue --auth
php artisan migrate
【参考】https://qiita.com/kapibarasensei/items/c6b40366505f94103c35
2-7. voyager設定
composer require tcg/voyager
php artisan voyager:install
・管理者作成
php artisan voyager:admin [email protected] --create
$uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
if (strpos($uri, '/admin/') === 0 || $uri === '/admin') {
$conf['cookie'] = env(
'SESSION_COOKIE_ADMIN',
str_slug(env('APP_NAME', 'laravel'), '_').'_admin_session'
);
}
$uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
if (strpos($uri, '/admin/') === 0 || $uri === '/admin') {
$conf['defaults'] = [
'guard' => 'web',
'passwords' => 'users',
];
}
【参考】https://qiita.com/daisu_yamazaki/items/0e27a62990ef32998a2d
2-8. redis準備
composer require predis/predis
【参考】https://qiita.com/ma7ma7pipipi/items/e3f7007d38ee5cedcd48
2-9. doctrine/dbal準備
composer require doctrine/dbal
2-10. マスター/スレーブ設定
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'read' => [
'host' => env('DB_HOST_READ', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
],
'write' => [
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
],
【参考】https://qiita.com/ngyuki/items/a3ab2ea615e8ba73a491
2-11. Laravel-enum
composer require bensampo/laravel-enum
【参考】https://qiita.com/10mi8o/items/dcab6fbf0e71389304f1
2-12. キャッシュクリア等実行
php artisan migrate
composer dump-autoload
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
これで一通りの準備が出来たかと思います。
ここからは、Voyagerからアップする画像の保存先をS3にする場合の設定を記述しておきます。
※本家のドキュメント、動画にはありましたが、日本語化されていなかったので忘備録として。
3.S3等設定
3-1.パッケージのインストール
composer require league/flysystem-aws-s3-v3
3-2. .env記述
AWS_ACCESS_KEY_ID=ユーザーを作成した際に表示されたAccess key ID
AWS_SECRET_ACCESS_KEY=ユーザーを作成した際に表示されたSecret access key
AWS_DEFAULT_REGION=ap-northeast-1 (東京リージョンの場合)
AWS_BUCKET=bucket名
AWS_URL=buketのURL
AWS_ENDPOINT=https://s3-ap-northeast-1.amazonaws.com(東京リージョンの場合)
【参考】https://qiita.com/tiwu_dev/items/ecb115a92ebfebf6a92f
※ENDPOINTはVoyagerのアップ時に利用している?
https://s3-[リージョン名].amazonaws.com
【参考】AWSサービスエンドポイント
3-3.Voyager用設定
Voyagerの画像ファイルの保存先をS3にしたいが、設定手順が見つからなかったので記載。
'storage' => [
'disk' => 's3',
],
※S3の権限設定も必要。
(Voyagerからの画像アップをするので公開設定にしておく)
【参考】https://qiita.com/masch/items/fedd4894087b7447827f
4.その他
4-1.Helper
Laravel 5へ自作のヘルパー関数を追加するベストプラクティス
※ヘルパー関数を読み込むサービスプロバイダを定義する方法 を利用しています
4-2.Api設定
apiでもsessionを使えるようにしておく。
'api' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
// 'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
4-3. 管理画面のみBasic認証
php artisan make:middleware BasicAuthMiddleware
<?php
namespace App\Http\Middleware;
use Closure;
class BasicAuthMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$url = config('app.url');
$urlAddress = [
'http://[XXX].test',
];
// localの場合は外す
if(!in_array($url, $urlAddress)) {
// PHPによるBasic認証
switch (true) {
case !isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']):
case $_SERVER['PHP_AUTH_USER'] !== 'user':
case $_SERVER['PHP_AUTH_PW'] !== 'password':
header('WWW-Authenticate: Basic realm="Enter username and password."');
header('Content-Type: text/plain; charset=utf-8');
die('このページを見るにはログインが必要です');
}
}
header('Content-Type: text/html; charset=utf-8');
return $next($request);
}
}
※localではbasic認証を付けないようにしている。
※ここでuserとパスワードを管理するよりも、.envで設定して環境毎に変えるとかも良いかもしれません。
protected $routeMiddleware = [
'basicauth' => \App\Http\Middleware\BasicAuthMiddleware::class, //追加
];
// Basic認証
Route::group(['middleware' => 'basicauth'], function() {
Route::group(['prefix' => 'admin'], function () {
Voyager::routes();
});
});
Author And Source
この問題について([Laravel7] Laradockで開発するための準備), 我々は、より多くの情報をここで見つけました https://qiita.com/koisan1153/items/6fce685a746bc18730c0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .