はじめに
この記事はLaravel Advent Calendar 2019の23日目の記事です
過去に培ったレンサバ(さくらサーバ、バリューサーバ)でLaravelを動かすためのアレコレを書いていきます
.
.
.
という予定だったんですが、さくらサーバーでの環境構築手順メモしか手元に残ってなかったのでほぼさくらサーバーでの環境構築手順になります(主語でかで申し訳ないです)
AWSとかわからんからレンサバでLaravelを動かす
というのはまあ半分冗談で、大体がコストになるとか、先方指定とかで最終的にレンタルサーバーにしてくださいって言われるので、世間的にもそうなのかな?と思いつつ記事書いていきます。
このTipsが誰かの役に立てれば我幸です。
情報の鮮度的に19年9月ごろまでの話で今現在以下の通りでない可能性も無きにも非ずです
あとここで想定しているLaravelのバージョンは5.7~5.8系です。
さくらのレンタルサーバーで環境構築
※ローカルで作成してプロジェクトがGitホスティングサービス(GitLabとかGithub)上に上がってる前提です。
1,sshでログイン
おそらく借りた直後にssh接続すると以下のような画面になると思います。
FreeBSD 11.2-RELEASE-p5 (GENERIC) #0: Tue Nov 27 09:33:52 UTC 2018
Welcome to FreeBSD!
%
% ls -la
total 56
drwx------ 9 testtest users 512 Dec 13 19:23 .
drwxr-xr-x 160 root wheel 3584 Jan 18 10:34 ..
-rw-r--r-- 1 testtest users 773 Nov 29 17:01 .cshrc
-rw-r--r-- 1 testtest users 258 Nov 29 17:01 .login
-rw-r--r-- 1 testtest users 167 Nov 29 17:01 .login_conf
-rw-r--r-- 1 testtest users 0 Nov 29 17:01 .php.module
-rw-r--r-- 1 testtest users 762 Nov 29 17:01 .profile
-rw-r--r-- 1 testtest users 980 Nov 29 17:01 .shrc
drwx------ 2 testtest users 512 Nov 18 2009 .spamassassin
drwx------ 2 testtest users 512 Nov 18 2009 .ssh
drwx------ 3 testtest users 512 Nov 18 2009 MailBox
drwx------ 2 testtest users 512 Nov 18 2009 db
drwxr-xr-x 2 testtest users 512 Jan 28 2015 sakura_pocket
drwxr-xr-x 2 testtest users 512 Nov 18 2009 sblo_files
drwxr-xr-x 2 testtest users 512 Nov 18 2009 www
2,リポジトリ用のディレクトリを生成する
root
ディレクトリで生成する。
以下、ディレクトリ名repos
で作成した例
% mkdir /home/testtest/repos
% ls -la
total 60
drwx------ 10 testtest users 512 Jan 18 16:10 .
drwxr-xr-x 160 root wheel 3584 Jan 18 10:34 ..
-rw-r--r-- 1 testtest users 773 Nov 29 17:01 .cshrc
-rw-r--r-- 1 testtest users 258 Nov 29 17:01 .login
-rw-r--r-- 1 testtest users 167 Nov 29 17:01 .login_conf
-rw-r--r-- 1 testtest users 0 Nov 29 17:01 .php.module
-rw-r--r-- 1 testtest users 762 Nov 29 17:01 .profile
-rw-r--r-- 1 testtest users 980 Nov 29 17:01 .shrc
drwx------ 2 testtest users 512 Nov 18 2009 .spamassassin
drwx------ 2 testtest users 512 Nov 18 2009 .ssh
drwx------ 3 testtest users 512 Nov 18 2009 MailBox
drwx------ 2 testtest users 512 Nov 18 2009 db
drwxr-xr-x 2 testtest users 512 Jan 18 16:10 repos // これ
drwxr-xr-x 2 testtest users 512 Jan 28 2015 sakura_pocket
drwxr-xr-x 2 testtest users 512 Nov 18 2009 sblo_files
drwxr-xr-x 2 testtest users 512 Nov 18 2009 www
3,秘密鍵を生成
サーバーで作成した鍵を各々使っているGitホスティングサービス(GitlabやらGithubやら)からpull
するのに秘密鍵を生成する。
ssh
ディレクトリがある場所でssh-keygen -t rsa -b 4096 -C "メールアドレス"
を実行
その後、.ssh/id_rsa.pub
の中身を確認し、GitLabやGithubのプロジェクトへ登録する
% ssh-keygen -t rsa -b 4096 -C "hoge@example.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/testtest/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/testtest/.ssh/id_rsa.
Your public key has been saved in /home/testtest/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:************************************************** hoge@example.com
The key's randomart image is:
+---[RSA 4096]----+
| B .B..o++B=+|
| .+o. o.=.+=|
|B .o o. . .|
|. o o . B . |
|. o o . o. |
| . oo . oo.|
|. B .o. . . +.|
|. . + . ++|
| B . B ..*|
+----[SHA256]-----+
%
% ls -la
total 60
drwx------ 10 testtest users 512 Jan 18 16:10 .
drwxr-xr-x 160 root wheel 3584 Jan 18 10:34 ..
-rw-r--r-- 1 testtest users 773 Nov 29 17:01 .cshrc
-rw-r--r-- 1 testtest users 258 Nov 29 17:01 .login
-rw-r--r-- 1 testtest users 167 Nov 29 17:01 .login_conf
-rw-r--r-- 1 testtest users 0 Nov 29 17:01 .php.module
-rw-r--r-- 1 testtest users 762 Nov 29 17:01 .profile
-rw-r--r-- 1 testtest users 980 Nov 29 17:01 .shrc
drwx------ 2 testtest users 512 Nov 18 2009 .spamassassin
drwx------ 2 testtest users 512 Jan 18 16:13 .ssh
drwx------ 3 testtest users 512 Nov 18 2009 MailBox
drwx------ 2 testtest users 512 Nov 18 2009 db
drwxr-xr-x 2 testtest users 512 Jan 18 16:10 repos
drwxr-xr-x 2 testtest users 512 Jan 28 2015 sakura_pocket
drwxr-xr-x 2 testtest users 512 Nov 18 2009 sblo_files
drwxr-xr-x 2 testtest users 512 Nov 18 2009 www
.ssh
へ移動して生成されたか確認
% cd .ssh/
% ls -la
total 16
drwx------ 2 testtest users 512 Jan 18 16:13 .
drwx------ 10 testtest users 512 Jan 18 16:10 ..
-rw------- 1 testtest users 3247 Jan 18 16:13 id_rsa
-rw-r--r-- 1 testtest users 742 Jan 18 16:13 id_rsa.pub
% cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAAE/0H( 略 )fdg/tFm4WqQ== hoge@example.com
4,秘密鍵を各々のサービスのプロジェクトへ登録
各々使っているGitホスティングサービス(GitlabやらGithubやら)上へ登録する。
GitLabの場合、
プロジェクトを開き、メニューから「Settings」→「Repository」→「Deploy Keys」のタブを開き、「key」に.ssh/id_rsa.pub
の中身をコピー&ペーストする。
「title」にはわかりやすい名前(サーバー名)を、「Write access allowed」のチェックボックスに関してはそのままで「Add Key」をクリックして完了
以下はGitHubの画面だがほぼ同じなので参考になる
5,git clone
する
ターミナルに戻り、先程作ったreposディレクトリへ移動し、git clone
コマンドを実行
% cd repos/
% ls -la
total 8
drwxr-xr-x 2 testtest users 512 Jan 18 16:10 .
drwx------ 10 testtest users 512 Jan 18 16:10 ..
% git clone git@gitlab.com:*******/test-project.git
Cloning into 'test-project'...
The authenticity of host 'gitlab.com (35.231.145.151)' can't be established.
ECDSA key fingerprint is SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw.
No matching host key fingerprint found in DNS.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitlab.com' (ECDSA) to the list of known hosts.
remote: Enumerating objects: 1145, done.
remote: Counting objects: 100% (1145/1145), done.
remote: Compressing objects: 100% (416/416), done.
remote: Total 1145 (delta 756), reused 1078 (delta 695)
Receiving objects: 100% (1145/1145), 452.28 KiB | 640.00 KiB/s, done.
Resolving deltas: 100% (756/756), done.
% ls -la
total 12
drwxr-xr-x 3 testtest users 512 Jan 18 16:46 .
drwx------ 10 testtest users 512 Jan 18 16:10 ..
drwxr-xr-x 4 testtest users 512 Jan 18 16:46 test-project
ちなみにサーバーに二つの環境(ステージング環境・本番環境)作る場合は以下の例のように、
/repos
ディレクトリ以下にstaging
とproduction
のディレクトリを作りそれぞれでgit clone
する。
[testtest@www4043 ~/repos]$ mkdir stg
[testtest@www4043 ~/repos]$ mkdir production
[testtest@www4043 ~/repos]$ ls -la
total 16
drwxr-xr-x 4 testtest users 512 Jan 18 18:53 .
drwx------ 12 testtest users 512 Jan 18 18:03 ..
drwxr-xr-x 2 testtest users 512 Jan 18 18:53 production
drwxr-xr-x 3 testtest users 512 Jan 18 18:40 stg
ここからは主にproduction
ディレクトリ上での作業を例として説明していきます。
【番外】シェルをbashに変更する
個人的にbash
に慣れているのでchsh
から変更する方法も載せておきます。
which
コマンドでbashの実行ファイルを確認。
chsh
コマンドでオプション-s
(--shell)を指定し、ログインユーザーのシェルを変更する。
% which bash
/usr/local/bin/bash
% chsh -s /usr/local/bin/bash
Password:
chsh: user information updated
今後もこのbashを使用するためのファイルを作る。
root
へ移動してコマンドを叩く
% vi .bash_profile
以下を記述する
PATH=$PATH:$HOME/bin:$HOME/usr/local/bin
export PATH
保存(!wq
)してssh
ログアウト→再ログインする
[testtest@www4043 ~]$ cat .bash_profile
PATH=$PATH:$HOME/bin:$HOME/usr/local/bin
export PATH
これでお馴染みのbashが使えるようになる
6,composerをインストールする
さくらサーバーはComposer(PHPのパッケージ管理システム)が入ってない1
% composer -h
composer: Command not found.
ちなみにComposerとは
Composer は、PHP のプロジェクトが必要とするライブラリやパッケージを管理する「ライブラリ依存管理ツール」です。
root
へ移動してコマンドを叩く
// rootへ移動
$ cd ~
// ディレクトリ生成
//「-p」オプションには「ディレクトリが存在しない場合は、自動で作成される」かつ「作ろうとしているディレクトリが存在していてもエラーにしない」
$ mkdir -p usr/local/bin/
// curl コマンドでcomposerをダウンロード&インストール
// 「-sS」でエラーメッセージ表示
// 「--install-dir」で指定のディレクトリへインストールできる
$ curl -sS https://getcomposer.org/installer | php -- --install-dir=usr/local/bin/
// composer.pharを上階層のcomposerディレクトリへ移動
$ mv usr/local/bin/composer.phar usr/local/bin/composer
インストール後、入ってることを確認する(※.bash_profile
にパスを通しておくこと)
[testtest@www4043 ~]$ composer -v
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.8.0 2018-12-03 10:31:16
7,プロジェクト内でcomposer install
する
プロジェクトのディレクトリへ移動後、composer install --no-dev
コマンドを実行
[testtest@www4043 ~/repos/production/test-project/laravel]$ composer install --no-dev
Loading composer repositories with package information
Installing dependencies from lock file
Package operations: 41 installs, 0 updates, 0 removals
- Installing doctrine/event-manager (v1.0.0): Loading from cache
- Installing doctrine/cache (v1.8.0): Loading from cache
// 省略
- Installing psy/psysh (v0.9.9): Loading from cache
- Installing laravel/tinker (v1.0.8): Loading from cache
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Package manifest generated successfully.
※レンタルサーバーによってはPHPのモジュールがインストールされてなかったりしてエラーが出る場合があります。
リリース前に十分な余裕をもって事前に確認しておきましょう。
8,環境設定ファイル(.env)生成
Laravelの標準に.env.example
があるのでそれをこの環境用に設置するためにコピーコマンドで複製する
[testtest@www4043 ~/repos/production/test-project/laravel]$ cp .env.example .env
.env
の中身の例
APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
// 以下略
9,key:generate
でアプリケーションのキーを発行する
.env
ファイルを作成後、同ディレクトリでphp artisan key:generate
コマンドを実行してください。
Laravelが内部で暗号化に用いるキーになるため、環境ごとに実行するようにしてください。
APP_NAME=Laravel
APP_ENV=local
APP_KEY=****************************************** // ここにランダムなパラメータが生成される
APP_DEBUG=true
APP_URL=http://localhost
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
// 以下略
10,環境ごとの設定を.env
に書き込む
アプリケーションのキーが生成されたことを確認後、vi
などで必要箇所(DBの設定や環境等)を編集してください。
(黒い画面慣れてないならFTPでつないで編集しても問題ないです)
ここでDBなどの情報が間違っていると次のフェーズでうまく動きません
あと絶対に.env
ファイルをpublic
以下(外部から参照できる場所)に配置しないようにしてください
Don't 👏 put 👏 your 👏 .env 👏 files 👏 in 👏 the 👏 web-server 👏directory https://t.co/DWHmT6r6E3 pic.twitter.com/Qp5tun3CZh
— svbl (@svblxyz) September 26, 2018
意外と多いみたいです
そして、構築している環境によってAPP_ENV
とAPP_DEBUG
を適切に設定するようにしてください。
(例:本番環境ならAPP_ENV=production
、APP_DEBUG=false
)
特にAPP_DEBUG
が本番環境なのにtrue
に設定していて、バグを踏んだ際にWhoopsが表示されるWebアプリを今までに何個も発見しています。
どれだけ.env
ファイルを参照できない場所へ設置していてもWhoopsが表示されて環境変数を見れる状態だとなんの意味もないです。
11,DBを作成(php artisan migrate
)
諸々と環境変数を設定後、artisan
コマンドを実行してDBを構築
[testtest@www4043 ~/repos/production/test-project/laravel]$ php artisan migrate
**************************************
* Application In Production! *
**************************************
Do you really wish to run this command? (yes/no) [no]:
> yes
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table
// 省略
// php artisan migrate:statusでできてるか確認
[testtest@www4043 ~/repos/production/test-project/laravel]$ php artisan migrate:status
+------+-------------------------------------------------------------------------------------+
| Ran? | Migration |
+------+-------------------------------------------------------------------------------------+
| Y | 2014_10_12_000000_create_users_table |
| Y | 2014_10_12_100000_create_password_resets_table |
| Y | 2018_12_20_122201_create_categories_table |
+------+-------------------------------------------------------------------------------------+
12,リポジトリとpublicとでシンボリックリンクを張る
root
へ戻ってwww
へ移動し、シンボリックリンクを貼ります。
[testtest@www4043 ~/www]$ ln -s /home/testtest/repos/production/test-project/laravel/public/ production
[testtest@www4043 ~/www]$ ls -la
total 8
drwxr-xr-x 2 testtest users 512 Jan 18 19:23 .
drwx------ 12 testtest users 512 Jan 18 19:02 ..
lrwxr-xr-x 1 testtest users 64 Jan 18 19:23 production -> /home/testtest/repos/production/test-project/laravel/public/
たまにうまくパスを指定していなくて失敗することがある(本人談)ので要注意
13、DBに初期値入れていく(※必要あるなら)
DBへマスタデータなど入れておく必要があるならSeeder
を実行しておく
[testtest@www4043 ~/repos/production/test-project/laravel]$ php artisan db:seed --class=DatabaseSeeder
**************************************
* Application In Production! *
**************************************
Do you really wish to run this command? (yes/no) [no]:
> yes
Seeding: BasesTableSeeder
Seeding: CategoriesTableSeeder
[testtest@www4043 ~/repos/production/test-project/laravel]$
これで一通りの準備ができたはずです。
URLへアクセスして正常に動いていることを確認してください。
(ちなみにここまでしなくても「hello, world」したいだけなら10の段階ででできるはずです)
バリューサーバーで動かす(おまけ)
本当はバリューサーバーでの環境構築手順も書く予定でしたが、自分用にまとめた資料がどっか逝ったので覚えている限りのTipsを書いておきます。
PHPのバージョンをコンパネから7.2以上へ変更しておく
おそらくPHPのバージョンがデフォルトで5.6になっている1ので、コントロールパネルから7.2以上のバージョンへ変更してください。
でないとLaravelがそもそも動かないです
(確か5.4系だとPHP5.6でも動いたはずですがおすすめしません)
php
のエイリアスを張っておく
デフォルトでコマンドをたたく際はコンパネから設定したPHPバージョン
+実行したいコマンド
を打つ必要があるので、環境構築の初めにphpのエイリアスを張っておきましょう。
でないと、以下のように
php56cli composer.phar -V
と、php[version]cli
と書かないとコマンド実行できません。
xmlwriter
がインストールされてない
PHPの拡張機能xmlwriter
が入っていないため、PhpSpreadsheetなどのライブラリが動きませんでした。1
これに関してはレンタルサーバー側が対応してくれるまでどうしょうもないので、xmlwriter
機能を使うライブラリを仕様する場合は注意が必要かなと
おわり
- 何回も行っておきますが情報の鮮度的に19年9月ごろまでの話で今現在上記の通りでない可能性も無きにしです。
- ちなみに自分が携わったプロジェクトに関して言えば8割くらい、業務システムはほぼ100%レンサバ指定でした
- ちなみにちなみに明日は前職の後輩@namizatopが記事書くようですよ(お
参考
- さくらのレンタルサーバーでcomposerめも - Qiita
- さくらのレンタルサーバにComposerをインストールする方法 – かきくけ子のブログ
- さくらのレンタルサーバのシェルをbashに変更する方法 – かきくけ子のブログ
-
2019年9月頃の話ですので現在は異なるかもしれません ↩