KUSANAGIはプライム・ストラテジー株式会社が開発している超高速LAMP, LEMP, WordPress環境です。 バーチャルドメインマネージャーとしても有用です。

Docker で KUSANAGI

● KUSANAGI Run on Docker のインストール

curl https://raw.githubusercontent.com/prime-strategy/kusanagi-docker/master/install.sh |bash

docker machine がインストールされていませんというエラーが出ますが、無視してokです

~/.kusanagi/bin/kusanagi-docker コマンドが使用できるようになります

● 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 をカスタマイズする

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:

● httpd コンテナからphp , mysql の cli コマンドを実行できるようにする

・ /var/run/docker.sockを設定する

Macで以下のコマンドを実行する

sudo ln -sf "$HOME/.docker/run/docker.sock" /var/run/docker.sock

・ docker-compose.yml に設定を追加する

docker-compose.yml の各コンテナの volumes に以下のコードを追加する

    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

docker-compose.yml のhttpdの serviceshttpd に以下のコードを追加する

    user: root
    command: sh -c '/sbin/apk add docker; sh;'
    tty: true

( コマンド実行後に終了してしまわないように sh を起動しています )

引用 : https://bit.ly/418XRoK

● Laravel を インストールしてみる

composer create-project laravel/laravel myapp
No.2316
04/11 18:32

edit

KUSANAGI9 の 初期設定とドメイン作成(プロビジョン)方法

● 1. KUSANAGI9 のバージョンチェックと yum のアップデートを行う

KUSANAGI9 から kusanagiユーザーから実行できるようになりました。kusanagiコマンドは root ユーザー または kusanagi ユーザーから行います

kusanagi --version

dnf は root ユーザーから行います

sudo dnf update -y

パッケージのupdateは yum コマンドではなく dnf コマンドを使用します。

● 2. サーバーを再起動する

reboot

● 3. KUSANAGIを初期化する

こちらを必ず実行しましょう。でないとkusanagiコマンドが使用できません。

kusanagi init --passwd "好きなパスワード" --dbrootpass "好きなパスワード" --nophrase

php 8.2 で kusanagi を初期化する

--php82 を追加します

kusanagi init --passwd "好きなパスワード" --dbrootpass "好きなパスワード" --nophrase --php82

● 4. phpのバージョンを確認する

KUSANAGIの初期化が終わったらphpのバージョンを確認しておきましょう

php -v

● 5. KUSANAGI9 でプロビジョンを行う

kusanagi provision --lamp --fqdn <ドメイン名> --email <メールアドレス> --dbname <DB名> --dbuser <ユーザー名> --dbpass <パスワード名> <プロファイル名>

● 6. KUSANAGI9 で作成したサイト(ドメイン)の削除

kusanagi remove <プロファイzル名>

● 7. KUSANAGI9 の nginx の サイトごとの設定ディレクトリへ移動する

cd /etc/opt/kusanagi/nginx/conf.d/

● nginx の request entity too large エラーを修正する

cd /etc/opt/kusanagi/nginx/conf.d/
vi ホスト名.conf

client_max_body_size を変更する

