Laravelのさくらサーバへのデプロイつまづいたので、まとめてみました

通っていたプログラミングスクールの特典でさくらサーバが無料で使えたので、Laravelで作ったプロジェクトをGithubを通してさくらサーバにデプロイしてみました。他の記事を参考にしてもどこかしらでつまいちゃったので、つまづいたポイント含めてまとめてみました。

※用語の間違いはご容赦くださり。

#やること

1. ローカルで作成したLaravelのフォルダをGithubにアップロード
2. Githubにアップロードしたファイルをさくらサーバにデプロイ

#Githubへのアップロード

ターミナルを使ってローカルで作成したフォルダの階層まで進み、下記コマンドを入力します。

```
git init
```
```
git add .
```
```
git commit -m "first commit" // ""はメッセージなので何でもOK
```
```
git remote add origin GitHubのリポジトリURL
（例：https://github.com/Riooon/laravel.git）
```
URLはリポジトリの作成直後、こちらに表示されます。

![スクリーンショット 2020-08-23 15.34.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643188/a403f39c-0c5e-747f-e513-2a7df77f18ec.png)


```
git push origin master
```

これでアップロード完成です。詰まったらドラッグ＆ドロップでアップロードしても問題ないかと思います。

#さくらサーバへのアップロード

###サーバへの接続

さくらサーバを契約した時に届いた「仮登録完了のお知らせ」というメールを開いて、下記の情報を控えます。

![sakura.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643188/25496031-f29e-817d-08c0-28e8e9be4590.png)

- FTPサーバ名
- FTPアカウント
- FTP初期フォルダ
- サーバパスワード

ターミナルから下記コマンドを入力し、さくらサーバにSSH接続します。パスワードを聞かれるので、「サーバパスワード」の値を入力します。

```
ssh riooon@riooon.sakura.ne.jp //これは例です
（ssh FTPアカウント@FTPサーバ名）
```
```/home/アカウント名``` の階層（何もしてなければそのまま）で、LaravelをアップロードしたGithubのリポジトリからコードを引っ張ってきます。

```
git clone https://github.com/Riooon/laravel.git
```

ターミナルの階層を移動・確認する時には、以下のコマンドを使うと便利です。

```
pwd //現在のディレクトリを表示
ls //一段下の階層を表示
```
```/home/アカウント名```の下にgit cloneで新たに作成したフォルダの階層が登場します。

ので、そこまで移動。

```
cd laravel // 階層は各自に合わせて
```

###compserのインストール

compserをインストールしていきます。

```
curl -sS https://getcomposer.org/installer | php
```

続けて下記コマンドを入力します。

```
php composer.phar
```

Composer って主張を確認できれば、大丈夫です。

![スクリーンショット 2020-08-23 16.27.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643188/6c989ff9-321e-3c94-d1a5-a0f2c38fd249.png)

続けてvendorのデータをインストールします。

```
php composer.phar install
```

vendorのフォルダを確認できればOKです。

```
ls
```
![スクリーンショット 2020-08-23 16.30.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643188/d57944d4-952c-f53d-fa7a-a18db1adc798.png)

###データベース作成・接続

さくらサーバのコントローラパネルにログインして、データベースを作成します。

https://secure.sakura.ad.jp/rs/cp/

![sakura.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643188/8cc87d1e-4b1d-1841-df3d-5aa7f6a1ee02.png)

データベースを作成したら、下記四点の情報を控えます。

1. データベースサーバ
2. ユーザ名
3. 接続先パスワード
4. データベース名

![db.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643188/08ce7804-dad2-c2dc-742e-53b910aea6c8.png)

続いて.envファイルを作成していきます。

ターミナルに戻って、Laravelプロジェクトのディレクトリ（例：```home/riooon/laravel```）で下記を入力してます。

```
cp .env.example .env
```

vimというやつを開いて、コピーした.envファイルを修正します。

```
vim .env
```

