星空城的全能战士 發表於 2020-1-12 23:03:00

Django项目在Linux服务器上部署和躺过的坑

<h2>  引言</h2>
<p>  在各方的推荐下,领导让我在测试环境部署之前开发的测试数据预报平台。那么问题来了,既然要在服务器上部署,</p>
<p>就需要准备:</p>
<p>1.linux服务器配置</p>
<p>2.linux安装python环境搭建与配置</p>
<p>3.项目依赖的库</p>
<p>4.uwsgi安装与配置</p>
<p>5.nginx安装与配置</p>
<p>&nbsp;</p>
<h2>  环境安装</h2>
<p><span style="color: rgba(255, 0, 0, 1)">备注:以下所有操作都在root权限下进行,如果没有linux的root权限,找运维或者相关人员开通。</span></p>
<p><span style="color: rgba(0, 0, 0, 1)">1.更新系统软件包</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> yum update -y</span></pre>
</div>
<p>2.安装软件管理包和可能使用的依赖</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">yum -y groupinstall "Development tools"</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel</span></pre>
</div>
<p><strong><span style="color: rgba(255, 0, 0, 1)">敲黑板:centos安装python3.7时遇到如下问题,查阅知需要的openssl版本最低为1.0.2,但是centos 默认的为1.0.1,所以需要重新更新openssl</span></strong></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">import</span> _ssl       <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> if we can't import it, let the error propagate</span>
ImportError: No module named _ssl</pre>
</div>
<p>3.安装依赖库</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> yum install -y zlib zlib-dev openssl-devel sqlite-devel bzip2-devel libffi libffi-devel gcc gcc-c++</span></pre>
</div>
<p>4.安装最新版本的openssl&nbsp;注意!openssl配置是用config,而不是configure,另外openssl编译安装依赖zlib动态库,所以一定要shared zlib&nbsp;<em><em><em>自行到官网查阅最新版本~</em></em></em></p>
<div class="cnblogs_code">
<pre>wget http://www.openssl.org/source/openssl-1.1.1<span style="color: rgba(0, 0, 0, 1)">.tar.gz
tar </span>-zxvf openssl-1.1.1<span style="color: rgba(0, 0, 0, 1)">.tar.gz
cd openssl</span>-1.1.1<span style="color: rgba(0, 0, 0, 1)">
.</span>/config --prefix=$HOME/<span style="color: rgba(0, 0, 0, 1)">openssl shared zlib
make </span>&amp;&amp; make install</pre>
</div>
<p><strong><span style="color: rgba(255, 0, 0, 1)">敲黑板:安装python前一定要先安装ssl,不然后面pip使用不了。</span></strong></p>
<p><span style="color: rgba(0, 0, 0, 1)">5.设置环境变量LD_LIBRARY_PATH</span></p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre>echo <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/openssl/lib</span><span style="color: rgba(128, 0, 0, 1)">"</span> &gt;&gt; $HOME/<span style="color: rgba(0, 0, 0, 1)">.bash_profile
source $HOME</span>/.bash_profile</pre>
</div>
<p>&nbsp;</p>
<div>
<div>这一步一定要有!!LD_LIBRARY_PATH环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。当执行函数动态链接.so时,如果此文件不在缺省目录下‘/lib' and ‘/usr/lib',那么就需要指定环境变量LD_LIBRARY_PATH</div>
</div>
<div>6.解压python3.7,并安装,一定要指定刚才安装的1.1.1版本的openssl!!!</div>
<div><strong><span style="color: rgba(255, 0, 0, 1)">敲黑板:这里安装python后面一定要指定--with-openssl=$HOME/openssl ,其中$HOME就是/root目录</span></strong></div>
<div>
<div class="cnblogs_code">
<pre>tar -zxvf Python-3.7<span style="color: rgba(0, 0, 0, 1)">.0.tgz
.</span>/configure --prefix=$HOME/Py37 --with-openssl=$HOME/<span style="color: rgba(0, 0, 0, 1)">openssl
make </span>&amp;&amp;<span style="color: rgba(0, 0, 0, 1)"> make install
echo $HOME</span></pre>
</div>
<p>7.至此python3.7就安装完了,来检验下ssl模块能否被导入吧:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> echo $HOME</span>
/<span style="color: rgba(0, 0, 0, 1)">root
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> cd /root/Py37/</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> ls</span>
<span style="color: rgba(0, 0, 0, 1)">binincludelibshare
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> cd bin/</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> ls</span>
2to3      easy_install-3.7idle3.7pip3    pydoc3    python3    python3.7-configpython3.7m-<span style="color: rgba(0, 0, 0, 1)">configpyvenv      virtualenv
2to3</span>-3.7idle3             pip      pip3.7pydoc3.7python3.7python3.7m      python3-config   pyvenv-3.7<span style="color: rgba(0, 0, 0, 1)">
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> ./python3</span>
Python 3.7.0 (default, Jan 12 2020, 03:54:25<span style="color: rgba(0, 0, 0, 1)">)
on linux
Type </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">help</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">copyright</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">credits</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(0, 0, 255, 1)">or</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">license</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> more information.
</span>&gt;&gt;&gt; <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> ssl
</span>&gt;&gt;&gt; <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> _ssl
</span>&gt;&gt;&gt; </pre>
</div>
<p>已经验证没有报错。</p>
<p>如果没有按照步骤安装,将出现:</p>
<div class="cnblogs_code">
<pre>&gt;&gt;&gt; <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> ssl
Traceback (most recent call last):
File </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">&lt;stdin&gt;</span><span style="color: rgba(128, 0, 0, 1)">"</span>, line 1, <span style="color: rgba(0, 0, 255, 1)">in</span> &lt;module&gt;<span style="color: rgba(0, 0, 0, 1)">
File </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">D:\Anaconda\lib\ssl.py</span><span style="color: rgba(128, 0, 0, 1)">"</span>, line 98, <span style="color: rgba(0, 0, 255, 1)">in</span> &lt;module&gt;
    <span style="color: rgba(0, 0, 255, 1)">import</span> _ssl             <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> if we can't import it, let the error propagate</span>
