IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> centos7部署Django3.1,nginx+uwsgi -> 正文阅读

[系统运维]centos7部署Django3.1,nginx+uwsgi

本文演示将两个django项目部署到同一服务器的不同端口上

首先需要配置基础的centos7的环境,需要安装的有:

nginx,uwsgi,anaconda(python=3.7)

正式环境中部署方式

正式环境中部署为nginx+uwsgi来部署django项目

添加nginx存储库

yum install epel-release

安装nginx

yum install nginx

运行nginx,Nginx不会自行启动。要运行Nginx

systemctl start nginx

nginx的运行命令:

 systemctl status nginx 查看nginx的状态
 systemctl start/stop/enable/disable nginx 启动/关闭/设置开机启动/禁止开机启动

系统启动时启用Nginx

systemctl enable nginx

如果您正在运行防火墙,请运行以下命令以允许HTTP和HTTPS通信:

sudo firewall-cmd --permanent --zone=public --add-service=http 

sudo firewall-cmd --permanent --zone=public --add-service=https

sudo firewall-cmd --reload

理论上安装好nginx打开后,访问你的服务器ip地址,就可以看到nginx的欢迎页面了。

新建站点文件夹

在根目录下新建www文件夹用于存放我们的Django站点,这里我们要分别部署两个Django项目到服务器的不同端口,两个项目分别放在django_site1和django_site2文件夹。

注意!最好不要放在root目录下,这样会造成部署完后访问静态文件403,大概是因为nginx不能直接反问root用户里面的静态文件。如果你放在了root下面,解决方案是把总的vim /etc/nginx/nginx.conf? 把头部的user改成root;

在站点文件夹下新建三个文件夹,conf文件夹用于存放nginx.conf和uwsgi.ini配置文件;logs是日志文件,用于存放nginx的启动成功和失败文件,以及uwsgi的运行日志文件;src是项目文件,该目录下上传的是目录代码。

cd /
mkdir www
cd www/
mkdir django_site1
mkdir django_site2
cd django_site1
mkdir conf
mkdir logs
mkdir src
cd /www/django_site2
mkdir conf
mkdir logs
mkdir src

上传项目源代码

这里可以用xshell或者ftp等工具,把django项目打包上传到对应站点的src目录下。这里我将zhirong_v3项目上传到/www/django_site1/src,将django_tem项目上传到/www/django_site2/src

修改django项目里面setting?

配置setting.py文件,这里也可以先保留着DEBUG=False,等配置好虚拟环境之后,python manage.py runserver 看一下有没有报错,或者少了什么包之类的;在配置好nginx和uwsig之后,通过域名访问测试没问题了再配置DEBUG = False。

DEBUG = False

ALLOWED_HOSTS = ['*']

静态路由配置如下,注意STATIC_ROOT是当你设置DEBUG = False的时候,nginx找静态文件的路径。

在django_tem项目中,setting.py文件的STATIC_ROOT=os.path.join(BASE_DIR, 'static_new'),注意这里会和下面的nginx.conf配置文件相对应。

?

新建虚拟环境

这里选用python3.7和django3.1,并安装你需要的依赖,如mysqlclient。我的两个站点都是django的环境,所以下面都会用这同一个环境。

conda create -n zhirong_env python=3.7
conda activate zhirong_env
pip install django==3.1
pip install mysqlclient

建好虚拟环境之后,我们进入到虚拟环境,然后分别到两个项目下,运行python manage.py collectstatic这条命令会把你django项目所有需要用的静态文件下载到你settings.py中配置的STATIC_ROOT目录,便于nginx访问。

conda activate zhirong_env
cd /www/django_site1/src/zhirong_v3/
python manage.py collectstatic
cd /www/django_site2/src/django_tem/
python manage.py collectstatic

这里别忘了做一下数据库的迁移

python manage.py makemigrations
python manage.py migrate

