# 安装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
![](/qrcode.jpg)
-
进入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
-
参考博客: