版权声明:本文为博主原创文章,未经博主允许不得转载。 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