django + nginx + uwsgi + 部署

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kaikai136412162/article/details/82832070

首先将项目上传到服务器安装环境

用manage.py  runserver 0:80 启动访问没问腿ok

一、添加默认静态文件目录

在项目中的setting文件中

STATIC_ROOT = os.path.join(BASE_DIR, "static_all")

首先同步一下数据库,静态文件收集

python manage.py makemigrations

python manage.py migrate

python manage.py collectstatic

二、安装uwsgi

pip install uwsgi
1.在项目路径下执行,在浏览器中访问测试uwsgi方式启动django是否有异常
uwsgi --http 0.0.0.0:9191 --chdir xxxxxx --wsgi-file project_name/wsgi.py --static-map=/static=static_all --master --processes 4 --threads 2

xxxxx 代表项目的绝对路径,project 代表项目的名称

然后用外网访问   ip:9191 确定uwsgi启动是否存在问题,如果没有问题go on

>>在项目同级目录下创建一个命令文件夹script

创建my_uwsgi.ini文件
[uwsgi]
# 项目中wsgi.py文件的目录
wsgi-file = /xxx/xxx/xxx/wsgi.py

# 项目目录
chdir=/xxx/xxx/
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 指定项目的通信协议(这里django_name是项目名)
module=django_name.wsgi
# 指定sock的文件路径
socket=/xxxx/script/uwsgi.sock
# 启用主进程
master=true
# 进程个数
workers=5
pidfile=/xxxx/script/uwsgi.pid
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/xxxx/script/uwsgi.log

xxx/xxx/xxx/ 代表项目的路径,名称

启动

# my_uwsgi.ini 要和创建的文件名一致
uwsgi --ini my_uwsgi.ini

停止

uwsgi --stop uwsgi.pid
启动后创建三个文件 uwsgi.log  uwsgi.pid  uwsgi.sock

用命令查看一下 

 ps -ef | grep uwsgi

没有问题进行go on

安装nginx

sudo apt-get install nginx

安装好的文件位置

/usr/sbin/nginx:主程序

/etc/nginx:存放配置文件

/usr/share/nginx:存放静态文件

/var/log/nginx:存放日志

开始创建自己的conf文件

cd /etc/nginx/conf.d
在目录下创建xxx.conf   xxx和django项目名一致
server {
         listen 80;  # 监听的端口
         server_name xxxx;   # 域名或者ip
         access_log  /var/log/nginx/access.log;
         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:/xxxx/script/uwsgi.sock;   # 指定uwsgi产生的.sock
                    }
         # 指定静态文件路径
         location /static/ {
                        alias  /xxx/xxx/static_all/; # 制定项目静态收集的文件
                        index  index.html index.htm;
                    }

     }

启动  重启  停止

/etc/init.d/nginx start
/etc/init.d/nginx stop
/etc/init.d/nginx restart

查看进程

ps -ef |grep nginx

好,之后也是最后一步,编写启动脚本

manage_project.sh

#! /bin/sh
# chkconfig: 345 85 15
# 上面一行注释:哪些Linux级别需要启动manage_teacher(3,4,5);启动序号(85);关闭序号(15)。
# description: manage script is the django daemon.
# Author: kaikai
# 指定项目目录
PROJECT_DIR="/xxx/xxx"
# 指定脚本目录在哪里
SCRIPTS_DIR="/xxxx/script"
# 描述
DESC="django daemon"
# 项目的名称
NAME="xxxx"
# 脚本名称(和脚本名称一样)
SCRIPT_FILENAME="xxx.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 xxx.ini
killall nginx
/etc/init.d/nginx start
# 自动收集静态文件 注意这里是使用了py2还是py3
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

最后在给启动脚本添加权限

chmod 777 xxx.sh

最后最后要注意的是执行脚本的时候要在项目的虚拟环境中进行

启动  停止  重启

./xxx.sh  start

./xxx.sh  stop

./xxx.sh  restart

可以将此执行的脚本添加到开机启动,命令之中

apt-get install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh
 

宝塔证书问题

在nginx配置中添加

     #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }

黄成等考示例

server
{
    listen 80;
	listen 443 ssl http2;
    server_name www.hcjsjpx.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot;
    
    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;
    
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #HTTP_TO_HTTPS_START
    if ($server_port !~ 443){
        rewrite ^(/.*)$ https://$host$1 permanent;
    }
    #HTTP_TO_HTTPS_END
    ssl_certificate    /www/server/panel/vhost/cert/www.hcjsjpx.com/fullchain.cer;
    ssl_certificate_key    /www/server/panel/vhost/cert/www.hcjsjpx.com/www.hcjsjpx.com.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    error_page 497  https://$host$request_uri;





    #SSL-END
    
	error_page  404           /404.html;
	error_page   500 502 503 504  /50x.html;
	location / {
		include uwsgi_params;
		uwsgi_connect_timeout 30;
		uwsgi_pass unix:/www/wwwroot/script/uwsgi.sock;   # 指定uwsgi产生的.sock
	}
	# 指定静态文件路径
	location /statics/ {
		alias  /www/wwwroot/exam_system/static_all/; # 制定项目静态收集的文件
		index  index.html index.htm;
	}
    
     #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }
}

证书自动更新设置

 ssl_certificate    /www/server/panel/vhost/cert/www.hcjsjpx.com/fullchain.cer;
 ssl_certificate_key    /www/server/panel/vhost/cert/www.hcjsjpx.com/www.hcjsjpx.com.key;

更改ssl_certificate这个目录地址 /www/server/panel/vhost/cert/ + 域名 + / fullchain.cer

更改ssl_certificate_key这个目录地址 /www/server/panel/vhost/cert/ + 域名 + /域名.key

定时任务启动nginx

猜你喜欢

转载自blog.csdn.net/kaikai136412162/article/details/82832070