linuxサーバーにて、laravelの環境を構築したので備忘。
##ローカルにlaravelプロジェクトの作成
既存サーバー環境にlaravelにて開発した別プロジェクトがいたので、バージョンを合わせてプロジェクトの作成。
既存laravelのバージョン確認。
laravelのルートディレクトリにて下記を実行。
php artisan -V
5.5.20
LTS(Long-Term Stability:長期間安定性)のバージョン。
今回はlaradockを使用しているので、dockerにてlaravelプロジェクトの作成。
こちらを参照。
https://qiita.com/tomborius/items/6a5f3a8e4f6f477d96c7
1点だけ違うのが、laravelのバージョン指定をして作成。
composer create-project "laravel/laravel=5.5.*" project_name
##git管理
ローカルに作成したプロジェクトをbitbucketにて管理する。
bitbucketにて新規プロジェクト用のリポジトリを新規作成。
git管理したいプロジェクトのディレクトリまで移動して下記を実行。
git init
git add -A
git commit -m "first commit"
ローカルのリポジトリとリモートのリポジトリを紐付け。
bitbucketのクローンするときに出てくるhttpをコピーして下記に貼り付け。
git remote add origin https://xxxxxx@bitbucket.org/yyyyyyyyy/zzzzzzzzz.git
準備が整ったのでpush
git push origin master
エラー...
failed to push some refs to 'https://xxxxxx@bitbucket.org/yyyyyyyyy/zzzzzzzzz.git'
どうやら、ローカルのreadmeとリモートのreadmeとで競合が発生。
ローカルの方を強制的に正しいこととする。
git merge --allow-unrelated-histories origin/master
git push origin master
成功。
あとは、使う想定のブランチを切る。
##サーバに新プロジェクト用のドメインを追加
rootにてサーバにログイン。
useraddにてユーザを追加する。
useradd new_user
ついでに、パスワードも変更しておく。
passwd new_user
new_userにて再度サーバにログイン。
ルートにするディレクトリにて、クローンを実行。
このとき、このあとに作成する自動デプロイ機能を活用するために、httpではなくsshにてクローンをする。
##envファイル
cp .env.sample .env
.envの中を対処プロジェクトによって変更する。
##デプロイ
envoyファイルの作成
@include("./vendor/autoload.php")
@servers(['dev' => ['new_user@192.168.xxx.yyy']])
@story('deploy_dev', ['on' => 'dev'])
chdir_app_root
git_develop
migrate
remove_cache
@endstory
@task('chdir_app_root')
cd ~/htdocs
@endtask
@task('git_develop')
cd ~/htdocs
git pull origin develop
@endtask
@task('remove_cache')
cd ~/htdocs
~/bin/composer dump-autoload
php artisan clear-compiled
php artisan optimize
php artisan config:cache
rm -f ~/htdocs/bootstrap/cache/config.php
@endtask
@task('migrate')
cd ~/htdocs
php artisan migrate
@endtask
デプロイを実施。
下記をルートディレクトリにて実行。
envoy run deploy_dev
gitからのpullはできたけど、エラー…
/vendor/autoload.php
がない。
そもそも、composerがインストールされていない!
とりあえずはcomposerのインストール。
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
「composer」で使用できるようにbinへ移動。
mv composer.phar /usr/local/bin/composer
composerのインストール完了!
そしたら、composer.jsonから必要なライブラリをインストール。
composer install
/vendor/autoload.php
が作成されたことを確認。
再度envoy → 正常に完了。
##apacheの設定
まずはconfigの設定。
既存のapacheにプロジェクトを追加するので、現状の設定を確認。
まずは、/etc/httpd/conf/httpd.conf
の内容を確認。
複数サイトの管理をしているので、サイトごとのconfigをincludeしている。
IncludeOptional conf.d/*.conf
/etc/httpd/conf.d
の.confを確認。
ssl.conf
にサイトごとの記載あり。
既存の書き方を真似て、virtualhostを追記。
あとやったとこと:
・virtualhostにて記載しているログファイルの書き出しディレクトリの整備
・pathへの追記
・ssl接続の設定
この辺りの設定をミスると、apache再起動時に再起動しなくなるので注意!!
最後に、apacheに変更後の設定を反映させる。
すでに動いている環境があるので、再起動ではなくreload(graceful)
を行う。
systemctl reload httpd
systemctlでのreloadがhttpdのgracefulになる記述は下記。
cat /usr/lib/systemd/system/httpd.service
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
Environment=LANG=C
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
# Send SIGWINCH for graceful stop
KillSignal=SIGWINCH
KillMode=mixed
PrivateTmp=true
実行後、apacheのステータスを確認する。
systemctl status httpd
エラーになっていなければ完了。
作成したサイトにアクセス。
403 Forbidden
You don't have permission to access / on this server
パーミッションの設定は確かに何もしていない。
新規で作成したディレクトリのパーミッションを変更。
そもそも、パーミッションについてあまり知らない…
@shisamaさんの記事が非常にわかりやすかったので、下記リンクになります。
https://qiita.com/shisama/items/5f4c4fa768642aad9e06
・ルートディレクトリ(755)
・~/laravel/public/storage/logs(777)
・~/laravel/public/storage/framework(777)
※framework内の全ディレクトリ
再度実行。
RuntimeException
No application encryption key has been specified.
またまたエラー。
調べると.env
のAPP_KEY
がないとのこと。
下記を実行。
php artisan key:generate
その後.envのAPP_KEYが入っていることを確認。
再度アクセスし、Laravel起動を確認し完了。