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

本文目录

  • 1.Nginx
    • 1.1阿里云放通80端口
    • 1.2安装nginx
    • 1.3nginx管理
    • 1.4nginx使用
  • 2.Mysql
    • 2.1安装mysql8.0
    • 2.2启动mysql
    • 2.3安全设置
  • 3.Django
    • 3.1安装django
    • 3.2关联mysql
    • 3.3Django项目
  • 4.uWSGI
    • 4.1安装uwsgi
    • 4.2写项目配置文件
    • 4.3写nginx配置文件
    • 4.4运行
    • 4.5管理
      • 4.5.1安装uwsgitop
      • 4.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

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

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

在Centos8上部署Django环境(Nginx+mysql+uwsgi)相关推荐

  1. 在 Linux 上部署 Django 应用,nginx+gunicorn+supervisor

    如果是新服务器先要进行基本的配置 部署前应用配置 开发环境与生产环境中的应用一般会有两套不同的配置.比如 DEBUG 选项,数据库配置等. 对于 setting.py 文件, 在生产环境中我们要设置 ...

  2. heroku创建linux主机,在 Heroku 上部署 Django 应用

    在 Heroku 上部署 Django 应用 Heroku是一个很棒的平台,它有很多的控件,并且搭建环境相对来说也比较容易.本指南中,我将一步一步指导你在Heroku平台上部署一个简单地Django应 ...

  3. Apache上部署Django

    目前,Apache和mod_python是在生产服务器上部署Django的最健壮搭配.mod_python 是一个在Apache中嵌入Python的Apache插件,它在服务器启动时将Python代码 ...

  4. CentOS8上部署NFS服务端和客户端

    centos8上部署nfs服务端和客户端 文章目录 背景 服务端与客户端信息 配置服务端 安装软件包 编辑配置文件 验证并使配置生效 启动服务端服务 查看服务端状态: 配置客户端: 安装软件包 启动客 ...

  5. 部署Django到云服务器(centos+nginx+mysql+uwsgi+python3)【操作篇(1)】

    开篇 笛卡尔说:"你不能教会一个人任何东西,你只能帮助他发现他自己内心本来就有的东西!" jacky能教你的,只能是经验和建议,要逆袭还得通过自己对数据的不断领悟,数据领域的技能都 ...

  6. 基于nginx和uWSGI在Ubuntu系统上部署Django项目

    1. nginx 1.1 安装 sudo apt-get install nginx 1.2启动.停止和重启 sudo /etc/init.d/nginx start sudo /etc/init.d ...

  7. 如何高效快速地在Linux系统上部署Node.js+Express+MySQL的开发环境(桌面可视化)...

    一.前言 可能一些初级前端和我一样,在有些项目需要前后台都一个人打通搞定的时候,对于后台和开发环境的部署还是比较头疼的.特别是Linux系统,由于没有系统接触过,也不太喜欢去记背那么多命令,大部分命令 ...

  8. docker部署django项目、mysql主从搭建、django实现读写分离

    目录 docker部署django项目 1.1 基于python基础镜像 将本地django项目打包并发到远程服务器上 将服务器上的.zip django项目解压 部署的具体流程 1.2 基于dock ...

  9. 如何在Linux系统上部署接口测试环境

    作为一名软件测试人员,部署测试环境是我们日常工作的一部分,今天就简单整理下接口测试环境部署的步骤,希望能够帮助到大家. 今天为大家整理的接口测试环境部署涉及到Tomcat,JDK和数据库.目前能够提供 ...

最新文章

  1. 各种小的 dp (精)
  2. 一文帮你了解小型直流有刷电机内部结构
  3. python学到什么程度可以写爬虫-刚开始学习 Python 到可以写出一个爬虫大约需要多长时间...
  4. python怎么用excel-python怎么连接excel
  5. JavaScript开发规范 0.01版
  6. shell实例第0讲:shell脚本完整pdf文档下载
  7. 3级联动 ajax java_java+ajax(三级连动下拉框)
  8. linux交叉编译+驱动,请教驱动程序交叉编译问题(初学)
  9. 基于TCP协议的进程间通信
  10. 大话设计模式C++版——代理模式
  11. 深度linux任务栏,Deepin系统的dde-dock任务栏出不来的有效解决方法
  12. 实战:第十七章:xlsx文件导入数据入库
  13. 自动控制原理:一阶系统的时域分析
  14. nginx+lua搭建文件上传下载服务
  15. 免费获取ps密钥_ps密钥
  16. Python专栏 | ICA应用:如何识别伪影信号?(一)
  17. Focal Loss 简介
  18. source insight4.0使用教程
  19. 中国状元”在美国读大学后对中国教育的感悟
  20. [R分析] 描述统计:频数和频率分布直方图

热门文章

  1. python轮转数组及nums和nums[:]的区别
  2. JavaScript JS 如何定义多行文本
  3. Linux随笔19-MySQL主从复制、Percona XtraBackup实现全量和增量备份、ProxySQL实现读写分离
  4. 网页怎么与服务器进行连接,如何实现网页与服务器的连接
  5. CSS选择器(id选择器,包含选择器,标签名选择器,类选择器,属性选择器,通配符选择器,伪类选择器,相邻选择器,选择器的优先级,子选择器)
  6. 江苏最新建筑施工塔式起重机(建筑特种作业)特种工(塔式起重机)机考题库真题及答案解析
  7. 古月居 ROS 入门21讲--PA16 参数的使用与编程方法
  8. 营销自动化权威指南_任务自动化指南
  9. wxWidgets(1) :mac下搭建wxWidgets 3.0 环境
  10. 后渗透篇:CLSID大全