Web 原理
服务和协议
- Nginx
- 高性能的代理服务
- 接收到客户端发送过来的HTTP请求和WebSocket请求
- 响应静态文件请求和转发动态请求
- WSGI:用在Python Web框架编写的应用程序和web服务器之间的规范(Django和uWSGI之间)
- uWSGI
- 是一个web服务器
- 实现了
WSGI/uwsgi/HTTP
等协议 - 用于接受Nginx转发的动态请求,并处理后发送给Python应用程序
- uwsgi
- 是uWSGI服务器实现的独有的协议
- 用于Nginx服务与uWSGI服务的通信规范
Nginx + Tornado 部署 Django 应用
- Django自带的uWSGI服务对静态文件的处理能力不太好 ==> Nginx
- Tornado:实现了WSGI接口规范的uWSGI服务器,而且是一个支持高并发的异步框架
- 把Django框架实现的uWSGI服务,放到Tornado应用中,然后再不同端口上,启动多个Tornado进程
- 让Nginx把客户端放过来的请求,转发到不同的Tornado进程上
# 安装Nginx
yum install -y nginx
# 在虚拟环境中安装Tornado
pip install tornado==6.0.2
# 修改Nginx的配置文件
vim /etc/nginx/nginx.conf
Apache mod_wsgi部署Django应用
yum install httpd httpd-devel
systemctl restart httpd # Apache:默认使用的也是80端口,要先关闭Ningx
systemctl stop nginx
pkill python # 关闭所有Python进程
systemctl stop redis
坑
Apache会默认使用Python2.7,这里需要重新编译Python的虚拟环境:
./configure --prefix=/root/.local/share/virtualenvs/zanhu-qCBWC6o/ --enable-shared
make && make install
find / -name libpython3.7m.so.1.0 # 找到虚拟环境中的这个文件,复制到 /usr/lib64
cp /root/.local/share/virtualenvs/zanhu-qCBWC6o/lib/libpython3.7m.so.1.0 /usr/lib64
pip install mod_wsgi # 最后在安装mod_wsgi
mod_wsgi-express install-module # 导出要安装的模块
- 复制到226
- 修改95行
touch /etc/httpd/conf.d/django.conf
# 要添加cache文件夹的访问权限
cd /var/log/httpd # 这里又Apache的各类日志文件
Nginx Gunicorn Daphne部署Django Channels应用
- 使用Gunicorn 服务处理HTTP请求
- 使用Daphne 处理WebSocket请求
- 通过配置Nginx反向代理
- 将HTTP协议的动态请求,转发给符合WSGI接口规范的Gunicorn服务器
- 将WebSOcket的请求,转发给符合ASGI接口规范的Daphne 服务器
- 使用supervisor管理Gunicorn、Daphne、Celery、Elasticsearch
groupadd zanhu # 创建zanhu用户组
useradd zanhu # 创建zanhu用户
useradd -m zanhu -g zanhu # 将zanhu用户添加到zanhu用户组
passwd zanhu # 设置zanhu用户的密码
chmod +x /home/zanhu # 给zanhu用户添加家目录的读取权限
yum install update
yum install python-devel zlib-devel mysql-devel libffi-devel bzip2-devel openssl-devel java gcc wget
yum install -y nginx redis supervisor git
# 设置服务开机自启
systemctl enable redis nginx mysqld supervisord
# 编译Python环境的时候
# 在后面添加 enalbe-optimizations :编译优化(Python运行会比较快,但是make&&make install 会比较慢)
# 校验环境
python -V
pip3 -V
# 收集覆盖静态文件
python3 manage.py collecstatic
# 启动gunicorn
/usr/local/python3/bin/gunicorn --env DJANGO_SETTINGS_MODULE=config.settings.production -b 127.0.0.0:9001 --chdir /home/zanhu/zanhu config.wsgi
# 启动daphne
/usr/local/python3/bin/daphne -p 8000 config.asgi:application
# 启动elasticsearch
./elasticsearch/bin/elasticsearch
# 启动celery
/usr/local/python3/bin/celery --work=/home/zanhu/zanhu -A zanhu.taskapp worker -l info
评论区