CentOS7---部署Nginx+uwsgi+Django+python3环境

前提

阿里云CentOS7服务器—宝塔Linux面板5.2.0
(CentOS Linux 7.4.1708 (Core))

开始

  1. 安装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
    
  2. 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
    
  3. 使用virtualenv创建python3的虚拟环境

    # 切换到用户目录下
    cd ~
    
    # 创建虚拟环境文件夹
    mkdir test_venv
    cd test_venv
    
    # 创建名称为venv的虚拟环境
    virtualenv -p /usr/bin/python3 venv
    

    virtualenv -p /usr/bin/python3 venv 输出结果:
    在这里插入图片描述

  4. 进入虚拟环境,在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
    
  5. 安装Nginx
    1.使用宝塔Linux面板安装 - - - 后续配置.conf也在宝塔Linux面板快捷配置
    2.使用命令行安装

    # 添加nginx存储库
    yum install epel-release
    
    # 安装nginx
    yum install nginx
    
  6. 开始创建Django项目

    1. 切换到虚拟环境目录下新建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)
      
    2. 在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),
       ]
      
    3. 测试
       # 启动django自带web服务器
       cd hello_django
       python3 manage.py runserver <自己主机地址IP>:8080 #<自己主机地址IP>填自己主机地址,后面需要指定一个可用的端口(如8080)
       
       # 用浏览器访问django,访问方式为
       <自己主机地址IP>:8080/hello
       <自己主机地址IP>:8080/hello?user=123
       
       # 浏览器可以看到对应返回信息,说明django项目新建成功
      
  7. 关联nginx、uwsgi、django

    1. 开放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
      
    2. 开放允许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
      
    3. 关联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中指定的端口是否被占用
      
    4. 关联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
      
    5. 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
       
       # 浏览器可以看到对应返回信息,说明部署成功
      

猜你喜欢

转载自blog.csdn.net/HHH_LLL/article/details/107715466
今日推荐