?注意:如果你用的是mysql数据库,需要在服务器上安装mysql,并且在settings.py文件中配置好对应的数据库配置。centos7安装mysql也是一堆坑,便不再这篇文章中详谈,推荐使用docker安装mysql。

然后我们试一下python manage.py runserver启动项目,看看有没有报错,有报错就解决,没报错就继续。

配置站点路径conf下的nginx.conf

首先配置django_site1中的zhirong_v3项目的nginx.conf,这里让nginx监听80端口(公网访问的时候需要加的端口号),然后和uwsgi.ini通信的端口号设置为8890。配置静态资源路径到/www/django_site1/src/zhirong_v3/static_online/

vim /www/django_site1/conf/nginx.conf

server{
	listen	80;
	server_name	202.114.74.111;
	
	access_log	/www/django_site1/logs/access.log;
	error_log 	/www/django_site1/logs/error.log;

	location / {
		include uwsgi_params;
		uwsgi_pass 127.0.0.1:8890;
	}
	location /static/ {
		alias /www/django_site1/src/zhirong_v3/static_online/;
		expires 30d;
	}
	}

然后配置django_site2中的django_tem项目的nginx.conf,这里让nginx监听8809端口(公网访问的时候需要加的端口号),然后和uwsgi.ini通信的端口号设置为8891。配置静态资源路径到/www/django_site2/src/django_tem/static_new/

server{
	listen	8809;
	server_name	202.114.74.171;
	
	access_log	/www/django_site2/logs/access.log;
	error_log 	/www/django_site2/logs/error.log;

	location / {
		include uwsgi_params;
		uwsgi_pass 127.0.0.1:8891;
	}
	location /static/ {
		alias /www/django_site2/src/django_tem/static_new/;
		expires 30d;
	}
	}

修改总的nginx的配置文件,让总的nginx文件包含我们自定义的项目的nginx.conf文件,

总的nginx配置文件在:/etc/nginx/nginx.conf中

?配置uwsgi.conf

?

[uwsgi]
projectname = zhirong_v3
base = /www/django_site1/src

# 守护进程
master = true

# 进程个数
processes = 4

# 虚拟环境
pythonhome = /root/anaconda3/envs/zhirong_env/

# 项目地址
chdir = %(base)/%(projectname)

# 指定python版本
pythonpath = /root/anaconda3/envs/zhirong_env/bin/python3.7

# 指定uwsgi文件
module = %(projectname).wsgi

# 和nginx通信地址:端口
socket = 127.0.0.1:8890

# 日志文件地址
logto = /www/django_site1/logs/uwsgi.log

?

[uwsgi]
projectname = django_tem
base = /www/django_site2/src

# 守护进程
master = true

# 进程个数
processes = 4

# 虚拟环境
pythonhome = /root/anaconda3/envs/zhirong_env

# 项目地址
chdir = %(base)/%(projectname)

# 指定python版本
pythonpath = /root/anaconda3/envs/zhirong_env/bin/python3.7

# 指定uwsgi文件
module = %(projectname).wsgi

# 和nginx通信地址:端口
socket = 127.0.0.1:8891

# 日志文件地址
logto = /www/django_site2/logs/uwsgi.log

启动uwsgi并重启nginx

cd /www/django_site1/conf
uwsgi --ini uwsgi/ini

cd /www/django_site2/conf
uwsgi --ini uwsgi/ini

systemctl restart nginx

开放端口?

记得开放8809端口,然后重启一下防火墙

firewall-cmd --zone=public --add-port=8809/tcp --permanent
systemctl restart firewalld.service

OK,到此为止,不出意外,我们的两个网站都部署到了服务器上,分别在80端口和8809端口。

ps:如果要更新服务器的代码,需要重启uwsgi.ini

后期我们代码更新的话,需要先kill掉已有的uwsgi,然后重启

pkill -f uwsgi -9

重启方式和上文提到的一样。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 17:05:23  更:2021-08-12 17:07:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:54:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码