Python项目使用uWSGI和Nginx部署在Linux(Ubuntu16)服务器

本文详细介绍了如何在Ubuntu16服务器上部署Python Django项目,包括使用uWSGI和Nginx配置服务器环境,安装pip,虚拟环境virtualenv及扩展模块virtualenvwrapper,获取项目,配置uWSGI,以及安装和配置Nginx处理静态文件。
摘要由CSDN通过智能技术生成

在Linux(Ubuntu16)服务器上进行项目部署,在其他公有服务器(阿里云,青云,华为云…)部署的流程大同小异。

?‍? 项目的结构图如下:

在这里插入图片描述

部署

从uwsgi、nginx、静态文件三个方面处理

服务器环境配置(Ubuntu下操作)

一、安装pip

Ubuntu默认自带了Python2和python3,默认python代表使用python2,想使用python3则需要python3来进行交互命令行,Ubuntu没有自带pip需要使用如下命令进行安装:

sudo apt install python-pip 	  #(安装python2 pip)
sudo apt install python3-pip	#(安装python3 pip)
二、安装virtualenv与扩展模块virtualenvwrapper
    pip install virtualenv 
    # 注意:不要使用apt来安装,不然会有意想不到的错误
    pip install virtualenvwrapper
    
    # 如果失败的话,就升级一下pip
    python -m pip install -upgrade pip

使用ls -alh查看文件,然后打开~/.bashrc文件,在结尾添加以下配置需要配置python执行程序以及virtualenvwrapper路径(注:此配置不用改)

export WORKON_HOME=$HOME/.virtualenvs 
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

使用source .bashrc命令更新路径。
设置在文件中的配置信息会马上生效,而不需要经过重启。
现在所创建所有的虚拟环境,都默认位于/home/(用户)/.virtualenvs目录下。

补充一下virtualenvwrapper的操作命令:

创建:mkvirtualenv [虚拟环境名称]
删除:rmvirtualenv [虚拟环境名称]
进入:workon [虚拟环境名称]
退出:deactivate

进行创建虚拟环境(上边已经配置过~/.bashrc)

mkvirtualenv dev1 (python3版本)
# 如果要创建python2版本的话
mkvirtualenv -p /usr/bin/python2 dev2 (python2版本)
# 创建完毕会自动进入到创建的虚拟环境,想要退出,用deactivate
#(这个终端暂时不用关闭,一会还要用到)
三、在Ubuntu中获取项目

我的项目在github远程仓库中,在此使用git clone命令获取项目,如果你的项目在windows下,github中没有,那就可以安装vsftpd,然后通过他进行文件传输,这边只说git的使用了。
获取项目之前,要先使用命令生成项目环境的.txt模块文件

# DjangoProject(github上的仓库名) -> EAMS(项目根目录)
# 在项目根目录下使用:
pip freeze > list.txt
# 根目录下会生成这个.txt文件
# 这个文件可以随意命令,里边是项目所需要的模块

git的安装

sudo apt-get install git

在ubuntu下边创建一个文件夹demodjango(注:随意命名,只是为了方便管理),然后点进去,右键打开一个新的终端,使用git clone命令

sudo git clone https://github.com/git-lilei/DjangoProject.git

执行成功之后就会在这个新创建的文件夹中得到你的项目,此时的项目只有读的权限,要修改一下权限,执行下边命令

sudo chmod -R 777 DjangoProject
# 注:仓库下边所有的项目都会有读写权限

切换到虚拟环境的那个终端(没有关闭的那个),使用如下命令在虚拟环境中安装项目所需要的模块

进入虚拟环境

workon dev1
# dev1是我创建的虚拟环境名
sudo pip install -r /home/lilei/demodjango/DjangoProject/EAMS/list.txt
# 如果一遍没有成功,再来一遍

然后在ubuntu下使用开发工具打开项目,选择dev1的虚拟环境,这里我使用的是pycharm,没有工具就用命令更改
更改settings.py文件

