Dec 19, 2011

Как поднять demo версию проекта на paster + virtualenv в Debian

Иногда необходимо поднять демо версию своего проекта для тестов. Склонируем наш git проект на сервер где будет демо:

$ git clone --bare ~/myproject ssh://uralbash@myserver/~/my_project.git

Проект склонируется в домашнюю директорию сервера myserver. Ключ --bare означает что клон предназначен только для push или pull т.е. все коммиты мы будем делать у себя локально а потом пушить на сервак. Далее напишем скрипт который будет из нашего bare репозитария создавать проект для запуска демки:

$ rm -r /home/uralbash/my_project
$ git clone /home/uralbash/my_project.git /home/uralbash/my_project

После этого создаем virtualenv окружение (/home/uralbash/mypythonenv/) и добавляем скрипт запуска в /etc/init.d/my_project.sh:

#! /bin/sh

### BEGIN INIT INFO
# Required-Start:    $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the paster server
# Description:       starts paster
### END INIT INFO


PROJECT=/home/uralbash/my_project
PID_DIR=/var/run/my_project/
PID_FILE=/var/run/my_project/paster.pid
LOG_FILE=/home/uralbash/logs/my_project/paster.log
USER=root
GROUP=root
PROD_FILE=/home/uralbash/demo.ini
RET_VAL=0

cd $PROJECT

case "$1" in
start)
../mypythonenv/bin/paster  serve \
--daemon \
--pid-file=$PID_FILE \
--log-file=$LOG_FILE \
--user=$USER \
--group=$GROUP \
$PROD_FILE \
start

;;
stop)
../mypythonenv/bin/paster  serve \
--daemon \
--pid-file=$PID_FILE \
--log-file=$LOG_FILE \
--user=$USER \
--group=$GROUP \
$PROD_FILE \
stop

;;
restart)
../mypythonenv/bin/paster  serve \
--daemon \
--pid-file=$PID_FILE \
--log-file=$LOG_FILE \
--user=$USER \
--group=$GROUP \
$PROD_FILE \
restart


;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac

Для того что бы не хранить пароли в репозитарии файл с настройками вынесен отдельно /home/uralbash/demo.ini:

И добавляем в крон перезапуск:

# выполнять каждый четный час в 00 мин
0 */2 * * *       /etc/init.d/my_project.sh stop > /dev/null
# выполнять каждый четный час в 01 мин
1 */2 * * *       /etc/init.d/my_project.sh start > /dev/null
# выполнять в 9:00
0 9 * * *       /home/uralbash/demo_update.sh > /dev/null

После этого каждый день в 9:00 будет обновляться код и каждые 2 часа перезапускаться сервер (на случай если он полег по какойто причине). Останется только периодически отправлять коммиты.


Comments

comments powered by Disqus