在Centos8上部署Django环境(Nginx+mysql+uwsgi) 您所在的位置:网站首页 django报错在wsgi中找到不django 在Centos8上部署Django环境(Nginx+mysql+uwsgi)

在Centos8上部署Django环境(Nginx+mysql+uwsgi)

2024-01-15 03:18| 来源: 网络整理| 查看: 265

前言:笔者通过阿里云的学生"在家实践计划"获得了一台2核4G的云ECS实例,并安装了Centos8镜像。于是尝试部署一套Django的生产环境。笔者选择了 Nginx + uwsgi + mysql +Python3的方式。主机自带了python3和pip3。笔者自行安装了剩下的部分。其中,mysql的安装借鉴了这篇参考博文。如有疑问欢迎大家在评区留言。 附言:以下操作,笔者都是以root身份进行的,读者以其他用户进行时,请酌情在命令前加上sudo。

本文目录 1.Nginx1.1阿里云放通80端口1.2安装nginx1.3nginx管理1.4nginx使用 2.Mysql2.1安装mysql8.02.2启动mysql2.3安全设置 3.Django3.1安装django3.2关联mysql3.3Django项目 4.uWSGI4.1安装uwsgi4.2写项目配置文件4.3写nginx配置文件4.4运行4.5管理4.5.1安装uwsgitop4.5.2管理相关命令

1.Nginx 1.1阿里云放通80端口

在阿里云的控制台中,对实例主机配置安全组,在入方向新增80端口的安全规则。配置如有疑问请参考官方说明。

1.2安装nginx

由于笔者对nginx的版本没有过多要求,此处采用dnf包管理方式安装,此处笔者dnf安装的是14.1版本。

dnf install -y nginx

安装完成后,可以查看一下版本,以验证是否正确安装。

nginx -v 1.3nginx管理

基于dnf安装的nginx已经做好了相关设置,可以使用nginx -s、systemctl对nginx进行便捷管理。 systemctl管理常用:

systemctl enable nginx #开机自启动nginx systemctl disable nginx #开机禁止启动nginx systemctl status nginx #查看nginx服务状态 systemctl start nginx #开启nginx服务 systemctl stop nginx #终止nginx服务 systemctl restart nginx #重启nginx服务

相比之下,笔者还是更喜欢直接使用原生的nginx自带命令 通过nginx -h 读者可以查看到nginx常用命令及说明,笔者摘录了一部分

nginx -V #查看nginx版本和配置项内容 nginx -t #检查配置文件是否正确 nginx -c 配置文件路径 #选用某一配置文件 nginx #启动nginx nginx -s reload #重新载入配置文件 nginx -s stop #停止nginx 1.4nginx使用 systemctl start nginx #或者直接使用nginx 启动nginx服务 systemctl status nginx #若看到Active变为active(running)则启动正常 lsof -i:80 #可以看到80端口已经被nginx监听了

上面一系列检查确认nginx正常启动后,可以到浏览器输入公网地址或域名,看到nginx欢迎页。 nginx默认配置中监听80端口的配置项所在根位置,对应nginx程序安装目录下的html目录。我们通过nginx -V可以看到,dnf安装后,nginx安装位置在/usr/share/nginx,配置文件在/etc/nginx/nginx.conf。(欢迎页就是/usr/share/nginx/html/index.html)。 笔者还是更习惯将网站目录设置在/var/www下,我们可以这样来修改:

mkdir -p /var/www/mysite #创建网站目录 cp /usr/share/nginx/html/* /var/www/mysite/ #笔者暂时没网站,先用默认 cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak #备份配置文件 vim /etc/nginx/nginx.conf #打开配置文件 按i编辑 ##找到其中http->listen80的server项->修改root为/var/www/mysite; ##按ESC后输入:wq 保存退出 nginx -t #测试配置文件是否修改正确 nginx -s relod #无误后重新载入配置文件

大功告成,网站目录修改成功。(准确说是80端口web内容映射的根目录位置)

