あらすじ
お金をかけずに(とか諸々の理由で), 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
で確認した後、
で必要なモジュールをインストールします.
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 をみれるようにしましょう.
<VirtualHost *:80>
DocumentRoot 自分で指定したやつ
<Proxy *>
Require all granted
</Proxy>
ProxyRequests Off
ProxyPreserveHost On
# ProxyPass / http://localhost:3000/
# ProxyPassReverse / http://localhost:3000/
</VirtualHost>
みれましたね.
/api
で Laravel にリクエストがいくようにしたらゴールとしましょう.
まずは Laravel の.htaccessを有効化するために, httpd.confを以下のようにDirectoryディレクティブ(?)を追加しましょう(confを分けておいた方がいいとは思う)
<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>
まだ編集中です
最終的にはポート分けました. それ以外の方法がわからなかった...
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が設定されるように指定したので、そこを編集していく。
<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で入れるの忘れるなよ