Nuxt+Laravelを単一のホストで動かす

# あらすじ
お金をかけずに(とか諸々の理由で), Laravel+Nuxtで自前でCMSを作ろうということになって, レンタルサーバでNuxtもLaravelも動かしたいという話になりました.

この記事の続きとして書きます.
https://qiita.com/YSY/items/3a0abdc6ec5296373d17

上記の記事では, Nuxt をデプロイするところまで書きました. Nuxt Conoha VPS にデプロイした後に, Laravel と連携するようにしていきます.

## まずphpを入れる
https://www.rem-system.com/centos8-php-install/ が丁寧に書いてました.
Conoha vps を使っており, CentOS8 上で作ることになるので, dnf コマンドを使っていきます. 必要があれば yum に置き換えてもらえればと思います.
```dnf info php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-mysqlnd php-json```
で確認した後、
```dnf install -y php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-mysqlnd php-json
```
で必要なモジュールをインストールします.
```php -v```でphp7.2が入っていることを確認します.

## Composer を入れる
まず公式の言う通りに, インストーラを入れましょう.
```php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"```
そんで,
```php composer-setup.php```
すれば手元に composer.phar が生成されたと思います.

```php -r "unlink('composer-setup.php');"```
をすればインストーラを削除できます.

次に, 
```mv composer.phar /usr/local/bin/composer```
して, どこからでも composer コマンドを使えるようにしましょう.
```composer -V```でバージョンが表示されるようになりました.

## Laravel が動くようにする
それはお任せします. envを用意したり, composer installとかしたりしてください.
僕の場合はgit cloneしてcomposer updateしてcomposer installしてcp .env.example .envしてphp artisan key:generateしました.

```php public/index.php```で動くことを確認して終わりです.

#### MySQLの設定
https://qiita.com/yasushi-jp/items/1579c301075d693a2a36 を参考にしました.

```
dnf localinstall https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
dnf module disable mysql
dnf install mysql-community-server
service mysqld start
```
そんで```mysql_secure_installation```を実行してパスワードを変更したりする. .envにパスワードを入れてくおく.

# Apache の設定
例えば以下のように設定して、とりあえず Laravel をみれるようにしましょう.

```apache
<VirtualHost *:80>
    DocumentRoot 自分で指定したやつ
    <Proxy *>
        Require all granted
    </Proxy>

    ProxyRequests Off
    ProxyPreserveHost On
   # ProxyPass / http://localhost:3000/
   # ProxyPassReverse / http://localhost:3000/
</VirtualHost>
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602951/e7923b7a-ce72-0ad8-3e8f-f8c0160b2bce.png)

みれましたね.
```/api```で Laravel にリクエストがいくようにしたらゴールとしましょう.

まずは Laravel の.htaccessを有効化するために, httpd.confを以下のようにDirectoryディレクティブ(?)を追加しましょう(confを分けておいた方がいいとは思う)

```apache
<VirtualHost *:80>
    DocumentRoot /var/www/project-name/public
    <Proxy *>
        Require all granted
    </Proxy>
    <Directory "/path/to/public">
        AllowOverride All
    </Directory>
    ProxyRequests Off
    ProxyPreserveHost On
   # ProxyPass / http://localhost:3000/
   # ProxyPassReverse / http://localhost:3000/
</VirtualHost>
```

まだ編集中です
最終的にはポート分けました. それ以外の方法がわからなかった...


```apache
Listen 80
NameVirtualHost *:80
Listen 81
NameVirtualHost *:81
~~省略~~
<VirtualHost *:80>
    <Proxy *>
        Require all granted
    </Proxy>
    ProxyRequests Off
    ProxyPreserveHost On
    ProxyVia Off
    ProxyPass /api http://127.0.0.1:81/api
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/
</VirtualHost>
<VirtualHost *:81>
    DocumentRoot /path/to/public
    <Directory "/path/to/public">
        AllowOverride All
    </Directory>
</VirtualHost>
```
これで```/api/test/```とかは Laravel で処理して, それ以外は Nuxt が動くようにしました!!
あーしんどかった...


## SSLの設定
まずドメインとってDNSの設定をしましょう。
今回はデフォルトのドメインを使いました.

```yum list installed | grep mod_ssl```をやってもmod_sslがなかったので、インストールする. 
```yum install mod_ssl```
次に certbot を入れる
```yum install certbot```
```yum install python3-certbot-apache```
そんで```certbot --apache -d ドメイン```をやれば、あとは VirtualHost いじるだけ.

/etc/httpd/conf.d/ssl.conf に新しくVirtualHostが設定されるように指定したので、そこを編集していく。

```apache
<VirtualHost _default_:443>
# ~~略~~
    <Proxy *>
        Require all granted
    </Proxy>
    ProxyRequests Off
    ProxyPreserveHost On
    ProxyVia Off
    ProxyPass /api http://127.0.0.1:81/api
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/
</VirtualHost>
```
と書き足せばok.

firewall の設定忘れてた
```firewall-cmd --permanent --zone=public --add-service=https```
```firewall-cmd --reload```
で設定して、
```firewall-cmd --zone=public --list-services```
で確認したら, https が有効になっているはずです。

というわけで無事にhttpsで見れるようになりました。

certbot については https://certbot.open-code.club ここがわかりやすかった。(もちろん公式を読むべきだとは思う. 知らない間にコマンド変わってたりするし、プラグイン変わってたりするので.)

・後、sslもモジュールyumで入れるの忘れるなよ