django3.0.3+uwsgi+nginx+MySql在CentOS7上环境部署
一、软件版本
python 3.8.1
nginx 1.18.0
django 3.0.3
uwsgi 2.0.18
MySql 8.0.19
CentOS 7
二、实验工具
VMware Workstation
Xshell 6
XFTP 6
三、软件安装
1. python3.8.1安装(源码编译)
-
下载依赖软件
yum -y install libffi-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make wget
-
在/home下新建python文件夹,将安装包下载到此文件夹下
mkdir /home/python cd /home/python wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz
-
下载好后发现python文件夹下多了一个Python-3.8.1.tgz文件,如下图
-
解压该文件
tar -xzvf Python-3.8.1.tgz
-
进入解压后的文件夹,配置安装目录
cd Python-3.8.1 ./configure --prefix=/usr/local/python3
-
安装python并设置软连接
make && make install ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3 ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3
注意切勿删掉系统自带的的python
-
测试是否安装成功
python3 -V pip3 -V
-
下载virtualenv (-i 参数后面的网址为国内的镜源),并添加软连接
pip3 install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple/ ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
2. nginx安装
-
添加nginx源
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
-
用yum命令下载安装nginx
yum install nginx
3. 安装MySql8.0
-
配置安装源
rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
-
安装MySql8.0
yum --enablerepo=mysql80-community install mysql-community-server
-
启动MySql服务
systemctl start mysqld.service
四、环境准备
1. 创建python虚拟环境
-
在/home下创建文件夹web,并进入 (此文件夹作为网站文件存放的文件夹)
mkdir /home/web cd /home/web
-
创建python虚拟环境,名为env,并激活环境
virtualenv env source env/bin/activate
2. 下载uwsgi,django
-
下载uwsgi2.0.18,django3.0.3
pip3 install uwsgi==2.0.18 -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip3 install django==3.0.3 -i https://pypi.tuna.tsinghua.edu.cn/simple/
-
下载mysqlclient
yum install mysql-devel gcc-devel python-devel pip3 install mysqlclient -i https://pypi.tuna.tsinghua.edu.cn/simple/
3. 在MySql创建数据库以及完成用户授权
-
在安装好MySql之后,系统会生成默认的root用户密码,输入下面命令查看
grep 'temporary password' /var/log/mysqld.log
-
登录root用户,输入如上最后的密码(我这里生成的临时密码是c6ZD%2bRGlmm)
mysql -u root -p
-
修改root密码为Hadoop@123(这里密码可以自由发挥)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Hadoop@123';
-
创建数据库helloworld,创建新用户manger,密码是HelloWorld@123
CREATE DATABASE helloworld; CREATE USER 'manger'@'localhost' IDENTIFIED BY 'HelloWorld@123;
-
查看数据库是否建立成功
SHOW DATABASES;
-
为manger用户授权
GRANT ALL PRIVILEGES ON helloworld.* TO 'manger'@'localhost'; FLUSH PRIVILEGES;
-
使用组合键Ctrl+D退出数据库
五、开始我们的第一个django项目吧
1. 新建一个django项目
-
输入命令,运行之后可以看到生成一个MyFirstWeb文件夹
django-admin startproject MyFirstWeb
-
进入该文件夹,可以看到如下的文件结构,其中settings.py和urls.py是重点编辑文件
cd MyFirstWeb
-
首先编辑settings.py
vi MyFirstWeb/settings.py
-
找到如下图所示的代码段
-
更改该代码段
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'helloworld',# 你的数据库名字 'USER': 'manger',# 你的数据库用户名 'PASSWORD': 'HelloWorld@123',# 你的对应的用户密码 'HOST': '',# 留空默认为localhost,也可以写远程mysql的ip 'PORT': '3306'# 端口号 } }
-
编辑manage.py
vi manage.py
-
将第一行改为
#!/home/web/env/bin/env python
2. 开始我们的第一个app
-
新建app名字为FirstApp,如下图
python manage.py startapp FirstApp
-
在setting.py注册FirstApp这个应用,顺便更改访问ip,首先编辑settings.py,找到如下代码块
vi MyFirstWeb/settings.py
-
更改为
ALLOWED_HOSTS = ['*'] # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'FirstApp', ]
-
迁移数据库
python manage.py migrate
-
运行我们第一个django项目
python manage.py runserver 0:80
-
在浏览器中输入CentOS的ip地址访问,出现以下界面表示成功(如果网页打不开请打开防火墙的80端口)
-
使用组合键Ctrl+C中止程序
六、配置django+nginx+uwsgi
1. 配置django
-
修改setting文件
vi MyFirstWeb/settings.py
-
修改为
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
-
在文件末尾添加
STATICFILES_DIRS = (os.path.join(BASE_DIR,'static'),)
-
新建templates和static文件夹
mkdir templates mkdir static
-
编辑首页文件
cd templates vi index.html
<html> <body> <table width=100% height=100%> <tr> <td> <center> <font face="times"> <span style="font-size:100px;color:pink;font-family:century"> <a>I Love You</a> </span> </font> </center> </td> </tr> </table> </body> </html>
-
配置url.py文件,将文件替换成如下代码,展示效果如下
from django.contrib import admin from django.urls import path from FirstApp import views urlpatterns = [ path('admin/', admin.site.urls), path('',views.index), ]
-
配置FirstApp的views.py文件
-
vi FirstApp/views.py
-
添加如下代码
def index(request): return render(request,'index.html')
-
2. 配置uwsgi
-
创建config_uwsgi.xml文件,并写入如下内容
-
vi config_uwsgi.xml
-
<uwsgi> <socket>127.0.0.1:8080</socket><!--如果是服务器,这里的ip为云服务器内网ip--> <chdir>/home/web/MyFirstWeb</chdir><!--django存放的路径--> <module>MyFirstWeb.wsgi</module> <processes>4</processes> <!--进程的数量--> <daemonize>uwsgi.log</daemonize><!--存放日志文件的路径--> </uwsgi>
-
3. 配置nginx
-
输入如下命令,打开进入conf.d文件夹
cd /etc/nginx/conf.d/
-
备份原有的default.conf
mv default.conf default.conf.bak
-
新建my.conf文件输入以下内容
server { listen 80; server_name _; charset utf-8; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8080; uwsgi_param UWSGI_SCRIPT MyFirstWeb.wsgi; uwsgi_param UWSGI_CHDIR /home/web/MyFirstWeb; } location /static/ { alias /home/web/MyFirstWeb/static; #你的用于存放静态文件的目录 } }
-
输入nginx -t 检查是否有语法错误,successful则表示没有语法错误
4.联合调试
-
进入/home/web/MyFirstWeb/目录,启动uwsgi
uwsgi -x config_uwsgi.xml
-
启动nginx
nginx
-
在浏览器中输入虚拟机ip,大功告成!
-
关闭django的调试模式,将DEBUG设为False
vi MyFirstWeb/settings.py
-
关闭nginx和uwsgi进程并重新启动
pkill -9 uwsgi pkill -9 nginx uwsgi -x config_uwsgi.xml nginx
-
现在找不到页面会返回标准404界面
七、开始属于你的django项目吧
- 玩的开心
- 如果网页打不开请打开对应端口,如果是云服务器请配置相应安全组