Django部署
程序员文章站
2022-06-11 11:38:33
...
在开发机上的准备工作:
- 确认项目没有bug。
- 用pip freeze > requirements.txt将当前环境的包导出到requirements.txt文件中,方便在部署的时候安装。
- 将项目上传到服务器上的/srv目录下。这里以git的形式为例。
git init
git remote add origin xxx.git
git add .
git commit -m first commit
git pull origin master --allow-unrelated-histories
git push origin master
在服务器上的准备工作:
- 安装好项目用到的Python。
sudo apt install python
sudo apt install python-pip
pip install --upgrade pip
- 安装virtualenv以及virutalenvwrapper。并创建虚拟环境。
pip install virtualenv
pip install virtualenvwrapper
sudo apt install vim
vim ~/.bashrc 进入文件中,填入以下两行代码后执行source ~/.bashrc:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
- 安装git:
sudo apt install git
- 为了方便 XShell 或者 CRT 连接服务器,建议安装OpenSSH:
sudo apt install openssh-server openssh-client
service ssh restart
- 安装MySQL服务器和客户端:
sudo apt install mysql-server mysql-client
sudo apt-get install libmysqld-dev
- 进入虚拟环境中,然后进入到项目所在目录,执行命令安装相应的包:
pip install -r requirements.txt
- 在mysql数据库中,创建相应的数据库。
- 将迁移文件,映射到数据库中,创建相应的表,执行命令:
python manage.py migrate
- 然后在你自己电脑上,在浏览器中输入http://你的服务器的 ip 地址:8000/,访问下网站所有页 面,确保所有页面都没有错误,执行命令:
python manage.py runserver 0.0.0.0:8000
- 设置ALLOW_HOST为你的域名,以及 ip 地址。
- 设置DEBUG=False,避免如果你的网站产生错误,而将错误信息暴漏给用户。
- 收集静态文件:python manage.py collectstatic。
安装 uwsgi
- uwsgi 是一个应用服务器,非静态文件的网络请求就必须通过他完成,他也可以充当静态文件服务器,但不是他的强项。uwsgi 是使用 python 编写的,因此通过pip install uwsgi就可以了。(uwsgi 必须安装在系统级别的 Python 环境中,不要安装到虚拟环境中)。
- 使用下面命令,用uwsgi启动项目,如果能够在浏览器中访问到这个页面,说明uwsgi可以加载项目了。
uwsgi --http :8000 --module zhiliaoketang.wsgi --vritualenv /root/.virtualenvs/django-env-py2。
编写 uwsgi 配置文件:
- 在项目的路径下面,创建一个文件叫做zhiliaoketang_uwsgi.ini的文件,然后填写以下代码:
[uwsgi]
#Django 相关的配置
#项目的路径(必须全部为绝对路径)
chdir = /srv/zhiliaoketang
#Django 的 wsgi 文件
module = zhiliaoketang.wsgi
#Python 虚拟环境的路径
home = /root/.virtualenvs/django-env-py2
#进程相关的设置
#主进程
master = true
#最大数量的工作进程
processes = 10
#socket 文件路径(绝对路径)(nginx与uwsgi通信产生的文件)
socket = /srv/zhiliaoketang/zhiliaoketang.sock
#设置socket的权限
chmod-socket = 666
#退出的时候是否清理环境
vacuum = true
#然后使用命令uwsgi --ini zhiliaoketang.ini,看下是否还能启动这个项目。
安装 nginx:
- nginx 是一个 web 服务器。用来加载静态文件和接收 http 请求的。通过以下命令即可安装(nginx本身就是一个守护进程不需要supervisor,uwsgi不是守护进程)。
sudo apt install nginx
- nginx常用命令:
启动:nginx:service nginx start
关闭:nginx:service nginx stop
重启:nginx:service nginx restart
收集静态文件:
- 静态文件应该让 nginx 来服务,而不是让 django 来做。首先确保你的settings.py文件中有一个STATIC_ROOT配置,这个配置应该指定你的静态文件要放在哪个目录下。那么我们可以执行以下命令:python manage.py collectstatic来收集所有静态文件,将这些静态文件放在指定的目录下。
编写nginx配置文件:
- 在/etc/nginx/conf.d目录下,新建一个文件,叫做zhiliaoketang.conf,然后将以下代码粘贴进去:
upstream zhiliaoketang {
#nginx与uwsgi通信产生的文件
server unix:///srv/zhiliaoketang/zhiliaoketang.sock;
}
#配置服务器
server {
#监听的端口号
listen 80;
#域名
server_name 192.168.0.101 zhiliaoketang.cn;
charset utf-8;
#最大的文件上传尺寸
client_max_body_size 75M;
#静态文件访问的 url
location /static {
#静态文件地址
alias /srv/zhiliaoketang/static_dist;
}
#最后,发送所有非静态文件请求到 django 服务器
location / {
uwsgi_pass zhiliaoketang;
#uwsgi_params 文件地址
include /etc/nginx/uwsgi_params;
}
}
- 写完配置文件后,为了测试配置文件是否设置成功,运行以下命令,如果不报错,说明成功。
service nginx configtest
- 每次修改完了配置文件,都要记得运行service nginx restart。
使用supervisor配置:
- 让supervisor管理uwsgi,可以在uwsgi发生意外的情况下,会自动的重启。
- supervisor的安装:在系统级别的 python 环境下pip install supervisor。
- 在项目的根目录下创建一个文件叫做zlkt_supervisor.conf,内容如下:
#supervisor 的程序名字(命名可以不与uwsgi保持一致)
[program:program_name]
#supervisor 执行的命令(以什么命令启动uwsgi)
command=uwsgi --ini zlkt_uwsgi.ini
#项目的目录
directory = /srv/zhiliaoketang
#开始的时候等待多少秒
startsecs=0
#停止的时候等待多少秒
stopwaitsecs=0
#自动启动uwsgi进程
autostart=true
#程序挂了后自动重启
autorestart=true
#输出的 log 文件(首先在文件目录下创建log文件夹)
stdout_logfile=/srv/zhiliaoketang/log/supervisord.log
#输出的错误文件
stderr_logfile=/srv/zhiliaoketang/log/supervisord.err
[supervisord]
#log 的级别
loglevel=info
#使用 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 代表服务端类似于 redisd、mysqld服务端):
supervisord -c zlkt_supervisor.conf
- 以后如果想要启动uwsgi,就可以通过命令(supervisorctl客户端):
supervisorctl -c supervisor.conf
- 进入到管理控制台,然后可以执行相关的命令进行管理:
status # 查看状态
start program_name # 启动程序
restart program_name # 重新启动程序
stop program_name # 关闭程序
reload # 重新加载配置文件
quit # 退出控制台
- 暴力方式关闭,不安全。
#查看服务端进程:
ps aux|grep supervisor
#杀死进程
kill -9 进程id
上一篇: NumPy库的介绍与使用教程
下一篇: Django部署