Django项目部署(CentOS7+nginx+uwsgi+Python3+Django)

CentOS环境下Django项目部署

第一次写博客,还望各位大佬和各位前辈不吝赐教。

1. 标题更新软件源

yum update -y

2.安装软件管理包和可能使用的依赖

yum -y groupinstall "Development tools"
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel

3.下载Pyhton3到/usr/local 目录(这里使用的是Python3.6.5)

wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz

解压

tar -zxvf Python-3.6.5.tgz

进入 Python-3.6.5路径

cd Python-3.6.5

编译安装到**/usr/local/python3**

./configure --prefix=/usr/local/python3

安装python

make
make install

安装完成之后建立为Python3建立软连接,方便在终端直接使用

ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3

如果报错可以使用

ln -sf /usr/local/python3/bin/python3.6 /usr/bin/python3

由于pip和Python是同时安装的,这里我们直接为其建立软连接就行了。

ln -s /usr/local/python3/bin/pip3.6 /usr/bin/pip3

4.查看Python和pip3的安装情况

查看Python我们可以直接Python的版本为3.6.5
如图显示表示安装成功。
Python的版本为3.6.5,pip3的版本为9.0.3

5.安装隔离Python环境virtulenv

使用如下命令安装:

pip3 install virtualenv

在这里插入图片描述
这里提示pip3版本过低。可以使用如下命令升级:

pip3 install --upgrade pip

然后我们为virtulenv建立软连接

ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv

在根目录下新建两个文件夹用来存放网站的项目文件

mkdir -p /data/env
mkdir -p /data/wwwroot

6.切换到/data/env/下,创建指定版本的虚拟环境。

virtualenv --python=/usr/bin/python3 pyweb

然后进入/data/env/pyweb/bin

cd /data/env/pyweb/bin

启动虚拟环境:

source activate

7.在虚拟环境里用pip3安装django和uwsgi

pip3 install django==3.0.2
pip3 install uwsgi

这里指定Django的版本为3.0.2
注:uwsgi需要安装两次
其中一次安装在系统,一次安装在虚拟环境
安装完成后为其建立软链接

ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

8.将项目文件上传至/data/wwwroot/内

9.安装requirement内的Python第三方库

切换到/data/wwwroot/项目/requirement文件夹

pip3 install -r common.txt

10.恢复数据库

执行命令进入数据库

mysql -u用户名 -p密码

以utf8格式创建一个数据库

CREATE DATABASE `数据库名` CHARACTER SET utf8 COLLATE utf8_general_ci;

使用下面语句查看当前有哪些数据库

show databases;

选中数据库,并恢复本地备份的数据:

use 数据库名;
source /data/wwwroot/备份文件.sql;

11.检验一下项目能否正常运行

python3 manage.py runserver

估计很多人和我一样会发生如下的错误:

raise ImproperlyConfigured(‘mysqlclient 1.3.13 or newer is required; you have %s.’ % Database.version)
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

这是Django项目中比较常见的一类错误,我们只需要前往对应的base.py文件将下面这两句屏蔽掉即可。

vim /data/env/pyweb/lib/python3.6/site-packages/django/db/backends/mysql/base.py
#if version < (1, 3, 13):
#    raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

然后错误就消失了,项目正常启动。

12.配置uwsgi

在项目根目录下创建项目项目名.xml文件

vim 项目名.xml

并输入如下内容:

<uwsgi>    
   <socket>127.0.0.1:8997</socket><!-- 内部端口,自定义 --> 
   <chdir>/data/wwwroot/项目名称/</chdir><!-- 项目路径 -->            
   <module>项目名称.wsgi</module> 
   <processes>4</processes> <!-- 进程数 -->     
   <daemonize>uwsgi.log</daemonize><!-- 日志文件 -->
</uwsgi>

13.安装nginx

进入/home目录

cd /home/

执行下面命令下载nginx

wget http://nginx.org/download/nginx-1.13.7.tar.gz

下载完成后执行解压操作

tar -zxvf nginx-1.13.7.tar.gz

进入nginx-1.13.7文件夹

cd nginx-1.13.7

依次执行下列命令

./configure
make
make install

进入 /usr/local/nginx/conf/

cd /usr/local/nginx/conf/

对 nginx.conf文件进行备份

cp nginx.conf nginx.conf.bak

删除原有的nginx.conf文件,并用vim新建

rm -rf nginx.conf
vim nginx.conf

写入如下内容

events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    server {
        listen 80;
        server_name  www.django.cn; #改为自己的域名,没域名修改为127.0.0.1:80
        charset utf-8;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:8997;  #端口要和uwsgi里配置的一样
           uwsgi_param UWSGI_SCRIPT mysite.wsgi;  #wsgi.py所在的目录名+.wsgi
           uwsgi_param UWSGI_CHDIR /data/wwwroot/mysite/; #项目路径
           
        }
        location /static/ {
        alias /data/wwwroot/mysite/static/; #静态资源路径
        }
    }
}

进入/usr/local/nginx/sbin/目录

cd /usr/local/nginx/sbin/

执行下列代码测试配置文件是否有错

./nginx -t

没有错就执行以下命令:

./nginx

终端没有任何提示就证明nginx启动成功。
然后,我们需要对项目的setting.py文件进行一些更改。
关闭DEBUG模式。

DEBUG = False 

设置任何IP都可以访问

ALLOWED_HOSTS = ['*']

14.访问项目的页面
进入网站的项目目录

cd /data/wwwroot/项目名称/

执行下列命令

uwsgi -x 项目名称.xml

进入/usr/local/nginx/sbin/目录执行系列命令重启nginx:

./nginx -s reload

到此为止,你应该可以通过你的IP或者域名访问网站了。

猜你喜欢

转载自blog.csdn.net/qq_29537269/article/details/104346880