ubuntuなどのdeb系はapache httpdのサイト管理がよく作られており、サイト単位の有効無効を a2ensite, a2dissiteというツールで切り替えるように工夫がされています。
Nginxでもコマンドでサイト管理やりたいなあと思い作成。
使い方
3つのメソッド(サブコマンド)を持ちます、オプションなしでたたくと一応使い方を出すようにしました。
- list:sites-available にあるコンフィグファイルをリストアップ。
現在有効なものは+(プラス)を、無効なサイトは-(マイナス)を付与して表示。 - enable {configfile}:sites-enabled にリンクを作成してnginxをリロード。
- disable {configfile}:sites-enabled からリンクを削除してnginxをリロード。
コマンド例
ngsitectl.rb disable default
とか
ngctlにエイリアスして
ngctl enable example.com
このようにします。
リストはこんな感じで出します。
# ngctl list
- example.com
+ 8082
+ rprox.conf
+ 8081
- default
+ 8083
+ ssl_rprox.conf
リロードがいやな人はコメントアウトしたりgracefulに相当する手続きがあるのでそれを変わりに仕込みましょう。
この辺は改良の余地が大きいですね。
コード
自分でつかうのでGithubにも置いてます。
https://github.com/sawanoboly/optools/blob/master/ngsitectl.rb
うちはハイライトしてないからGithubのほうが見やすいですね。
そうそう、1.9.2 p180 で作っているので他のVerについては動くか見てないです。
ngsitectl.rb
#!/usr/bin/env ruby
# encording: utf-8
## Const
AvailDir = "/etc/nginx/sites-available/"
EnableDir = "/etc/nginx/sites-enabled/"
# list up all site and add "+" for enable sites.
def list(sitename)
sitesall = Dir.entries(AvailDir)
# exclude dots
sites = sitesall.select{|elem| elem != "." and elem !=".."}
# enabled sites check.
sites.each do |site|
if File.exist?(EnableDir + site) then
puts "+ " + site
else
puts "- " + site
# File.symlink(AvailDir + site, EnableDir + site)
end
end
end
def enable(sitename)
if File.exist?(EnableDir + sitename) then
puts "Site:" + sitename + " is already enabled.\nDo nothing."
elsif File.exist?(AvailDir + sitename) then
puts "enable: " + sitename
File.symlink(AvailDir + sitename, EnableDir + sitename)
puts `/etc/init.d/nginx reload`
else
puts "Site:" + sitename + " Config not found."
end
list(sitename)
end
def disable(sitename)
if File.exist?(AvailDir + sitename) then
if File.exist?(EnableDir + sitename) then
puts "disable: " + sitename
File.unlink(EnableDir + sitename)
puts `/etc/init.d/nginx reload`
else
puts "Site:" + sitename + " is already disabled.\nDo nothing."
end
else
puts "Site:" + sitename + " Config not found."
end
list(sitename)
end
begin
method(ARGV[0]).call(ARGV[1])
rescue TypeError => ex then
puts <<"HEREDOCS"
Nginx site control script.
Usage:
list: list all available sites
enable {sitename}: enable site and reload nginx
disable {sitename}: disable site and reload nginx
HEREDOCS
rescue => ex
puts "Exception " + "#{ex.class}"
puts "#{ex.message}"
puts
puts <<"HEREDOCS"
Nginx site control script.
Usage:
list: list all available sites
enable {sitename}: enable site and reload nginx
disable {sitename}: disable site and reload nginx
HEREDOCS
end
0 件のコメント:
コメントを投稿