最新消息:欢迎光临 魔力 • Python!大家可以点开导航菜单中的【学习目录】,这个目录类似图书目录,更加方便学习!

Django2:Web项目开发入门笔记(16)

Django教程 小楼一夜听春语 14141浏览 0评论

这一篇教程,我们一起来了解如何在Ubuntu系统中将Django2的Web项目部署到Nginx服务器。

首先,大家可以参考《Django2:Web项目开发入门笔记(13)》先完成以下准备工作。

  • 安装Ubuntu系统并更新apt-get
  • 安装Python3.6与依赖
  • 安装Django2.0.3
  • 安装Sqlite3与依赖
  • 安装OpenSSL等相关依赖

也就是说,除了Apache2和mod_wsgi之外全部都需要安装。

完成上述内容的安装之后,再将项目文件放入/var/www目录中,我们就可以开始Nginx的安装了。

一、安装Nginx和依赖

执行命令:
sudo apt-get install nginx
sudo apt-get install libpcre3 libpcre3-dev

二、安装uwsgi

执行命令:
cd /usr/local/lib/python3.6/site-packages/
sudo python3.6 pip install uwsgi

三、测试uwsgi

先在/var/www目录中创建一个测试文件。

执行命令:
sudo chmod 777 /var/www
cd /var/www
sudo vi mytest.py

在VI编辑器中,我们输入测试文件的代码。

示例代码:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b'UWSGI Test...']

代码输入完毕,按“ESC”键并键入“:wq”回车,保存测试文件后,进行测试。

执行命令:
sudo uwsgi --http :8888 --wsgi-file mytest.py

通过本机浏览器访问“http://127.0.0.1:8888”或者“http://localhost:8888”进行测试,如果页面中显示“UWSGI Test…”字样,则说明测试成功,uwsgi可以正常工作了。

如果,重复测试时,提示端口被占用,可以先将已启动的进程关闭。

先通过名称查询相关进程,然后通过“kill”命令将进程关闭。

执行命令:
sudo ps -ef|grep uwsgi
sudo kill -9 [端口号]

也可以使用“killall”命令通过名称关闭全部相关进程。

sudo killall -9 uwsgi

如果命令无效,可以先获取“root”权限,再进行尝试。

四、配置Nginx

首先,我们为项目添加配置文件。

执行命令:
sudo vi /etc/nginx/sites-available/MyWeb.conf

在VI编辑器中写入配置文件内容。

server {
    listen 80;  # 监听端口
    server_name www.qqtbb.com;  # 服务器名(多个域名用逗号分隔)
    charset utf-8;  # 服务器字符集
    client_max_body_size 5M;  # 上传文件最大限制
    location /media  {  # 媒体文件位置
        alias /var/www/MyWeb/media;
    }
    location /static {  # 静态文件位置
        alias /var/www/MyWeb/static;
    }
    location / {   # 为uwsgi协议提供支持(实现与uWSGI服务器通信)
        uwsgi_pass 127.0.0.1:8888;  #为uWSGI服务器设置监听地址(套接字或sock文件)
        # uwsgi_pass unix:///var/www/MyWeb/MyWeb.sock;  # 使用sock文件
        include /etc/nginx/uwsgi_params;  # 为uwsgi请求增加参数。
    }
}

内容输入完毕(使用时请先清除注释),按“ESC”键并键入“:wq”回车保存,然后将配置文件的快捷方式添加到/etc/nginx/sites-enabled/目录中,激活配置文件。

执行命令:
sudo ln -s /etc/nginx/sites-available/MyWeb.conf /etc/nginx/sites-enabled/MyWeb.conf

然后,重启Nginx服务器或者让服务器重新加载配置文件。

重载配置命令:
sudo service nginx reload 

重启服务命令:
sudo service nginx restart

如果重载配置文件或者重启服务器发生错误,需要检查配置文件是否有效。

语法检查命令:
sudo service nginx configtest

注意,语法检查只是检查是否配置文件中语法全部正确,并不能排除配置项是否存在问题。

接下来,我们启动uWSGI服务器测试一下项目是否能够正常运行。

执行命令:
sudo uwsgi --http :8888 --chdir /var/www/MyWeb --module MyWeb.wsgi

通过本机浏览器访问“http://127.0.0.1:8888”或者“http://localhost:8888”进行测试,如果项目页面访问正常,则说明配置文件

五、使用配置文件启动uWSGI服务器

uWSGI服务器也可以通过配置文件进行启动,不但避免使用过长的命令,而且能增加更多的配置。
执行命令:
cd /var/www/MyWeb
sudo vi uwsgi.ini
配置文件内容:

