Скрипт для быстрого создания заготовки проекта (каталоги, конфиги)

Dec 05, 2010 23:35

Ух ты. То, что при работе под Windows откладывалось годами на "потом как-нибудь", сегодня под Linux-ом родилось практически мгновенно. Скрипт на bash-е позволил легко автоматизировать то, над чем под Windows приходилось задумываться и постоянно откладывать, утешая себя тем, что хоть это и муторно, но не каждый день происходит. Пользователям Windows проще всего будет воспользоваться Cygwin (не пробовал, но думаю, проблем не будет).

Для веб-разработок я пользуюсь движком CodeIgniter, поэтому некоторые части скрипта ему посвящены.

Скрипт создаёт всю необходимую мне структуру каталогов (одна из муторных задач), автоматически генерирует большинство конфигов, подготавливает SQL скрипты для создания БД, копирует пару заготовок WikidPad "документов" (одна вики для документации по проекту, другая для быстрого прототипирования сайта в вики), копирует также немного настроенный и слегка модифицированныый движок CodeIgniter (поскольку во всех проектах используется логин/регистрация/капча/email и прозрачная поддержка i18n, решил их сразу включить в шаблон -- давно хотел уже это сделать). Попробовал -- оказалось необычайно удобно. Хотя, казалось бы, времени экономит может не так уж и много, но зато теперь я понял, сколько это экономит нервов и внимания. Облегчение чувствуется прям физически.


В общем, бросаю пока скрипт сюда, as is:

#!/bin/bash
##
## Prepare directory structure for project and generate
## possible script and config files
##
## mkprj project_name
##
## @author Ruslan Brest, r-b@mail.ru
## @date 2010-12-05
##

if [ "$1" == "" ]; then echo "No project name given!"; exit 1; fi

## configurable
DEVDIR="localhost-rb-ubuntu"
PRODDIR="production"
DB=$1
PRJ="$HOME/projects"
STATIC_FILES="$HOME/bin/mkprj-static.zip"
SED_FILTER="$HOME/bin/mkprj-sed.txt"

## basedir for user projects
cd $PRJ

## Generate directory structure
## (some directories are CodeIgniter related)
mkdir $1
## Unpack static content: WikidPad templates, CodeIgniter engine
unzip $STATIC_FILES -d $PRJ/$1
# Config sets for development and production server configurations
mkdir $1/config_sets
mkdir $1/config_sets/$DEVDIR
mkdir $1/config_sets/$DEVDIR/__sql
mkdir $1/config_sets/$DEVDIR/system
mkdir $1/config_sets/$DEVDIR/system/application
mkdir $1/config_sets/$DEVDIR/system/application/config
mkdir $1/config_sets/$PRODDIR
mkdir $1/config_sets/$PRODDIR/__sql
mkdir $1/config_sets/$PRODDIR/system
mkdir $1/config_sets/$PRODDIR/system/application
mkdir $1/config_sets/$PRODDIR/system/application/config
# project documentation
mkdir $1/doc
# WikidPad
#mkdir $1/doc/DocsWiki
#mkdir $1/doc/DocsWiki/data
#mkdir $1/doc/DocsWiki/files
# website Apache root
mkdir $1/public_html
mkdir $1/public_html/captcha
chmod 777 $1/public_html/captcha
mkdir $1/public_html/img
mkdir $1/public_html/js
mkdir $1/public_html/css

##
## Generate common scripts for Database maintenance
##

### Create database
echo -e "DROP DATABASE IF EXISTS \`$DB\`;

CREATE DATABASE \`$DB\`
CHARACTER SET 'utf8'
COLLATE 'utf8_general_ci';

USE \`$DB\`;" >> $1/config_sets/$DEVDIR/__sql/00-db.sql

##
## Prepare Apache2 setup
##

### Apache2 config
echo -e "# local copy of '$1' default Apache2 configuration

Alias /$1/ $PRJ/$1/public_html/

\tOptions FollowSymLinks
\tDirectoryIndex index.php
\tAllowOverride All

\t
\t\tphp_flag magic_quotes_gpc Off
\t

" > $1/apache2.conf

### htaccess for CodeIgniter for removing index.php from URL
echo -e "RewriteEngine on
RewriteCond \$1 !^(index\\.php|robots\\.txt|favicon\\.(png|ico)|captcha/.*\\.png|js|img|css)
RewriteRule ^(.*)\$ /$1/index.php/\$1 [L]
" > $1/public_html/.htaccess
cp $1/public_html/.htaccess $PRJ/$1/config_sets/$DEVDIR/
echo -e "RewriteEngine on
RewriteCond \$1 !^(index\\.php|robots\\.txt|favicon\\.(png|ico)|captcha/.*\\.png|js|img|css)
RewriteRule ^(.*)\$ /index.php/\$1 [L]
" > $PRJ/$1/config_sets/$PRODDIR/.htaccess

### Apache2 setup helper
echo -e "#!/bin/bash
## Check path before starting
sudo ln -s $PRJ/$1/apache2.conf /etc/apache2/conf.d/$1.conf
sudo apache2ctl restart" > $PRJ/$1/doc/howto-apache2.sh
chmod +x $PRJ/$1/doc/howto-apache2.sh

##
## Prepare config_sets (CodeIgniter)
##
cd $PRJ/$1/public_html/system/application/config
cp -t $PRJ/$1/config_sets/$DEVDIR/system/application/config config.php database.php dx_auth.php global_vars.php
cp -t $PRJ/$1/config_sets/$PRODDIR/system/application/config config.php database.php dx_auth.php global_vars.php

##
## modify config_sets (CodeIgniter)
##
cat $PRJ/$1/public_html/system/application/config/config.php | sed "s/^\$config\['base_url'\].*$/\$config\['base_url'\] = 'http:\/\/localhost\/$1\/';/" > $PRJ/$1/config_sets/$DEVDIR/system/application/config/config.php
#cat $PRJ/$1/config_sets/$DEVDIR/system/application/config/config.php | sed "s/^\$config\['index_page'\].*$/\$config\['index_page'\] = '';/" > $PRJ/$1/config_sets/$DEVDIR/system/application/config/config.mod.php
#mv $PRJ/$1/config_sets/$DEVDIR/system/application/config/config.mod.php $PRJ/$1/config_sets/$DEVDIR/system/application/config/config.php
cat $PRJ/$1/public_html/system/application/config/config.php | sed "s/^\$config\['base_url'\].*$/\$config\['base_url'\] = 'http:\/\/www.$1.com\/';/" > $PRJ/$1/config_sets/$PRODDIR/system/application/config/config.php

В ZIP-е -- две WikidPad'ные заготовки, движок CI и кажется один SQL скрипт от DX_Auth.

Выпустил проект в свободное плавание: http://code.google.com/p/mkprj/
Может кто захочет протестировать под Windows и дописать инструкции (заработает ли с лёту под Cygwin, например) и добавить заготовки для проектов на Ruby, Zend, C++ и т.д. -- буду только рад. В лицензиях я лопух, так что выбрал первые знакомые буквы, от которых нет мурашек по коже: GNU GPL v2.

Из неприятного: не заморачивался пока с решением вопроса, как удобно отделить массивную графику от остального (документация, код, конфиги). Не могу решить, как это лучше сделать. Есть там неприятные моменты.

automation, web, software, development, linux

Previous post Next post
Up