エックスサーバーにLaravel+Nextjs製のアプリをデプロイ(deployer)
求職マッチングサイト的なものの制作相談が入り、
普段はフロントの仕事メインでやってるもので
バックエンドとかインフラだったりは
あんまり経験ある訳では無いのだけど受けてみた。時の話。
とりあえず結論から言うと
エックスサーバーでlaravel+Nextjsで公開できたので
何点か詰まったところとか気になった所等を書いてみようと思います。
サーバー周りとか経緯(エックスサーバー)
何となくの印象だけどこうゆうrestful?的な物は
AWSでやるのが今っぽいイメージがある。
僕の通常業務の環境。と言っていいのか分からないけど
普段の業務はフリーでやりだした時に契約した
さくらのVPSでしつこく頑張っております。
OSのサポートとかが切れてるのでいい加減
AWSとかにしないとかなぁ、と思いつつ。
弱小フリーランスにはAWS高い。気がする。
と移行とか色々考えると面倒でなかなか腰が上がらなくて
未だにAWS触った事がなく、
どうしようかなと思って軽く調べてたら
でLaravelインストールできるっぽいので
いわゆる普通のレンタルサーバー(今回はXserverビジネス)
でできる範囲の事だったらやってみますよって形でお引き受けしました。
普段VPSメインで利用してるのでVPSユーザー視点で
所々ちょっと気になる点はあったのでその辺書いてく
でも大体やりたい事はなんとかなりました。
エックスサーバーおすすめです。
Laravel
インストールとかの手順はググると他にも色々記事あるので
あんまり書くことないけど
SSHが使えるのでまぁ色々Composerだったりのインストールしたり
とかは必要ですが問題なく稼働しました。
昔は普通のレンタルサーバーだとSSH使えるってあんまりなかった?
ようなイメージがある(知らなかっただけかも)けど
エックスサーバーだとスタンダードプランとかでもSSH使えるみたい。
PHPもバージョンは固定ではあるけど
いくつかver切り替えできるので
dockerとかで事前に合わせておけば
多分本番デプロイ時もそんなに困る事ない。と思う。
気になった点
ドキュメントルートが固定
一点ちょっと不便というか、仕方ない所だと思うけど
domain.com/public_html
とかってドキュメントルートが固定な所。
VPSとかだとapacheなりnginxで設定できるから
そんなに気にしなくてもいいところだけど
public_html以下に配置すると
色々見えちゃいけない所がpublicになっちゃうので
別ディレクトリに配置しつつシンボリックリンクで
publicへ紐付ける必要がありました。
Nextjs
フロントはnextjsで作りました。
SSGで静的サイト生成してから反映する形にした。
のでサーバー側でnodeは走らせてる訳ではないのですが
エックスサーバーでnode
エックスサーバーだとnodeもインストールできるらしいので
多分SSRとかもできると思う。
これも一昔前はレンサバだと出来なかったような?気がする。
ただ公式でサポートはしていない?とは思う。
htaccess
因みにだけどnextで反映するにあたって
ちょこちょこhtaccess調整したので覚え書き
フロントのディレクトリまとめる
公開ディレクトリのルートに書き出した静的ファイルが
ゴチャゴチャするが嫌だったので
nextから出力した静的ファイルは
RewriteRule ^(.*)$ front/$1 [L]
的な感じでまとめた。
ダイナミックルーティング
SSGでダイナミックルーティング使ってると
リロードとかした時に404になると思うので
RewriteRule ^front/info/.*/(.*)$ front/info/[id]/$1 [L]
的な感じでリライト。
nextからLaravelへのリンク
nextからのlaravelへのストレージとかだったりAPIリクエストも
シンボリックリンクでなんとかしました。
ln -s /home/○○○○○/○○○○○/path/to/laravel/public /home/○○○○○/○○○○○/public_html/api
let’s encryptのおかげなのかSSLも最近は無料でできるので
サブドメインとかでやってもいいかも?とも思ったけど。
deployer
Laravelでデプロイって言うと
deployer。だと思う。多分。
これも多分公式だとサポート外だけど
gitインストールしたり
sshの公開鍵登録なんかもできるので
色々準備は必要だけど出来た。
シンボリックリンク(気になった点)
ここは結構気になった点
laravelでもnextでも言える事なんだけど
エックスサーバーのシンボリックリンクで
気になるところがあった。
というか未だに解決してない。
公開自体は問題ないんだけど
なんかシンボリックリンクのキャッシュ?っていうのか
なんなのかもわからないんだけど
deployer使うと
~~/releases/{デプロイのcuurent_number}/laravel/public
って感じで配置されるけど
public_htmlからのapiへのカレントへの
~~/current/laravel/public
シンボリックリンクの参照がクリアできない事が多い。
色々試してみたけど、一応
① サーバーキャッシュ設定からキャッシュ削除
②X アクセラレータの設定変更(OFFへの)
でリンクキャッシュクリアできるっぽい
※サーバーキャッシュ設定はOFFじゃないと残る
※ブラウザキャッシュはONでOK?なような
って感じで一応消せる?というか解消するっぽい
なので現状デプロイする度管理コンソール開いて
設定カチャカチャする必要があって面倒。
とどういう経緯でクリアされるのかあまり分からないのでスッキリしない。
2022年5月時点の事なので変わる可能性ありますが
まとめ
という事で多少の気になる点はあったものの
とりあえず公開まで問題なくいけたかなと思うので
もしレンタルサーバーでLaravelとかnextとかdeployerを。という機会がありましたら
エックスサーバーおすすめです。参考にしていただけましたら幸いでございます。