- 投稿日:
adiaryをnginxの上で動作させつつ開発する方法をメモしておく。
前提条件
動作URLとしてはhttps://hoge.example.com/adiary
のようなサブドメイン付きのサブディレクトリとする。
adiaryはネイティブでfcgiをサポートしているらしいが、そこは無視して一般的な環境で起動するのがゴール。
SSLで動かす設定を書いているため、nginxでローカル開発環境向けのhttps環境を作るも参考にすること。
特別な設定は不要で、サブドメインモードにしなくとも動く。
確認環境
Env | Ver |
---|---|
OS | Ubuntu 22.04.3 LTS |
nginx | 1.24.0 |
fcgiwrap | 1.1.0-12 amd64 |
adiary | 3.50n |
手順
nginxはインストールされており、既に稼働している状態として話を進める
# adiaryを格納するディレクトリを作成する
sudo mkdir -p /usr/share/nginx/html/sites
# 既にどっかに展開済みのadiaryをディレクトリに突っ込む
sudo cp -R adiary /usr/share/nginx/html/sites
cd /usr/share/nginx/html/sites
# 所有権とパーミッションの調整
sudo chwon -R $USER:$USER adiary/
cd adiary/
sudo chmod -R 777 __cache/
sudo chmod -R 777 data/
sudo chmod -R 777 pub/
# Image::Magickを入れる
sudo apt install -y libimage-magick-perl
# nginxでCGIを動かすために、fcgiwrapをインストールする
sudo apt install fcgiwrap
# /etc/nginx/conf.dに設定ファイルを作成
cat <<'EOF' | sudo tee -a /etc/nginx/conf.d/hoge.example.com.conf
server {
listen 443 ssl;
server_name hoge.example.com;
ssl_certificate ssl/hoge.example.com.pem;
ssl_certificate_key ssl/hoge.example.com-key.pem;
access_log /var/log/nginx/hoge.example.com.access.log;
error_log /var/log/nginx/hoge.example.com.error.log;
# マルチテナント用にこう書いている
root /usr/share/nginx/html/sites;
# /usr/share/nginx/html/sites/adiaryにadiary一式が入っている想定
location / {
index index.html;
}
location /adiary {
index adiary.cgi;
}
# fastcgi用
location ~ \.cgi$ {
gzip off;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
EOF
# nginxの設定を再読み込みする
sudo service nginx restart
トラブルシューティング
403エラーで起動せず、エラーログにパスがないと出る
以下のコマンドを叩き、パスが整合するまで設定を調整する
sudo strace -f -e trace=file -p $(pidof fcgiwrap)
- 投稿日:
ローカル環境用の開発ドメインをhttps化する時に使えるやつ
例えばローカル環境に複数のサービスがいて、それぞれをhttps://*.example.com/
のようなドメインで管理したい時に使える
確認環境
同じことをすればLinuxとかでも応用できると思う
Env | Ver |
---|---|
nginx | 1.19.8 |
mkcert | 1.4.3 |
Windows 10 Pro | 19043.1415 |
手順
- mkcert の導入とワイルドカード証明書の作成
choco install mkcert # mkcertを認証局として登録 mkcert -install # 証明書を作成するドメインを列挙 mkcert example.test *.example.test mv _wildcard.example.com+1.* C:/nginx/conf/.ssl/
nginxの設定に証明書を記載
server { server_name dev.example.com; listen 443 ssl; ssl_certificate ssl/_wildcard.example.com+1.pem; ssl_certificate_key ssl/_wildcard.example.com+1-key.pem; ... }