Prepare tasks for django project deployment.md

As we know, there are some boring tasks while deploy Django project, like create db, do migrations and so on, here I wrote a shell script to auto do these things

#!/bin/bash

# The shell is used to do some prepare tasks for deploying TMS, including:
# (1) create new user to run TMS;
# (2) create database and add privileges;
# (3) extract software to the new user's home directionay;
# (4) modify the system database related configuration;
# (5) create necessary tables for TMS;
# (6) add administartor for TMS;
# (7) run MQ as a daemon;
# (8) deploy TMS with nginx.
# Note: please exec this sh as root.

PACKAGE='tms-1.0.tar.gz'

echo "The processing will spend several mins, please waiting patiently..."

echo "(1) create new user to run TMS"
USER='tmsx'
ACCOUNT_NUM=`cat /etc/passwd | grep "$USER" |wc -l`

if [ $ACCOUNT_NUM -eq 0 ] && [ ! -d "/home/$USER" ]
then
    echo "Please enter user password, default is '123456'"
    read USER_PASSWORD
    [ "${USER_PASSWORD}" == "" ] && USER_PASSWORD='123456'
    useradd $USER -p `openssl passwd -1 ${USER_PASSWORD}` -d /home/$USER -m -c "termianl manage system default user"
    echo "$USER ALL=NOPASSWD:ALL" >> /etc/sudoers
    if [ $? -eq 0 ]
    then
        su $USER -c 'echo "" | ssh-keygen -t rsa'
    fi
fi
echo ""

echo "(2) create database and add privileges, "
echo "Please enter database host, default is 'localhost'"
read HOST
[ "$HOST" == "" ] && HOST='localhost'

echo "Please enter the database root user password"
read ROOT_PASSWORD
[ "$ROOT_PASSWORD" == "" ] && echo "Need root password" && exit 1

DBNAME='tmsx'
MYSQL_CMD="mysql -h${HOST} -uroot -p${ROOT_PASSWORD}"

CREATE_DB_SQL="CREATE DATABASE IF NOT EXISTS ${DBNAME} CHARACTER SET utf8;"
echo ${CREATE_DB_SQL}  | ${MYSQL_CMD}

if [ $? -ne 0 ]
then
    echo "create database failed..."
    exit 1
fi

GRANT_PRIVILEGES_SQL="GRANT ALL PRIVILEGES ON ${DBNAME}.* TO '${USER}'@'%' IDENTIFIED BY '${USER_PASSWORD}';"
echo ${GRANT_PRIVILEGES_SQL}  | ${MYSQL_CMD}

if [ $? -ne 0 ]
then
    echo "grant failed..."
    exit 1
fi
echo ""

echo "(3) extract software to the new user's home directionay"
if [ -d /home/$USER ] 
then
    cp $PACKAGE /home/$USER
    cd /home/$USER
    tar xf $PACKAGE
else
    echo "no dir /home/$USER"
    exit 1
fi
echo ""

echo "(4)modify the system database related configuration"
TARGET=`basename $PACKAGE .tar.gz`
DB_SETTING="

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '${HOST}',
        'NAME': '${DBNAME}',
        'USER': '${USER}',
        'PASSWORD': '${USER_PASSWORD}',
    }
}"

if [ -d /home/$USER/$TARGET ] && [ -f /home/$USER/$TARGET/tms/settings.py ]
then
    echo $DB_SETTING >> /home/$USER/$TARGET/tms/settings.py
else
    echo "modify the system database related configuration"
    exit 1
fi
echo ""

echo "(5) create necessary tables for TMS"
if [ -d /home/$USER/$TARGET ]
then
    cd /home/$USER/$TARGET
    python manage.py makemigrations tmsApp && python manage.py migrate
fi
echo ""

if [ $? -ne 0 ]
then
    echo "create tables for TMS failed..."
    exit 1
fi

echo "(6) add administartor for TMS"
if [ -f /home/$USER/$TARGET/manage.py ]
then
    cd /home/$USER/$TARGET
    python manage.py createsuperuser
fi
echo ""

echo "(7) run MQ as a daemon"
MQ_SETTING="

description \"TMS MQ daemon\"
author \"<Andy Wu>\"

start on startup
stop on shutdown

respawn
respawn limit 20 5

pre-start script
end script

script
    python /home/$USER/$TARGET/manage.py runMSGServer
end script

post-start script
end script"

DAEMON_CFG_FILE='/etc/init/tms-mq.conf'
if [ -f $DAEMON_CFG_FILE ]
then
    status=`service tms-mq status`
    ret=`echo $status | grep 'running' | wc -l`
    if [ "$ret" != "0" ]; then
        echo >&1 "ERROR: tms-mq daemon already run."
        exit 1
    fi
fi

echo "$MQ_SETTING" > $DAEMON_CFG_FILE

status=`service tms-mq status`
ret=`echo $status | grep 'waiting' | wc -l`
if [ "$ret" = "0" ]; then
    echo >&1 "ERROR: Could not add tms-mq daemon"
    exit 1
fi

service tms-mq start
sleep 1
status=`service tms-mq status`
ret=`echo $status | grep 'running' | wc -l`
if [ "$ret" = "0" ]; then
    echo >&1 "ERROR: Could not start tms-mq daemon"
    exit 1
fi

echo ""

echo "(8) deploy TMS with nginx"

# install nginx if need

if grep "Ubuntu" /etc/issue
then
    if ! dpkg -l | grep "nginx"
    then
        apt-get install python-dev nginx || exit 1
    fi
fi

if grep "CentOS" /etc/issue
then
    if ! yum list nginx
    then
        yum install epel-release
        yum install python-devel nginx || exit 1
    fi
fi

if ! pip list | grep supervisor
then
    pip install supervisor || exit 1
fi

if ! pip list | grep uwsgi
then
    pip install uwsgi || exit 1
fi

echo_supervisord_conf > /etc/supervisord.conf

SUPERVISORD="
[program:tms]\n
command=uwsgi --ini /home/$USER/$TARGET/uwsgi.ini\n
directory=/home/$USER/$TARGET\n
startsecs=0\n
stopwaitsecs=0\n
autostart=true\n
autorestart=true\n"

echo $SUPERVISORD >> /etc/supervisord.conf

supervisord -c /etc/supervisord.conf

supervisorctl -c /etc/supervisord.conf restart tms

if [ ! -f /home/$USER/$TARGET/reload ]
then
    echo > /home/$USER/$TARGET/reload
fi

UWSGI="
[uwsgi]\n
socket = 127.0.0.1:8077\n
chdir = /home/$USER/$TARGET\n
wsgi-file = tms/wsgi.py\n
touch-reload=/home/$USER/$TARGET/reload\n

processes = 2\n
threads = 4\n

chmod-socket = 664\n
chown-socket=$USER:www-data\n"

echo -e $UWSGI > /home/$USER/$TARGET/uwsgi.ini

#restart supervisor
supervisorctl -c /etc/supervisord.conf restart tms

#config nginx
TMS_CONF="
server {
    listen      80;
    server_name localhost;
    charset     utf-8;
 
    client_max_body_size 75M;
 
    location /static {
        alias /home/$USER/$TARGET/static;
    }
    
    location / {
        include        uwsgi_params;
        uwsgi_pass     127.0.0.1:8077;
    } 
}"

echo -e $TMS_CONF > /etc/nginx/sites-available/tms.conf

ln -s /etc/nginx/sites-available/tms.conf /etc/nginx/sites-enabled/tms.conf

service nginx reload

echo "Congratulations!"

posted @ 2016-05-11 15:14  AndyBlog  阅读(309)  评论(0编辑  收藏  举报