この備忘録は さくらのVPS で CentOS6 から Ubuntu 24.04 に移行したときの、
Ubuntu 24.04 側で何をやったかの記録。(CentOS6の時の知識とネットの知識でどうにかなんとかやる的な)
なので、色々順番がダメダメなので、もう一度くらいやれば多分いい感じになりそうだけど
もう一度やるのは面倒なのでこのままで。
あ、https 対応しなきゃ...って思い出したのでこの記事では https には対応していません。
■ この記事に出てくるヤーツのバージョン
Ubuntu 24.04 LTS
nginx version: nginx/1.26.1
PHP 8.3.9 (cli) (built: Jul 5 2024 12:04:09) (NTS)
MySQL Server version: 8.0.37-0ubuntu0.24.04.1 (Ubuntu)
node v18.19.1
npm 9.2.0
はじめに
■ ubuntu で最初にやること
sudo apt-get update
(と思っていたけど、下記 nginx 手順内で apt update やるから不要だったやつ)
nginx インストール
nginx のインストール
https://nginx.org/en/linux_packages.html#Ubuntu を参考にインストールする
分からん場合は stable を指定して mainline はやらないほうがいいよ。と
手順の最期に sudo apt update あるじゃん。
apt って何?https://aws.amazon.com/jp/compare/the-difference-between-apt-and-apt-get/
なるほど分からん。多分これからは apt-get じゃなくて apt 使おうね的な感じかな
apt に対応していないパッケージもあるから注意してね、的な。
# 手順は URL にある通りで省略。
# サービス起動する
$ sudo systemctl start nginx
$ sudo systemctl status nginx
$ nginx -v
nginx version: nginx/1.26.1
こいつ自動起動してくれるかな。後回しで。
https://nginx.org/en/docs/beginners_guide.html あった。けど google chrome の翻訳動かないでやんの。。くそう
status で以下が出ていたので、/etc/nginx/ に設定ファイルがあるっぽい
Process: 2092 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
とりあえずの index.html の置き場
/home/ubuntu/html/index.html があるとして。
/home/ は色々制約があるので 昔からの /var/www/ 配下が良さげ。
sudo mkdir /var/www
mv /home/ubuntu/html /var/www/
sudo vim /etc/nginx/conf.d/default.conf
で location root を変更
location / {
root /var/www/html;
で reload する(絶対忘れる)
sudo systemctl reload nginx
見れた!
index.html 変えたい欲...
php インストール
php のインストール 8.3 系
コレやる。https://php.watch/articles/php-8.3-install-upgrade-on-debian-ubuntu#php83-ubuntu-quick
## Save existing php package list to packages.txt file
sudo dpkg -l | grep php | tee packages.txt
# Add Ondrej's PPA
sudo add-apt-repository ppa:ondrej/php # Press enter when prompted.
sudo apt update
# Install new PHP 8.3 packages
sudo apt install php8.3 php8.3-cli php8.3-{bz2,curl,mbstring,intl}
# Install FPM OR Apache module
sudo apt install php8.3-fpm
## Remove old packages
# sudo apt purge php8.2*
確認する
$ php -v
PHP 8.3.9 (cli) (built: Jul 5 2024 12:04:09) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.9, Copyright (c) Zend Technologies
with Zend OPcache v8.3.9, Copyright (c), by Zend Technologies
入った!
composer のインストール
参考サイト:https://getcomposer.org/download/
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
# で
sudo mv composer.phar /usr/local/bin/composer
composer -v # 確認
nodejs のインストール
どのバージョンが入るか分からんけどとりま入れる。
$ sudo apt install nodejs npm
$ node -v
v18.19.1
$ npm -v
9.2.0
ん。18.19 なら良いか
Laravel に必要な php 拡張ライブラリを入れる
sudo apt install php-dom php-curl php-mbstring
sudo apt install unzip
は? E: Package 'php-dom' has no installation candidate
ってエラー出たけど??
ちゃんと確認しなきゃダメか?
まぁいいや、エラーのときは別途。
この 参考の qiita 順番が少し前後してる。まぁええか。わかるようにやろ。
Laravel デプロイ
Laravel 配置
$ cd /var/www/
$ git clone git@github.com:takemitsu/RecordingAnniversaries8.git
fatal: could not create work tree dir 'ra8': Permission denied
sudo で clone はしたくないので /var/www のオーナーを nginx にして nginx にユーザを切り替えて実行する
まずは そのユーザがいるかを確認
$ cat /etc/passwd | grep nginx
nginx:x:999:988:nginx user:/nonexistent:/usr/sbin/nologin
$ cat /etc/group | grep nginx
nginx:x:988:
$ cat /etc/group | grep www
www-data:x:33:
ユーザ切り替え
$ sudo su nginx
This account is currently not available.
はい。無理でした!
仕方がないので /home/ubuntu で git clone して /var/www に入れるようにしよう。
cd ~/
git clone git@github.com:takemitsu/RecordingAnniversaries8.git ra8
# pubkeyとかは別途で設定済み。で移動する
sudo mv ra8 /var/www
オーナーとパーミッション変更
# オーナーを nginx に
sudo chown -R nginx:nginx /var/www/ra8
# Laravelのディレクトリパーミッション変更のやつ
# nginxオーナーにしたから不要か?php-fpmが実行なのか?良く分からんけど
sudo chmod -R 777 storage
sudo chmod -R 777 bootstrap/cache
■ 動作まで
$ composer update
Your requirements could not be resolved to an installable set of packages.
# 足りねぇって言われたので足す
$ sudo apt install php8.3-xml
$ sudo apt install php8.3-dom
$ composer update
file_put_contents(./composer.lock): Failed to open stream: Permission denied
# はい。めんどくせぇ
$ composer install
/var/www/ra8/vendor does not exist and could not be created:
# ですよね、知ってます。準備してから持ってこれば良かったな。
# ちょっとめんどいけど、root で作って ユーザ変更する感じにする。
$ sudo su
# composer install
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]? No!
# そうだね。ダメだね。
# ユーザ変えよ。
# cd /var/www/
# chown ubuntu:ubuntu -R ra8
# exit
$ composer install
# できた。mv のときに permission おかしくなったんかな?まぁいいや。
$ php artisan serve
INFO Server running on [http://127.0.0.1:8000].
Press Ctrl+C to stop the server
動いたっぽい。
nginx での Laravel の設定
■ nginx の設定
公式 https://laravel.com/docs/11.x/deployment#nginx を確認しながらいい感じにやってく。
$ sudo vim /etc/nginx/conf.d/ra.conf
# 設定省略
$ sudo systemctl reload nginx
ログ確認したら php-fpm から permission denid でてる。
*202 connect() to unix:/var/run/php/php8.3-fpm.sock failed (13: Permission denied)
php-fpm の設定確認して変更する。ググったら listenのowner/group変更すれば良さげ
sudo vim /etc/php/8.3/fpm/pool.d/www.conf
# before
listen.owner = www-data
listen.group = www-data
# after
listen.owner = nginx
listen.group = nginx
次に /run/php/php8.3-fpm.sock
のオーナーを nginx にしてみる
sudo chown nginx:nginx /run/php/php8.3-fpm.sock
nginx の設定も php-fpm 側の sock の記述に合わせる
# before
/var/run/php/php8.3-fpm.sock
# after
/run/php/php8.3-fpm.sock
それぞれ再起動する
sudo systemctl reload nginx
sudo systemctl reload php8.3-fpm
ページリロードしたら 500 エラーでた。nginx の error.log にはエラーがないので laravel 側のログを確認する
$ tail -f -n 1000 storage/logs/laravel.log
No application encryption key has been specified.
はい。 .env やってなかったので .env 作ります。
$ cp .env.example .env
$ vim .env
# 設定省略
ページリロード!
はい。mysql と mysql のドライバ足りないって。
mysql インストール
mysql のインストール
とりまバージョン知らんけど入れてみる。
sudo apt install mysql-server
sudo mysql_secure_installation
sudo mysql
mysql ユーザの作成
データベース名やらユーザ名やらパスワードはもちろん .env に合わせて適宜変更してね。
mysql> create database ra8;
mysql> create user 'ra_user' IDENTIFIED BY 'password'
mysql> flush privileges ;
# 既存ユーザのパスワードを変更する場合
mysql> -- set password for ra_user@localhost = 'password'
mysql> -- flush privileges;
mysql> grant all on ra8.* to ra_user;
mysql> flush privileges ;
mysql> show grants for 'ra_user';
mysql> exit
# 入れるかテスト
$ mysql -u ra_user -p ra8
mysql> exit
データ流し込み
mysqldumpしたデータが有る場合。
なお、データは local から scp で転送した。
$ mysql -u ra_user -p ra8 < mysqldump_ra_20240708.sql
php-mysql ライブラリインスト
sudo apt install php8.3-mysql
その他 Laravel 関連
フロントの準備
以下メッセージが出たので フロントをどうにかする
Vite manifest not found at: /var/www/ra8/public/build/manifest.json
npm run build すればいいはず。(react/ssr..だったはずの場合。うろ覚え。)
npm install
npm run build
はい、大丈夫そう。
Laravel のキャッシュ系をターンとやる
キャッシュ系はこれだけじゃないけど今回のに必要そうなやつだけ
$ php artisan optimize
$ php artisan config:cache
$ php artisan route:cache
なんか直した時やること
以下から適当にやればいいはず。
$ git pull
# php 側の場合
# composer 追加した
$ composer install
# migrate書いた
$ php artisan migrate
# とりあえず。
$ php artisan optimize
# config 直した時
$ php artisan config:cache
# route 追加したとき
$ php artisan route:cache
# JS(React)側の場合
$ npm run build
おわり!