在Centos7云服务器上使用Nginx,uwsgi,部署Django项目

Django项目部署到云服务器

花了好长时间才搞定的,这路上到处都是坑呀

1,准备工作:

①,需要一台云服务器,我用的是腾讯的云服务器。系统:Centos 7,其实都差不多。
②,所需软件。为了避免出错,尽量使服务器上的环境跟开发环境相同。比如我在Windows上使用的是Python3.6.0Django 1.11,数据库使用的是MySQL5.7,等等。总而言之,尽量保持环境一致,能够减少很多麻烦。
③,在服务器上安装所需的这些依赖包。不同的服务器上可能语句有些许不同。这里我已Centos为例

2,在服务器上安装Python环境

因为云服务器上自带了Python2.7,所以我们需要安装更高的版本。首相,安装依赖包

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

下载python3.6编译安装
到python官网下载https://www.python.org
下载最新版源码,使用make altinstall,如果使用make install,在系统中将会有两个不同版本的Python在/usr/bin/目录中。这将会导致很多问题,而且不好处理。
wgethttps://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz

tar -xzvf Python-3.6.0.tgz -C /tmp
cd /tmp/Python-3.6.0/

把Python3.6安装到 /usr/local 目录

./configure –prefix=/usr/local
make
make altinstall

python3.6程序的执行文件:/usr/local/bin/python3.6
python3.6应用程序目录:/usr/local/lib/python3.6
pip3的执行文件:/usr/local/bin/pip3.6
pyenv3的执行文件:/usr/local/bin/pyenv-3.6

更改/usr/bin/python链接

cd/usr/bin
mv python python.backup
ln -s /usr/local/bin/python3.6 /usr/bin/python
ln -s /usr/local/bin/python3.6 /usr/bin/python3

这里我建议只需要更改Python3 的软连接就行了。不要去懂Python2.7的东西,因为系统很多依赖于Python2.7.。所以我们上面的只需要执行这句就可以 了

ln -s /usr/local/bin/python3.6 /usr/bin/python3

这样我们基本的Python环境就搭建好了。

3,创建Python虚拟环境,安装项目所需的依赖包

已我的项目举个栗子:

# 创建虚拟环境
Python3 -m venv /mysite(路径名)/
# 进入虚拟环境
cd /mysite/bin
source activate

现在就在虚拟环境里面了。
然后安装PIP,本来服务器上就自带有,可以执行下更新操作:

pip install upgrade pip

之后就比较简单了。直接通过pip install **即可,如要安装对应的版本。

pip install Django==1.11.1
pip install mysql

等等。安装一系列所需软件
记住安装 GCC,不然会莫名的报错,具体是什么错误忘记了,反正要安装这个

pip install gcc

4,配置uwsgi与Nginx

假设你已经安装完了,一系列所需软件,同时假设你的项目没有任何问题,也收集了静态文件了。
①,配置uwsgi
在项目的根目录下,创建 uwsgi.ini.名字任意。进行如下配置

[uwsgi]  
socket =:8001   #套接字端口。只需要填端口就行。与Nginx相同
chmod-socket = 666  # 固定
chdir = /mysite/项目名  
wsgi-file = /mysite.项目/项目同名文件/wsgi.py  #项目目录下的wsgi.py 文件也可以使用下面的
#module = /mysite/项目/项目同名文件.wsgi
touch-reload = /mysite/项目   # 自动加载
py-auto-reload = 1  #自动加载
processes=10 # 十个进程
threads=2  #2个线程
enable-threads = True    
master=True  
pidfile=uwsgi.pid  
daemonize = /mysite/log/blog_uwsgi.log # uwsgi的日志目录(自定义)

注意:
1,套接字端口需要与Nginx的端口相同,否则不能进行数据交互。
2,wsgi.py 文件一定要是项目目录下的文件
3,

touch-reload = /mysite/项目   # 自动加载
py-auto-reload = 1  #自动加载

两句实现,当指定目录下文件发生改变时,自动重启uwsgi,这样就不用每次去执行启动语句。
4,其他一些设置都是固定的,根据需要自行添加修改。

②,配置Nginx
首先进入Nginx的配置文件目录,我这里在/etc/nginx/nginx.conf
注意:如果Nginx目录下有default.conf,先把他删除。不然会造成端口占用。
具体配置如下:

#For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user root;# 这里我为了偷懒,直接给最高权限,省的麻烦 。
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

...中间部分代码省略,意思就是不需要我们去改变它...
...下面需要修改的地方都有注释,没有注释的地方不需要改动...
...mysite为我们建立的虚拟环境目录,别忘了...

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /mysite/项目名字; # 源代码项目路径(根路径)

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
        include /etc/nginx/uwsgi_params;    #导入uwsgi的配置项

        location /static {
    alias /mysite/项目下的静态文件路径/;
        }


    location /media {
    alias /mysite/项目目录下媒体文件的路径/;#如果项目没有涉及到,这个可以不用配置,直接留空或删除
        }

    location / {
    # 最重要的部分!!!!!!
    include uwsgi_params;   # 这个是固定的,添加uwsgi的配置项,上面有导入
    uwsgi_pass 127.0.0.1:8001;# uwsgi重定向的地址,这里的端口要跟uwsgi套接字的端口一样,这里很重要,不然总是不能加载静态文件!
    }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

②,启动uwsgi 跟 Nginx

# 启动 Nginx
systemctl restart nginx

# 启动uwsgi
uwsgi --ini 项目目录下的wsgi.ini

这是会显示:getting INI configuration from 项目目录下的wsgi.ini
这个时候外界就可以通过 IP 地址访问了。

注意: 访问时,url要跟自己项目配置的url一样,不然那会出现 Bad Request(400)错误。

好了,到此就配置完成了,花了很多时间,不过还是弄好了。路过很多坑,特地来填一填。

猜你喜欢

转载自blog.csdn.net/weixin_39378885/article/details/79931045