Django项目 uwsgi+Nginx 保姆级部署教程

写在最前:

很是抱歉的是,由于突如其来的疫情,个人hadoop系列断更了,很难受,由于个人分布式环境在学校,个人笔记本配置带不起来,代码跑不起来我是不敢写博客的,而后寒假在家写代码也没啥意思,看了很是多的书,把计网和操做系统从新学了一遍。由于实习的须要,将来我更多的技术可能在Python这块,可是java相关的内容我也会努力保持更新,同时也会出更多的入门教程给你们谢谢你们。php

背景:

最近在学习django的过程当中,用django作了一个小demo,因此试试看能不能部署到服务器上,本身顺便也熟悉一下Django整个部署的流程,由于以前学习flask的时候,就使用的uwsgi来做为python web服务器来部署的,因此此次也就选择了nginx+uwsgi这样的一个组合。css

当时买完云服务器以后,就顺手把宝塔装上了,以前用宝塔部署php项目是真的很容易,因此就偷懒试试宝塔能不能部署django,苦试一个小时,无果,遂放弃,仍是老老实实用原生的uwsgi配合Nginx来部署吧。而后下面的流程我会争取把有多是坑的地方重点标注出来,未来若是发博客或者本身须要再次部署的时候,也能够少写不少配置文件。java

环境:

系统版本:centos7.5python

python版本:3.6.5linux

nginx版本:1.16.1nginx

uwsgi版本:2.0.18web

如环境不一样,还请查阅其余资料另行配置。sql

环境准备:

在部署以前,请确保你的linux服务器正确安装了对应的python版本,若是须要python3版本,请自行查阅资料进行升级安装。django

首先为了更好的独立部署,避免对其余的项目产生干扰,咱们须要安装python 虚拟环境:json

sudo pip install virtualenv
sudo pip install virtualenvwrapper
复制代码

virtualenvwrapper 是virtualenv的扩展管理包,能够将全部的虚拟环境整合在一个目录下。

配置虚拟环境:

mkdir ~/.virtualenvs
复制代码

打开.bashrc:

sudo vim ~/.bashrc
复制代码

在.bashrc的末尾增长下面内容:

export WORKON_HOME=$HOME/.virtualenvs  # 全部虚拟环境存储的目录
source /usr/local/python3/bin/virtualenvwrapper.sh
复制代码

注意!:这里的/usr/local/bin/virtualenvwrapper.sh只是针对于我当前系统环境的一个位置,并非全部的服务器都是在这个位置,若是本身不知道virtualenvwrapper.sh在哪里,能够搜索文件来找到它在系统中的位置,而且修改.bashrc。

启用配置文件:

source ~/.bashrc
复制代码

这个时候若是不报错,就表明咱们的虚拟环境配置成功了,通常常见的报错就是virtualenvwrapper.sh文件找不对。

建立虚拟环境:

找一个你本身以为能记住的地方,新建一个env 文件夹:

cd /www
mkdir env
cd env #进入env目录
复制代码

新建一个虚拟环境:

mkvirtualenv -p /usr/bin/python3 orange_env    # my_env是虚拟环境的名称
复制代码

注意:若是你的软链接/usr/bin/python3没有的话,会报错误,找不到/usr/bin/python3,这个时候就须要你本身新建一个软链接:

若是报错:

ln -s /usr/local/python3/bin/python3 /usr/bin/python3 # 路径要改为本身的python安装路径
复制代码

以后即可以进入咱们的虚拟环境了:

source /www/env/orange_env/bin/activate
复制代码

进去虚拟环境以后,前面会出现一个括号,里面是你虚拟环境的名字:

(orange_env) [root@iz2ze1cvux96riiwfh05qqz ~]# 
复制代码

在虚拟环境中安装uwsgi:

pip install uwsgi
复制代码

退出虚拟环境:

deactivate
复制代码

再次在主环境中安装uwsgi:

pip install uwsgi
复制代码

注意:若是你有其余的依赖,好比django,msqlclient这些,记得必定要在虚拟环境里pip安装一下。

部署过程:

找一个你认为比较合适的地方,新建一个文件夹,将你的Django项目上传进去:

以我为例:

cd /www
mkdir orange
复制代码

上传解压操做略,记得是上传项目根目录,就是直接带manage.py的那个目录。

新建一个uswgi配置文件,uswgi支持多种配置文件类型,好比yaml,xml,json,ini,这里我选的是xml。

vim mysite.xml #记得mysite.xml 要和你项目的manage.py 在一个目录下。
复制代码

mysite.xml内容以下:

<uwsgi>    
   <socket>127.0.0.1:8080</socket><!-- 内部端口,自定义 --> 
   <chdir>/www/orange/</chdir><!-- 项目路径 -->            
   <module>orangeproject.wsgi</module> <!-- 通常模块名 项目名+wsgi -->  
   <processes>4</processes> <!-- 进程数 -->     
   <daemonize>uwsgi.log</daemonize><!-- 日志文件 -->
</uwsgi>
复制代码

安装Nginx:

Nginx 我以前有写过一系列的基础入门教程,若是对安装启动重启这些不是很熟练的能够看下面这篇文章:

连接:写给后端的Nginx初级入门教程:实战篇

查看nginx 配置文件路径:

nginx -t
复制代码

记得备份nginx以前的配置文件,而后把以前的配置所有删了,直接加入下面内容:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    server {
        listen       8000;
        server_name 你的域名;
        charset utf-8;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:8080;
           uwsgi_param UWSGI_SCRIPT orangeproject.wsgi;
           uwsgi_param UWSGI_CHDIR /www/orange/;
           
        }
        location /static/ {
        alias /www/orange/transfer/static/; 
        }
    }
}
复制代码

注意模块名要保持一致,并且你nginx监听的端口不能和你django启动的端口同样,要不uswgi会由于nginx占用端口启动失败。alias /www/orange/transfer/static/; 这个是你的静态文件地址,css,img这些。

检查nginx是否配置成功:

nginx -t
复制代码

重启nginx:

nginx -s reload
复制代码

以后,再次进入咱们的虚拟环境orange_env中,启动咱们的uwsgi服务器:

cd /www/orange
uwsgi -x mysite.xml
复制代码

而后打开咱们的本地浏览器,输入:域名:8000,备案过的能够改nginx配置文件成80。

大功告成:

相关文章
相关标签/搜索