uwsgi+nginx项目上线
一、基础环境配置
1、Linux安装配置
1、设置IP地址
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 # 网卡名 BOOTPROTO=static # 静态指定IP地址,也可以动态,但是建议是静态。 ONBOOT=yes # 是否是开机启动 TYPE=Ethernet # 类型(默认即可) IPADDR=192.168.31.123 # IP地址 NETMASK=255.255.255.0 # 掩码 GATEWAY=192.168.31.1 # 网关
2、 ssh DNS解析 (为了安全-判断IP是否有效IP)
# /etc/ssh/sshd_config # UseDNS no
3、 iptables 防火墙关闭
/etc/init.d/iptables stop # 关闭iptables [root@localhost ~]# chkconfig iptables off # 关闭机起动级别(开机不启动) [root@localhost ~]# chkconfig --list iptables iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
4、selinux 安全模块-用不到关闭
# vim /etc/selinux/config # SELINUX=disabled
5、设置dns
[root@localhost ~]# cat /etc/resolv.conf nameserver 192.168.31.1 # nameserver Dns地址和真机保持一致即可
6、注意事项:
#/etc/udev/rules.d/70-persistent-net.rules ( 6.2版本和ubuntu 会有这个文件,这个文件是记录网口和 MAC地址关系的)
2、Linux 下Python安装[用是升级不影响现有Python/多版本共存]
1、下载Python
略
2、安装Python依赖包
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
3、解压和安装软件包
tar -xzvf /opt/Python-3.6.1.tgz -C /usr/local/src/ # src目录是存放源码的目录解压到src目录( .tar.xz 文件解压:xz -d ***.tar.xz 然后 tar -xvf ***.tar 或者tar xvJf ***.tar.xz直接解压)
cd /usr/local/src/Python-3.6.1
./configure --prefix=/usr/local/python3
make && make install
4、 添加环境变量
vim /etc/profile
export PATH="$PATH:/usr/local/python3/bin"
source ../profile # 重载文件
echo $PATH # 查看当前环境变量是否添加
3、代码上传 xshell / Git 简单的Git命令
yum -y install git
git clone 你的git url
二、uwsgi+nginx部署
1、上传项目至目标服务器并安装项目所需的模块,保证项目能正常通过runserver启动并且检查没有问题。
python3 manage.py runserver 172.18.9.66:80
注释:如果启动出现错误那么很有可能是数据库没有初始化,所以python3 manage.py migrate初始化下数据库即可
2、安装uwsgi 并使用uWSGI启动这个服务(执行这条命令的时候:一定要在这个项目目录中~ )
uwsgi --http 192.168.31.123:80 --file teacher/wsgi.py --static-map=/static=static
3、使用配置文件启动uWSGI[ini]
[uwsgi] socket=8080 # 项目目录 chdir=/opt/project_teacher/teacher/ # 启动uwsgi的用户名和用户组 uid=root gid=root # 指定项目的application module=teacher.wsgi:application # 指定sock的文件路径 socket=/opt/project_teacher/script/uwsgi.sock # 启用主进程 master=true # 进程个数 workers=5 pidfile=/opt/project_teacher/script/uwsgi.pid # 自动移除unix Socket和pid文件当服务停止的时候 vacuum=true # 序列化接受的内容,如果可能的话 thunder-lock=true # 启用线程 enable-threads=true # 设置自中断时间 harakiri=30 # 设置缓冲 post-buffering=4096 # 设置日志目录 daemonize=/opt/project_teacher/script/uwsgi.log
注释:启动:uwsgi --ini uwsgi.ini
ps -ef |grep -i uwsgi
关闭:uwsgi --stop uwsgi.pid
只要启动uwsgi,就会自动生成uwsgi.ini和uwsgi.pid两个文件
这个脚本的目的并不能使我们访问django服务,而是使nginx监控该配置文件端口,然后把客户端访问的请求转发到该端口的django上。
4、设置Nginx的yum源
vim /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo # 下面这行centos根据你自己的操作系统修改比如:OS/rehel # 6是你Linux系统的版本,可以通过URL查看路径是否正确 baseurl=http://nginx.org/packages/centos/6/$basearch/ gpgcheck=0 enabled=1
5、安装nginx
yum -y install nginx # 添加配置文件 vim teacher.conf # 这个名字随便起,最好是和项目一个名字 server { listen 80; #django服务端口,端口转发 server_name 127.0.0.1 ; access_log /var/log/nginx/access.log main; charset utf-8; gzip on; gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream; error_page 404 /404.html; error_page 500 502 503 504 /50x.html; # 指定项目路径uwsgi location / { include uwsgi_params; uwsgi_connect_timeout 30; uwsgi_pass unix:/opt/project_teacher/script/uwsgi.sock; } # 指定静态文件路径 location /static/ { alias /opt/project_teacher/teacher/static/; index index.html index.htm; } }
6、添加默认静态文件目录
vim ../teacher/teacher/settings.py STATIC_ROOT = os.path.join(BASE_DIR, "static_all") python3 manage.py collectstatic --noinput
7、Nginx配置静态文件简单修改
将nginx中的配置文件中的static改为static_all
8、添加管理脚本
cd /etc/init.d/ vim manage_teacher #! /bin/sh # chkconfig: 345 85 15 # 上面一行注释:哪些Linux级别需要启动manage_teacher(3,4,5);启动序号(85);关闭序号(15)。 # description: manage script is the teacher daemon. # Author: luotianshuai # 指定项目目录 PROJECT_DIR="/opt/project_teacher/teacher" # 指定脚本目录在哪里 SCRIPTS_DIR="/opt/project_teacher/script" # 描述 DESC="teacher daemon" # 名称 NAME="teacher" # 脚本名称 SCRIPT_FILENAME="manage_teacher.sh" # 脚本目录名称 SCRIPTNAME=`pwd`/$SCRIPT_FILENAME # PID PID="uwsgi.pid" # 启动函数 d_start(){ # 进入到项目目录 cd $SCRIPTS_DIR # 判断这个PID是否存在 if [ ! -f $PID ];then echo -e "\n\033[34m$NAME项目启动中........\033[0m" # 如果不存在执行 uwsgi --ini uwsgi.ini killall nginx /etc/init.d/nginx start # 自动收集静态文件 cd $PROJECT_DIR && python3 manage.py collectstatic --noinput echo -e "\n\033[32m$NAME 项目启动完成........\033[0m" exit 0 fi echo -e "\n\033[33m$NAME 项目已启动请勿重复启动\033[0m" } # 关闭函数 # 关闭项目 d_stop(){ # 进入脚本目录 cd $SCRIPTS_DIR # 判断这个pid文件是否存在 if [ ! -f "uwsgi.pid" ];then # 这个项目已经关闭了 echo -e "\n\033[33m$NAME 项目已经关闭了请先启动\033[0m" fi echo -e "\n\033[34m$NAME 项目关闭中........\033[0m" echo -e "\nStop $DESC: $NAME" # 如果没有关闭 uwsgi --stop uwsgi.pid # 是否停掉Nginx根据实际需要来操作~~!因为Nginx有对静态文件缓存[注意] killall nginx /etc/init.d/nginx start echo -e "\n\033[32m$NAME 项目关闭完成........\033[0m" } d_restart(){ d_stop sleep 1 d_start } case "$1" in start) echo -e "\nstarting $DESC: $NAME" d_start ;; stop) echo -e "\nStop $DESC: $NAME" d_stop ;; restart) echo -e "\nRestart $DESC: $NAME" d_restart ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2 exit 3 ;; esac
9、设置开机自启动
# 添加服务 chkconfig --add manage_teacher # 开机启动 [root@localhost init.d]# chkconfig manage_teacher on # 查看启动级别 [root@localhost init.d]# chkconfig --list manage_teacher manage_teacher 0:off 1:off 2:on 3:on 4:on 5:on 6:off # 然后就可以通过命令 [root@localhost ~]# service manage_teacher start [root@localhost ~]# service manage_teacher stop [root@localhost ~]# service manage_teacher restart