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!"
Prepare tasks for django project deployment.md的更多相关文章
- [Python] Create a Django project in Pycharm
From: http://blog.csdn.net/u013088062/article/details/50158239 From: http://blog.csdn.net/u013088062 ...
- Web.config Transformation Syntax for Web Application Project Deployment
Web.config Transformation Syntax for Web Application Project Deployment Other Versions Updated: Ma ...
- Start Your Django Project in Nginx with uWsgi
Step 0:Install A,B,C,blabla needed This can be seen in my another article in the blog.click here(una ...
- Apache:To Config The Vhost of Django Project
It is not a good idea to use dev server in Production Environment. Apache or Nginx are good choice.B ...
- Django project troubleshootings
1. 当django project文件夹放到cgi-bin目录下面时会出现下面的错误: [Wed Jan 09 01:52:52.611690 2019] [core:notice] [pid 15 ...
- django project 的快速构建
2003年,堪萨斯(Kansas)州 Lawrence 城中的一个 网络开发小组 ——World Online 小组,为了方便制作维护当地的几个新闻站点(一般要求几天或者几小时内被建立),Adrian ...
- 18 12 30 新建一个 django project
1. 新建一个 django project 1 2 django-admin.py startproject project_name 特别是在 windows 上,如果报错,尝试用 django- ...
- Django project structure: how does static folder, STATIC_URL, STATIC_ROOT work
So I've been messing up with Django(1.6+) project setting for quite sometime, this is what i finally ...
- PyCharm‘s Project Deployment
当在本地写完项目,部署到服务器上调试的时候,难免会碰到代码的修修改改,但由于项目在服务器上,修改起来相对麻烦.各路大神或许有自己的方法去解决.这篇博客演示利用PyCharm的Deployment功能, ...
随机推荐
- BZOJ3688 折线统计 【dp + BIT】
题目链接 BZOJ3688 题解 将点排序 设\(f[i][j][0|1]\)表示以第\(i\)点结尾,有\(j\)段,最后一段上升或者下降的方案数 以上升为例 \[f[i][j][0] = \sum ...
- 洛谷 P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows 解题报告
P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows 题意: 给定一个长\(N\)的序列,求满足任意两个相邻元素之间的绝对值之差不超过\(K\)的这个序列的排列有多少个? 范围: ...
- 【spoj SUBST1】 New Distinct Substrings
http://www.spoj.com/problems/SUBST1/ (题目链接) 题意 求字符串的不相同的子串个数 Solution 后缀数组论文题. 每个子串一定是某个后缀的前缀,那么原问题等 ...
- 解题:SDOI 2014 数表
题面 为了好写式子,先不管$a$的限制 设$facs$为因子和,那么有 $ans=\sum\limits_{i=1}^n\sum\limits_{j=1}^mfacs(gcd(i,j))$ 再设$f( ...
- bzoj 4521: [Cqoi2016]手机号码
感觉get到了一种数位dp的新姿势,加一位表示当前要填的数有没有限制(感觉以前的写法都太蠢了). 这么写有两个地方要注意: 1.每dp到一位时需要f[i][初始状态]++,相当于这位前都是前导零(这道 ...
- centos7添加虚拟IP
1.在网络配置文件中添加虚拟IP,vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 TYPE="Ethernet" BOOTP ...
- 2018java面试集合
作者:刘成链接:https://www.zhihu.com/question/266822548/answer/317700943来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- 自定义ribbon规则
关于ribbon的知识:. 在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式,一种是ribbon+restT ...
- python安装pip、numpy、scipy、statsmodels、pandas、matplotlib等
1.安装python 2.安装numpy(开源的数值计算扩展,可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多. 很多库都是以此库为依 ...
- Linux应用程序设计之网络基础编程
1.TCP/IP协议概述 1.1.OSI参考模型及TCP/IP参考模型 OSI协议参考模型是基于国际标准化组织(ISO)的建议发展起来的,从上到下工分为7层:应用层,表示层,会话层,传输层,网络层,数 ...