DEBUG = False # 关闭DEBUG调试模式
ALLOW_HOSTS=['*',] # 表示可以访问服务器的ip ,*是所有
python manage.py runserver
启动服务器,运行正常,但是静态文件无法加载
四、配置uWSGI服务器

uWSGI实现了WSGI的所有接口,是一个快速、自我修复、开发人员和系统管理员友好的服务器。

安装uWSGI(首先确保是在虚拟环境中,不是的话workon [虚拟环境])

pip install uwsgi   #(注意:这个安装在虚拟环境中)

在项目文件夹下创建一个uwsgi.ini文件,内容如下:

注:配置的ip是内网,外网一样,修改一下就行
[uwsgi]
# nginx运行就用socket
# socket=0.0.0.0:7000  #(这个先注释了,配置nginx的时候把这个解开,把下边的注释了)
# 直接运行就用http,端口号随便写,但是别用一些常用的,不然会提示占用,比如6666,8888
http=0.0.0.0:7000
# chdir 指项目运行的目录
chdir=/home/lilei/demodjango/DjangoProject/EAMS
# 指定项目中的wsgi.py文件
wsgi-file=EAMS/wsgi.py
# 进程数量
processes=4
# 线程数量
threads=2
# 允许主线程存在
master=True
# pid进程的的文件(启动uwsgi时会生成)
pidfile=uwsgi.pid
# 日志文件(启动uwsgi时会生成)
daemonize=uswgi.log

uwsgi的操作命令:

启动:uwsgi --ini uwsgi.ini
停止:uwsgi --stop uwsgi.pid
重启:uwsgi --reload uwsgi.pid
查看进程号:ps -ef|grep uwsgi

不要使用python manage.py runserver 来运行项目了,用uwsgi启动

uwsgi --ini uwsgi.ini
使用http协议查看网站运行情况,运行正常,但是静态文件无法加载
五、安装nginx服务器和配置静态文件(最后一步啦~?)

nginx服务器可以隐藏真实服务器并且自动负载均衡

在开一个终端安装nginx,这个不是安装在虚拟环境中的,而是系统下,系统下安装的都在etc目录下

sudo apt install nginx
⛳使用nginx服务器需要修改uwsgi服务器配置 将socket放开 http注释

很重要的一步,不然nginx启动不成功
[uwsgi]
socket=0.0.0.0:7000
#http=0.0.0.0:7000 #(注释这个)
chdir=/home/lilei/demodjango/DjangoProject/EAMS
wsgi-file=EAMS/wsgi.py
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uswgi.log

修改nginx服务器配置文件,这边使用vim打开,gedit,vi都可以

sudo vim /etc/nginx/nginx.conf

在http目录中下边代码?

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

上边添加如下配置信息:

server {
		# 这个不能和uwsgi.ini文件中socket那个端口一样,访问的时候用9000端口
		listen 0.0.0.0:9000;
		# location后边的空格都不能少
		location / {
				include uwsgi_params;
				# 这个是指定那个.ini文件中的那个端口必须一致
				uwsgi_pass 0.0.0.0:7000;
		}
		# 配置静态文件,alias后边空格也不可以少
		location /static{
				alias /home/lilei/demodjango/DjangoProject/EAMS/staticroot/;
		}
}

在项目根目录下创建staticroot文件夹
在settings.py中添加配置指定创建的静态文件夹:

STATIC_ROOT = '/home/lilei/demodjango/DjangoProject/EAMS/staticroot/'

在manage.py同级目录下,收集静态文件的指令,如下命令:

python manage.py collectstatic

nginx的操作命令:

启动:sudo nginx
停止:sudo nginx -s stop
重启:sudo nginx -s reload
查看进程号:ps -ef|grep nginx

最重要的一步:

⛳重启nginx和uwsgi

这个时候进入浏览器,访问9000端口,就OK了,项目就能跑起来了。?

? 照这个流程走,应该不会有什么问题的,虽然坑踩过了,当然也不排除例外,哈哈~? 欢迎各位大神指正。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值