ModuleNotFoundError: No module named <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">_ssl</span><span style="color: rgba(128, 0, 0, 1)">'</span>
&gt;&gt;&gt;</pre>
</div>
<p>最后使用pip安装其他包会出现:</p>
<p><img src="https://img2018.cnblogs.com/blog/782587/202001/782587-20200112224055445-591129316.jpg" alt=""></p>
<p>这里是个坑,所以在此讲一下,可能有人会遇到。接下来继续讲</p>
<p>8.python安装好后,要创建软链接,你若要不知道python的位置在哪儿可以这样</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> whereis python</span>
python: /usr/bin/python /usr/bin/python2.7 /usr/bin/python.bak /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /usr/local/python /usr/share/man/man1/python.1.gz</pre>
</div>
<p>查看软链接指向</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> cd /usr/bin/</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> ll python*</span>
lrwxrwxrwx. 1 root root    7 2月   7 09:30 python -&gt;<span style="color: rgba(0, 0, 0, 1)"> python2
lrwxrwxrwx. </span>1 root root    9 2月   7 09:30 python2 -&gt; python2.7
-rwxr-xr-x. 1 root root 7136 8月   4 2017 python2.7</pre>
</div>
<div>
<div>可以看到,python指向的是python2,python2指向的是python2.7,因此我们可以装个python3,然后将python指向python3,然后python2指向python2.7,那么两个版本的python就能共存了。</div>
</div>
<div>添加python软链接</div>
<div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">将原来的链接备份
mv </span>/usr/bin/python /usr/bin/<span style="color: rgba(0, 0, 0, 1)">python.bak

添加python3的软链接
ln </span>-s /root/Py37/bin/python3.7 /usr/bin/<span style="color: rgba(0, 0, 0, 1)">python

测试是否安装成功了
python </span>-V</pre>
</div>
<p>添加pip软链接</p>
<div class="cnblogs_code">
<pre>ln -s /root/Py37/bin/pip3.7 /usr/bin/<span style="color: rgba(0, 0, 0, 1)">pip

