前提
阿里云CentOS7服务器—宝塔Linux面板5.2.0
(CentOS Linux 7.4.1708 (Core))
开始
-
安装python3(可使用宝塔Linux面板安装python3)
# 为centos系统增加编译功能: yum -y install gcc gcc-c++ # 防止编译安装python3出现各种异常: yum install wget openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel # 下载python3安装包 cd ~/Downloads/ wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz # 解压 tar -zxvf Python-3.6.3.tgz # 配置,将python3安装到/usr/local/python3/路径下: cd Python-3.6.3 ./configure --prefix=/usr/local/python3 # 建立软链接: ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3 ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 # 检测是否安装成功 python3 -V pip3 -V
-
pip(python3)安装 virtualenv
# 更新pip pip3 install --upgrade pip # 安装virtualenv pip3 install virtualenv # 赋予可执行权限 chmod 777 /usr/local/python3/lib/python3.6/site-packages/virtualenv.py # 建立软链 ln -s /usr/local/python3/lib/python3.6/site-packages/virtualenv.py /usr/bin/virtualenv
-
使用virtualenv创建python3的虚拟环境
# 切换到用户目录下 cd ~ # 创建虚拟环境文件夹 mkdir test_venv cd test_venv # 创建名称为venv的虚拟环境 virtualenv -p /usr/bin/python3 venv
virtualenv -p /usr/bin/python3 venv 输出结果:
-
进入虚拟环境,在virtualenv中用pip3安装django和uwsgi
# 进入之前创建好的虚拟环境目录 cd ~/test_venv # 激活虚拟环境 source venv/bin/activate # 安装Django与uwsgi # 这里安装Django2.0的版本,Django高版本会有SQL版本报错 # 高版本SQL报错解决方案地址https://blog.csdn.net/sunt2018/article/details/90712063 pip3 install django==2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple pip3 install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple # 查看Django是否安装成功 pip3 show django # 查看uwsgi是否安装成功 pip3 show uwsgi # 退出virtualenv虚拟环境 deactivate
-
安装Nginx
1.使用宝塔Linux面板安装 - - - 后续配置.conf也在宝塔Linux面板快捷配置
2.使用命令行安装# 添加nginx存储库 yum install epel-release # 安装nginx yum install nginx
-
开始创建Django项目
- 切换到虚拟环境目录下新建Django项目
# 切换到工作目录 cd ~/test_venv # 激活虚拟环境 source venv/bin/activate # 创建Django项目,项目取名为hello_django django-admin.py startproject hello_django
# 修改settings.py,允许所有HOST的访问 ALLOWED_HOSTS = [ ] #修改前 ALLOWED_HOSTS = ['*'] #修改后
# 启动Django的web服务器 cd hello_django python3 manage.py runserver <自己主机地址IP>:8080 #<自己主机地址IP>填自己主机地址,后面需要指定一个可用的端口(如8080)
- 在test_django下新建一个应用
# 创建应用 python3 manage.py startapp my_app # 新定义的应用加到settings.py中的INSTALL_APPS中 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'my_app', ]
# vi编辑应用中的views.py文件: from django.http.response import HttpResponse def hello(request): user = request.GET.get('user') if not user: user = 'world' return HttpResponse('hello %s' % user)
# vi编辑项目中的urls.py文件: from django.contrib import admin from django.urls import path from my_app import views as my_views urlpatterns = [ path('admin/', admin.site.urls), path('hello',hello_views.hello), ]
- 测试
# 启动django自带web服务器 cd hello_django python3 manage.py runserver <自己主机地址IP>:8080 #<自己主机地址IP>填自己主机地址,后面需要指定一个可用的端口(如8080) # 用浏览器访问django,访问方式为 <自己主机地址IP>:8080/hello <自己主机地址IP>:8080/hello?user=123 # 浏览器可以看到对应返回信息,说明django项目新建成功
- 切换到虚拟环境目录下新建Django项目
-
关联nginx、uwsgi、django
-
开放80,8080端口,允许外网访问
# 查询TCP/UDP的80, 8080端口占用情况 # 如果返回结果为“no”,则表示该端口尚未开放 firewall-cmd --query-port=80/tcp firewall-cmd --query-port=80/udp firewall-cmd --query-port=8080/tcp firewall-cmd --query-port=8080/udp
# 永久开放 TCP/UDP 的80和8080端口 firewall-cmd --permanent --zone=public --add-port=80/tcp firewall-cmd --permanent --zone=public --add-port=80/udp firewall-cmd --permanent --zone=public --add-port=8080/tcp firewall-cmd --permanent --zone=public --add-port=8080/udp # 重启防火墙 firewall-cmd --reload
-
开放允许http访问的端口
确保外网访问nginx服务器的http端口、nginx与uwsgi通信的socket的端口都在http访问端口的列表中。# 查看http允许访问的端口 semanage port -l | grep http_port_t
# 将需要开放的端口加入到如上端口列表中,例如开放5050端口作为nginx与uwsgi通信的socket通道 semanage port -a -t http_port_t -p tcp 5050
-
关联nginx与uwsgi
# 为django站点创建一个nginx服务的配置文件 cd /etc/nginx/conf.d/ touch django_site.conf vi django_site.conf
# 在文件 django_site.conf 中填入如下内容 server { server_name [你的主机IP]; # 暴露给外部访问的IP地址,根据实际情况改写成自己主机IP listen 80; # 暴露给外部访问的端口,确保端口在http访问和防火墙访问的允许列表中 location / { include uwsgi_params; uwsgi_pass 127.0.0.1:5050; # nginx与uwsgi通信用的socket接口,确保端口在http访问端口的列表中 } } # 如遇到nginx服务启动失败,请检查mysite_django.conf中指定的端口是否被占用
-
关联uwsgi与django
# 创建uwsgi配置文件 cd ~/test_venv touch django_uwsgi.ini vi django_uwsgi.ini # 在django_uwsgi.ini文件中填入如下内容 # django_uwsgi.ini [uwsgi] # 与nginx通信 socket = 127.0.0.1:5050 # 让uwsgi作为单独的web-server,这里注释掉 # http = 127.0.0.1:5050 # django项目根目录, 根据实际情况改写成自己django项目的路径 chdir = /home/YourProject/test_venv/hello_django # 本项指示uwsgi.py文件的位置,其位于Django工程目录下有个与工程名同名的子文件夹内(设置方式为:文件夹名.wsgi) # module = hello_django wsgi-file = hello_django/wsgi.py processes = 4 threads = 2 master = True pidfile = uwsgi.pid daemonize = uwsgi.log # 虚拟环境地址 #virtualenv = /home/YourProject/test_venv/venv
-
Nginx+uwsgi+Django联调测试
# 先关闭Nginx与uwsgi服务 pkill -9 nginx pkill -9 uwsgi # 启动nginx服务 service nginx start # 启动uwsgi服务 cd ~/test_venv # 激活虚拟环境 source venv/bin/activate uwsgi --ini django_uwsgi.ini # 用浏览器访问django,访问方式为 <自己主机地址IP>:80/hello <自己主机地址IP>:80/hello?user=123 # 浏览器可以看到对应返回信息,说明部署成功
-