在开发机上的准备工作:
- 确认项目没有bug。
- 用pip freeze > requirements.txt将当前环境的包导出到requirements.txt文件中,方便在部署的时候安装。
- 将项目上传到服务器上的/srv目录下。这里以git的形式为例。
git initgit remote add origin xxx.gitgit add .git commit -m first commitgit pull origin master --allow-unrelated-historiesgit push origin master
在服务器上的准备工作:
- 安装好项目用到的Python。
sudo apt install pythonsudo apt install python-pippip install --upgrade pip
- 安装virtualenv以及virutalenvwrapper。并创建虚拟环境。
pip install virtualenvpip install virtualenvwrappersudo apt install vimvim ~/.bashrc 进入文件中,填入以下两行代码后执行source ~/.bashrc:export WORKON_HOME=$HOME/.virtualenvssource /usr/local/bin/virtualenvwrapper.sh
- 安装git:
sudo apt install git
- 为了方便 XShell 或者 CRT 连接服务器,建议安装OpenSSH:
sudo apt install openssh-server openssh-clientservice ssh restart
- 安装MySQL服务器和客户端:
sudo apt install mysql-server mysql-clientsudo 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;#静态文件访问的 urllocation /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 = adminpassword = 123[inet_http_server]#supervisor 的服务器port = :9001#用户名和密码username = adminpassword = 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