<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> ll pip*</span>
lrwxrwxrwx1 root root 21 Jan 12 04:03 pip -&gt; /root/Py37/bin/pip3.7</pre>
</div>
<p>9.安装virtualenv ,建议大家都安装一个virtualenv,方便不同版本项目管理</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> pip3 install virtualenv</span></pre>
</div>
<p>10.建立软链接</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> ln -s /root/Py37/bin/virtualenv /usr/bin/virtualenv</span></pre>
</div>
<p>&nbsp;11.安装成功在根目录下建立两个文件夹,主要用于存放env和网站文件的。(个人习惯,其它人可根据自己的实际情况处理),建立文件夹是切换到根目录。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> mkdir -p /www/env</span>
<span style="color: rgba(0, 128, 128, 1)">2</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> mkdir -p /www/wwwroot</span></pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/782587/202001/782587-20200113225653154-1309536728.png" alt=""></p>
<p>&nbsp;</p>
<p>12.切换到/www/env/下,创建指定版本的虚拟环境,为python3指定虚拟环境,因为虚拟环境也可以有多个。</p>
<div class="cnblogs_code">
<pre>virtualenv --python=/usr/bin/<span style="color: rgba(0, 0, 0, 1)">python3 mysite
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">mysite是我项目名称</span></pre>
</div>
<p>例如:<img src="https://img2018.cnblogs.com/blog/782587/202001/782587-20200113225933984-111576033.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>13.然后进入/www/env/mysite/bin ,启动虚拟环境:</p>
<div class="cnblogs_code">
<pre>(mysite) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> source mysite/bin/activate</span></pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/782587/202001/782587-20200113230037530-1613032055.png" alt=""></p>
<p>&nbsp;</p>
<p>注意:有个括号里面并且是之前设置的名称,证明你已经成功进入虚拟环境</p>
<p><span style="background-color: rgba(255, 153, 0, 1)"><strong>以上环境是基本上搭建完成了,如有遗漏请留言,后续补充。</strong></span></p>
<p><span style="background-color: rgba(255, 153, 0, 1)"><strong>接下来就是项目部署与配置</strong></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>  项目部署</h2>
</div>
<div>
<p><strong><span style="background-color: rgba(255, 153, 0, 1); color: rgba(255, 0, 0, 1)"><span style="background-color: rgba(255, 255, 255, 1)">敲黑板:django项目部署启动方式有很多种,这里我只讲三种最基本的,如有更快捷的方式请留言,感激不尽!</span></span></strong></p>
<h2>  原始启动</h2>
<p>1. 简单粗暴</p>
<p>项目开发完毕,在部署之前需要再配置文件中将&nbsp;ALLOWED_HOSTS配置设置为:当前服务器IP或*,如:</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre>ALLOWED_HOSTS = [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">*</span><span style="color: rgba(128, 0, 0, 1)">"</span>,]</pre>
</div>
<p>然后将源码上传至服务器指定目录,如:/data/ ,然后执行命令来运行:</p>
<p>注: 上传命令: scp /Users/wupeiqi/PycharmProjects/oldboy-1.zip root@192.168.10.33:/data/</p>
<p>可以在windows安装git,然后使用scp,windows自带的命令不支持。</p>
<p>解压,进入目录并执行以下命令:</p>
<div class="cnblogs_code">
<pre>python3 mange.py runserver 0.0.0.0:8000</pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/782587/202001/782587-20200113231633496-327727082.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>  Uwsgi启动Django项目</h2>
<p>1. Uwsgi</p>
<p>先简单了解一下uwsgi,uWSGI:是一个web服务器,实现了WSGI协议、uwsgi协议、http协议等。它是线路协议,是实现服务器与其他网络服务器通信的协议,可以看作Tomcat。</p>
<p>Django框架运行依赖wsgi(本质提供socket服务端),众多模块实现了wsgi规范,而django框架中默认使用wsigiref模块来实现,他由于性能比较低,所以用于本地开发和测试,而线上部署时需要使用uwsgi来代替。</p>
<p>2.安装uwsgi</p>
<div class="cnblogs_code">
<pre>pip3 install uwsgi</pre>
</div>
<p>3.在服务器上编写一个Python文件:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> application(env, start_response):
    start_response(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">200 OK</span><span style="color: rgba(128, 0, 0, 1)">'</span>, [(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Content-Type</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">text/html</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)])
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> </pre>
</div>
<p>在服务器上执行命令启动Web服务器:</p>
<div class="cnblogs_code">
<pre>uwsgi --http :9001 --wsgi-<span style="color: rgba(0, 0, 0, 1)">file app.py
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 或</span>
uwsgi --http :9002 --wsgi-file foobar.py --master --processes 4</pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/782587/202001/782587-20200113232957610-592845749.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2018.cnblogs.com/blog/782587/202001/782587-20200113233032386-1545239460.png" alt=""></p>
<p>&nbsp;</p>
<p><strong><span style="color: rgba(255, 0, 0, 1)">敲黑板:这里使用http的,并且ip地址是服务器的ip,本机访问,需要加上端口号,如访问不了,请确保命令中的端口是否被占用!</span></strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>4.Django项目使用uswgi启动</p>
<p>在项目的根目录下,也就是manage.py同级目录下,新建一个"&nbsp;uwsgi.ini&nbsp;"文件。文件名可以随便,但扩展名必须是"<strong>.</strong>ini"</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> socket = 192.168.1.2:8000                  <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">应用服务IP端口</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> chdir = /pyvenv/src/eduonline            <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">项目根目录</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> module = eduonline.wsgi                <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">指定wsgi模块,与Nginx连接时用</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">http = IP:Port                            #web服务IP端口,uWSGI做web服务器时用</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> master = true                              <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">进程</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> processes = 4                              <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">进程数</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">vhost = true                              #多站模式</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">no-site = true                            #多站模式时不设置入口模块和文件</span>
<span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">workers = 2                               #子进程数</span>
<span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">reload-mercy = 10</span>
<span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">vacuum = true                           #退出、重启时清理文件</span>
<span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">max-requests = 1000</span>
<span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">limit-as = 512</span>
<span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">buffer-size = 30000</span>
<span style="color: rgba(0, 128, 128, 1)">17</span>
<span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">进程文件,新建空文件即可,用于服务重启、停止。如:</span>
<span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">重启指令:uwsgi --restart </span>
<span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">停止指令:uwsgi --stop </span>
<span style="color: rgba(0, 128, 128, 1)">21</span> pidfile = /pyvenv/src/eduonline/<span style="color: rgba(0, 0, 0, 1)">uwsgi.pid      
</span><span style="color: rgba(0, 128, 128, 1)">22</span> daemonize = /pyvenv/src/eduonline/uwsgi.log   <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">日志文件,一般会自动创建</span>
<span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">disable-logging = true                         #不记录正常信息,只记录错误信息</span></pre>
</div>
<p>类似版本:</p>
<div class="cnblogs_code"><img id="code_img_closed_8a9e62c3-f5d4-4791-aff0-5d7f10fcdaa3" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_8a9e62c3-f5d4-4791-aff0-5d7f10fcdaa3" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_8a9e62c3-f5d4-4791-aff0-5d7f10fcdaa3" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">项目的根目录</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> chdir = /home/my_project/<span style="color: rgba(0, 0, 0, 1)">django_demo
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">项目的对接wsgi.pi文件</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> module =<span style="color: rgba(0, 0, 0, 1)"> django_demo.wsgi:application
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">项目执行的变口号,和nginx配置的要一致</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> socket = 127.0.0.1:8000
<span style="color: rgba(0, 128, 128, 1)">10</span>
<span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">是否以主进程模式允许</span>
<span style="color: rgba(0, 128, 128, 1)">12</span> master =<span style="color: rgba(0, 0, 0, 1)"> true
</span><span style="color: rgba(0, 128, 128, 1)">13</span>
<span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">开启的工作进程数量</span>
<span style="color: rgba(0, 128, 128, 1)">15</span> processes=4   
<span style="color: rgba(0, 128, 128, 1)">16</span>
<span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">日志文件路径,前提是该文件要存在,且可写</span>
<span style="color: rgba(0, 128, 128, 1)">18</span> daemonize = /home/my_project/django_demo/<span style="color: rgba(0, 0, 0, 1)">run.log
</span><span style="color: rgba(0, 128, 128, 1)">19</span>
<span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">表示不记录正常信息,只记录错误信息,否则你的日志可能很快就爆满</span>
<span style="color: rgba(0, 128, 128, 1)">21</span> disable-logging =<span style="color: rgba(0, 0, 0, 1)"> true
</span><span style="color: rgba(0, 128, 128, 1)">22</span>
<span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">当服务器退出的时候自动清理环境</span>
<span style="color: rgba(0, 128, 128, 1)">24</span> vacuum =<span style="color: rgba(0, 0, 0, 1)"> true
</span><span style="color: rgba(0, 128, 128, 1)">25</span>
<span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">进程信息文件路径(这里指项目的根目录)</span>
<span style="color: rgba(0, 128, 128, 1)">27</span> pidfile=%(chdir)/uwsgi.pid</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p><strong><span style="color: rgba(255, 0, 0, 1)">敲黑板:这里有个坑,如果单纯把uwsgi作为web服务器的话,不搞nginx的话,要配置成http = ip:port,而不是socket = 192.168.1.2:8000,不然你哭死都无法访问,即使一切看起来正常,也没报错!</span></strong></p>
<p>&nbsp;</p>
<p>&nbsp;配置好了就可以启动</p>
<div class="cnblogs_code">
<pre>uwsgi --ini uwsgi.ini</pre>
</div>
<p>进入项目根目录(uwsgi.ini存放的目录),和manag.py同级目录,输入</p>
<div class="cnblogs_code">
<pre>uwsgi --ini ./uwsgi.ini</pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/782587/202001/782587-20200113235634246-1545378119.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;这样代表启动正常了。</p>
<p>不放心,可以使用命令进行查看:</p>
<div class="cnblogs_code">
<pre>netstat -anp|grep 9527
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">杀进程 </span>
kill -9 pid</pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/782587/202001/782587-20200113235702685-679327473.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;输入ip+端口,通过浏览器可以访问</p>
<p><img src="https://img2018.cnblogs.com/blog/782587/202001/782587-20200113235923373-694610203.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong><span style="color: rgba(255, 0, 0, 1)">&nbsp;敲黑板:这里也有个坑,只用uwsgi作为web访问,在之前uwsgi.ini文件里,配置的服务器地址一定要是服务器真实IP地址,不能是localhost或127.0.0.1,不然你本机无法从浏览器访问了。</span></strong></p>
<p>例如:</p>
<p><img src="https://img2018.cnblogs.com/blog/782587/202001/782587-20200114000551211-691756386.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;总结一下常用操作命令:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 启动uwsgi</span>
uwsgi --<span style="color: rgba(0, 0, 0, 1)">ini uwsgi.ini<br>
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 关闭uwsgi</span>
uwsgi --stop ./<span style="color: rgba(0, 0, 0, 1)">uwsgi.pid<br>
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 重启</span>
uwsgi --reload ./<span style="color: rgba(0, 0, 0, 1)">uwsgi.pid<br>
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">查看确认是否uwsgi启动</span>
ps -ef|<span style="color: rgba(0, 0, 0, 1)">grep uwsgi <br>
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">查看端口是否起来</span>
netstat -anp|grep 9527</pre>
</div>
<p>&nbsp;</p>
<h3>  静态文件处理</h3>
<p>&nbsp;启动之后你会页面静态文件没有加载,在生产上部署和开发模式加载静态文件方式是不一样的。</p>
<p>1.首先,我们配置静态文件,要在setting.py里面加入如下几行代码:</p>
<div class="cnblogs_code">
<pre>STATIC_ROOT = os.path.join(BASE_DIR, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">collect_static</span><span style="color: rgba(128, 0, 0, 1)">'</span>)</pre>
</div>
<p>2.进入到项目根目录,创建文件夹collect_static</p>
<div class="cnblogs_code">
<pre>mkdir collect_static</pre>
</div>
<p>3.静态文件迁移</p>
<div class="cnblogs_code">
<pre>python manage.py collectstatic</pre>
</div>
<p>django会把所有的<span class="hljs-keyword">static文件都复制到STATIC_ROOT文件夹下</span></p>
<p>STATIC_ROOT 是在部署静态文件时(pyhtonmanage.pycollectstatic)所有的静态文静聚合的目录,STATIC_ROOT要写成绝对地址,在这里,比如我的项目mysite是/home/mysite/ <br>那么STATIC_ROOT 为 /home/mysite/collect_static/ </p>
<p>说明:</p>
<p><em><span style="font-size: 12px">STATIC_ROOT 是在部署的时候才发挥作用, 而实际情况下,静态文件的一般安放位置有两种:</span></em></p>
<p><em><span style="font-size: 12px">1.一种就是在每个app里面新建一个static文件夹,将静态文件放到里面,在加载静态文件时,比如要在模板中用到静态文件,django会自动在每个app里面搜索static文件夹(所以,不要把文件夹的名字写错哦, 否则django就找不到你的文件夹了)</span></em></p>
<p><em><span style="font-size: 12px">2.另一种,就是在所有的app文件外面,建立一个公共的文件夹, 因为有些静态文件不是某个app独有的,那么就可以把它放到一个公共文件夹里面,方便管理(注意,建立一个公共的静态文件的文件夹只是一种易于管理的做法,但是不是必须的,app是可以跨app应用静态文件的,因为最后所有的静态文件都会在STATIC_ROOT里面存在) </span></em><br><em><span style="font-size: 12px">那现在的问题是如何让django知道你把一些静态文件放到app以外的公共文件夹中呢,那就需要配置STATICFILES_DIRS了</span></em></p>
<p>进入文件夹collect_static后查看</p>
<p><img src="https://img2018.cnblogs.com/blog/782587/202001/782587-20200114002704894-984819521.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;全部迁移过来了,再次刷新浏览器,页面静态文件加载成功。</p>
<p>至此,uwsgi部署已完成</p>
<p>&nbsp;</p>
<p>  </p>
<p>可能遇到的问题:</p>
<p><strong><span style="color: rgba(255, 0, 0, 1)">1、启动uwsgi报错信息:</span></strong></p>
<div class="cnblogs_code">
<pre>(autoforedata) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> uwsgi --ini uwsgi.ini</span>
getting INI configuration <span style="color: rgba(0, 0, 255, 1)">from</span><span style="color: rgba(0, 0, 0, 1)"> uwsgi.ini
</span>*** WARNING: Can<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">t find section "uwsgi" in INI configuration file uwsgi.ini ***</span>
*** Starting uWSGI 2.0.18 (64bit) on ***<span style="color: rgba(0, 0, 0, 1)">
compiled with version: </span>4.4.7 20120313 (Red Hat 4.4.7-23) on 13 January 2020 08:58:36<span style="color: rgba(0, 0, 0, 1)">
os: Linux</span>-2.6.32-696.el6.x86_64 <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">1 SMP Tue Mar 21 19:29:05 UTC 2017</span>
nodename: test-bss-181<span style="color: rgba(0, 0, 0, 1)">
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: </span>8<span style="color: rgba(0, 0, 0, 1)">
current working directory: </span>/data/wwwroot/<span style="color: rgba(0, 0, 0, 1)">autoforecastdata
detected binary path: </span>/data/env/autoforedata/bin/<span style="color: rgba(0, 0, 0, 1)">uwsgi
uWSGI running as root, you can use </span>--uid/--gid/--<span style="color: rgba(0, 0, 0, 1)">chroot options
</span>*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
*** WARNING: you are running uWSGI without its master process manager ***<span style="color: rgba(0, 0, 0, 1)">
your processes number limit </span><span style="color: rgba(0, 0, 255, 1)">is</span> 63718<span style="color: rgba(0, 0, 0, 1)">
your memory page size </span><span style="color: rgba(0, 0, 255, 1)">is</span> 4096<span style="color: rgba(0, 0, 0, 1)"> bytes
detected max file descriptor number: </span>1024<span style="color: rgba(0, 0, 0, 1)">
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with </span>--thunder-<span style="color: rgba(0, 0, 0, 1)">lock)
uWSGI running as root, you can use </span>--uid/--gid/--<span style="color: rgba(0, 0, 0, 1)">chroot options
</span>*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***<span style="color: rgba(0, 0, 0, 1)">
uWSGI running as root, you can use </span>--uid/--gid/--<span style="color: rgba(0, 0, 0, 1)">chroot options
</span>*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***<span style="color: rgba(0, 0, 0, 1)">
The </span>-s/--socket option <span style="color: rgba(0, 0, 255, 1)">is</span> missing <span style="color: rgba(0, 0, 255, 1)">and</span> stdin <span style="color: rgba(0, 0, 255, 1)">is</span> <span style="color: rgba(0, 0, 255, 1)">not</span> a socket.</pre>
</div>
<p>解决方案:</p>
<ul>
<li>1.增加用户和组,具体命令如下:</li>
</ul>
<div class="cnblogs_code">
<pre>/usr/sbin/<span style="color: rgba(0, 0, 0, 1)">groupadd www
</span>/usr/sbin/useradd -g www www</pre>
</div>
<ul>
<li>2.增加了www的用户名和组,之后修改uWsgi配置文件:</li>
</ul>
<div class="ace_line">&nbsp;这是我之前的配置</div>
<div class="ace_line">
<div class="cnblogs_Highlighter">
<pre class="brush:python;gutter:true;">[<span class="ace_identifier">uwsgi<span class="ace_paren ace_rparen">]</span></span><br>uid = root
gid = root</pre>
</div>
</div>
<div class="cnblogs_code">
<div class="ace_line"><span class="ace_paren ace_lparen">现在改成这样</span></div>
<div class="ace_line"><span class="ace_paren ace_lparen">[<span class="ace_identifier">uwsgi<span class="ace_paren ace_rparen">] </span></span></span></div>
<div class="ace_line"><span class="ace_gutter ace_gutter-cell"><span class="ace_identifier">uid <span class="ace_keyword ace_operator">= <span class="ace_identifier">www </span></span></span></span></div>
<div class="ace_line"><span class="ace_gutter ace_gutter-cell"><span class="ace_identifier">gid <span class="ace_keyword ace_operator">= <span class="ace_identifier">www</span></span></span></span></div>
</div>
<p>之后重启一下uWsgi,即可</p>
<div class="cnblogs_code">
<pre> added mapping <span style="color: rgba(0, 0, 255, 1)">for</span> /static =&gt; /data/wwwroot/autoforecastdata/collect_static   #出现这个就是正常</pre>
</div>
<p>&nbsp;</p>
<p><strong><span style="color: rgba(255, 0, 0, 1)">2.还有一种报错,没有在项目根目录下启动</span></strong></p>
<div class="cnblogs_code">
<pre>(autoforedata) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> uwsgi --ini uwsgi.ini</span>
realpath() of uwsgi.ini failed: No such file <span style="color: rgba(0, 0, 255, 1)">or</span> directory </pre>
</div>
<p>cd到项目所在根目录下启动。(命令不要有空格,如果不行,将ini文件的所有注释清除!)</p>
<p><strong><span style="color: rgba(255, 0, 0, 1)">3.启动正常,当项目后台调用其他服务接口出现:访问提示openurl错误,或者是没有服务或服务名</span></strong></p>
<p>这种情况是由于访问的域名没有映射对应的服务器IP地址</p>
<p>进入</p>
<div class="cnblogs_code">
<pre>cd /etc/</pre>
</div>
<p>编辑hosts文件</p>
<div class="cnblogs_code">
<pre>vi hosts</pre>
</div>
<p>加入映射关系即可</p>
<p><img src="https://img2018.cnblogs.com/blog/782587/202001/782587-20200114214424355-658670771.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>  Uwsgi + Nginx的部署</h2>
<p>上面是uwsgi的启动方式,一般不考虑安全、负载均衡和代理的话,就不需要结合nginx来部署。</p>
<p>这里介绍uwsgi+nginx的部署:</p>
<p>1.首先是按照nginx程序</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> cd /home/</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> wget http://nginx.org/download/nginx-1.13.7.tar.gz</span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> tar -zxvf nginx-1.13.7.tar.gz</span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> cd nginx-1.13.7</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> ./configure</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> make</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> make install</span></pre>
</div>
<p>2.nginx一般默认安装好的路径为/usr/local/nginx,在/usr/local/nginx/conf/中先备份一下nginx.conf文件,以防意外。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> cp nginx.conf nginx.conf.bak</span></pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/782587/202001/782587-20200115084248469-687584107.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;3.配置nginx,这里是关键,然后打开nginx.conf,把原来的内容删除,直接加入以下内容:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">events {
    worker_connections</span>1024<span style="color: rgba(0, 0, 0, 1)">;
}
http {
    include       mime.types;
    default_typeapplication</span>/octet-<span style="color: rgba(0, 0, 0, 1)">stream;
    sendfile      on;
    server {
      listen </span>80<span style="color: rgba(0, 0, 0, 1)">;
      server_name</span>127.0.0.1:80; <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">改为自己的域名,没域名修改为127.0.0.1:80</span>
      charset utf-8<span style="color: rgba(0, 0, 0, 1)">;
      location </span>/<span style="color: rgba(0, 0, 0, 1)"> {
         include uwsgi_params;
         uwsgi_pass </span>127.0.0.1:8997;<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">端口要和uwsgi里配置的一样</span>
         uwsgi_param UWSGI_SCRIPT mysite.wsgi;<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">wsgi.py所在的目录名+.wsgi</span>
         uwsgi_param UWSGI_CHDIR /www/wwwroot/myblog/; <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">项目路径</span>
<span style="color: rgba(0, 0, 0, 1)">         
      }
      location </span>/static/<span style="color: rgba(0, 0, 0, 1)"> {
      alias </span>/www/wwwroot/myblog/static/; <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">静态资源路径</span>
<span style="color: rgba(0, 0, 0, 1)">      }
    }
}</span></pre>
</div>
<p>要留意备注的地方,要和UWSGI配置文件myblog.xml,还有项目路径对应上。<br>进入/usr/local/nginx/sbin/目录<br>执行./nginx -t命令先检查配置文件是否有错,没有错就执行以下命令:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> ./nginx </span></pre>
</div>
<p><span style="color: rgba(255, 0, 0, 1)"><strong>有时候改了配置后会报这样的错误:</strong></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(255, 0, 0, 1)">(autoforedata) # ./nginx -s reload
nginx: unknown directive "events" in /usr/local/nginx/conf/nginx.conf:1</span></pre>
</div>
<p>这个时候将原来的配置文件conf删除,将之前备份的重新弄一份,cp进去,然后配置一下之前的内容,配置文件里面的内容不正确很容易报错,注意一些细节,比如空格。</p>
<p><span style="color: rgba(255, 0, 0, 1)"><strong>敲黑板:这套部署setting.py需要设置成:</strong></span></p>
<div class="cnblogs_code">
<pre>1<span style="color: rgba(0, 0, 0, 1)">、关闭DEBUG模式。