[uwsgi]
    socket = 127.0.0.1:8888  # 监听地址(套接字或sock文件)
    # socket=/var/www/MyWeb/MyWeb.sock # 使用sock文件
    chdir = /var/www/MyWeb/  # 项目根目录
    wsgi-file = MyWeb/wsgi.py  # wsgi文件路径
    processes = 3  # 开启的工作进程数
    threads = 5  # 每个工作进程的线程数
    chmod-socket = 664  # 客户端访问MyWeb.sock文件的权限  
    chown-socket = www-data  # 客户端请求的所有者
    pidfile= /var/www/MyWeb/MyWeb.pid  # 保存进程文件的路径
    vacuum = true  # 服务器退出时自动删除sock文件和pid文件

内容输入完毕(使用时请先清除注释),按“ESC”键并键入“:wq”回车保存,然后就可以通过配置文件启动uWSGI服务器了。

启动命令:
sudo uwsgi --ini uwsgi.ini

停止命令:
sudo uwsgi --stop MyWeb.pid

重载配置:
uwsgi --reload uwsgi.ini

六、使用Supervisor管理uWSGI

Supervisor是一个进程管理工具,能够方便我们对uWSGI服务器进行管理,并能够在uWSGI服务器意外关闭时,重新启动uWSGI服务器。

不过,目前Supervisor没有Python3的版本,我们需要使用Ubuntu系统自带的Python2进行安装。
如果没有安装pip,则需要先安装pip。

执行命令:
sudo apt-get install python-pip

接下来,安装Supervisor。

执行命令:
sudo pip install supervisor

安装完毕后,创建配置文件。

执行命令:
sudo echo_supervisord_conf > /etc/supervisord.conf

打开配置文件,并添加配置。

执行命令:
sudo vi /etc/supervisord.conf

配置内容:

[program:MyWeb]  # 这里的“MyWeb”是启动/停止/重启项目时使用的名称
    command=uwsgi --ini /var/www/MyWeb/uwsgi.ini  # 启动uWSGI服务器的命令
    directory=/var/www/MyWeb/  # 项目根目录
    startsecs=10  # 进程持续运行多长时间认为启动成功
    stopwaitsecs=10  # 向进程发出关闭信号后等待系统返回“SIGCHILD”信号的时间
    stopasgroup=true  # uwsgi.ini中启动了多个进程时设置此项为true,否则可以删除。
    killasgroup=true  # uwsgi.ini中启动了多个进程时设置此项为true,否则可以删除。
    autostart=true  # uWSGI随Supervisord启动
    autorestart=true  # uWSGI进程意外关闭后自动重启

内容输入完毕(使用时请先清除注释),按“ESC”键并键入“:wq”回车保存。

尝试启动Supervisor。

执行命令:
sudo supervisord -c /etc/supervisord.conf 

此时,极有可能发生错误:unix:///tmp/supervisor.sock no such file。

这是因为配置文件中,默认将“supervisor.sock”文件存入/tmp/目录所导致的。

再次打开配置文件并修改以下内容:

  • /tmp/supervisor.sock 修改为/var/run/supervisor.sock (有两处需要修改)
  • /tmp/supervisord.log 修改为/var/log/supervisor.log
  • /tmp/supervisord.pid 修改为/var/run/supervisor.pid

接下来,在修改后的目录中创建“supervisor.sock”文件,并给予读写权限。

执行命令:
sudo touch /var/run/supervisor.sock
sudo chmod 777 /var/run/supervisor.sock

再次启动Supervisor,又会发生错误:Unlinking stale socket /var/run/supervisor.sock

这次的错误是因为缺少依赖。

执行命令:
sudo apt-get install aptitude
sudo aptitude install python-meld3

安装完依赖,继续尝试启动Supervisor,此时还可能产生错误:Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.

这是因为已经有“supervisor.sock”文件被链接(上一次启动Supervisor造成的)。

我们需要先查找哪个“supervisor.sock”文件被链接了。

执行命令:
sudo find / -name supervisor.sock

结果中会显示链接的文件,例如:/run/supervisor.sock

然后,通过“unlink”命令取消查询到的链接。

执行命令:
sudo unlink /被链接文件的所在路径/supervisor.sock

到这里,我们应该就能够正常启动Supervisor对uWSGI进行管理了。

启动项目命令:sudo supervisorctl -c /etc/supervisord.conf start [配置文件中的项目名称]

重启项目命令:sudo supervisorctl -c /etc/supervisord.conf restart [配置文件中的项目名称]

停止项目命令:sudo supervisorctl -c /etc/supervisord.conf stop [配置文件中的项目名称]

控制所有项目:sudo supervisorctl -c /etc/supervisord.conf <start/restart/stop> all

转载请注明:魔力Python » Django2:Web项目开发入门笔记(16)

头像
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网站 (可选)