2.Mysql 2.1安装mysql8.0

Centos8的dnf对懒人那是相当友好。mysql8.0的完全可以一条命令解决:

dnf install -y @mysql #@mysql模块将安装MySQL8.0及其所有依赖项 2.2启动mysql systemctl enable mysqld #配置mysql开机自启动 systemctl start mysqld #启动mysqld systemctl status mysqld #查看mysql是否启动成功(active running) 2.3安全设置

运行如下脚本,可以设置mysql的root密码,并引导你完成一些必要的安全设置。

mysql_secure_installation

首先,脚本会让你选择是否配置VALIDATE PASSWORD PLUGIN(密码验证插件),该插件用来检查mysql用户所设置的密码强度,只有达到一定强度的密码才允许被设置。如果你希望设置请输入y或者Y回车,不想请直接回车。若选择了配置,紧接着你将选择所采用密码验证策略的级别:

低:密码长度不少于8位 中:密码长度不少于8位,必须是数字、大小写字母、特殊字母混合。 强:密码长度不少于8位,必须是数字、大小写字母、特殊字母混合,需配合字典文件。

通常,我们选择中级别即可。

其次,将要求用户输入两次为root设置的新密码,上一步骤设置的密码验证策略将发挥作用,并对用户设置的密码强度进行打分。设置好密码以后,会提示用户是否继续采用密码保护,选择y回车。

紧接着,将询问用户是否删除匿名用户,选择y回车。

默认情况下,MySQL有一个匿名用户,允许任何人登录MySQL,而不必创建用户帐户。这仅用于测试,或者安装时更便利。但在部署生产环境之前,应该先删除匿名用户。

然后,将询问用户是否禁止以root身份远程登陆mysql,选择y回车。

通常,mysql中的root用户应只允许通过本地登陆,而不能远程登陆。这样可以降低root用户密码被爆破的风险。

此后,将询问用户是否删除测试数据库,选择y回车。

默认情况下,MySQL总有一个名为’test’的数据库,允许任何用户访问。这仅用于安装时的测试,但在部署生产环境之前,应该先删除该数据库。

最后,脚本询问用户是否现在重载 privilege tables,以使当前所有修改立刻生效。选择y回车。

当我们在终端中键入:

mysql -uroot -p #回车输入密码并确认

即可登陆mysql。

3.Django

Django作为python得力的重量级web框架,一直备受青睐。

3.1安装django pip3 install django 3.2关联mysql dnf install mysql-devel pip3 install mysqlclient 3.3Django项目 django-admin startproject myproject #创建一个名为myproject的项目 cd myproject python3 manage.py startapp dg_mypr #创建一个应用dg_mypr用来映射数据库

上述创建的应用,通过在models.py中利用Django的ORM映射数据库的表和字段,一般为了统一我们会使该应用与数据库同名。

打开项目下的配置文件settings.py

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } #上述内容修改为mysql引擎,填入要连接的数据库信息 #要注意的是 这里的数据库必须是提前创建好的!!!!! DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '数据库名', 'USER': 'root', 'PASSWORD': '密码', 'HOST': 'localhost', } } #在这里插入新创建的app INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'dg_mypr', #加入dg_mypr ] DEBUG = True #测试中打开Debug 生产环境请关闭 ALLOWED_HOSTS = [u'*'] #修改白名单为全通

修改完成后,保存退出。 (在dg_mypr中的models.py中定义ORM映射模型的步骤略) 改好配置文件并创建模型后,我们可以使用

python3 manage.py check #确认正常连接数据库且语法正确(0 issues) python3 manage.py makemigrations #根据模型建立migration python3 manage.py migrate #根据migration在数据库中建立对应的表

此后若需要应用新的ORM建模,可以在清库后,删除dg_mypr/migrations目录下的__pycache__和0001_initial.py,重复上述两步操作即可。 最后,我们可以在开着debug的情况下应用runserver跑一个端口测试一下: (确保阿里云安全策略组已开放该端口)

