Open Fendo181 opened 5 years ago
こんな感じに設定を追加した。
<?php
namespace Deployer;
require 'recipe/laravel.php';
// アプリの名前
set('application', 'laravel-first-endu-app');
// リポジトリ
set('repository', 'git@github.com:Fendo181/laravel_repos.git');
// [Optional] Allocate tty for git clone. Default value is false.
set('git_tty', false);
// ブランチ
set('branch', 'master');
// Shared files/dirs between deploys
add('shared_files', ['.env']);
add('shared_dirs', []);
// Writable dirs by web server
add('writable_dirs', ['bootstrap/cache', 'storage']);
// Hosts
host('{app_name}')
->stage('production')
->user('{user_name}')
->port('{port_number}')
->identityFile('{id_rsa.pub}')
->set('deploy_path', '/var/www/');
// Tasks
task('build', function () {
run('cd {{release_path}} && build');
});
// サブディレクトリでコマンドを実行するようにする
task('change_cwd', function () {
$subdir = get('release_path') . DIRECTORY_SEPARATOR . 'myApp';
set('release_path', $subdir);
run('cd {{release_path}}');
});
after('deploy:update_code', 'change_cwd');
// [Optional] if deploy fails automatically unlock.
after('deploy:failed', 'deploy:unlock');
// Migrate database before symlink new release.
before('deploy:symlink', 'artisan:migrate');
デプロイを実行
火 18 :myApp [endu]# php vendor/bin/dep deploy staging
✈︎ Deploying add-deployer on ssh-1.mc.lolipop.jp
✔ Executing task deploy:prepare
✔ Executing task deploy:lock
✔ Executing task deploy:release
➤ Executing task deploy:update_code
.
.(個人情報が記載されている為省略)
.
Permission denied (publickey).
fatal: Could not read from remote repository.
権限周りで怒られた 🤔
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
これはマネクラに原因があるわけではなく、単純にgitのリモートリポジトリをssh
でgit clone
しようとしたけど、公開鍵認証の際の公開鍵を登録してないので、怒られているだけだった。
なのでマネクラ→github
で認証する為の鍵を生成する。
# ディレクトリに移動する
$ cd ~/.ssh
# 鍵を作成する。 (メールアドレスはgitアカウントのメールアドレスです)
$ ssh-keygen -t rsa -b 4096 -C "YOUR@EMAIL.com"
# 鍵を確認する
$ ls
id_rsa id_rsa.pub known_hosts
さきほど生成した公開鍵をGithubに登録します。
cat ~/.ssh/id_rsa.pub
ここから追加してください。
Githunに正常に登録されたかを確認するには以下のコマンドを実行してください。
sh -T git@github.com
上手く行けば、こんな感じにレスポンスが返ってくる。
Hi Fendo181! You've successfully authenticated, butGitHub does not provide shell access.
odd-yoron-5564@ssh-laravel-first-endu-app:/var/www/
ref: Install Ruby On Rails on Ubuntu 16.04 Xenial Xerus | GoRails
ブランチ指定しないと今の作業ブランチを指定するのか... 🤔
================
fatal: Remote branch add-deployer not found in u
pstream origin
これでデプロイするブランチを指定できそう
set('branch', 'master');
ref: Deployer — Hosts
次に進んだがエラーが出た。くそー しかし、ここら辺はインフラ研修で鍛えられたので、ガンガン解決して進んでいく気持ち。
The command "cd /var/www//releases/1 && /usr/lo
cal/bin/php /var/www//releases/1/composer.phar
install --verbose --prefer-dist --no-progress -
-no-interaction --no-dev --optimize-autoloader"
failed.
Exit Code: 1 (General error)
Host Name: ssh-1.mc.lolipop.jp
================
Composer could not find a composer.json file in
/var/www/releases/1
To initialize a project, please create a compos
er.json file as described in the https://getcom
poser.org/ "Getting Started" section
これ単純にComposer could not find
って言っているから、実行しようとしたディレクトリを間違えているのでは? 💭
release_path
にサブディレクトリ先のPATH
に設定する事で上記の問題は解決した 🎉
// サブディレクトリでコマンドを実行するようにする
task('change_cwd', function () {
$subdir = get('release_path') . DIRECTORY_SEPARATOR . 'myApp';
set('release_path', $subdir);
run('cd {{release_path}}');
});
マネクラのサーバを見た所、正常にmyApp
ディレクトリ内でcomposer install
が実行されている事を確認した。
odd-yoron-5564@ssh-laravel-first-endu-app:/var/www/release/myApp$ php artisan -V
Laravel Framework 5.7.15
が今度は別の問題がでた(?)
In writable.php line 30:
Can't detect http user name.
Please setup `http_user` config parameter.
http_user
を設定してないと怒られた。
ln -s
コマンドで、シンボリックリンクを貼る。
こうする事で、
public
以下のファイルをhtml
ディレクトリ以下から、リンクで辿れるようにした。
:/var/www/release/myApp$ ln -s public/* ~/html/
が画面を見ると403 Forbidden
になっている... 🤔
権限周りを確認する
odd-yoron-5564@ssh-laravel-first-endu-app:/var/www/html$ ls -lltotal 8
lrwxrwxrwx 1 odd-yoron-5564 www-data 10 Dec 17 18:25 css -> public/css
lrwxrwxrwx 1 odd-yoron-5564 www-data 18 Dec 17 18:25 favicon.ico -> public/favicon.ico
drwxrwxr-x 2 odd-yoron-5564 www-data 4096 Nov 29 2017 img
-rw-rw-r-- 1 odd-yoron-5564 www-data 1783 Aug 1 2017 index.html
lrwxrwxrwx 1 odd-yoron-5564 www-data 16 Dec 17 18:25 index.php -> public/index.php
lrwxrwxrwx 1 odd-yoron-5564 www-data 9 Dec 17 18:25 js -> public/js
lrwxrwxrwx 1 odd-yoron-5564 www-data 17 Dec 17 18:25 robots.txt -> public/robots.txt
lrwxrwxrwx 1 odd-yoron-5564 www-data 17 Dec 17 18:25 web.config -> public/web.config
問題なさそうに見えるなぁ
参考にした資料 ref: lnコマンドについて詳しくまとめました 【Linuxコマンド集】
Apatch2.4の設定を変えてみる
まずは設定ファイルを確認する。
$ cd /etc/apache2/
$ ls
apache2.conf envvars mods-enabled sites-enabled
conf-available magic ports.conf
conf-enabled mods-available sites-available
apache2.conf
が設定ファイルなので、覗いてみる。
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
設定としては、Require all granted
にしているので、問題なさそう。
Options Indexes FollowSymLinks
にもしているので、ちゃんとシンボリックリンクも追うようになっている。
そうなると、ディレクトリーの権限周りが怪しそう。。。
apacheでシンボリックリンクがForbiddenになる時は「SymLinksIfOwnerMatch」を疑おう – DACELO SPACE
ドキュメントルートは固定だから、/www/html
以下にデプロイしないといけない事がわかった 😫
(これに気付くまで何時間も溶かしてしまった....)
/var/www/html がドキュメントルートとして設定されている 現状、ドキュメントルートが /var/www/html 固定だが、これを変更可能にすることはできるだろうか?
ref:マネージドクラウドを使ってみる (PHP編) - Qiita
変更可能にしてほしい... 🙏 (この想いが福岡のりょうさんに届きますように)
なので、一旦は/var/www/
ディレクトリ以下にデプロイするようにしてみる
/var/www/html
以下にデプロイすれば良い事がわかった。
が、シンボリックリンクを貼っての表示ができている事例があるので、なぜ自分の環境では出来てないのか疑問があるので、聴いてみる事にしよう... 🤔
正しく絶対パスにして、シンボリックリンクのコマンドを指定したら、ちゃんとプロジェクトの中のアプリケーションを見るようになった! 🎉
ln -s /var/www/release/myApp/public/ /var/www/html/
が、アプリケーション画面を見ると500 InternalServerError
が発生している...
/var/www/shared/storage/logs
にlaravelのエラーログが吐き出さられている。
見ると、いつも見るapplication encryption key
が無い事で怒られていた!
よしっ!こいつはすぐに解決できそう!!
[2018-12-18 05:17:34] laravel.ERROR: No application encryption key has been specified. {"exception":"[object] (RuntimeException(code: 0): No application encryption key has been specified. at /var/www/releases/1/myApp/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php:44)
以下のコマンドを叩いて、アプリケーションキーを生成する。
php artisan key:generate
だめだった... /(^o^)\
$ php artisan key:generate
Application key set successfully.
キーは作られたが、だめだった... 見ると別のエラーが出ていた。
[2018-12-18 05:17:34] laravel.EMERGENCY: Unable to create configured logger. Using emergency logger. {"exception":"[object] (InvalidArgumentException(code: 0): Log [] is not defined. at /var/www/releases/1/myApp/vendor/laravel/framework/src/Illuminate/Log/LogManager.php:167)
どうやら、Laravel5.5から5.6にアップグレードする際に、logging.php
を追加してなかったのが原因だった。
ref: laravel.EMERGENCY: Unable to create configured logger. Using emergency logger. - Qiita
追加したら、エラーが消えた。
が以前として、application encryption key
が無いと怒られている... 🤔
[2018-12-18 05:17:34] laravel.ERROR: No application encryption key has been specified. {"exception":"[object] (RuntimeException(code: 0): No application encryption key has been specified. at /var/www/releases/1/myApp/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php:44)
本番サーバに入って.env
を見ると何も書かれてなかった....
なぜだろう...
.env
は手動でvimを使って記述をした。
その後、アクセスした所確認できた!!!!!
やったぁーーー!!
.env
が空のまま作られてしまうのは、deployer
側の仕様だった。
ただし、はじめからプロジェクト内に.envファイルが存在しない場合、空の.envファイルが生成され、それがリンクされます このため、sharedディレクトリにファイルがコピーされる前に環境にあわせた.envをファイルをプロジェクトディレクトリに生成しておく必要があります。
ref: Deployerを使ってLaravelのenvファイルをデプロイする - Qiita
ΩΩΩ<なっ..なっ...なんだってぇ〜!
普通に困るなので、deployer
に設定を追加する。
// sharedディレクトリにファイルがコピーされる前に、copy:envを実行して`.env`ファイルをコピーしておく
before('deploy:shared','upload:env');
/**
* .envを本番サーバにアップロードする
*/
task('upload:env', function () {
upload('.env', '{{deploy_path}}/shared/.env');
})->desc('.envをアップロード');
この状態でちゃんと、本番環境に.env
がデプロイされたか確認する。
odd-yoron-5564@ssh-laravel-first-endu-app:/var/www/shared$ pwd
/var/www/shared
odd-yoron-5564@ssh-laravel-first-endu-app:/var/www/shared$ cat .env
APP_NAME=Laravel
APP_ENV=local
出来た〜! 🎉 これで.env
問題も解決した。
正しいパスを指定してシンボリックリンクを貼る
ln -s /var/www/release/myApp/public/* /var/www/html/
https://laravel-first-endu-app.lolipop.io/
最高だ〜〜〜!!!
こちらで試した所再度エラーがでた。
composer install
はできてそう
【WIP】LaravelとVue.jsを使ったSPAアプリケーションの作成 by Fendo181 · Pull Request #7 · Fendo181/laravel_repos
Loading composer repositories with package information
Installing dependencies from lock file
Dependency resolution completed in 0.000 seconds
Analyzed 107 packages to resolve dependencies
Analyzed 226 rules to resolve dependencies
Package operations: 45 installs, 0 updates, 0 removals
Installs: symfony/polyfill-ctype:v1.10.0, symfony/yaml:v4.2.4, symfony/process:v4.2.4, symfony/polyfill-mbstring:v1.10.0, symfony/contracts:v1.0.2, symfony/console:v4.2.4, psr/container:1.0.0, pimple/pimple:v3.2.3, deployer/phar-update:v2.1.0, deployer/depl
oyer:v6.4.3, doctrine/inflector:v1.3.0, doctrine/lexer:v1.0.1, dragonmantank/cron-expression:v2.2.0, erusev/parsedown:1.7.1, phpoption/phpoption:1.5.0, vlucas/phpdotenv:v3.3.2, symfony/css-selector:v4.2.4, tijsverkoyen/css-to-inline-styles:2.2.1, symfony/po
lyfill-php72:v1.10.0, symfony/var-dumper:v4.2.4, symfony/routing:v4.2.4, symfony/http-foundation:v4.2.4, symfony/event-dispatcher:v4.2.4, psr/log:1.1.0, symfony/debug:v4.2.4, symfony/http-kernel:v4.2.4, symfony/finder:v4.2.4, egulias/email-validator:2.1.7,
swiftmailer/swiftmailer:v6.1.3, paragonie/random_compat:v9.99.99, ramsey/uuid:3.8.0, psr/simple-cache:1.0.1, opis/closure:3.1.6, symfony/translation:v4.2.4, nesbot/carbon:2.14.2, monolog/monolog:1.24.0, league/flysystem:1.0.50, laravel/framework:v5.8.3, fid
eloper/proxy:4.1.0, jakub-onderka/php-console-color:v0.2, nikic/php-parser:v4.2.1, jakub-onderka/php-console-highlighter:v0.4, dnoegel/php-xdg-base-dir:0.1, psy/psysh:v0.9.9, laravel/tinker:v1.0.8
- Installing symfony/polyfill-ctype (v1.10.0): Loading from cache
Extracting archive - Installing symfony/yaml (v4.2.4): Loading from cache
Extracting archive - Installing symfony/process (v4.2.4): Loading from cache
Extracting archive - Installing symfony/polyfill-mbstring (v1.10.0): Loading from cache
Extracting archive - Installing symfony/contracts (v1.0.2): Loading from cache
Extracting archive - Installing symfony/console (v4.2.4): Loading from cache
Extracting archive - Installing psr/container (1.0.0): Loading from cache
Extracting archive - Installing pimple/pimple (v3.2.3): Loading from cache
Extracting archive - Installing deployer/phar-update (v2.1.0): Loading from cache
Extracting archive - Installing deployer/deployer (v6.4.3): Loading from cache
Extracting archive - Installing doctrine/inflector (v1.3.0): Loading from cache
Extracting archive - Installing doctrine/lexer (v1.0.1): Loading from cache
Extracting archive - Installing dragonmantank/cron-expression (v2.2.0): Loading from cache
Extracting archive - Installing erusev/parsedown (1.7.1): Loading from cache
Extracting archive - Installing phpoption/phpoption (1.5.0): Loading from cache
Extracting archive - Installing vlucas/phpdotenv (v3.3.2): Loading from cache
Extracting archive - Installing symfony/css-selector (v4.2.4): Loading from cache
Extracting archive - Installing tijsverkoyen/css-to-inline-styles (2.2.1): Loading from cache
Extracting archive - Installing symfony/polyfill-php72 (v1.10.0): Loading from cache
Extracting archive - Installing symfony/var-dumper (v4.2.4): Loading from cache
Extracting archive - Installing symfony/routing (v4.2.4): Loading from cache
Extracting archive - Installing symfony/http-foundation (v4.2.4): Loading from cache
Extracting archive - Installing symfony/event-dispatcher (v4.2.4): Loading from cache
Extracting archive - Installing psr/log (1.1.0): Loading from cache
Extracting archive - Installing symfony/debug (v4.2.4): Loading from cache
Extracting archive - Installing symfony/http-kernel (v4.2.4): Loading from cache
Extracting archive - Installing symfony/finder (v4.2.4): Loading from cache
Extracting archive - Installing egulias/email-validator (2.1.7): Loading from cache
Extracting archive - Installing swiftmailer/swiftmailer (v6.1.3): Loading from cache
Extracting archive - Installing paragonie/random_compat (v9.99.99): Loading from cache
Extracting archive - Installing ramsey/uuid (3.8.0): Loading from cache
Extracting archive - Installing psr/simple-cache (1.0.1): Loading from cache
Extracting archive - Installing opis/closure (3.1.6): Loading from cache
Extracting archive - Installing symfony/translation (v4.2.4): Loading from cache
Extracting archive - Installing nesbot/carbon (2.14.2): Loading from cache
Extracting archive - Installing monolog/monolog (1.24.0): Loading from cache
Extracting archive - Installing league/flysystem (1.0.50): Loading from cache
Extracting archive - Installing laravel/framework (v5.8.3): Loading from cache
Extracting archive - Installing fideloper/proxy (4.1.0): Loading from cache
Extracting archive - Installing jakub-onderka/php-console-color (v0.2): Loading from cache
Extracting archive - Installing nikic/php-parser (v4.2.1): Loading from cache
Extracting archive - Installing jakub-onderka/php-console-highlighter (v0.4): Loading from cache
Extracting archive - Installing dnoegel/php-xdg-base-dir (0.1): Loading from cache
Extracting archive - Installing psy/psysh (v0.9.9): Loading from cache
Extracting archive - Installing laravel/tinker (v1.0.8): Loading from cache
Extracting archiveGenerating optimized autoload files
> post-autoload-dump: Illuminate\Foundation\ComposerScripts::postAutoloadDump
> post-autoload-dump: @php artisan package:discover
Script @php artisan package:discover handling the post-autoload-dump event returned with error code 1
↑の問題は解決した。
結論から先に書くとphp artisan package:discover
実行時に以下のクラスのファイルがないと怒られていたのが原因だった。
ideHelperServiceProvider
はphp artisan ide-helper:generate
を実行しないと生成されないファイルで、このファイルがなくエラーがでていた。
なので、コマンドを実行すれば問題なかったが、なくても特に問題ないので削除した。
【WIP】LaravelとVue.jsを使ったSPAアプリケーションの作成 by Fendo181 · Pull Request #7 · Fendo181/laravel_repos
$this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
困っていること
マネージドクラウドがせっかく無料で使えるという事で、Laravelのアプリケーションをdeployerを使ってデプロイしていく。
公式にLaravelのデプロイに特化した設定が自動で出力される記事があった。
Deployer — How to deploy Laravel application
参考にした設定資料
ゴール
(課題に対して、理想ではどうなっているべきか、どうあって欲しいかを書きます。このゴールが達成された時に issue を close します)
相談したいこと
(ゴールにいたるために、悩んでいること、決めて欲しいこと、助言してもらいたいことを書きます。)
関係者
(相談したい人にメンションします。)