DEBUG </span>=<span style="color: rgba(0, 0, 0, 1)"> False

</span>2、ALLOWED_HOSTS设置为*<span style="color: rgba(0, 0, 0, 1)"> 表示任何IP都可以访问网站。

ALLOWED_HOSTS </span>= [’*’]</pre>
</div>
<p>&nbsp;</p>
<p>常用命令集:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">启动服务:nginx
退出服务:nginx </span>-<span style="color: rgba(0, 0, 0, 1)">s quit
强制关闭服务:nginx </span>-<span style="color: rgba(0, 0, 0, 1)">s stop
重启服务:nginx </span>-<span style="color: rgba(0, 0, 0, 1)">s reload
验证配置文件:nginx </span>-<span style="color: rgba(0, 0, 0, 1)">t
使用配置文件:nginx </span>-c <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">配置文件路径</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
使用帮助:nginx </span>-<span style="color: rgba(0, 0, 0, 1)">h


netstat </span>-<span style="color: rgba(0, 0, 0, 1)">nupl (UDP类型的端口)
netstat </span>-<span style="color: rgba(0, 0, 0, 1)">ntpl (TCP类型的端口)
netstat </span>-<span style="color: rgba(0, 0, 0, 1)">anp 显示系统端口使用情况

(autoforedata) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> netstat -anp|grep nginx</span>
(autoforedata) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> netstat -anp|grep 8090</span>
tcp      0      0 0.0.0.0:8090                0.0.0.0:*                   LISTEN      20985/<span style="color: rgba(0, 0, 0, 1)">nginx

