【Django2x 学习笔记 04】centos7 部署Python3.7x+Django2x+nginx+uwsgi

版权声明:== https://github.com/fyonecon == 人就像树,根越扎往黑暗,枝叶越繁茂 —— 鲁迅 == https://blog.csdn.net/weixin_41827162/article/details/84525694

# 安装Python3.7.1和Django:

yum install gcc-c++

yum install libxml*

yum install wget

python的安装依赖包:

yum groupinstall "Development tools"  

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

安装Python3x:

官方Python下载地址:https://www.python.org/downloads/release/python-371/

wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz

tar -zxvf Python-3.7.1.tgz

扫描二维码关注公众号,回复: 4248420 查看本文章

-

进入python3.7.1文件夹:

cd Python-3.7.1

./configure

3.7版本需要一个新的包libffi-devel,安装此包之后再次进行编译安装即可 :

yum install libffi-devel -y

编译:

make && make install  

移除python的安装依赖包:

yum groupremove "Development tools"
yum remove zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

查看版本:

python3 -V

python -V

链路python3:

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

 链路python2.7:

mv /usr/bin/python /usr/bin/python_bak

ln -s /usr/local/bin/python3 /usr/bin/python

链路pip3:
ln -s /usr/local/bin/pip3 /usr/bin/pip3

升级最新版pip:

pip3 install --upgrade pip

-

现在,产生了两个命令开头 python3或python 和 pip3或者pip。两种命令(带3和不带3的都用用)都可用。

-

重新链路yum命令(安装链路python3的时候破坏了yum):

vi usr/bin/yum

第一行#!/usr/bin/python改成#!/usr/bin/python2.7

按esc退出编辑,键入:wq退出并保存。

vi /usr/libexec/urlgrabber-ext-down

这里也需要修改成#! /usr/bin/python2.7

不然yum install -y zlib-devel会报错。

yum install -y zlib-devel

此处如果报错,请看:centos7升级Python3x后yum install zlib-devel报错问题 https://blog.csdn.net/weixin_41827162/article/details/84537404

安装setuptool:

yum install setuptool

安装Django框架:

pip3 install django

-

检测Django是否已经安装:

[root@localhost ~]# python3
Python 3.7.1 (default, Nov 26 2018, 11:35:30)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> print(django.get_version())
2.1.3
>>>

-

pip3 install uwsgi

ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi3

-

至此,CentOS7+Python3.7x+Django2x环境已经搭建完成。

注意,每个安装步骤要保证Successful才能最终安装成功。

#2 新建一个Django项目:

注意与win10下新建项目的区别:

新建一个名叫mysite的项目,我让/home/目录作为web目录,你也可以自定义/home/www/作为web目录:

cd /home/

django-admin.py startproject mysite

[root@localhost /]# cd home
[root@localhost home]# ls
[root@localhost home]# django-admin.py startproject mysite
[root@localhost home]# ls
mysite
[root@localhost home]# ls
mysite
[root@localhost home]# cd mysite
[root@localhost mysite]# ls
manage.py  mysite
[root@localhost mysite]# cd mysite
[root@localhost mysite]# ls
__init__.py  settings.py  urls.py  wsgi.py
[root@localhost mysite]#

可以看到,初始文件已经生成了。

启动运行:

cd /home/mysite/

测试启动(利用自带服务,还没有利用nginx):

python3 manage.py runserver 8080

[root@localhost ~]# cd /home/
[root@localhost home]# ls
mysite
[root@localhost home]# cd mysite
[root@localhost mysite]# ls
apptest  db.sqlite3  manage.py  mysite
[root@localhost mysite]# python3 manage.py runserver 8080
Performing system checks...

System check identified no issues (0 silenced).

You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

November 26, 2018 - 04:30:03
Django version 2.1.3, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8080/
Quit the server with CONTROL-C.

-

yum install net-tools

此处如果报错,请看:centos7升级Python3x后yum install zlib-devel报错问题 https://blog.csdn.net/weixin_41827162/article/details/84537404

查看端口占用情况:

netstat -lpnt

-

至此,可以说简单的Django服务已经搭建好了。

但是还不能经过外网访问服务端口(因为端口未开放),接下来需要配置nginx服务,转发代理Django服务。

-

#3 安装nginx服务:

