VMware workstation虚拟机REHL8下配置安装Django 4.0.6 +uwsgi 2.0.20 +nginx1.22+Mariadb10.9.1

前言: 本文主要的目的是在REHL8的中搭建一个简易的 Django的web应用步骤记录,如果只是想学习Django使用的话,那么直接安装Django就可以了,它有自带的web服务可以直接测试使用。之所以后面又安装 uwsgi 2.0.20 +nginx1.22 主要是进一步深入学习理解。他们之间的各种关系如果想进一步了解的话可以阅读这篇文章:
uWSGI、uwsgi、WSGI、之间的关系,为什么要用nginx加uWSGI部署

Django介绍
Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。
使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web。

前置软件安装

python
Python 3.7.3安装学习
nginx
nginx的两种安装流程
uwsgi
uwsgi2.0.2 安装

工程项目部分目录

djgo
|->djgo
|----|—>init.py
|----|—>asgi.py
|----|—>settings.py #配置文件
|----|—>urls.py #路由系统:url路径对应的执行函数之间的关系,该文件内写路径和函数
|----|—>wsgi.py #用于定义Django用socket实现,测试环境用python下的wsgiref模块,生产环境我们用python下的uwsgi模块

|->learning_logs
|----|—>view.py #初始页面
|->uwsgi_conf
|----|—>uwsgi.ini
|-> manage.py #当前Django程序,操作指令集合

Django 安装

django的官网 https://www.djangoproject.com/download/
目前最新的版本是4.0.6 直接pip安装

pip install Django==4.0.6

完成后测试

python3
import django
django.get_version()

没有报错提示即为安装正确完成

创建文件

选定文件路径

cd /home/pj #这是我选定的工程存放目录

创建工程 djgo

django-admin startproject djgo

vim djgo/settings.py

--snip--
ALLOWED_HOSTS = ['*']
--snip--
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'learning_logs',
]
--snip--

如果是使用 Mariadb与django来进行配套的话还需进行以下的修改:

--snip--
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': '',
        'PORT': '3306',
        'OPTIONS':{
            'autocommit':True
        }
    }
}
--snip--

vim djgo/urls.py

--snip--
from django.urls import re_path as url
from learning_logs import views as lg_views

urlpatterns = [
    path('admin/', admin.site.urls),
    #url(r'^app/', lg_views.index)
    path('', lg_views.index),
]

创建数据库

python3 manage.py migrate

成功数据库创建
mariadb可能遇到的bug

问题:django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb
module. Did you install mysqlclient?
解析:没有安装 mysqlclient
解决:pip install mysqlclient

问题:Using cached mysqlclient-2.1.1.tar.gz (88 kB) Preparing metadata
(setup.py) ... error error: subprocess-exited-with-error
解析:缺乏部分环境
解决:选择安装下列
dnf -y install mysql-devel
dnf -y install python-devel
pip install mysqlclient

如果没有用mariadb的而使用 默认的sqlite则可能遇到下面的bug

如果敲下命令后遇到问题 No module named '_sqlite3'
原因:python3编译的时候没有安装sqlite3,sqlite3提供了_sqlite3.so供python3使用连接sqlite库
解决: 1、安装库包 dnf -y install sqlite*
2、重新编译python(路径根据环境自己定义)
cd python-3.9.9
./configure --prefix=/usr/local/python3
make && make install
测试:
python3
> import sqlite3

进入工程创建项目 learning_logs

cd djgo
python3 mannage.py startapp learning_logs

部分配置以下代码基于 manage.py所处文件夹

vim learning_logs/urls.py

#from django.shortcuts import render

# Create your views here.

from django.http import HttpResponse
#coding:utf-8
def index(request):

    return HttpResponse('welcome!Django~~~')

修改完成后测试

systemctl stop firewalld #先关闭防火墙
systemctl disable firewalld #永久关闭防火墙
python3 manage.py runserver 0.0.0.0:8000 #运行

运行成功图示保持不动,再另打开一个Linux窗口

curl http://127.0.0.1:8000

成功会显示
root@hapood01 ~]# curl http://127.0.0.1:8000
welcome!Django~~~

uWsig配置

建立专门放置uwsgi.ini的文件夹。

mkdir uwsgi_conf
cd uwsgi_conf
vim uwsgi.ini

按照自己建立的项目调整下方的个数据:

#添加配置选择
[uwsgi]
#配置和nginx连接的socket连接
socket=127.0.0.1:9090
#http = :9090
#配置项目路径,项目的所在目录
chdir=/home/pj/djgo/
# 指定项目的application
module=djgo.wsgi:application
#配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录名
wsgi-file=djgo/wsgi.py
#配置启动的进程数
processes=4
#配置每个进程的线程数
threads=2
#配置启动管理主进程
master=True
#配置存放主进程的进程号文件
pidfile=uwsgi.pid
#配置dump日志记录
daemonize=uwsgi.log

启动uWSGI

uwsgi --ini uwsgi.ini

在这里插入图片描述
如果只是单纯的想用 Django+uwsgi的话可以注释掉 socket=127.0.0.1:9090 使用 http = :9090 将,然后重启 uwsgi --reload uwsgi.pid 然后测试 :curl 127.0.0.1:9090 成功 :welcome!Django~~~ ,这证明已经是可以使用了。

nginx配置

进入nginx.conf的位置:

cd /etc/nginx/conf.d
vim djgo.conf

配置 djgo对接的uwsgi的内容:

server {
        listen 80;
        server_name  www.djgo.com; #改为自己的域名,没域名修改为127.0.0.1:80
        charset utf-8;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:9090;  #端口要和uwsgi里配置的一样
           uwsgi_param UWSGI_SCRIPT djgo.wsgi;  #wsgi.py所在的目录名+.wsgi
           uwsgi_param UWSGI_CHDIR /home/pj/djgo/; #项目路径

        }
        location /static/ {
        alias /home/pj/djgo/static/; #静态资源路径
        }
}

完成后重启nginx

systemctl restart nginx

修改自己电脑的host
打开 C:\Windows\System32\drivers\etc\hosts
添加:

xxx.xx.xx.xx www.djgo.com
xxx.xx.xx.xx VM的ip
打开谷歌浏览器 输入 http://www.djgo.com/
成功

如果出现 502 请检查nginx的 error_log 。出现如下报错的话 *14 connect() to 127.0.0.1:9090 failed (13: Permission denied)
解决方法:
1.条件不允许的情况下(不能随意重启计算机)执行下列代码: setsebool -P httpd_can_network_connect 1

2.其他情况下获取root权限 vim /etc/selinux/config 找到 SELINUX=enforcing 改为 SELINUX=disabled

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值