zoukankan      html  css  js  c++  java
  • 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]
    
    command=uwsgi --ini /home/$USER/$TARGET/uwsgi.ini
    
    directory=/home/$USER/$TARGET
    
    startsecs=0
    
    stopwaitsecs=0
    
    autostart=true
    
    autorestart=true
    "
    
    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]
    
    socket = 127.0.0.1:8077
    
    chdir = /home/$USER/$TARGET
    
    wsgi-file = tms/wsgi.py
    
    touch-reload=/home/$USER/$TARGET/reload
    
    
    processes = 2
    
    threads = 4
    
    
    chmod-socket = 664
    
    chown-socket=$USER:www-data
    "
    
    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!"
    
    
  • 相关阅读:
    2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛
    2020: [Usaco2010 Jan]Buying Feed, II
    3396: [Usaco2009 Jan]Total flow 水流
    3403: [Usaco2009 Open]Cow Line 直线上的牛
    2102: [Usaco2010 Dec]The Trough Game
    最小生成树——Kruskal算法
    最短路径——Floyd算法(含证明)
    最短路径——Bellman-Ford算法以及SPFA算法
    最短路径——Dijkstra算法以及二叉堆优化(含证明)
    普通并查集
  • 原文地址:https://www.cnblogs.com/zeweiwu/p/5481979.html
Copyright © 2011-2022 走看看