[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의 버전 지정이 있으면,
.envMYSQL_VERSION=5.7.12
로 지정한다.
· 관리 화면에 Voyager를 사용하기 위해
.envPHP_FPM_INSTALL_EXIF=true
로 둔다.
.phpfpm/DockerfileARG INSTALL_EXIF=true
이쪽도 설정하는 것.
1-3.nginx conf 설정
· [XXX]는 호스트 이름이어야합니다.
nginx/sites/[XXX].confserver {
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
/etc/hosts127.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]_db COLLATE '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 설정
라라벨 [XXX] 바로 아래 .env
.envDB_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 설정
라라벨 [XXX] 바로 아래 .env
.envREDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
2-5. .env Voyager 설정
라라벨 [XXX] 바로 아래 .env
.envSESSION_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
[참고] htps : // 코 m / 카피 바나 센세이 / ms / c6b40366505f94103c35
2-7. voyager 설정
composer require tcg/voyager
php artisan voyager:install
· 관리자 작성php artisan voyager:admin [email protected] --create
/config/session.php$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'
);
}
/config/auth.php$uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
if (strpos($uri, '/admin/') === 0 || $uri === '/admin') {
$conf['defaults'] = [
'guard' => 'web',
'passwords' => 'users',
];
}
[참고] htps : // 코 m / 다이 스 _ 야마자키 /
2-8. redis 준비
composer require predis/predis
[참고] htps : // 코 m / 마 7 7
2-9. doctrine/dbal 준비
composer require doctrine/dbal
2-10. 마스터/슬레이브 설정
config/database.php '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'),
],
[참고] htps : // 코 m / 응규 / ms / 아 3 아 b2 에아 615 8 77 아 491
2-11. Laravel-enum
composer require bensampo/laravel-enum
[참고] htps : // m / 10 / 8 / ms / d 또는 b6fbf0 71389304f1
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 설명
.envAWS_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(東京リージョンの場合)
[참고] htps : // m / chi _ v / ms / e cb 115 a 92 e b fu bf 6 a 92f
※ ENDPOINT는 Voyager의 업시에 이용하고 있습니까?
https://s3-[지역 이름].amazonaws.com
[참고] AWS 서비스 엔드포인트
3-3. Voyager용 설정
Voyager의 화상 파일의 저장처를 S3로 하고 싶지만, 설정 순서를 찾을 수 없었기 때문에 기재.
config/voyager.php 'storage' => [
'disk' => 's3',
],
※S3의 권한 설정도 필요.
(Voyager로부터의 이미지 업을 하므로 공개 설정으로 해 둔다)
[참고] htps : // 코 m/마 sch/아니 ms/훗 d4894087b7447827f
4. 기타
4-1.Helper
Laravel 5에 자체 제작 도우미 함수를 추가하는 모범 사례
※ 헬퍼 함수를 읽는 서비스 프로바이더를 정의하는 방법 을 이용하고 있습니다
4-2.Api 설정
api에서도 session을 사용할 수 있도록 해 둔다.
app/Http/Kernel.php '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
app/Http/Middleware/BasicAuthMiddleware.php<?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로 설정해 환경마다 바꾸면 좋을지도 모릅니다.
app/Http/Kernel.phpprotected $routeMiddleware = [
'basicauth' => \App\Http\Middleware\BasicAuthMiddleware::class, //追加
];
routes/web.php// Basic認証
Route::group(['middleware' => 'basicauth'], function() {
Route::group(['prefix' => 'admin'], function () {
Voyager::routes();
});
});
Reference
이 문제에 관하여([Laravel7] Laradock에서 개발할 준비), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/koisan1153/items/6fce685a746bc18730c0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
MYSQL_VERSION=5.7.12
PHP_FPM_INSTALL_EXIF=true
ARG INSTALL_EXIF=true
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;
}
127.0.0.1 [XXX].local
DB_CONNECTION=mysql
DB_HOST=mysql
DB_HOST_READ=mysql
DB_PORT=3306
DB_DATABASE=[XXX]_db
DB_USERNAME=default
DB_PASSWORD=secret
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
SESSION_COOKIE=auth
SESSION_COOKIE_ADMIN=auth-admin
$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',
];
}
'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'),
],
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(東京リージョンの場合)
'storage' => [
'disk' => 's3',
],
'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,
],
<?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);
}
}
protected $routeMiddleware = [
'basicauth' => \App\Http\Middleware\BasicAuthMiddleware::class, //追加
];
// Basic認証
Route::group(['middleware' => 'basicauth'], function() {
Route::group(['prefix' => 'admin'], function () {
Voyager::routes();
});
});
Reference
이 문제에 관하여([Laravel7] Laradock에서 개발할 준비), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/koisan1153/items/6fce685a746bc18730c0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)