python3 manage.py runserver 0.0.0.0:8080 #监听8080端口建立项目服务

当浏览器访问http://公网地址:端口 后,若载入了Django欢迎页,则进入下一步骤。

4.uWSGI 4.1安装uwsgi python3 -m pip install uwsgi #安装完成后测试一下 uwsgi --version 4.2写项目配置文件

在项目的目录 /var/www/mysite/myproject 下创建一个ini配置文件 并创建一个目录uwsgi用来存放运行相关文件

touch myproject.ini mkdir uwsgi

在myproject.ini中写入:

# myproject.ini [uwsgi] #内部转发端口 只要不被占用可随意找 需和nginx.conf里的转发口匹配 socket = :8888 #django 项目目录 chdir = /var/www/mysite/myproject #Django 项目下 wsgi.py 文件 module = myproject.wsgi master = true #进程数 processes = 4 vacuum = true #status文件,可以查看uwsgi的运行状态 stats =%(chdir)/uwsgi/uwsgi.status #pid文件,通过该文件可以控制uwsgi的重启和停止 pidfile =%(chdir)/uwsgi/uwsgi.pid #日志文件,通过该文件查看uwsgi的日志 daemonize =%(chdir)/uwsgi/uwsgi.log 4.3写nginx配置文件

在nginx配置文件nginx.conf中加入

server { listen 8080; #暴露给外部访问的端口 根据实际指定 确认阿里云策略组已放行 server_name localhost; charset utf-8; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8888; #外部访问端口就转发到内部端口 要与项目配置文件里的一致 } location /static/ { alias /var/www/mysite/myproject/static/; #项目静态路径设置 } }

写完后运行 nginx -t检测一下是否有语法错误 然后运行nginx -s reload重新载入配置文件

4.4运行

回到项目目录 运行 uwsgi --ini myproject.ini即可 可运行cat uwsgi/uwsgi.log查看一下是否正常启动了uwsgi 当看到如下内容 说明正常启动了

*** uWSGI is running in multiple interpreter mode *** spawned uWSGI master process (pid: 1405) spawned uWSGI worker 1 (pid: 1413, cores: 1) spawned uWSGI worker 2 (pid: 1414, cores: 1) spawned uWSGI worker 3 (pid: 1415, cores: 1) spawned uWSGI worker 4 (pid: 1416, cores: 1)

此时,运行ps aux | grep uwsgi可查看到正在运行的uwsgi实例

4.5管理

倘若不撰写管理脚本 需要重启uwsgi时总是需要

$ ps -ax | grep uwsgi $ kill -9 [pid] $ uwsgi --ini myproject.ini

但是如果你按照第二步创建了uwsgi目录及相关文件,你就可以优雅地管理uwsgi进程。

4.5.1安装uwsgitop

uwsgitop是一款界面类似top的工具,用以查看指定uwsgi的全部工作进程情况。

pip3 install uwsgitop 4.5.2管理相关命令 #重启uwsgi(常常出错 还是执行stop以后start效率高) uwsgi --reload uwsgi/uwsgi.pid #终止uwsgi(原理是启动uwsgi进程时会把pid写入该文件) uwsgi --stop uwsgi/uwsgi.pid #查看uwsgi各进程工作状况 uwsgitop uwsgi/uwsgi.status #追踪uwsgi日志及动态刷新当前访问记录 tail -f uwsgi/uwsgi.log #启动uwsgi uwsgi --ini myproject.ini

如果不便记忆,可将上述命令写入sh脚本文件 快捷执行。

cd uwsgi echo "uwsgi --ini ../myproject.ini" >start.sh echo "uwsgi --stop uwsgi.pid" >stop.sh echo "uwsgitop uwsgi.status" >status.sh echo "tail -f uwsgi.log">log.sh chmod +x *.sh

可在浏览器访问项目地址,测试效果。

综上,笔者整理了自己部署环境的全过程,希望能够对读者有所帮助。后续如有其他内容,将继续补丁修正。欢迎评论指正!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有