CentOS7下部署Django项目详细操作步骤

安装项目环境并迁移项目

1.先把部署可能用到的项目和安装包发送到开发目录

2.发送完成后查看当前目录,显示如下则表示成功

 

 3.然后安装python3.7编译环境,这在我上篇博客已经写明步骤,点击这里查看详细步骤,安装完后执行python3,进入python的命令交互界面则表示安装成功!

 4.cd到项目目录下,删除无关文件后安装项目运行所需要的依赖包(依赖包应该提前导出来,windows下可执行pip freeze >requirements.txt导出项目所需要的依赖包)

安装uwsgi     

1.  pip3 install uwsgi

2. 设置软链接:ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

安装nginx

1.先解压之前上传的nginx安装包,如果没有nginx安装包,则执行命令

wget -c https://nginx.org/download/nginx-1.12.2.tar.gz

 

 2.cd 到nginx安装包目录执行  ./configure 进行配置

 

 3. make && make install 编译安装

 4.设置软链接   ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

 

配置uwsgi

1.创建 一个script目录用于存放uwsgi的相关文件,并在目录中配置uwsgi.ini文件,执行vim uwsgi.ini自动创建

3.uwsgi.ini详细配置内容说明如下所示:

[uwsgi]
chdir=/opt/FruitStore #项目目录
socket=127.0.0.1:8080
#http=127.0.0.1:8080 #指定IP端口,ip为内网ip,如果是云服务器,是云服务器内网ip
workers=5 #进程个数
pidfile=/opt/script/uwsgi.pid #指定pid文件,用于重启和停止
static-map=/static=/opt/FruitStore/static #指定静态文件
uid=root #用户
gid=root #组
master=true #启动主进程
vacuum=true # 当服务停止的时候自动移除unix Socket和pid文件
enable-threads=true #启用线程
thunder-lock=true #序列化接受的内容
harakiri=30 #设置自中断时间
post-buffering=4096 #设置缓冲
daemonize=/opt/script/uwsgi.log #设置日志目录路径

这儿有几个细节要注意

首先这个端口你可以随便选,但是不要用22,80之类的,这些端口是有特殊作用的。
你选的这个端口你得保证已经加入安全组了。假如你是在阿里云买的服务器,那么你登录你的账号之后,在安全组那儿需要添加这个端口

其中配置文件中socket与http的区别:

当使用http时,uWSGI可以充当web服务器,客户端可直接访问,当然也可以通过nginx转发到uWSGI,此时nginx与uWSGI之间通讯协议是http协议。nginx中通过proxy_pass实现。
当使用socket时,uWSGI无法当做web服务器,只能通过nginx访问,此时nginx与uWSGI之间的通信协议是uwsgi,相比HTTP协议,此协议效率更高。nginx中通过uwsgi_pass实现。

我这里是使用uwsgi+nginx组合来作为服务器,所以选用socket

4.截图展示(注意不要有注释和空格,可能会出现编码问题)

 5.启动uwsgi

 另附常见的uwsgi命令:

uwsgi --ini uwsgi.ini          # 启动

uwsgi --reload uwsgi.pid  # 重启

uwsgi --stop uwsgi.pid     # 关闭

配置nginx

1.cd /usr/local/nginx/conf 配置nginx.conf

 2.为了配置的安全,我们先备份该文件,执行cp nginx.conf nginx.conf.bak

 3.修改节选第一部分,执行 vim nginx.conf

 修改节选第二部分:

 server {

    listen 80;  # 我要监听那个端口
    server_name 192.168.29.129; # 设置对外访问入口,可以是域名可以是IP地址,我设置的是IP

    charset utf-8;

    access_log logs/access.log; #访问日志
    error_log logs/error.log; #错误日志

    location / {
    include uwsgi_params;
    uwsgi_connect_timeout 30;
    uwsgi_pass 127.0.0.1:8080  #和uwsgi的socket地址保持一致
  }

gzip_types text
/plain text/css application/json application/x-javascript text/xml application/xml application/ xml+rss text/ javascript;
location
= /static/ { alias /opt/FruitStore/static; #静态文件地址 index index.html index.htm; } }

 安装mariadb数据库并配置

1.下载mariadb

 yum install mariadb-server mariadb -y 

  2.安装完成后,启动mariadb服务端

systemctl start/stop/restart/status mariadb #(分别为开启、停止、重启、查看状态)
systemctl enable mariadb #设置开机启动mariadb

 3.初始化数据库

mysql_secure_installation #设置root密码等

 4.设置数据库 vim /etc/my.cnf

其中lower_case_table_names=1在从外界数据迁移时可能会用到,如果不配置可能因为表名大小写而导致表名不一致,从而无法查到对应的数据

 5.重启mariadb

systemctl restart mariadb

 6.登入数据库,如下则说明安装成功!

 PS:执行命令:show variables like "%character%";show variables like "%collation%";可查看编码类型

启动服务

1.创建项目运行的数据库

  2.cd到项目目录下编辑settings,其中debug先不要急着改为false,不然有错误也不会显示,等调试结束后在关掉!

 3.配置数据库

 4.同步表结构到mariadb

python3 manage.py  makemigrations

python3 manage.py migrate

# 同步前,应该先把之前的迁移文件删除

5.执行python manage.py runserver 0.0.0.0:8000 发生编码错误

 

 6.拷贝出错的路径,用vim编辑把decode改为encode在保存即可!

 

7.重新启动服务后,执行python3 manage.py runserver 0.0.0.0:8000,记得先关闭防火墙。

 

 8.效果展示:部署成功!

 数据迁移

1.把之前的表结构和表中的数据从数据库中导出成sql文件,并上传至开发目录,如果之前使用的是sqlite数据库,则需要先把sqlite数据库中的数据导入mysql中,具体做法参考我之前的博客

 2.为了保持不被之前的数据干扰,先删除之前的空表,创建一个空的同名数据库

 3.把opt目录下的sql文件数据导进创建好的数据库

 4.重启mariadb数据库,命令:systemctl restart mariadb,数据显示,数据迁移成功!

参考博客:https://blog.csdn.net/tianyi19/article/details/112278008

原文地址:https://www.cnblogs.com/Liu928011/p/14873569.html