シェルのSSHでnginxのバーチャルホスト設定するスクリプト

客先確認用テストアップの
サブドメインとか用意するの
新規案件受ける度毎度毎度手動でsshで入って
nginxの設定追記してbasic認証かけて、
ってやってたのだけども
shとかで書けば楽チンだろうなとは思いつつ
面倒なので重い腰が上がらなかった。
けど、いい加減毎度やるのも面倒なので頑張ってやってみた。

自分の環境では
って感じの部分結構あると思うので
適宜変更など必要かと思います参考までにお願いします。

template.txt

# -----------------
# ${HOST_NAME}
# -----------------
server{
    server_name   dev.${HOST_NAME}.domain.jp;
    auth_basic \"Restricted\";
    auth_basic_user_file /var/www/html/dev.${HOST_NAME}/.htpasswd;
    location / {
        root /var/www/html/dev.${HOST_NAME}/public;
        index  index.html index.htm index.php;
    }
    location ~ \.php$ {
        root /var/www/html/dev.${HOST_NAME}/public;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        include        fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO \$fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED \$document_root\$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
    }
}
# -----------------

shでヒアドキュメント的な物結構面倒そう?な雰囲気だったので
外部にテンプレ.txt用意して展開する形にしてみた。

virtualhost.sh

#!/bin/sh
HOST_NAME=$1
ADD_CONF=`eval "echo \"$(cat template.txt)\""`

ssh -t -l user -p port domain@xxx.xxx.xxx.xxx "
    mkdir /var/www/html/dev.${HOST_NAME}/;
    sudo echo '${ADD_CONF}' | sudo tee -a /etc/nginx/conf.d/dev.conf;
    sudo /usr/sbin/nginx -s reload;
"

evalでエスケープとかしつつコマンドからの引数渡す。

他に何か処理追加したい場合はsshの””の引数に色々追記するとできます。

一応期待どおりには動いているけど、
クォーテーションとか展開色々重なっててどうなってるかは自分でもよくわかってない

実行

sh virtualhost.sh sub_domain_name

とかってコマンドで引数渡してやると
サブドメインのディレクトリ作成とnginxの設定・再起動ができる感じです。

例によってこれで正しいかは知らんが
個人的にはとりあえず期待どおりの動作になりました。

リモートの鍵の設定とかは必要です、あとsudoがあるのでリモートのパス求められます。
ここもパス無しにしたいけど注意資源がアレなので
今日はこれぐらいにしといたるわ

other

Posted by admin