用户和平舰队 發表於 2019-10-22 16:19:00

nginx + uwsgi + debian + django部署

<h3 id="准备工作">准备工作</h3>
<ol>
<li><strong>我使用的不是本机系统,而是运行docker镜像库中的debian系统,因为后面还想研究一下,docker自动化部署相关内容,如果你想直接部署,可以跳过准备工作。</strong></li>
<li>下载docker替换镜像源,因为如果用docker自己的镜像源下载速度会很慢。根据操作系统的不同,大家可以自行百度,mac系统docker桌面版可以在prefrence daemon 的registry mirrors:</li>
<li>docker images 查看本地镜像</li>
<li>docker search debian 查找debian网络镜像</li>
<li>docker pull debian从第三步的结果中拉取想要的镜像</li>
<li>docker run --name mytest -p 0.0.0.0:8000:8081/tcp -it debian /bin/bash
<ul>
<li>--name 为容器取名字</li>
<li>-p 本机端口:容器端口</li>
<li>-it 交互</li>
</ul>
</li>
<li>docker ps 查看容器
<ul>
<li>-a 查看所有容器</li>
</ul>
</li>
<li>docker stop container_id 停止容器</li>
<li>Docker rm -v containerid 删除容器</li>
<li>将宿主机的项目拷贝到容器中:docker cp 宿主机中要拷贝的文件名及其路径 容器名:要拷贝到容器里面对应的路径</li>
</ol>
<h3 id="系统镜像">系统镜像</h3>
<ol>
<li>
<p>在容器中,同样要先更新一下debian的下载源</p>
</li>
<li>
<pre><code>sudo sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
</code></pre>
</li>
<li>
<p>安装nginx,python,pip</p>
</li>
</ol>
<h3 id="uwsgi运行">uWSGI运行</h3>
<ul>
<li>
<p>安装 pip3 install uwsgi</p>
</li>
<li>
<p>整理好自己的目录:到目前为止,你可以不需要顾忌django自己生成之外的文件目录结构,比如uwsgi_param应该放在哪里,uwsgi.ini应该放在哪里。只要你理解绝对路径和相对路径,能够找到配置文件里你的文件就可以。我自己是放在和manage.py同级目录里。</p>
</li>
<li>
<p>确保你的django项目在 python manage.py runserver时不会报错。</p>
</li>
<li>
<p>以下两个文件是运行uwsgi必须的文件</p>
</li>
</ul>
<ol>
<li>
<p>uwsgi_param</p>
<pre><code>uwsgi_paramQUERY_STRING       $query_string;
uwsgi_paramREQUEST_METHOD   $request_method;
uwsgi_paramCONTENT_TYPE       $content_type;
uwsgi_paramCONTENT_LENGTH   $content_length;

uwsgi_paramREQUEST_URI      $request_uri;
uwsgi_paramPATH_INFO          $document_uri;
uwsgi_paramDOCUMENT_ROOT      $document_root;
uwsgi_paramSERVER_PROTOCOL    $server_protocol;
uwsgi_paramREQUEST_SCHEME   $scheme;
uwsgi_paramHTTPS            $https if_not_empty;

uwsgi_paramREMOTE_ADDR      $remote_addr;
uwsgi_paramREMOTE_PORT      $remote_port;
uwsgi_paramSERVER_PORT      $server_port;
uwsgi_paramSERVER_NAME      $server_name;
</code></pre>
</li>
<li>
<p>uwsgi.ini</p>
<pre><code>
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
</code></pre>
</li>
<li>
<p>用uwsgi代替wsgi运行django</p>
<p>uwsgi --ini uwsgi.ini   // 写uwsgi.ini相对路径即可</p>
<p>出现: getting INI configuration from uwsgi.ini 说明运行成功</p>
<p>停止uwsgi服务命令:uwsgi --stop uwsgi.pid</p>
</li>
</ol>
<h3 id="nginx">nginx</h3>
<ol>
<li>
<p>apt-get nginx, 下载nginx ,输入nginx即可启动</p>
</li>
<li>
<p>关于nginx不能启动 ==》 在bash栏里输入nginx 根据提示修改配置文件</p>
</li>
<li>
<p>大家可以查看一下 /etc/nginx/nginx.conf 相关信息,第61,62行有两个include,分别是引入配置和生效文件的,我们等会自己配置的文件就要软连接(相当于快捷方式引入)到62行的位置里。所以</p>
<p>/etc/nginx/sites-enabled/ 里的所有文件都是你编辑后生效的,尽量不要有重复的,可能会覆盖不起作用</p>
</li>
<li>
<p>编写自己项目的nginx转发:</p>
<pre><code>
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;
    }
}

</code></pre>
</li>
<li>
<ul>
<li>/etc/init.d/nginx start (restart stop)</li>
</ul>
</li>
<li>
<p>注意:nginx转发,先要启动uwsgi,在uwsgi_pass中传入uwsgi填入的接口网址</p>
</li>
</ol>
<h3 id="可以完善的点">可以完善的点:</h3>
<ol>
<li>利用docker实现自动化部署,利用dockerfile和sh脚本,docker_compose.yaml,完成环境的安装。使你的包可以直接安装,不需要自己安装相关依赖环境。</li>
<li>nginx其他的一些功能,以及有media和static文件如何处理;按权重分发路由实现负载均衡等。</li>
<li>docker和nginx都是很大的点,在可以完成基本配置后,可以深入研究一下里面的一些其他实现功能。</li>
</ol><br><br>
来源:https://www.cnblogs.com/jimmyhe/p/11720504.html
頁: [1]
查看完整版本: nginx + uwsgi + debian + django部署