-

wget http://nginx.org/download/nginx-1.15.5.tar.gz

tar -zxvf nginx-1.15.5.tar.gz

cd nginx-1.15.5

编译nginx-1.15.5:

./configure
make
make install

此处如果报错,请看:centos7升级Python3x后yum install zlib-devel报错问题 https://blog.csdn.net/weixin_41827162/article/details/84537404

-

vi /usr/local/nginx/conf/nginx.conf

加入:

server {
    listen 8091; #暴露给外部访问的端口
    server_name localhost;
        charset utf-8;
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8090; #外部访问8090就转发到内部8091
    }
    location /static/ {
        alias /home/mysite/apptest/static/; #项目静态路径设置
    }
}

保存后,启动nginx:

cd /usr/local/nginx/sbin/

./nginx -t

./nginx

终端没有任何提示就证明nginx启动成功。

-

进入你的django项目路径,

cd /home/mysite/

添加一个叫mysite.xml到文件:

rouch mysite.xml

vi mysite.xml

填入如下内容:

<uwsgi>
    <socket>127.0.0.1:8090</socket><!-- 内部端口,自定义 -->
        <chdir>/home/mysite</chdir><!-- 项目路径 -->
            <module>mysite.wsgi</module>
                <processes>4</processes> <!-- 进程数 --> 
    <daemonize>uwsgi.log</daemonize><!-- 日志文件 -->
</uwsgi>

#4 设置防火墙,配置白名单IP和端口:

请修改:

vi /usr/bin/firewall-cmd

第一行#!/usr/bin/python改成#!/usr/bin/python2.7

vi /usr/sbin/firewalld

第一行#!/usr/bin/python改成#!/usr/bin/python2.7

此处报错请查看 https://blog.csdn.net/cenylon/article/details/79954524 

防火墙状态,新增与删除端口,请参看:https://www.cnblogs.com/moxiaoan/p/5683743.html

开放外部8091:

firewall-cmd --zone=public --add-port=8091/tcp --permanent

关闭防火墙:

 systemctl stop firewalld

success以后,

vi /home/mysite/mysite/settings.py

ALLOWED_HOSTS = ['*']  #在这里请求的host添加了*,将开启所有IP白名单。

重启nginx。

进入你的django项目路径,执行以下命令:

cd /home/mysite/
uwsgi -x mysite.xml

或者直接 uwsgi -x /home/mysite/mysite.xml

浏览器输入:http://172.16.156.136:8091/

成功部署。

查看端口占用情况:

netstat -lpnt

[root@localhost sbin]# netstat -lpnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1352/nginx: master
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1033/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1250/master
tcp        0      0 127.0.0.1:8090          0.0.0.0:*               LISTEN      1342/uwsgi
tcp        0      0 0.0.0.0:8091            0.0.0.0:*               LISTEN      1352/nginx: master
tcp6       0      0 :::22                   :::*                    LISTEN      1033/sshd
tcp6       0      0 ::1:25                  :::*                    LISTEN      1250/master
[root@localhost sbin]#

-

#5 总结下:

1. 当将python2.7链路到python3x上以后,需要将

vi usr/bin/yum

vi /usr/libexec/urlgrabber-ext-down

vi /usr/bin/firewall-cmd

vi /usr/sbin/firewalld

第一行#!/usr/bin/python改成#!/usr/bin/python2.7

2. 端口转发,将uwsgi与nginx联系起来。

3. 设置Django框架IP白名单。

-

内容比较多,比较杂,第一次安装差不多用了4个小时,安装过程充满了各种疑惑。还好,除了问题搜了一下都解决了。

配置Django path路由请参考我的博文《Django2x 学习笔记 03】创建path路由url(创建新路由URL,pathinfo模式多个传参,GET模式多个传参,返回json)》 https://blog.csdn.net/weixin_41827162/article/details/84500537

win10下部署Django请参考我的博文 《Django2x 学习笔记 02】win10下Django及新项目部署》 https://blog.csdn.net/weixin_41827162/article/details/84025100

-

参考博客:

https://blog.csdn.net/a249900679/article/details/51527200

https://www.cnblogs.com/levelksk/p/7921066.html

猜你喜欢

转载自blog.csdn.net/weixin_41827162/article/details/84525694