add_vhost.pl
2010.05.16
バーチャルホストを追加するperlスクリプト。
env
- MAMP
#!/usr/bin/env perl
use strict;
use Getopt::Long;
use Data::Dumper;
use File::Path qw(make_path remove_tree);
use IO::File;
# ----------------------------- vars
my @def_dirs = (
'site/',
'site/cgi-bin/',
'site/logs/',
'site/ssl/',
'site/public/',
);
my $vhosts_file = "/Applications/MAMP/conf/apache/extra/vhosts.conf";
my $vhosts_format = << "EOV";
#
# {project_id} - {explain}
#
Listen {project_id}
<VirtualHost *:{project_id}>
DocumentRoot {docroot}
ErrorLog {log_path}/error_log
CustomLog {log_path}/access_log common
ScriptAlias /cgi-bin/ {cgi_path}
<Directory {docroot}>
AllowOverride All
Allow from All
Options -Multiviews
</Directory>
</VirtualHost>
EOV
# ----------------------------- options
my $verbose;
my $help;
my $project_id = "";
my $basepath = "$ENV{HOME}/work/web";
my $explain = "新しいウェブサイト";
GetOptions(
"verbose" => \$verbose,
"help" => \$help,
"project_id=i" => \$project_id,
"basepath" => \$basepath,
"explain=s" => \$explain,
);
if( $help ){
usage();
exit 1;
}
if( !$project_id ){
print "Error: Your must specify project_id(Integer). \n";
usage();
exit 1;
}
if( !$basepath ){
print "Error: Your must specify BasePath. \n";
#usage();
exit 1;
}
elsif( ! -d $basepath ){
print "Error: $basepath Directory is not found. \n";
#usage();
exit 1;
}
if( -d $basepath . '/' . $project_id ){
print "Error: A project_id Specify $project_id is exists.\n";
exit 1;
}
# ----------------------------- make project directory.
my $new_project_path = $basepath . '/'. $project_id;
for(@def_dirs) {
make_path($new_project_path . '/' . $_ , {verbose => 1});
}
# ----------------------------- make symbolic link.
if($explain){
my $sympath = $basepath . '/' .$project_id . '_' . $explain;
system("ln -s $new_project_path $sympath");
if($? != 0){
print "Warning: Can not create explain.";
}
else{
print "make symlink: " . $sympath . "\n";
}
}
# ----------------------------- append vhosts.
my $docroot = $new_project_path . '/site/public';
my $log_path = $new_project_path . '/site/logs';
my $cgi_path = $new_project_path . '/site/cgi-bin/';
$vhosts_format =~ s/{project_id}/$project_id/g;
$vhosts_format =~ s/{explain}/$explain/g;
$vhosts_format =~ s/{docroot}/$docroot/g;
$vhosts_format =~ s/{cgi_path}/$cgi_path/g;
$vhosts_format =~ s/{log_path}/$log_path/g;
my $io = IO::File->new($vhosts_file, 'r') or die "Error: Can not Open file. $!\n";
my $vhosts_lines = join "", $io->getlines;
$io->close;
if( $vhosts_lines !~ /^#(?:\s+)?$project_id/ ) {
$io = IO::File->new($vhosts_file, 'a') or die "Error: Can not Open file. $!\n";
$io->print($vhosts_format);
print "Append vhost: $new_project_path\n";
}
system('/Applications/MAMP/Library/bin/apachectl -S');
exit 0;
# -----------------------------
# Subs
#
#
# print usage.
#
sub usage {
print << "EOU";
Usage:
create_website.pl [[-p|--project_id:int]] [-b|--basepath] BasePath]
Options:
-p: project_id (e.g. 49600)
-b: BasePath (default = $basepath)
-e: explain website.
-h: show help.
EOU
exit 1;
}
use strict;
use Getopt::Long;
use Data::Dumper;
use File::Path qw(make_path remove_tree);
use IO::File;
# ----------------------------- vars
my @def_dirs = (
'site/',
'site/cgi-bin/',
'site/logs/',
'site/ssl/',
'site/public/',
);
my $vhosts_file = "/Applications/MAMP/conf/apache/extra/vhosts.conf";
my $vhosts_format = << "EOV";
#
# {project_id} - {explain}
#
Listen {project_id}
<VirtualHost *:{project_id}>
DocumentRoot {docroot}
ErrorLog {log_path}/error_log
CustomLog {log_path}/access_log common
ScriptAlias /cgi-bin/ {cgi_path}
<Directory {docroot}>
AllowOverride All
Allow from All
Options -Multiviews
</Directory>
</VirtualHost>
EOV
# ----------------------------- options
my $verbose;
my $help;
my $project_id = "";
my $basepath = "$ENV{HOME}/work/web";
my $explain = "新しいウェブサイト";
GetOptions(
"verbose" => \$verbose,
"help" => \$help,
"project_id=i" => \$project_id,
"basepath" => \$basepath,
"explain=s" => \$explain,
);
if( $help ){
usage();
exit 1;
}
if( !$project_id ){
print "Error: Your must specify project_id(Integer). \n";
usage();
exit 1;
}
if( !$basepath ){
print "Error: Your must specify BasePath. \n";
#usage();
exit 1;
}
elsif( ! -d $basepath ){
print "Error: $basepath Directory is not found. \n";
#usage();
exit 1;
}
if( -d $basepath . '/' . $project_id ){
print "Error: A project_id Specify $project_id is exists.\n";
exit 1;
}
# ----------------------------- make project directory.
my $new_project_path = $basepath . '/'. $project_id;
for(@def_dirs) {
make_path($new_project_path . '/' . $_ , {verbose => 1});
}
# ----------------------------- make symbolic link.
if($explain){
my $sympath = $basepath . '/' .$project_id . '_' . $explain;
system("ln -s $new_project_path $sympath");
if($? != 0){
print "Warning: Can not create explain.";
}
else{
print "make symlink: " . $sympath . "\n";
}
}
# ----------------------------- append vhosts.
my $docroot = $new_project_path . '/site/public';
my $log_path = $new_project_path . '/site/logs';
my $cgi_path = $new_project_path . '/site/cgi-bin/';
$vhosts_format =~ s/{project_id}/$project_id/g;
$vhosts_format =~ s/{explain}/$explain/g;
$vhosts_format =~ s/{docroot}/$docroot/g;
$vhosts_format =~ s/{cgi_path}/$cgi_path/g;
$vhosts_format =~ s/{log_path}/$log_path/g;
my $io = IO::File->new($vhosts_file, 'r') or die "Error: Can not Open file. $!\n";
my $vhosts_lines = join "", $io->getlines;
$io->close;
if( $vhosts_lines !~ /^#(?:\s+)?$project_id/ ) {
$io = IO::File->new($vhosts_file, 'a') or die "Error: Can not Open file. $!\n";
$io->print($vhosts_format);
print "Append vhost: $new_project_path\n";
}
system('/Applications/MAMP/Library/bin/apachectl -S');
exit 0;
# -----------------------------
# Subs
#
#
# print usage.
#
sub usage {
print << "EOU";
Usage:
create_website.pl [[-p|--project_id:int]] [-b|--basepath] BasePath]
Options:
-p: project_id (e.g. 49600)
-b: BasePath (default = $basepath)
-e: explain website.
-h: show help.
EOU
exit 1;
}
usage
$ add_vhost.pl -p 49272 -e newvhost
mkdir /Users/yokada/work/web/49272
mkdir /Users/yokada/work/web/49272/site/
mkdir /Users/yokada/work/web/49272/site/cgi-bin/
mkdir /Users/yokada/work/web/49272/site/logs/
mkdir /Users/yokada/work/web/49272/site/ssl/
mkdir /Users/yokada/work/web/49272/site/public/
make symlink: /Users/yokada/work/web/49272_newvhost
Append vhost: /Users/yokada/work/web/49272
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:49200 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:19)
*:49201 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:31)
*:49205 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:41)
*:49239 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:53)
*:49205 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:63)
*:49205 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:73)
*:49241 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:85)
*:49243 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:98)
*:49247 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:111)
*:49249 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:123)
*:49252 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:134)
*:49253 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:145)
*:49258 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:163)
*:49259 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:177)
*:49260 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:189)
*:49262 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:203)
*:49263 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:218)
*:49264 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:235)
*:49265 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:252)
*:49266 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:269)
*:49267 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:286)
*:49268 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:303)
*:49269 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:320)
*:49271 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:337)
*:49272 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:354)
Syntax OK
mkdir /Users/yokada/work/web/49272
mkdir /Users/yokada/work/web/49272/site/
mkdir /Users/yokada/work/web/49272/site/cgi-bin/
mkdir /Users/yokada/work/web/49272/site/logs/
mkdir /Users/yokada/work/web/49272/site/ssl/
mkdir /Users/yokada/work/web/49272/site/public/
make symlink: /Users/yokada/work/web/49272_newvhost
Append vhost: /Users/yokada/work/web/49272
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:49200 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:19)
*:49201 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:31)
*:49205 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:41)
*:49239 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:53)
*:49205 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:63)
*:49205 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:73)
*:49241 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:85)
*:49243 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:98)
*:49247 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:111)
*:49249 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:123)
*:49252 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:134)
*:49253 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:145)
*:49258 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:163)
*:49259 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:177)
*:49260 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:189)
*:49262 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:203)
*:49263 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:218)
*:49264 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:235)
*:49265 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:252)
*:49266 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:269)
*:49267 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:286)
*:49268 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:303)
*:49269 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:320)
*:49271 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:337)
*:49272 localhost (/Applications/MAMP/conf/apache/extra/vhosts.conf:354)
Syntax OK