ps </span>-aux|grep 进程名</pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>  内网映射</h2>
<blockquote>
<p><strong><span style="color: rgba(255, 102, 0, 1)">&nbsp;这里还需要注意,如果你公司有域名服务器,请运维给你弄个域名,做内网映射。那么内网任何一台电脑都可以通过域名访问了,不需要每台电脑配置域名映射(在hosts文件里配置服务器IP与域名映射关系),当然如果没有域名,那就只能通过服务器IP来访问了。</span></strong></p>
</blockquote>
<p>&nbsp;</p>
<p><strong>&nbsp;如图/etc/hosts文件</strong></p>
<p><img src="https://img2018.cnblogs.com/i-beta/782587/202002/782587-20200225004307378-66129390.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>&nbsp;如图:/usr/local/nginx/conf配置:</strong></p>
<p><img src="https://img2018.cnblogs.com/i-beta/782587/202002/782587-20200225004616944-1887968728.png" alt=""></p>
<p>&nbsp;</p>
<p><strong>&nbsp;浏览器域名访问:</strong></p>
<p><img src="https://img2018.cnblogs.com/i-beta/782587/202002/782587-20200225004741606-1675809303.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="background-color: rgba(255, 255, 255, 1); font-size: 18pt; color: rgba(255, 0, 0, 1)"><strong>完结!</strong></span></p>
<p>&nbsp;</p>
<p><span style="color: rgba(255, 0, 0, 1)"><em>PS:部署过程蹲过很多坑耗时太久,为了方便以后使用,所以用文字来记录一下。如果您看完该篇,能帮上您,麻烦点个赞,如有不明白地方,可以留言咨询! 谢谢!</em></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong><span style="font-family: 楷体; font-size: 16px">资料查询链接:</span></strong></p>
<p><span style="font-size: 14px; font-family: 楷体">1.无法导入sll和_ssl报错问题:https://www.jianshu.com/p/3ec24f563b81</span></p>
<p><span style="font-size: 14px; font-family: 楷体">2.删除linux服务器上yum和python2后导致无法安装其他(重装python和yum):</span></p>
<p><span style="font-size: 14px; font-family: 楷体">https://www.jianshu.com/p/dad58d810734</span></p>
<p><span style="font-size: 14px; font-family: 楷体">https://blog.csdn.net/qq_34646546/article/details/90714946</span></p>
<p><span style="font-size: 14px; font-family: 楷体">3.cento6部署django详细步骤</span></p>
<p><span style="font-size: 14px; font-family: 楷体">https://blog.csdn.net/weixin_43883625/article/details/100715363</span></p>
<p><span style="font-size: 14px; font-family: 楷体">https://www.cnblogs.com/chaoqi/p/11103188.html</span></p>
<p><span style="font-size: 14px; font-family: 楷体"><span style="color: rgba(0, 0, 0, 1)">4.CentOS6.5 安装openssl(可能有坑)</span></span></p>
<p><span style="font-size: 14px; font-family: 楷体">https://www.cnblogs.com/hunttown/p/9626448.html</span></p>
<p><span style="font-size: 14px; font-family: 楷体">5.静态文件处理</span></p>
<p><span style="font-size: 14px; font-family: 楷体">https://blog.csdn.net/jj546630576/article/details/78606531</span></p>
<p>&nbsp;https://note.qidong.name/2017/07/uwsgi-serve-django-static/</p>
<p><span style="font-family: 楷体">6.uwsgi启动django</span></p>
<p>https://blog.csdn.net/weixin_43667990/article/details/99710786</p>
<p>https://www.jianshu.com/p/0e85cf58e677</p>
<p>https://www.cnblogs.com/wcwnina/p/9906081.html</p>
<p>https://blog.csdn.net/smart_liu8/article/details/82388930</p>
<p>https://blog.csdn.net/qq_34939371/article/details/102856541</p>
<p>7.nginx配置</p>
<p>https://www.cnblogs.com/wcwnina/p/9906081.html</p>
<p>https://www.cnblogs.com/suguangti/p/11334692.html</p>
<p>8.nginx概念与配置</p>
<p>https://www.jianshu.com/p/956debe2891d</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong><span style="color: rgba(0, 0, 0, 1); background-color: rgba(255, 153, 204, 1)"><em><span style="font-size: 18px">如果觉得写的还可以,请给个赞,多谢支持!</span></em></span></strong></p>
</div>
</div>

</div>
<div id="MySignature" role="contentinfo">
    <div id="AllanboltSignature">
      <p id="PSignature" style="border-top: #e0e0e0 1px dashed; border-right: #e0e0e0 1px dashed; border-bottom: #e0e0e0 1px dashed; border-left: #e0e0e0 1px dashed; padding-top: 10px; padding-right: 20px; padding-bottom: 30px; padding-left: 200px; background: url(&quot;https://files-cdn.cnblogs.com/files/liudinglong/1574901112166.bmp&quot;) #e5f1f4 no-repeat 3% 45%; font-family: 微软雅黑; font-size: 12px">
            <br>
            作者:全栈测试开发日记
            <br>
            出处:https://www.cnblogs.com/liudinglong/
            <br>
            csdn:https://blog.csdn.net/liudinglong1989/
            <br>
微信公众号:全栈测试开发日记
<br>
            本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
         
            
      </p>
     </div><br><br>
来源:https://www.cnblogs.com/liudinglong/p/12185180.html
頁: [1]
查看完整版本: Django项目在Linux服务器上部署和躺过的坑