server {
    listen 443 ssl http2;
    .....
    
    client_max_body_size 50M;

● PHPの設定を変更する

vi /etc/opt/kusanagi/php.d/php.ini

● KUSANAGI で PHP の実行グループとユーザー名を kusanagi にする

KUSANAGI バージョン9以降の場合

sudo vi /etc/opt/kusanagi/php-fpm.d/www.conf

23-24 行目を次のように修正します

user = kusanagi
group = kusanagi

念のためにマシンを再起動しておきます

reboot

● KUSANAGI9 で 無料SSL証明書 の追加

プロビジョン時に email が指定してあるのにSSLが うまく設定されなかった場合は、こちらのコマンドで再設定します

# kusanagi ssl プロビジョン名

● KUSANAGI9 で http → https への自動リダイレクト

# kusanagi ssl プロビジョン名 --https {redirect|noredirect}]

● KUSANAGI9 で 設定の削除

kusanagi remove プロビジョン名
No.2167
12/21 08:57

edit

KUSANAGI の php へ xdebug をインストールする

● PHPにxdebugがインストール済みかどうかを確認する

php7 -m | grep xdebug

● PECLから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再起動してxdebugがインストールされていることを確認する

kusanagi restart

php7 -m | grep xdebug
No.2078
10/15 13:36

edit

KUSANAGI で MySQL へ rootユーザーで接続する

● KUSANAGI の MySQL rootユーザーの

パスワードを確認する

/root/.my.cnf にルートユーザのパスワードが記述されています

cat /root/.my.cnf

● ルートユーザでログインする

mysql -uroot -p
No.2075
10/14 13:03

edit

KUSANAGI の nginxのログがローテーションされない問題に対応する

● KUSANAGI の nginxのログローテーションの設定を変更する

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
No.2073
10/14 13:08

edit

KUSANAGI 本体のバージョンアップ

● バージョンアップ前に現在のKUSANAGIのバージョンを調べておく

sudo kusanagi --version
KUSANAGI Version 8.4.5-7

● KUSANAGI 本体のバージョンアップ

sudo yum update -y

こちらのコマンドでエラーが出る場合があります。

その場合はこちらのコマンドからアップデートを行います。

● KUSANAGI 本体のバージョンアップ(エラーが出る場合)

sudo yum update -y --enablerepo=remi,remi-php56

● バージョンアップが完了したら再度バージョンを確認する

sudo kusanagi --version
KUSANAGI Version 8.5.3-1
No.2026
08/02 14:51

edit

KUSANAGI の ホスト名(ドメイン名)を変更する

● 現在のターゲットを調べる、変更する

・KUSANAGIの現在のターゲットのステータスを調べる

kusanagi status 【ターゲット名】

・KUSANAGIのターゲットを変更する

kusanagi target 【ターゲット名】

現在のターゲットを【ターゲット名】に変更します。

● KUSANAGI の ホスト名(ドメイン名)を変更する

kusanagi setting --fqdn 【ドメイン名】 【ターゲット名】

【ターゲット名】を省略した場合は現在のターゲットに対して設定されます。

● KUSANAGI9 の ホスト名(ドメイン名)を変更する

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
No.1895
04/30 22:34

edit

KUSANAGI で PHP の実行グループとユーザー名を kusanagi にする

● KUSANAGI で PHP の実行グループとユーザー名を kusanagi にする

KUSANAGI バージョン9以降の場合

sudo vi /etc/opt/kusanagi/php-fpm.d/www.conf

KUSANAGI バージョン8以下の場合

sudo vi /etc/php7-fpm.d/www.conf

23-24 行目を次のように修正します

user = kusanagi
group = kusanagi

念のためにマシンを再起動しておきます

reboot
No.1834
01/20 09:31

edit

kusanagi の nginx で 動画ファイルを表示できるように設定する

● kusanagi の nginx で 動画ファイルを表示できるように設定する

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 リスタート

nginx -s reload
No.1757
05/15 13:17

edit

kusanagi で サイト設定(provision)を 削除する

● kusanagi で サイト設定(provision)を 削除する(確認あり)

kusanagi remove kusanagi_html

● kusanagi で サイト設定(provision)を 削除する(確認なし)

kusanagi remove -y kusanagi_html
No.1725
03/30 09:46

edit

KUSANAGI で 管理しているPHP7.3 に intl モジュールをインストールする

● KUSANAGI で 管理しているPHP7.3 に intl モジュールをインストールする

EC-CUBE4 で必要な php の intl モジュールをインストールします

・yum コマンドからモジュールをインストール

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.ini の場所を探す

php -r "echo phpinfo();" | grep "php.ini"

・php.ini の編集

vi /etc/php7.d/php.ini

この行を追加して保存する ↓

extension=/opt/remi/php73/root/usr/lib64/php/modules/intl.so

● モジュールがインストールされていることを確認する

php -m
No.1622
11/14 10:59

edit

KUSANAGI の 便利コマンド images で png , jpg の画像サイズを小さくする

● KUSANAGI の 便利コマンド images で png , jpg の画像サイズを小さくする

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 対象のプロファイルを入力します。省略時はカレントプロファイルを使用します。
No.1620
11/11 15:25

edit

KUSANAGI ( Centos7 )環境に nodenv を入れて node.js バージョン管理を行う

● anyenv のインストール

インストールは実際に使うユーザーで行います。( 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 のバージョン確認

anyenv -v
anyenv 1.1.1

● 2. nodenv のインストール

anyenv install --init
anyenv install nodenv
exec $SHELL -l

● 2. nodenv のバージョン確認

nodenv -v
nodenv 1.3.1+5.dd4534e

● 3. node.js のインストール

最新版はLaravelなどフレームワーク側が対応していない可能性があるので、1つ前のバージョンを入れておくと安心です。

インストール可能な node.js の全てのバージョンを表示する

nodenv install -l
nodenv install 12.13.0
nodenv global 12.13.0

● 3. node.js のバージョン確認

一旦シェルをログアウトして再ログインします

node -v
v12.13.0

使えるようになりました!

● yarn もインストールする

npm install -g yarn

一度シェルからログアウトして再度ログイン後に

yarn -v
No.1616
07/30 18:39

edit

KUSANAGI の プロファイル設定を確認しLets Encrypt SSL証明書の更新を行う

● KUSANAGIの現在のプロファイルの設定を確認する

kusanagi target <プロファイル名>
kusanagi status

● KUSANAGIでLets Encrypt SSL証明書の更新を行う

一旦 ssl リダイレクトを解除してから行います。

kusanagi ssl --https noredirect <プロファイル名>
kusanagi ssl --email  <メールアドレス>

● KUSANAGIで http → https リダイレクトを行うよう設定する

kusanagi ssl --https redirect <プロファイル名>

● KUSANAGIで http → https リダイレクトを × 解除する

kusanagi ssl --https noredirect <プロファイル名>

● これでもなおらない場合は

sudo yum update
sudo kusanagi restart
No.1599
06/04 18:04

edit

KUSANAGI + php7-fpm 環境で デフォルトのファイル権限(umask)を(0002)に変更する

● KUSANAGI + php7-fpmの設定ファイルの場所を確認する

kusanagi status

● php7-fpm.service を編集する

vi /usr/lib/systemd/system/php7-fpm.service

ファイルの一番後ろにこちらを追加

[Service]
UMask=0002

● サーバーリスタート

systemctl daemon-reload
kusanagi restart

以上で okです。

参考 : https://goo.gl/Rcvbac

No.1447
02/20 12:59

edit

KUSANAGI環境内のPHPから外部サーバへ https:// で接続するとエラーとなる問題の対応

● KUSANAGI環境内のPHPからhttps接続できるようにする

KUSANAGIのあるバージョンではPHPから外部サーバへ https:// で接続するとエラーとなることがあります。 これの修正方法

1. php.ini の場所を探す

php -i  | grep php.ini

返って来る表示から php.ini の場所を探します。

Configuration File (php.ini) Path => /etc/php7.d
Loaded Configuration File => /etc/php7.d/php.ini

2. php.ini を修正する

vim /etc/php7.d/php.ini

どこでもいいので以下を追記します

openssl.cafile=/etc/ssl/certs/ca-bundle.crt

以上です。
サーバの再起動も必要ありません。
PHPスクリプトから https へ接続して確認します。

No.1363
11/15 20:55

edit

KUSANAGIをインストールしているCentOS7に PHP7.2のmcrypt をインストールする

● KUSANAGIをインストールしているCentOS7に PHP7.2のmcrypt をインストールする

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
No.1308
11/15 20:56

edit

KUSANAGI で自動取得したLets Encrypt の 証明書を dovecot に使用する

● KUSANAGIを使って取得した Lets Encrypt の 証明書を dovecot に使用する

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

● dovecot の設定の確認

doveconf -n

設定の記述に問題がなければ、デフォルトからの差分が表示されます。

● dovecot のリスタート(Centos 7)

systemctl restart dovecot

● KUSANAGIを使って取得した Lets Encrypt の 証明書を 複数のバーチャルドメインで運用している 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 が立ち上がりません。

● コマンドラインから pop3s でサーバへ接続する

openssl s_client -connect localhost:pop3s

● Qualys SSL Sever Test で SSL証明書の診断を行う

https://www.ssllabs.com/ssltest/index.html

No.1297
11/15 20:56

edit