Django项目部署

本文详细介绍了Django项目从开发机到服务器的部署过程,包括配置国内yum源、编译安装Python3、安装virtualenv、MySQL5.7、redis和memcached。还涉及Django项目的配置、uwsgi、nginx的安装与配置,以及使用supervisor管理uwsgi进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开发机上的准备工作

  1. 确认项目没有bug
  2. 用开发项目的虚拟环境进入Django的项目目录,用pip freeze > requirements.txt将当前环境的包导出到requirements.txt文件中,方便在部署的时候安装。
  3. 将项目上传到服务器上的/srv目录下
    /srv :主要用来存储本机或本服务器提供的服务或数据。(用户主动生产的数据、对外提供服务)
  4. 关于如何从开发机上传项目到服务器上,可以用scp,git等形式。这里推荐使用git的形式
    • git init 初始化
    • git remote add origin https://gitee.com/用户个性地址/HelloGitee.git 关联远程仓库
    • git pull origin master 把远程仓库中的文件拉到本地实现统一
    • git add . 将当前目录所有文件添加到git暂存区
    • git commit -m “first desc”’ 提交并备注提交信息
    • git push origin master 推送到仓库

在服务器上的准备工作


配置国内yum源

想用linux的软件,yum默认去从centOS的官网去下载,而官网又在国外,速度会很慢,因此首先要配置yum源。
yum源的仓库路径在 /etc/yum.repos.d/ 如图所示
在这里插入图片描述
新建一个文件夹allbak,把所有的yum仓库移动到allbak文件夹下
在这里插入图片描述
这个时候用yum在安装软件就会报错,如下图
在这里插入图片描述
配置国内的yum源
1.在/etc/yum.repos.d/目录底下,定制我们自己的repo仓库
2.https://opsx.alibaba.com/mirror 阿里巴巴的镜像站 查看帮助文档
3.下载阿里巴巴的yum仓库文件
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget下载文件后 -O参数指定放到某个目录,且改名
4.清除yum缓存 yum clean all
5.生成新的阿里云的yum软件缓存 yum makecache
6.在配置epel额外的仓库源,这个仓库里存放了很多第三方软件,例如Redis,MySQL nginx
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
7.最好再生成yum缓存 yum makecache
8.请随心所欲的使用yum工具

编译安装Python3

1.下载Python3的源码
cd /opt
wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz
安装Python3之前,环境依赖解决,很重要!
通过yum安装工具包,自动处理依赖关系,每个软件包按空格分割
提前安装好这些软件包,日后就不会出现很多坑
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
2.解压缩源码包
下载好Python3的源码包并且安装完工具包后,
tar -xvf Python-3.7.5.tgz
3.切换源码包目录
cd Python-3.7.5
4.编译且安装
4.1.释放编译文件makefile --prefix指定文件路径
./configure --prefix=/opt/python3.7/
在这里插入图片描述
图中makefile就是用来编译且安装的
4.2. 编译且安装
make && make install

4.3 配置环境变量
echo $PATH查看环境变量
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ys/.local/bin:/home/ys/bin
这个变量赋值操作,只是临时生效,需要写入文件,永久生效 PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ys/.local/bin:/home/ys/bin:/opt/python3.7/bin
linux有一个全局个人配置文件 /etc/profile
vim /etc/profile 在最后添加PATH

在这里插入图片描述
source /etc/profile 读一下文件
这个时候 python3.7 pip都已经出来了 编译安装成功!
在这里插入图片描述

安装virtualenv

非常简单,一行命令就搞定!
pip3 install virtualenvwrapper
设置Linux的环境变量,每次启动就加载virtualenvwrapper

把下面两行代码添加到 ~/.bashrc文件中
打开文件
vim ~/.bashrc
写入以下两行代码
export WORKON_HOME=/root/Envs   #设置virtualenv的统一管理目录
export VIRTUALENVWRAPPER_PYTHON=/opt/python347/bin/python3     #指定python解释器
source /opt/python34/bin/virtualenvwrapper.sh #执行virtualenvwrapper安装脚本

然后读取文件,使得生效,此时已经可以使用virtalenvwrapper
source ~/.bashrc

注意:
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'这个参数不要在添加了,不然光报错,有点坑

基本使用virtualenvwrapper

创建一个虚拟环境:
$ mkvirtualenv django2
这会在 ~/Envs 中创建 django2文件夹。

在虚拟环境上工作:激活虚拟环境django2
$ workon django2


再创建一个新的虚拟环境
$ mkvirtualenv django1.1

virtualenvwrapper 提供环境名字的tab补全功能。
当有很多环境, 并且很难记住它们的名字时,这就显得很有用。

workon还可以任意停止你当前的环境,可以在多个虚拟环境中来回切换
workon django1.1

workon django2

也可以手动停止虚拟环境
deactivate

删除虚拟环境,需要先退出虚拟环境
rmvirtualenv django2

安装MySQL5.7

