第3回-在nginx下部署项目

创建时间:20161223

本章小目标

  • 安装nginx
  • 部署已有的hi_weui项目
  • 采用uwsgi方式部署
  • 采用supervisor管理应用进程
  • 总结常用的操作命令
  • 总结常用的配置

参考链接

  • 基于nginx和uWSGI在Ubuntu上部署Django, 讲得比较详细
  • 自强学堂,参考其supervisor用法
  • 菜鸟教程

1 安装nginx,uwsgi,supervisor等

参考上面链接,略

2 编辑uwsgi启动配置文件

在hi_weui的项目目录下创建文件

$ pwd
/home/bit/coding_app/hi_weui

$ cat hi_weui_uwsgi.ini 
[uwsgi]
# the base directory (full path)
chdir=/home/bit/coding_app/hi_weui

# Django's wsgi file
module=hi_weui.wsgi

# the virtualenv (full path)
home=/home/bit/.virtualenvs/realkpi

master=true
processes = 8
threads = 4
vacuum = true
chmod-socket = 666

socket = /home/bit/coding_app/hi_weui/hi_weui.sock

3 编辑supervisor配置文件
同样放在hi_weui项目目录下

$ pwd
/home/bit/coding_app/hi_weui
(sudo) echo_supervisord_conf > ./supervisord.conf
$ tail supervisord.conf    #只是在模板后面增加hi_weui相关配置
;files = relative/directory/*.ini

[program:hi_weui]
command=/home/bit/.virtualenvs/realkpi/bin/uwsgi --ini /home/bit/coding_app/hi_weui/hi_weui_uwsgi.ini
directory=/home/bit/coding_app/hi_weui
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true

4 编辑nginx服务配置文件

在nginx目录下创建

$ pwd
/etc/nginx/sites-available
$ cat hi_weui_nginx.conf
upstream django{
    #server localhost:8001;
    server unix:///home/bit/coding_app/hi_weui/hi_weui.sock;
}
server {
    listen      8087;
    server_name localhost;
    charset     utf-8;
 
    client_max_body_size 75M;
 
    location /media  {
        alias /home/bit/coding_app/hi_weui/media;
    }
 
    location /static {
        alias /home/bit/coding_app/hi_weui/collected_static;
    }
 
    location / {
        uwsgi_pass  django;
        include     /etc/nginx/uwsgi_params;
    }

}

5 激活nginx 对hi_weui的服务

其实就是创建了一个链接

$ sudo ln -s /etc/nginx/sites-available/hi_weui_nginx.conf /etc/nginx/sites-enabled/hi_weui_nginx.conf 
$ ls -l ../sites-enabled/
total 0
lrwxrwxrwx 1 root root 34 Dec 26 16:22 default -> /etc/nginx/sites-available/default
lrwxrwxrwx 1 root root 45 Dec 27 11:23 hi_weui_nginx.conf -> /etc/nginx/sites-available/hi_weui_nginx.conf

6 访问流总结

整理一下思路:
按照现有的配置,大致过程如下。

  1. 网页访问nginx服务:localhost:8087
  2. nginx接到socket:

server unix:///home/bit/coding_app/hi_weui/hi_weui.sock;

  1. socket接到uwsgi:

socket = /home/bit/coding_app/hi_weui/hi_weui.sock

  1. uwsgi加载模块:

module=hi_weui.wsgi

  1. 模块由django最终提供服务。

7 启动服务

7.1 测试在django开发服务上正常

$ sh start.sh  react

访问:http://127.0.0.1:8088/
执行一次start.sh脚本的目的是重新编译一次应用,并搜集相关静态文件到collected_static目录下

$ sh stop.sh   #关掉开发服务器

7.2 启动nginx

$ sudo service nginx restart

访问:http://127.0.0.1:8087/ 此时还无法正常显示
访问:http://127.0.0.1:80 看到正常的nginx提示页面

7.3 启动supervisor

用之前写好的配置文件启动

$ pwd
/home/bit/coding_app/hi_weui

$ supervisord -c supervisord.conf

$ supervisorctl   #打开客户端管理,看到hi_weui已经启动了
hi_weui                          RUNNING   pid 17202, uptime 0:00:39
supervisor> status
hi_weui                          RUNNING   pid 17202, uptime 0:00:42
supervisor> help 可以看更多命令帮助
supervisor> stop hi_weui   #停应用
hi_weui: stopped
supervisor> restart hi_weui #重启应用
hi_weui: ERROR (not running)   #因为刚已经停止了
hi_weui: started 

访问:http://127.0.0.1:8087/ 此时已经可以正常显示。
为什么用supervisor呢? 如果nginx上同时启动了许多项目,则可以通过nginx启停所有项目,或者是通过supervisor分别启停1个项目。

8 访问日志

8.1 nginx配置文件

/etc/nginx$ cat nginx.conf 
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

可以看到对应的日志目录

8.2 关于django print日志输出

部署在nginx上后,print输出是不显示的,如果要打印日志。推荐使用python logging模块,可以在django的settings文件上配置。

从第1回到这里,就已经完成了react项目的脚手架,并集成到django,最终部署到nginx上。

你可能感兴趣的:(第3回-在nginx下部署项目)