vimというやつには、閲覧モードと編集モードがあります。この2つを切り替えながら編集していきます。

（個人的）よく使うvimコマンド

```
i //編集モードを開く
esc //編集モードを閉じて閲覧モードに戻る

:wq //内容を保存（閲覧モードで使用可）
:q! //内容を保存せず終了（閲覧モードで使用可）

x //1文字削除（閲覧モードで使用可）
dd(連打) //1行切り取り（閲覧モードで使用可）
```

![vim.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643188/3178a979-a145-fb1f-dd6d-fdc2ed826009.png)

上記のように編集したら、``` esc``` 　```:wq``` を続けて入力して保存します。

これでデータベースの接続は完了です。

###アプリケーションキーを作成

以下を入力します。

```
php artisan key:generate
```

マイグレーションをして、データベースの中身を反映させます。

```
php artisan migrate
```

###/www/に/public/の中身をコピーする


/www/にプロジェクトの一部をコピーして、URLを入力して閲覧できる様にします。

www/のディレクトリ まで移動します。

```
cd
cd www
```
下記を入力して```pubic```フォルダの中身をコピーします。

```
cp -r /home/アカウント名/Laravelプロジェクト名/public/* /home/アカウント名/www/
（例：cp -r /home/riooon/laravel/public/* /home/riooon/www/）
```

再びさくらサーバのコントローラパネルにログイン。

https://secure.sakura.ad.jp/rs/cp/

![file-manager.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643188/2135b7ed-722f-bd1a-6dff-67a8b41de648.png)

「ファイルマネージャー」を開きます。

![index.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643188/787f779e-f939-3bc5-ef32-dc282b09f606.png)

index.phpファイルをクリックして、左下に表示される鉛筆マークを選択します。


```
require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
```

の２カ所を、下記のように変更します。

```
require __DIR__.'/../laravelプロジェクト名/vendor/autoload.php';
$app = require_once __DIR__.'/../laravelプロジェクト名/bootstrap/app.php';

例）
require __DIR__.'/../laravel/vendor/autoload.php';
$app = require_once __DIR__.'/../laravel/bootstrap/app.php';
```

先ほどの様にvimでも開けます。（極力触りたくない、、）

ここまで設定すれば、初期ドメインにアクセスするとページが表示される（はず！）です。

#トップページ以外が表示されない

このとき、なぜか```.htaccess```ファイルが/www/にコピーされないので（私だけ？）、トップページ以外が表示されません。

ので、こちらも同様に手動で作成していきます。

さくらサーバのコントロールパネルから「ファイルマネージャー」を同様に開いて、「表示アドレスへの操作」「ファイル作成」を選択します。

![htaccess.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643188/57002376-67c6-0a7e-6292-1b0ec2d9576f.png)

下記の内容をコピーして貼り付け、```.htaccess```という名前をつけて保存します。
（この内容は、```public```ディレクトリ直下にあります。）

```
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
```
これでトップページ以外も表示される（はず！）です。

#storageの画像が表示されない

ここまでやっても、```storage```フォルダにある画像が表示されません。

ローカルで作成したシンボリックリンクが```storage```->```public```にしか繋がっておらず、```www```に繋がっていないためだと認識しています。

そのため、```storage```->```www```のシンボリックリンクを別途作成します。

```
cd //トップの階層まで戻ります
```
```
ln -s /home/アカウント名/laravelプロジェクト名/storage/app/public /home/laravelプロジェクト名/www/storage
例） ln -s /home/riooon/laravel/storage/app/public /home/riooon/www/storage
```

以上で画像も表示される（はず！）です。

修正・追記が必要な点があれば、コメントいただけると嬉しいです。

#参照元

https://arrown-blog.com/laravel-sakura-deploy/
https://note.com/koushikagawa/n/n69d534105f07
https://qiita.com/colorrabbit/items/755cfbb0e97d48280775
https://qiita.com/Baisel/items/49b16ce3231c749f6c6f