一 安装mysql源

  1. 创建mysql目录 /home/mysql
  2. 进入mysql目录 cd /home/mysql
  3. 下载mysql源安装包(可在http://dev.mysql.com/downloads/repo/yum/ 获取源安装包地址)
    wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
  4. 安装mysql源 yum localinstall mysql57-community-release-el7-11.noarch.rpm
  5. 检查mysql源安装情况 yum repolist enabled | grep 'mysql.*-community.*'
    在这里插入图片描述
    执行命令后返回上述结果表示mysql源安装成功。

二 安装mysql

  1. 安装mysql yum install mysql-community-server
  2. 启动mysql systemctl start mysqld
  3. 查看启动状态 systemctl status mysqld
  4. 设置开机启动 systemctl enable mysqld systemctl daemon-reload

三 配置mysql

  1. 修改密码策略
    mysql5.7默认带有密码查检策略,密码默认策略要求:大小写字母、数字和特殊符号,并且长度不能少于8位。否则会提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements错误。
  2. 可通过修改/etc/my.cnf文件来达到修改密码策略目的,具体方式修改方式如下:
    如果不需要密码策略,在my.cnf文件中添加如下配置禁用即可:
    validate_password = off
    然后重新启动mysql服务使配置生效:
    systemctl restart mysqld
  3. 修改root密码
    mysql安装后,系统会自动初始化一个密码,通过如下命令查看:
    grep 'temporary password' /var/log/mysqld.log
[root@172 mysql]# grep 'temporary password' /var/log/mysqld.log
2017-12-14T11:02:37.459592Z 1 [Note] A temporary password is generated for root@localhost: ju/,8f1;O!J8
# 密码为localhost:后的字符,本例为:ju/,8f1;O!J8

使用root和默认密码登录mysql
mysql -uroot -p,然后输入默认密码登录。
修改root密码,可通过以下两种方式:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'your password'; 
mysql> set password for 'root'@'localhost'=password('your password'); 
  1. 配置默认编码
    通过修改/etc/my.cnf文件,在[mysqld]下添加编码配置,如下:
    [mysqld]
    character_set_server=utf8
    init_connect=’SET NAMES utf8’
    重启服务生效(systemctl restart mysqld
    重启后查看数据库默认编码格式如下:
    mysql> show variables like ‘character%’;

安装redis

待续

安装memcached

待续

生产环境下Django项目的配置

  1. 首先要把项目从git上拉下来,cd /srv

    1. git init
    2. git remote add origin https://gitee.com/yanyunhan/xfz_bushu.git
    3. git pull origin master
  2. 项目拉下来之后,进入虚拟环境根据requirements.txt安装项目的环境依赖

    1. pip install -r requirements.txt
    2. 在安装mysqlclient时出现了问题,出错的原因在于缺少依赖
      yum install gcc mariadb-devel
      pip install mysqlclient
  3. 在mysql数据库中,创建项目对应的库

  4. 执行python manage.py migrate命令,迁移文件,映射到数据库中,创建相应的表。

  5. 设置ALLOW_HOST为你的域名,以及ip地址。

  6. 执行python manage.py runserver 0.0.0.0:8000然后在你自己的电脑浏览器上输入http://你的服务器的ip地址:8000/访问下网站所有页 面,确保所有页面都没有错误。

  7. 修改时区,不然数据库的时间对不上
    在这里插入图片描述

  8. 设置DEBUG=False,避免如果你的网站产生错误,而将错误信息暴漏给用户。

  9. 收集静态文件:python manage.py collectstatic 方便后面给nginx用。

STATIC_URL = '/static/'
# STATIC_ROOT收集到静态文件到哪里
STATIC_ROOT = os.path.join(BASE_DIR,'static_dist')
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static')
]

在这里插入图片描述
收集完成!

安装uwsgi

1.uwsgi是一个应用服务器,非静态文件的网络请求就必须通过它完成。它也可以充当静态文件服务器,但不是他的强项。uwsgi是使用python编写的,因此通过pip install uwsgi就可以了。(uwsgi必须安装在系统级别的python环境中,不要安装到虚拟环境中)
用豆瓣镜像源安装 pip install uwsgi -i https://pypi.douban.com/simple/

运行简单的test
命令:uwsgi --http :8000 --wsgi-file /opt/test.py

解释:
http :8000 使用http协议,端口8000
wsgi-file test.py : 加载指定的文件

测试文件:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3

2.使用命令uwsgi --http :8000 --module xfz.wsgi --virtualenv=/root/Envs/django2。用uwsgi启动项目,如果能够在浏览器中访问到这个页面,说明uwsgi可以加载项目了。一定要注意路径不要写错!

3.如果uwsgi可以正常加载你的项目,那么就可以编写uwsgi配置文件了,在项目的路径下面,创建一个文件叫做zhiliaoketang_uwsgi.ini的文件,然后填写以下代码:

[uwsgi]

# Django相关的配置
# 必须全部为绝对路径
# 项目的路径
chdir           = /srv/zhiliaoketang
# Django的wsgi文件
module          = xfz.wsgi
# Python虚拟环境的路径
home            = /root/Envs/django2.2

# 最大数量的工作进程
# socket文件路径,绝对路径
socket          = /srv/zhiliaoketang/xfz.sock
# 设置socket的权限
chmod-socket    = 666
# 退出的时候是否清理环境
vacuum          = true

安装nginx

nginx是一个web服务器。擅长加载静态文件和接收http请求。
1、安装Nginx 现在非常简单了,一条命令就可以实现了。
yum install -y nginx
2、启动Nginx并设置开机自动运行

systemctl start nginx.service
systemctl enable nginx.service

3.登录浏览器查看是否成功
4.编写nginx配置文件
/etc/nginx/conf.d目录下,新建一个文件,叫zlkt.conf,然后将以下代码粘贴进去:

upstream zlkt{
        server unix:///srv/zhiliaoketang/xfz.sock;
}

server {
        listen 80;
        server_name   192.168.1.128;
        charset   utf-8;
		# 最大的文件上传尺寸
    	client_max_body_size 75M;  
    	# 静态文件访问的url
        location /static {
                alias  /srv/zhiliaoketang/static_dist;
        }
        # 非静态文件请求到django服务器
        location / {
                uwsgi_pass zlkt;
                include  /etc/nginx/uwsgi_params;
        }
}

写完配置后,可以测试配置文件是否设置成功 nginx -t,另外每次修改配置文件,都要重新启动nginx
systemctl restart nginx
最后,配置完nginx的配置文件,然后在你的项目文件夹下修改你的uwsgi的配置文件,要注意的是
socket要一致!然后启动你的项目uwsgi --ini zhiliaoketang_uwsgi.ini,登录浏览器查看,是不是发现你的静态文件都已经加载出来,说明你的django项目+uwsgi+nginx部署成功,恭喜恭喜!
如果出现了502错误,那么80%是你的uwsgi配置文件出现了问题,认真检查,最好把配置文件全部内容重新删除,然后在重新写,我就出现了这个问题。配置文件检查确认无语,但网页就是加载不出来,我把文件整个删除,然后又重新复制,再次启动发现网页已经正常的加载出来,非常的无语。。。

supervisor管理uwsgi

让supervisor管理uwsgi,可以在uwsgi发生意外的情况下,会自动的重启。
1.supervisor的安装,在系统级别的python环境下pip install supervisor
2. 在项目的根目录下创建一个文件叫做supervisor.conf。内容如下:

# supervisor的程序名字
[program:mysite]
# supervisor执行的命令
command=uwsgi --ini zlkt_uwsgi.ini
# 项目的目录
directory = /srv/zhiliaoketang 
# 开始的时候等待多少秒
startsecs=0
# 停止的时候等待多少秒
stopwaitsecs=0  
# 自动开始
autostart=true
# 程序挂了后自动重启
autorestart=true
# 输出的log文件
stdout_logfile=/srv/zhiliaoketang/log/supervisord.log
# 输出的错误文件
stderr_logfile=/srv/zhiliaoketang/log/supervisord.err

[supervisord]
# log的级别
loglevel=info

```shell
	# 使用supervisorctl的配置
	[supervisorctl]
	# 使用supervisorctl登录的地址和端口号
	serverurl = http://127.0.0.1:9001
	
	# 登录supervisorctl的用户名和密码
	username = admin
	password = 123
	
	[inet_http_server]
	# supervisor的服务器
	port = :9001
	# 用户名和密码
	username = admin
	password = 123
	
	[rpcinterface:supervisor]
	supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

然后使用命令supervisord -c zlkt_supervisor.conf运行就可以了。
以后如果想要启动uwsgi,就可以通过命令supervisorctl -c supervisor.conf进入到管理控制台,然后可以执行相关的命令进行管理:
* status # 查看状态
* start program_name #启动程序
* restart program_name #重新启动程序
* stop program_name # 关闭程序
* reload # 重新加载配置文件
* quit # 退出控制台

对于部署Django项目,你可以按照以下步骤进行操作: 1. 确保你的服务器上已经安装了Python和pip,并且pip已经升级到最新版本。 2. 创建一个虚拟环境来隔离项目所需的依赖项。可以使用`python3 -m venv myenv`命令创建一个名为myenv的虚拟环境,然后通过`source myenv/bin/activate`命令激活虚拟环境。 3. 使用pip安装Django和其他项目所需的依赖项。可以使用`pip install -r requirements.txt`命令来安装requirements.txt文件中列出的依赖项。 4. 在服务器上设置数据库。可以使用SQLite作为开发环境中的默认数据库,但在生产环境中,建议使用更强大的数据库,如MySQL或PostgreSQL。 5. 配置Django项目的设置。确保在settings.py文件中配置了正确的数据库连接和其他项目设置。 6. 运行数据库迁移。使用`python manage.py migrate`命令来应用任何未应用的数据库迁移。 7. 收集静态文件。使用`python manage.py collectstatic`命令将静态文件(如CSS和JavaScript文件)收集到一个单独的目录中,以便Web服务器可以提供这些文件。 8. 配置Web服务器。根据你选择的Web服务器(如Nginx或Apache),配置服务器以将请求转发到Django应用程序。 9. 启动Web服务器并测试部署。启动Web服务器,并访问你的应用程序的URL以确保一切正常。 这些是部署Django项目的一般步骤。根据你的具体部署环境和需求,可能还需要进行其他配置和操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值