准备工作
- 我使用的不是本机系统,而是运行docker镜像库中的debian系统,因为后面还想研究一下,docker自动化部署相关内容,如果你想直接部署,可以跳过准备工作。
- 下载docker替换镜像源,因为如果用docker自己的镜像源下载速度会很慢。根据操作系统的不同,大家可以自行百度,mac系统docker桌面版可以在prefrence daemon 的registry mirrors:
- docker images 查看本地镜像
- docker search debian 查找debian网络镜像
- docker pull debian从第三步的结果中拉取想要的镜像
- docker run --name mytest -p 0.0.0.0:8000:8081/tcp -it debian /bin/bash
- --name 为容器取名字
- -p 本机端口:容器端口
- -it 交互
- docker ps 查看容器
- -a 查看所有容器
- docker stop container_id 停止容器
- Docker rm -v containerid 删除容器
- 将宿主机的项目拷贝到容器中:docker cp 宿主机中要拷贝的文件名及其路径 容器名:要拷贝到容器里面对应的路径
系统镜像
-
在容器中,同样要先更新一下debian的下载源
-
sudo sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
-
安装nginx,python,pip
uWSGI运行
-
安装 pip3 install uwsgi
-
整理好自己的目录:到目前为止,你可以不需要顾忌django自己生成之外的文件目录结构,比如uwsgi_param应该放在哪里,uwsgi.ini应该放在哪里。只要你理解绝对路径和相对路径,能够找到配置文件里你的文件就可以。我自己是放在和manage.py同级目录里。
-
确保你的django项目在 python manage.py runserver时不会报错。
-
以下两个文件是运行uwsgi必须的文件
-
uwsgi_param
uwsgi_param QUERY_STRING $query_string; uwsgi_param REQUEST_METHOD $request_method; uwsgi_param CONTENT_TYPE $content_type; uwsgi_param CONTENT_LENGTH $content_length; uwsgi_param REQUEST_URI $request_uri; uwsgi_param PATH_INFO $document_uri; uwsgi_param DOCUMENT_ROOT $document_root; uwsgi_param SERVER_PROTOCOL $server_protocol; uwsgi_param REQUEST_SCHEME $scheme; uwsgi_param HTTPS $https if_not_empty; uwsgi_param REMOTE_ADDR $remote_addr; uwsgi_param REMOTE_PORT $remote_port; uwsgi_param SERVER_PORT $server_port; uwsgi_param SERVER_NAME $server_name;
-
uwsgi.ini
[uwsgi] socket = 127.0.0.1:50000 chdir = /home/httpServer/ # 可以理解为此文件的绝对路径 wsgi-file = httpServer/wsgi.py # wsgi与chdir的相对路径 processes = 4 daemonize = /home/log/httpServer.log // 日志 pidfile = /tmp/uwsgi.pid master = True
-
用uwsgi代替wsgi运行django
uwsgi --ini uwsgi.ini // 写uwsgi.ini相对路径即可
出现:[uWSGI] getting INI configuration from uwsgi.ini 说明运行成功
停止uwsgi服务命令:uwsgi --stop uwsgi.pid
nginx
-
apt-get nginx, 下载nginx ,输入nginx即可启动
-
关于nginx不能启动 ==》 在bash栏里输入nginx 根据提示修改配置文件
-
大家可以查看一下 /etc/nginx/nginx.conf 相关信息,第61,62行有两个include,分别是引入配置和生效文件的,我们等会自己配置的文件就要软连接(相当于快捷方式引入)到62行的位置里。所以
/etc/nginx/sites-enabled/ 里的所有文件都是你编辑后生效的,尽量不要有重复的,可能会覆盖不起作用
-
编写自己项目的nginx转发:
upstream django { // 配置好被转发到哪个端口 # server unix:///home/abc/uwsgi-tutorial/mysite/mysite.sock; # for a file socket server 0.0.0.0:3032; # for a web port socket (we'll use this first) } server { # the port your site will be served on listen 8002; // nginx负责监听的端口 # the domain name it will serve for server_name localhost; # substitute your machine's IP address or FQDN charset utf-8; # max upload size client_max_body_size 75M; # adjust to taste # Finally, send all non-media requests to the Django server. location / { uwsgi_pass django; // 转发的路由 include /root/sxx_system/uwsgi_params; } }
-
- /etc/init.d/nginx start (restart stop)
-
注意:nginx转发,先要启动uwsgi,在uwsgi_pass中传入uwsgi填入的接口网址
可以完善的点:
- 利用docker实现自动化部署,利用dockerfile和sh脚本,docker_compose.yaml,完成环境的安装。使你的包可以直接安装,不需要自己安装相关依赖环境。
- nginx其他的一些功能,以及有media和static文件如何处理;按权重分发路由实现负载均衡等。
- docker和nginx都是很大的点,在可以完成基本配置后,可以深入研究一下里面的一些其他实现功能。