add_vhost.pl
[]

2010.05.16

このエントリーをはてなブックマークに追加
はてなブックマーク - add_vhost.pl

バーチャルホストを追加する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;
}

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

関連エントリー

Leave a Reply