学习笔记,仅供参考
文章目录
- 项目部署
项目部署
我们在软件开发完毕后,会把开发版的软件安装到服务器上长期运行.
项目部署的几个步骤
- 在服务器上安装和配置与开发阶段同版本的数据库;
- django项目迁移(在服务器上配置与开发环境相同的python版本及依赖的包);
- 用
uwsgi
替代python manage.py runserver
方法启动服务器; - 配置
nginx
反射代理服务器; - 用
nginx
配置静态文件路径,解决静态路径问题。
安装同版本的数据库(略)
django项目迁移
安装python
- Linux
sudo apt install python3
安装相同版本的包
- windows
导出当前模块数据包的信息:
pip freeze > requirements.txt
导入到另一台新主机:
pip install -r requirements.txt
- Linux
导出当前模块数据包的信息:
pip3 freeze > package_list.txt
导入到另一台新主机:
pip3 install -r package_list.txt
将当前项目源代码复制到运程主机上(scp 命令)
- Linux
sudo scp -a 当前项目路径 远程主机地址和文件夹路径
#比如
sudo scp -a /home/goatbishop/mywebsite root@12.34.56.78/root/mydjango/
ssh远程登录云主机
ssh root@darkgoat.cn
uWSGI 网关接口配置
WSGI规范
- WSGI (Web Server Gateway Interface)是Python应用程序或框架和Web服务器之间的一种接口规范(接口就是函数或对象);
- WSGI 实现了WSGI协议、http等协议。
uWSGI网关接口配置
python manage.py runserver
通常只在开发和测试环境中使用,当开发结束后,完善的项目代码需要在一个高效稳定的环境中运行,这时可以使用uWSGI.
uWSGI是WSGI规范的一种实现方式,它可以让Django、Flask等开发的web站点运行在其中。
安装uWSGI
- Linux
sudo pip3 install uwsgi
- Windows
pip install uwsgi
在Windows下pip会报出AttributeError: module 'os' has no attribute 'uname
’错误,这里是解决办法Windows系统安装uWSGI报错
配置uWSGI(这里我用Windows演示)
在我们的项目文件夹下创建一个uwsgi.ini
文件,在这个文件中敲入如下代码:
[uwsgi]
#套接字方式的 IP地址:端口号
socket=127.0.0.1:8000
#Http通信方式的 IP地址:端口号
http=127.0.0.1:8000
#当前项目工作目录(绝对路径)
chdir=F:/MyStudio/PythonStudio/goatbishop.project01/Django/mywebsite_bookstore
#项目中wsgi.py文件的目录,相对路径,相对于当前工作目录
wsgi-file=mywebsite_bookstore/wsgi.py
#进程个数
process=4
#每个进程的线程个数
threads=2
#服务的pid记录文件
pidfile=uwsgi.pid
#服务的目志文件位置(在代码中用print打印的信息)
daemonize=uwsgi.log
配置完uwsgi.ini,我们再配置settings.py,将DEBUG改为False,并将ALLOWED_HOSTS列表中增加'*'
:
DEBUG = False
ALLOWED_HOSTS = ['*']
#表示允许所有人访问网站
#若列表中只填入'192.168.1.*'则表示只有这个网段才能访问咱们的网站
#注意这个*有点正则的意思
进行上面一系列配置之后,我们再用python manage.py runserver开启服务,并向网站发起请求(故意填一个无法访问的url),就看不到调试信息了:
如果我们没有对settings.py进行配置,也就是处于开发调试阶段,那么我们向http://127.0.0.1:8000/asdfg发出请求,我们是会看到如下页面的:
uWSGI的运行管理(Linux)
- Linux
启动uwsgi:
cd 项目文件夹
sudo uwsgi --ini 项目文件夹/uwsgi.ini
停止uwsgi:
cd 项目文件夹
sudo uwsgi --stop uwsgi.pid
- Windows
启动uwsgi:
cd 项目文件夹
uwsgi --ini 项目文件夹/uwsgi.ini
停止uwsgi:
cd 项目文件夹
uwsgi --stop uwsgi.pid
- 注意事项
当uwsgi 启动后,当前django项目的程序就会变成后台守护进程,关闭当前终端时,此进程也不会停止。
nginx 反射代理配置
nginx是轻量级的高性能Web服务器,提供了诸如HTTP代理和反向代理、负载均衡、缓存等一系列重要特性,在实践之中使用广泛,它是使用C语言编写,执行效率高
- nginx作用
- 负载均衡, 多台服务器轮流处理请求
- 反射代理
- 反射代理图示(nginx服务器可以通过区分路由类型,把路由指向不同的服务器进行处理)
nginx安装
- Linux
sudo apt install nginx
- windows
安装配置教程:Nginx Windows详细安装部署教程
nginx配置(Linux)
现在,我们要修改nginx 的配置文件/etc/nginx/sites-available/default
打开配置文件:
sudo vim /etc/nginx/sites-available/default
修改配置文件:
#在server节点下添加新的location项,指向uwsgi的ip与端口
server {
...
location / {
uwsgi_pass 127.0.0.1:8000;
# 将/路由,映射到uwsgi的127.0.0.1:8000
include /etc/nginx/uwsgi_params;
#将所有的参数转到uwsgi下
}
...
}
每次修改完该文件后,我们都需要重启nginx
重启nginx:
sudo /etc/init.d/nginx restart
修改uWSGI配置
修改项目文件夹/uwsgi.ini
下的http通信方式改为socket通信方式:
[uwsgi]
# 去掉如下
# http=127.0.0.1:8000
# 改为
socket=127.0.0.1:8000
重启uWSGI服务(Linux)
sudo uwsgi --stop uwsgi.pid
sudo uwsgi --ini 项目文件夹/uwsgi.ini
nginx的操作(Linux)
- 启动 nginx
-
sudo /etc/init.d/nginx start
-
sudo service nginx restart
- 查看nginx进程
-
ps aux | grep nginx
-
sudo /etc/init.d/nginx status
-
sudo service nginx status
- 停止nginx
-
sudo /etc/init.d/nginx stop
-
sudo service nginx stop
- 重启nginx
-
sudo /etc/init.d/nginx restart
-
sudo service nginx restart
nginx 配置静态文件路径(Linux)
对于settings.py中静态文件的路径STATICFILES_DIRS,只在调试阶段有效,在网站运行模式(DEBUF=False)下无效,这时,我们需要再次进行配置。
在/etc/nginx/sites-available/default文件中,我们进行如下配置:
# file : /etc/nginx/sites-available/default
server {
...
location /static {
root 项目文件夹的绝对路径;
# 将/static路由, 映射到本地主机的项目文件夹下(绝对路径)
}
...
}
记得修改完该文件,重启nginx