お名前.com のレンタルサーバーでLaravelを動かすメモ

## 対象
* RSプランを契約している (重要)
* CLI を扱える
* SSH を行なったことがある
* レンタルサーバ系のコントロールパネルを扱ったことがある
* PHP 8.1

## 概要
1. コントロールパネルから SSH ログインできるようにする
1. パソコンから SSH ログインする
1. composer をインストールする
1. node をインストールする
1. プロジェクトフォルダを作成する
1. シンボリックリンクを貼る
1. .htaccess を修正する


## SSH できるようにする

コントロールパネルにログインする。

### Key の登録
(登録済みの場合はスキップ)
`サーバー` > `SSH` に移動し `SSH Key を追加` を押す。
次の2パターンが選べるので、好きな方を実施する。
* 自動生成 (お手軽)
* インポート (セキュリティが気になるならこっち)

#### 自動生成
コントロールパネル上で自動的に鍵ペアを生成してくれて、公開鍵を保存してくれる。
秘密鍵がダウンロードされる (`Key名.pem`)。
該当ファイルを `~/.ssh` フォルダに移動して、パーミッションを `600` に変更する

#### インポート
ローカルにて自分で 公開鍵/秘密鍵 を生成する (作り方は各自調べる)。
この時、鍵が `~/.ssh` 以外に保存されている場合は、 `~/.ssh` に移動しておく。
公開鍵 = パブリックキーをテキストエディタ等 (catコマンドでも良い) で開いてコピーし、フォームに入力する。

## パソコンからSSHログインする
SSH Key 追加後 `Key一覧` から `詳細` を押し、以下を確認する。
* ホスト名
* ポート番号
* ユーザー名

これをもとにログインする。
接続情報を `.ssh/config` に書いておくと便利。

## composer をインストールする

### インストール
[公式サイト](https://getcomposer.org/download/) の先頭にある `php -r` と複数行書いてあるコマンドを **順番に1行ずつ** コピペして実行する。
執筆時点での記述は次のとおり。
```cli
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
```

### 移動
まずフォルダを作成する。 
```cli
mkdir ~/bin
```
次に実行ファイルを移動する。 
```cli
mv composer.phar ~/bin/composer
```

### 確認
composer が使えるかチェック。
```cli
composer -V
```
バージョンが表示されれば問題なし。
例) `Composer version 2.6.6 2023-12-08 18:32:26`

## node をインストールする
### まず nvm をインストールする
インストール方法は色々あるので好きな方法で構わない。
ここでは nvm を使う方法を採用する。
[github](https://github.com/nvm-sh/nvm?tab=readme-ov-file#install--update-script) を参考にコマンドを実行する。
執筆時点での記述は次のとおり。
```cli
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
```

### 再ログインする
そのままだと `nvm` コマンドが実行できないので、一旦ログアウトして、再度SSHログインする。

### node をインストールする
サーバーのライブラリの関係で最新バージョンが使えるとは限らない (インストール自体はできる)。
執筆時点での最新は 20系 だったが、エラーが出て実行できず、 18系 もダメだった。
結局 16系 をインストールした (偶数は安定バージョン)。
```cli
nvm install 16
```

### 確認
```cli
node -v
```
バージョンが表示されれば問題なし。
例) `v16.20.2`

## プロジェクトフォルダを作成する
フォルダ構成は各自好きな様にして問題ないが、 `~/public_html/example.com/` は公開領域になるので、ホーム (`~`) 配下に置く方が良い。

```cli
mkdir ~/projects
```

### git を使う
すでに開発が進行していて git でバージョン管理している場合。
```cli
git clone git@~~~
```

### ここでプロジェクトを作る
これから開発を始める場合。
```cli
composer create-project laravel/laravel hogehoge~~
```

## シンボリックリンクを貼る

まずプロジェクトをインストールするディレクトリや、公開するドメインごとのディレクトリ名の変数を設定する(ログアウトすると消えるので、途中で接続し直した場合は再度設定する)。
```cli
PROJECT_DIR=~/projects/hogehoge/public
SERVICE_DIR=~/public_html/example.com
```

1行ずつシンボリックリンクをはる
```cli
ln -s $PROJECT_DIR/.htaccess $SERVICE_DIR/
ln -s $PROJECT_DIR/favicon.ico $SERVICE_DIR/
ln -s $PROJECT_DIR/robots.txt $SERVICE_DIR/
ln -s $PROJECT_DIR/index.php $SERVICE_DIR/
```

以下は必要に応じて実行。
```cli
ln -s $PROJECT_DIR/build $SERVICE_DIR/
ln -s $PROJECT_DIR/js $SERVICE_DIR/
ln -s $PROJECT_DIR/css $SERVICE_DIR/
ln -s $PROJECT_DIR/images $SERVICE_DIR/
ln -s $PROJECT_DIR/storage $SERVICE_DIR/
ln -s $PROJECT_DIR/web.config $SERVICE_DIR/
ln -s $PROJECT_DIR/mix-manifest.json $SERVICE_DIR/
```

## .htaccess を修正する
`~/projects/hogehoge/public/.htaccess` そのままだとエラーが出るので、削除もしくはコメントアウトする。

```diff
<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}]

...
</IfModule>
```

## その他
### asset などが HTTPS にならない場合
`app/Http/Middleware/TrustProxies.php` を以下のように変更する。
```diff_php
class TrustProxies extends Middleware
{
-    protected $proxies;
+    protected $proxies = '*';
```