centos 7.9 部署django项目

1、部署框架

centos 7.9 部署django项目_第1张图片

主要组件:nginx、uwsgi、django项目

访问页面流程:nginx---》uwsgi---》django---》uwsgi---》nginx

2、部署过程

操作系统:centos 7.9

配置信息:4核4G  50G

内网 eip :10.241.103.216

部署过程:

步骤

命令

备注

1、安装依赖包

yum  update   -y

yum -y groupinstall "Development tools"

yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel

2、搭建python3和pip3环境 参考连接:https://www.cnblogs.com/minglee/p/9227191.html 以下安装步骤需要绑定公网eip
3、安装django项目依赖包

pip freeze > requirements.txt                                                                                                                                     # 将当前项目依赖包导入到requirements.txt中

将django项目源码压缩上传到vm,并解压

pip3 install django   -i Simple Index --trusted-host mirrors.aliyun.com

pip3 install -r requirements.txt   -i Simple Index --trusted-host mirrors.aliyun.com          # 使用国内源

检查django项目是否可以正常启动

python3 manage.py runserver   

若能正常启动,则进行下一步,不能运行的话,检查以上步骤是否有遗漏                                                               # 多数报 缺失依赖包或者依赖包的版本不符合要求信息 

4、安装并配置uwsgi

pip3 install uwsgi    -i Simple Index --trusted-host mirrors.aliyun.com 

在项目根目录创建uwsgi.ini 文件 

[uwsgi]                                                                         #添加配置选择

socket=127.0.0.1:8997                                                 #配置和nginx连接的socket连接

chdir=/root/mysite/                                                     #配置项目路径,项目的所在目录

wsgi-file=/root/mysite/mysite/wsgi.py                       #配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录名

processes=4                                                                #配置启动的进程数

threads=2                                                                    #配置每个进程的线程数

master=True                                                                #配置启动管理主进程

pidfile=uwsgi.pid                                                         #配置存放主进程的进程号文件

daemonize=uwsgi.log                                                 #配置dump日志记录

运行uwsgi服务    

uwsgi  --ini  uwsgi.ini                                                  # 若显示  [uWSGI] getting INI configuration from uwsgi.ini  信息,则表示uwsgi服务运行成功

5、 安装并配置nginx 
安装nginx

cd /home/
wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -zxvf nginx-1.13.7.tar.gz
cd nginx-1.13.7/
./configure
make
make install
配置nginx

cd /usr/local/nginx/conf/
cp nginx.conf nginx.conf.bak
vim nginx.conf                                                                            # 清空原文件内容

nginx.conf文件添加内容

events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
       listen 8002;
server_name 127.0.0.1:8002;                                                      #改为自己的域名,没域名修改为127.0.0.1:80
charset utf-8;
access_log /var/log/nginx/MyProject_access.log;
error_log /var/log/nginx/MyProject_error.log;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8997;                                                       #端口要和uwsgi里配置的一样
uwsgi_param UWSGI_SCRIPT mysite.wsgi;                               #wsgi.py所在的目录名+.wsgi
uwsgi_param UWSGI_CHDIR /root/mysite/;                             #项目路径

}
location /static {
alias /root/mysite/static/;                                                         #静态资源路径
}
}
}
检验配置文件是否有错误
cd /usr/local/nginx/sbin/
./nginx -t                                      # 若没错,则执行下一条命令
./nginx
6、修改项目中setting.py文件

ALLOWED_HOSTS = ['*']                                                          # 允许所有主机进行连接访问网站

7、依次启动相关服务

在项目根目录下,运行 django项目

python3 manage.py runserver 0.0.0.0:8000                            # 与本地运行不同,新增0.0.0.0:8000 

运行uwsgi 服务

uwsgi  --ini  uwsgi.ini

运行nginx服务

cd /usr/local/nginx/sbin
./nginx
# 查看Uwsgi进程
ps -ef|grep uwsgi 

# 用kill方法把uwsgi进程杀死,然后启动uwsgi
killall -9 uwsgi

# Nginx平滑重启方法
/usr/local/nginx/sbin/nginx -s reload

3、部署效果

浏览器输入 内网eip:8000/home/ 即可访问平台网页

centos 7.9 部署django项目_第2张图片

4、部署中遇到的问题总结

1、运行django项目时,报 "django.db.utils.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher" 错误信息

      参考链接:关于django.db.utils.NotSupportedError: deterministic=True requires SQLite 3.8.3错误的处理办法_AAquiloo的博客-CSDN博客

      解决办法:使用第三方包运行SQLite

      pip install pysqlite3

      pip install pysqlite3-binary

      vim  /usr/local/python3/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py

      #from sqlite3 import dbapi2 as Database           #注释

      from pysqlite3 import dbapi2 as Database         #新加

2、运行django项目时,报 ”urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with OpenSSL 1.0.2k-fips“

     解决办法1: 降低urllib3包的版本                        # 本文采用的方法

                          pip3   uninstall   urllib3

                          pip3   install       urllib3==1.26.6       

     解决办法2: 升级openSSL 版本

                          yum  install   openssl-devel             # 经测试后,安装后 版本依然是1.0.2  ,没用

3、运行django项目时,报 “ModuleNotFoundError: No module named ‘_ctypes‘  错误

     解决办法:yum install libffi-devel

                       重新编译python3.8

4、部署django项目后,浏览器访问网址,提示:DISALLOWEDHOST AT / INVALID HTTP_HOST HEADER. YOU MAY NEED TO ADD TO ALLOWED_HOSTS

    解决办法 :进入项目后,找到并编辑setting.py

                       ALLOWED_HOSTS = ['*'] 

5、部署django项目后,页面样式未生效,提示静态文件404  not found错误

    参考链接:usgi+nginx部署Django样式丢失问题处理 - CodeAntenna 

                      Django项目部署上线解决样式丢失的问题-ry-代码改变世界博客

    原因说明:对于本地运行django,setting.py中debug默认为true, 静态文件则从static_dir中访问;部署上线后,一般设置debug=False,这是就是生产环境,静态文件不会从static_dir中访问了,而是从static_root 中访问;

    备注信息:部署后,其实仍可使用debug为true,从static_dir中访问      (本文使用的方法)

你可能感兴趣的:(centos,django,linux)