KUSANAGI9 から kusanagiユーザーから実行できるようになりました。kusanagiコマンドは root ユーザー または kusanagi ユーザーから行います
kusanagi --version
以下のようにバージョンが帰ってきます
KUSANAGI Version 9.4.2-1.el9
dnf は root ユーザーから行います
sudo dnf update -y
パッケージのupdateは yum コマンドではなく dnf コマンドを使用します。
hostname
sudo vim /etc/hostname
reboot
新しいホスト名を入れて「 esc → :wq」から保存し、マシンを再起動します。
こちらを必ず実行しましょう。でないとkusanagiコマンドが使用できません。
kusanagi init --passwd "好きなパスワード" --dbrootpass "好きなパスワード" --nophrase
--php83 を追加します
kusanagi init --passwd "好きなパスワード" --dbrootpass "好きなパスワード" --nophrase --php82
KUSANAGIの初期化が終わったらphpのバージョンを確認しておきましょう
php -v
kusanagi provision --lamp --fqdn <ドメイン名> --email <メールアドレス> --dbname <DB名> --dbuser <ユーザー名> --dbpass <パスワード名> <プロファイル名>
kusanagi remove <プロファイzル名>
cd /etc/opt/kusanagi/nginx/conf.d/
/etc/opt/kusanagi/nginx/conf.d
vi <サイト名>.conf
client_max_body_size 999M;
nginx -s reload
vi /etc/my.cnf.d/server.cnf
[mysqld]
max_allowed_packet=160M
service mysql restart
vi /etc/opt/kusanagi/php.d/php.ini
Allowed memory size of xxxx エラーの修正
memory_limit = 999M
upload_max_filesize = 999M
post_max_size = 999M
systemctl status php-fpm.service
systemctl restart php-fpm.service
sudo vi /etc/opt/kusanagi/php-fpm.d/www.conf
元々は
user = httpd
group = www
となっているところ、
23-24 行目あたりを次のように修正します
user = kusanagi
group = kusanagi
念のためにマシンを再起動しておきます
reboot
プロビジョン時に email が指定してあるのにSSLが うまく設定されなかった場合は、こちらのコマンドで再設定します
kusanagi ssl プロビジョン名
kusanagi ssl プロビジョン名 --https {redirect|noredirect}
kusanagi remove プロビジョン名
dnf install python3 python3-pip
python -V
pip3 -V
pip3 install --upgrade pip
pip3 install supervisor
バージョン確認
supervisord --version
設定ファイルの作成
mkdir /etc/supervisor/
mkdir /etc/supervisor/conf.d
/etc/supervisor/supervisor.sock
vi /etc/supervisor/supervisord.conf
supervisord.conf
[unix_http_server]
file=/run/supervisor/supervisor.sock ; UNIXソケットファイルのパス
chmod=0700 ; ソケットファイルのパーミッション
[supervisord]
logfile=/var/log/supervisord.log ; メインのログファイル
logfile_maxbytes=50MB ; ログファイルの最大サイズ
logfile_backups=10 ; ログファイルのバックアップ数
loglevel=info ; ログレベル
pidfile=/tmp/supervisord.pid ; pidファイルのパス
nodaemon=false ; フォアグラウンドで実行するかどうか
minfds=1024 ; 最小のファイルディスクリプタ数
minprocs=200 ; 最小のプロセス記述子数
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; スーパーバイザに接続するためのUNIXソケット
[program:example_program]
command=/path/to/program/api_app_server'
autostart=true ; supervisordの起動時に自動的に開始
autorestart=true ; 予期せず終了した場合に再起動
stderr_logfile=/var/log/example_program.err.log ; 標準エラー出力のログファイル
stdout_logfile=/var/log/example_program.out.log ; 標準出力のログファイル
user=kusanagi ; プログラムを実行するユーザー
sudo mkdir -p /run/supervisor
sudo chown root:root /run/supervisor
sudo chmod 0700 /run/supervisor
vi /etc/systemd/system/supervisord.service
[Unit]
Description=Supervisor process control system for UNIX
Documentation=http://supervisord.org
After=network.target
[Service]
ExecStart=/usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=50s
User=root
Group=root
[Install]
WantedBy=multi-user.target
# デーモンをリロード
sudo systemctl daemon-reload
# 自動起動 on
sudo systemctl enable supervisord
# 開始
sudo systemctl start supervisord
# systemd ステータスの確認
sudo systemctl status supervisord
sudo systemctl status supervisord
supervisord -c /etc/supervisor/supervisord.conf
起動時にエラーとなる場合は次のコマンドでプロセスしてから再度起動します
sudo killall supervisord
sudo supervisorctl reread
sudo supervisorctl update
sudo systemctl restart supervisord
supervisorctl status
結果例
my_api RUNNING pid 39984, uptime 8 days, 9:40:03
supervisorctl signal TERM my_api
supervisorctl shutdown
https://askubuntu.com/questions/911994/supervisorctl-3-3-1-http-localhost9001-refused-connection
supervisorctl help
こちらの方法で確認するのがとても分かりやすくて良いです ! https://chariosan.com/2019/11/10/supervisor4_al2/
1. hello.sh の用意
cd /home/myuser
vi hello.sh
#!/bin/bash
while :; do
echo "Hello, world!"
sleep 1
done
chmod +x hello.sh
1. hello.sh を監視する設定ファイルを作成
vi /etc/supervisor/conf.d/hello.conf
[program:hello]
command=/home/kusanagi/MYDOMAIN.COM/sh/hello.sh
process_name=%(program_name)s_%(process_num)02d
autostart=true
autorestart=true
user=kusanagi
numprocs=1
redirect_stderr=true
stdout_logfile=/tmp/hello.log
curl https://raw.githubusercontent.com/prime-strategy/kusanagi-docker/master/install.sh |bash
docker machine がインストールされていませんというエラーが出ますが、無視してokです
~/.kusanagi/bin/kusanagi-docker コマンドが使用できるようになります
~/.kusanagi/bin/kusanagi-docker provision --lamp --fqdn <ドメイン名> --dbname <DB名> --dbuser <ユーザー名> --dbpass <パスワード名> <プロファイル名>
http://0.0.0.0/ にアクセスしてみて hello world! が返ってくると成功です
docker の kusanagi-nginx にログインする
下記のように、ユーザ名を指定して kusanagi ユーザにてログインします
docker exec -it --user=kusanagi mysite_httpd sh --login
docker-compose.yml を カスタマイズしてみましょう。例えば volumes を 相対パスに変更します。
version: '3'
networks:
default:
driver: bridge
driver_opts:
com.docker.network.driver.mtu: 9000
services:
httpd:
container_name: mysite_httpd
image: primestrategy/kusanagi-nginx:1.23.4-r4
restart: always
env_file:
- .kusanagi
- .kusanagi.httpd
volumes:
- ./kusanagi:/home/kusanagi
- ./letsencrypt:/etc/letsencrypt
- ./well-known:/var/www/html/.well-known
ports:
- "80:8080"
- "443:8443"
extra_hosts:
- "my-site.local:127.0.0.1"
php:
container_name: mysite_php
image: primestrategy/kusanagi-php:8.2.4-r2
restart: always
env_file:
- .kusanagi
- .kusanagi.php
- .kusanagi.mail
network_mode: "service:httpd"
volumes:
- ./mysqld:/var/run/mysqld
- ./kusanagi:/home/kusanagi
db:
container_name: mysite_db
image: mariadb:10.6.12-focal
restart: always
user: "999:999"
env_file:
- .kusanagi.mysql
network_mode: "service:httpd"
volumes:
- ./mysqld:/var/run/mysqld
- ./mysql:/var/lib/mysql
volumes:
kusanagi:
database:
Macで以下のコマンドを実行する
sudo ln -sf "$HOME/.docker/run/docker.sock" /var/run/docker.sock
docker-compose.yml の各コンテナの volumes に以下のコードを追加する
volumes:
- /var/run/docker.sock:/var/run/docker.sock
docker-compose.yml のhttpdの services の httpd に以下のコードを追加する
user: root
command: sh -c '/sbin/apk add docker; sh;'
tty: true
( コマンド実行後に終了してしまわないように sh を起動しています )
composer create-project laravel/laravel myapp
php7 -m | grep xdebug
xdebugは2系と3系があります。 今回は2.9.8 をインストールします。
rootユーザから次のように実行します
cd
mkdir xdebug_install
cd xdebug_install
wget https://pecl.php.net/get/xdebug-2.9.8.tgz
tar xfvz xdebug-2.9.8.tgz
cd xdebug-2.9.8/
/usr/local/php7/bin/phpize
./configure --with-php-config=/usr/local/php7/bin/php-config
make && make install
echo 'zend_extension = xdebug.so' > /etc/php7.d/extensions/xdebug.ini
設定ファイルにオプションを追加する場合は以下のファイル(xdebug.ini)に追記します
vi /etc/php7.d/extensions/xdebug.ini
xdebug バージョン3系の場合
以下を追記します
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug バージョン2系の場合
以下を追記します
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_connect_back=1
xdebug.remote_port = 9002
kusanagi restart
php7 -m | grep xdebug
パスワードを確認する
/root/.my.cnf にルートユーザのパスワードが記述されています
cat /root/.my.cnf
mysql -uroot -p
sudo vi /etc/logrotate.d/nginx
/var/log/nginx/*.log /home/kusanagi/*/log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
編集した後に再起動します
sudo reboot
sudo kusanagi --version
KUSANAGI Version 8.4.5-7
sudo yum update -y
こちらのコマンドでエラーが出る場合があります。
その場合はこちらのコマンドからアップデートを行います。
sudo yum update -y --enablerepo=remi,remi-php56
sudo kusanagi --version
KUSANAGI Version 8.5.3-1
kusanagi status 【ターゲット名】
kusanagi target 【ターゲット名】
現在のターゲットを【ターゲット名】に変更します。
kusanagi setting --fqdn 【ドメイン名】 【ターゲット名】
【ターゲット名】を省略した場合は現在のターゲットに対して設定されます。
kusanagi9 ではこのコマンドを使用します
kusanagi configure --fqdn 【ドメイン名】 【ターゲット名】
kusanagi9 では 続けて Let's Encrypt SSLの設定を行います。
kusanagi ssl --email 【メールアドレス】 【ターゲット名】
● KUSANAGIで http → https リダイレクトを行うよう設定する
kusanagi ssl --https redirect 【ターゲット名】
● KUSANAGI9で 使用するPHPのバージョンを変更する
kusanagi php --use php81 【ターゲット名】
kusanagi php --use php80
kusanagi php --use php74
sudo vi /etc/opt/kusanagi/php-fpm.d/www.conf
sudo vi /etc/php7-fpm.d/www.conf
23-24 行目を次のように修正します
user = kusanagi
group = kusanagi
念のためにマシンを再起動しておきます
reboot
vi /etc/nginx/conf.d/<サイト名>_ssl.conf
/etc/nginx/conf.d/<サイト名>_ssl.conf
location ~* \.(jpg|jpeg|gif|png|css|js|swf|ico|pdf|svg|eot|ttf|woff)$ {
expires 60d;
access_log off;
}
動画ファイルの拡張子「mpg」「mp4」「webm」を追加します。 ↓
location ~* \.(jpg|jpeg|gif|png|css|js|swf|ico|pdf|svg|eot|ttf|woff|mpg|mp4|webm)$ {
expires 60d;
access_log off;
}
nginx -s reload
kusanagi remove kusanagi_html
kusanagi remove -y kusanagi_html
EC-CUBE4 で必要な php の intl モジュールをインストールします
yum -y --enablerepo=remi,remi-php7.3 update
yum -y --enablerepo=remi,remi-php7.3 install php73-php-intl
ls -la /opt/remi/php73/root/usr/lib64/php/modules
php -r "echo phpinfo();" | grep "php.ini"
vi /etc/php7.d/php.ini
この行を追加して保存する ↓
extension=/opt/remi/php73/root/usr/lib64/php/modules/intl.so
php -m
KUSANAGI の 便利コマンド images を使用すると、 PNG JPEG ファイルを小さくすることができます。
kusanagi images --dir /YOUR/DIR/PATH/img --strip --verbose
kusanagi imagesのオプション
--dir|--directory ディレクトリ1[:ディレクトリ2:…] | 対象のディレクトリを指定します。複数ディレクトリを指定する場合は、”:”で区切って指定します。 ディレクトリとして、絶対パスと相対パスの両方を指定でき、ディレクトリ名が相対パスの場合は 指定したプロファイルのディレクトリ(/home/kusanagi/プロファイル名/DocumentRoot)からの相対パスになります。 このオプションを指定しない、または--dir|--directoryでディレクトリ名を指定しない場合は、wp-contents/uploadsが指定されます。 以下の例では、絶対パスと/home/kusanagi/saya/DocumentRootからの相対パスの2ディレクトリを対象ディレクトリとします。 |
---|---|
--jpg|--jpeg | JPEGファイル(拡張子が.jpg、.jpeg、.JPG、.JPEGのファイル)のみを対象にします。 --pngオプションと同時に指定した場合もしくは両オプションを指定しない場合は、 JEPGファイルとPNGファイルの両方を対象にします。 |
--png | PNGファイル(拡張子が.png、.PNGのファイル)のみを対象にします。 --jpg|--jpegオプションと同時に指定した場合もしくは両オプションを指定しない場合は、 JEPGファイルとPNGファイルの両方を対象にします。 |
--verbose | 処理中のディレクトリ名、処理内容、処理中のファイル名などを表示します。 このオプションを指定しない場合は、処理内容のみを出力します。 対象ディレクトリに大量のファイルが有る場合、大量の出力が表示されるので注意して下さい。 |
--quality[1-100] | JPEGファイル、PNGファイルのクオリティを指定します。 --qualityのあとには1-100の数値を指定でき、数値を指定しない場合は80が使用されます。 --qualityオプションを指定した場合、--resizeおよび--colorオプションの動作は指定しない限り省略されます。 オプション--quality/--resize/--colorを指定しない場合は、--quality 80を指定した場合と同じ動作をします。 |
--resize[WIDTHxHIGHT] | JPEG・PNGファイルの最大サイズを指定し、指定したサイズ以上の画像を指定サイズにリサイズします。 このとき、アスペクト比を保ったままにリサイズされます。 --resizeのあとには幅(数値)x高さ(数値)を指定できでき、何も指定しない場合は1280×1024が使用されます。 --resizeオプションを指定した場合、--qualityおよび--colorオプションの動作は指定しない限り省略されます。 オプション--quality/--resize/--colorを指定しない場合は、--resize 1280×1024を指定した場合と同じ動作をします。 |
--color[1-256] | PNGファイルの色数を指定した数のインデックスカラーに変換します。 --colorのあとには1-256の数値を指定でき、数値を指定しない場合は256が使用されます。 --colorオプションを指定した場合、--qualityおよび--resizeオプションの動作は指定しない限り省略されます。 オプション--quality/--resize/--colorを指定しない場合は、--color 256を指定した場合と同じ動作をします。 |
--strip | このオプションを指定すると、JPEGファイルのコメントデータ(EXIF情報など)を削除し、 ファイルサイズを小さくします。 |
--owner user[:group] | kusanagi imagesを実行すると、対象ファイルのオーナーを書き換えます。 このオプションは置き換えるオーナーを設定します。このオプションでは、:の後に指定することで、 変更するオーナーとグループを同時に指定できます。 このオプションを指定しない場合、オーナー・グループとして、kusanagi:kusanagiが使用されます。 |
--mode [octet_value] | kusanagi imagesを実行すると、対象ファイルのパーミションを書き換えます。 このオプションは置き換えるパーミションを8進数の数値(0644など)を設定します。 このオプションを指定しない場合、パーミションとして 0644 が使用されます。 |
profile | 対象のプロファイルを入力します。省略時はカレントプロファイルを使用します。 |
インストールは実際に使うユーザーで行います。( root で行う必要はありません )
git clone https://github.com/riywo/anyenv ~/.anyenv
echo 'export PATH="~/.anyenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
exec $SHELL -l
anyenv -v
anyenv 1.1.1
anyenv install --init
anyenv install nodenv
exec $SHELL -l
nodenv -v
nodenv 1.3.1+5.dd4534e
最新版はLaravelなどフレームワーク側が対応していない可能性があるので、1つ前のバージョンを入れておくと安心です。
インストール可能な node.js の全てのバージョンを表示する
nodenv install -l
nodenv install 12.13.0
nodenv global 12.13.0
一旦シェルをログアウトして再ログインします
node -v
v12.13.0
使えるようになりました!
npm install -g yarn
一度シェルからログアウトして再度ログイン後に
yarn -v
kusanagi target <プロファイル名>
kusanagi status
一旦 ssl リダイレクトを解除してから行います。
kusanagi ssl --https noredirect <プロファイル名>
kusanagi ssl --email <メールアドレス>
kusanagi ssl --https redirect <プロファイル名>
kusanagi ssl --https noredirect <プロファイル名>
sudo yum update
sudo kusanagi restart
kusanagi status
vi /usr/lib/systemd/system/php7-fpm.service
ファイルの一番後ろにこちらを追加
[Service]
UMask=0002
systemctl daemon-reload
kusanagi restart
以上で okです。
KUSANAGIのあるバージョンではPHPから外部サーバへ https:// で接続するとエラーとなることがあります。 これの修正方法
php -i | grep php.ini
返って来る表示から php.ini の場所を探します。
Configuration File (php.ini) Path => /etc/php7.d
Loaded Configuration File => /etc/php7.d/php.ini
vim /etc/php7.d/php.ini
どこでもいいので以下を追記します
openssl.cafile=/etc/ssl/certs/ca-bundle.crt
以上です。
サーバの再起動も必要ありません。
PHPスクリプトから https へ接続して確認します。
PHP7.2から mcrypt は標準ではインストールされないようになっています。
また使用することも推奨されていません。
どうしても必要な場合は下記の方法でインストールしましょう
yum --enablerepo=remi,remi-php7.2 update
yum --enablerepo=remi,remi-php7.2 list | grep mcrypt
yum --enablerepo=remi,remi-php7.2 install php72-php-pecl-mcrypt
dovecotの次の設定ファイルを書き換えます
/etc/dovecot/conf.d/10-ssl.conf
ssl_cert = </etc/letsencrypt/live/YOUR-DOMAIN-NAME/fullchain.pem
ssl_key = </etc/letsencrypt/live/YOUR-DOMAIN-NAME/privkey.pem
doveconf -n
設定の記述に問題がなければ、デフォルトからの差分が表示されます。
systemctl restart dovecot
複数のドメインが存在する場合は 次のようにドメインごとに設定します。
local_name server1.tld {
ssl_cert = </etc/letsencrypt/live/server1.tld/fullchain.pem
ssl_key = </etc/letsencrypt/live/server1.tld/privkey.pem
}
local_name server2.tld {
ssl_cert = </etc/letsencrypt/live/server2.tld/fullchain.pem
ssl_key = </etc/letsencrypt/live/server2.tld/privkey.pem
}
この記述を適用する前に証明書ファイルが確かに存在するかどうか確認しておいてください。 ファイルが存在しない場合 dovecot が立ち上がりません。
openssl s_client -connect localhost:pop3s