本地部署
uWSGI
在部署之前,我们得先了解几个概念
-
wsgi web应用程序之间的接口。它的作用就像是桥梁,连接在web服务器和web应用框架之间。
-
uwsgi 是一种传输协议,用于定义传输信息的类型。
-
uWSGI 是实现了uwsgi协议WSGI的web服务器。
Django运行流程
Django部署基础流程图
nginx基础概念
Nginx: 支持高并发,高性能web服务器
正向代理:具体知道目标,代理客户端,目标用户不知道客户端,例如访问国外网站反向代理:不知道具体目标,只知道一个地址,代理服务器,例如访问百度网站
负载均衡:让每台服务器受的压力是一样的,轮询机制
配置Settings文件
DEBUG = False # 关闭debug调试
ALLOWED_HOSTS = ['*'] # 允许任何域方法
收集静态文件
# 静态文件
STATIC_URL = '/static/'
# 注释掉
#STATICFILES_DIRS = [
# os.path.join(BASE_DIR, 'static')
#]
STATIC_ROOT = os.path.join(BASE_DIR,'static/') # 添加这行代码
# 收集静态文件命令,会在<项目路径>/static 下看见admin文件,里面收集了静态资源
python manage.py collectstatic
安装uwsgi
pip install uwsgi
新建uwsgi.ini配置文件
#添加配置选择
[uwsgi]
#配置和nginx连接的socket连接
socket = 127.0.0.1:8000
#配置项目路径,项目的所在目录 (注意:修改你自己路径)
chdir = /Desktop/1907/test/test_common
#配置wsgi接口模块文件路径 (注意:修改你自己路径)
wsgi-file = test_common/wsgi.py
#配置启动的进程数
processes = 4
#配置每个进程的线程数
threads = 2
#配置启动管理主进程
master = True
#配置存放主进程的进程号文件
pidfile = uwsgi.pid
#配置dump日志记录
daemonize = uwsgi.log
# 虚拟环境(注意:修改你自己路径)
virtualenv = /home/ubuntu/.virtualenvs/django_env
启动uwsgi
uwsgi --ini uwsgi.ini
重启uwsgi
uwsgi --reload uwsgi.pid
关闭uwsgi
uwsgi --stopu uwsgi.pid
安装nginx
- ubuntu
sudo apt install nginx
- Mac
xcode-select --install
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install nginx
配置nginx
vim /etc/nginx/nginx.conf
user www-data;改成 user root;
注意:在nginx.conf 文件中会看到http {...}等信息,下面的代码一定要拷贝到http {...}大括号里面,根据下面提示更改你自己的文件路径即可
# configuration of the server
server {
# 你的网站监听的端口,此处先用8000端口测试,正式部署可以改为80或其他
listen 80;
# 你的网站的域名,或者你的服务器公网ip(注意更改你自己的ip)
server_name *.com; # substitute your machine's IP address or FQDN
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django media
location /media {
alias /home/mysite/media; # 你的media的文件目录(注意更改你自己的文件路径)
}
# Django static
location /static {
alias /home/mysite/static; # 你的项目收集的静态文件目录(后边会将收集静态文件)(注意更改你自己的文件路径)
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass 127.0.0.1:8000;
include uwsgi_params; # uwsgi_params 文件所在目录
}
}
启动nginx服务器
/etc/init.d/nginx start
重启nginx服务器
/etc/init.d/nginx restart
停止nginx服务器
/etc/init.d/nginx stop
远程部署(Ubuntu举例)
ssh root@ip
#ssh root@39.105.46.49
更新服务器
sudo apt update
sudo apt upgrade
安装pip3
sudo apt install python3-pip
安装虚拟环境
sudo pip3 install virtualenv
sudo pip3 install virtualenvwrapper
配置文件.bashrc
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
source .bashrc
安装Mysql
sudo apt install mysql-server
安装Nginx
sudo apt install nginx
安装依赖
# 从本地项目所需要安装的依赖包重定向requirement.txt文件中,自己挑选有用的包
pip freeze > requirements.txt
# 把requirements.txt上传到服务器,执行安装
pip install -r requirements.txt
pip install uwsgi
上传代码
Mac或者Ubuntu可以用scp
scp -r xxx.zip root@39.99.142.133:/root
Windows可以用winscp
或者可以用git(推荐)
错误解决
如果遇到静态资源报403错误,把nginx配置文件
user www-data;改成 user root;
现在就可以输入你的IP或域名访问你的网站了,快去试试吧
其他相关说明
查看进程
ps -aux | grep uwsgi
ps -aux | grep nginx
killall -9 uwsgi # 关闭uwsgi服务器
killall -9 nginx # 关闭nginx服务器
只要一改uwsgi.ini配置文件,需要重启uwsgi服务器
只要一改nginx.conf配置文件,需要重启Nginx服务器
uwsgi --ini uwsgi.ini # 启动uwsgi服务器
uwsgi --reload uwsgi.pid # 重启uwsgi服务器
uwsgi --stopu uwsgi.pid # 关闭uwsgi服务器
/etc/init.d/nginx restart # 重启nginx服务器
/etc/init.d/nginx start # 启动nginx服务器
/etc/init.d/nginx stop # 停止nginx服务器
cat /var/log/nginx/error.log # 查看nginx错误日志
cd <uwsgi.ini配置文件所在的路径>
cat uwsgi.log # 查看uwsgi的错误日志