28
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LaravelAdvent Calendar 2019

Day 23

レンタルサーバーでLaravelを動かす際の環境構築手順とTips

Last updated at Posted at 2019-12-23

はじめに

この記事は**Laravel Advent Calendar 201923日目の記事です
過去に培ったレンサバ
さくらサーババリューサーバ)**で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ディレクトリ以下にstagingproductionのディレクトリを作りそれぞれで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へ移動してコマンドを叩く

.bash
// 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の中身の例

.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が内部で暗号化に用いるキーになるため、環境ごとに実行するようにしてください

.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

// 以下略

10,環境ごとの設定を.envに書き込む

アプリケーションのキーが生成されたことを確認後、viなどで必要箇所(DBの設定や環境等)を編集してください。
(黒い画面慣れてないならFTPでつないで編集しても問題ないです)
ここでDBなどの情報が間違っていると次のフェーズでうまく動きません

あと絶対に.envファイルをpublic以下(外部から参照できる場所)に配置しないようにしてください

意外と多いみたいです

そして、構築している環境によって**APP_ENVAPP_DEBUG適切に設定するようにしてください**。
(例:本番環境なら**APP_ENV=productionAPP_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が記事書くようですよ(お

参考

  1. 2019年9月頃の話ですので現在は異なるかもしれません 2 3

28
27
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?