uWSIG , nginx , Django 搭建服务器 小白 指南 [ 涵盖所有坑 ]

正确部署后的结构应该是

the outside world <-> nginx <-> the socket <-> uwsgi <-> Django / test.py

下面,将一次介绍各软件的安装和配置(写脚本):

  • uwsgi ( 基于 wsgi 协议实现的服务器软件 )
  • django(用纯python写网站太麻烦,通过django 的 api , 可以更方便)
  • nginx (单用uwsgi也能搭建,但nginx结合 wsgi 协议,可实现安全、快速访问和牛逼功能)

0 django

0-1 安装 (参考django官网)
0-2 新建项目 (参考官网)

1 uwsgi

1-1 安装
sudo pip install uwsgi --upgrade
1-2 运行
通过命令行,运行服务器
#1: uwsgi --http ip:port --module mysite.wsgi

#2: uwsgi --socket /to/your/project/uwsgi.sock --chmod-socket=666 --wsgi-file test.py 

#3: uwsgi --socket /to/your/project/uwsgi.sock --chmod-socket=666 --chdir /to/your/project --module mysites.wsgi
通过配置文件,运行服务器
uwsgi --ini uwsgi.ini
1-3 删除被占用端口
ps ax | grep uwsgi
kill all -9 uwsgi
1-4 配置.ini
# django.ini file
[uwsgi]

# master
master                  = true

# maximum number of processes
processes               = 10

# the socket (use the full path to be safe)
# socket 的具体放置位置
# 服务器开启时自动生成
socket          = /to/yout/project/uwsgi.sock

# with appropriate permissions - *may* be needed
# 重要!对socket设置666权限,增删改除
# 如果没有设置,有可能网络访问不了,因为没有权限创建
chmod-socket    = 666

# the base directory
chdir           = /to/yout/project

# Django's wsgi file
# 因为 加了 chdir ,所有直接输入 project文件内的路径
# 注意! project.wsgi 中间是 “.” 而不是 “/”
module          = project.wsgi

# the virtualenv
# home            = /path/to/virtualenv

# clear environment on exit
vacuum          = true

2 nginx

2-1 安装
sudo apt-get install python-dev 
sudo apt-get install nginx
2-2 nginx 各种文件的放置位置
#1: /user/local/nginx
#2: /etc/nginx/
#3: /etc/nginx/nginx.conf
#4:/var/log/nginx/        #放置nginx的log信息

nginx 的默认配置文件放置在 /etc/nginx/nginx-availale/ 内,监听端口默认80,所有http访问127.0.0.1:80后,会显示nginx的欢迎界面。

2-3 查看版本
nginx -v
2-4 运行
sudo service nginx start
sudo service nginx restart
sudo service nginx stop
sudo service nginx configtest #检查 nginx 配置文件正确性
2-5 配置 mysite_niginx.conf

假设:django项目( 项目名:project )放置的路径为 /to/your/project/

# mysites_nginx.conf
upstream boxx{                                          # 名字boxx可以被DIY
    # connect to this socket
    server unix:///to/your/project/uwsgi.sock;          # 通过socket访问
    # server 127.0.0.1:8001;                            # 通过http访问
    # -.-! 如果运行在云平台, 此处应使用内网IP地址
    }

server {
    # 指定浏览器或api要访问的接口端口
    # 你可以在浏览器输入 example.com:8000 访问网站
    listen      8000;           
    # the domain name it will serve for
    server_name example.com;   # 代替为你的IP或域名
    # -.-! 如果是运行在云平台,此处应使用内网IP地址
    charset     utf-8;

    #Max upload size
    client_max_body_size 75M;   # adjust to taste

    # Django media
    location /media  {
      alias /to/your/project/media;      # Django项目的media files路径
    }

    location /static {
       alias /to/your/project/static;    # Django项目的static files路径
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  boxx;                                #名字boxx要和上面对应上
        include     /etc/nginx/uwsgi_params;             # 
        }
    }
#注意#
   nginx 和 uwsgi 是怎么联系的呢?更具上面.ini.conf文件,我们可以看到:
   nginx.conf 里: server unix:///to/your/project/uwsgi.sock;
   uwsgi.conf 里: socket      = /to/yout/project/uwsgi.sock;
   这两个变量指向同一个东西,这样就建立了联系
2-6 相当重要的补充

.conf 需要被连接到 /etc/nginx/sites-enable/目录下
假如,你的nginx.conf文件所在地址为 /to/your/prject/p_nginx.conf
那么,需要输入如下命令,让nginx开启时可以找到这个配置文件并运行

sudo ln -s /to/your/project/p_nginx.conf /etc/nginx/sites-enable/
2-7 检查errorlog

检查你的nginx error log( 位置: /var/log/nginx/error.log ).
如果你看到如下信息,说明可能是权限问题导致网站无法访问(特别是你把sock文件放在/tmp目录下)

connect() to unix:///path/to/your/project/uwsgi.sock failed (13: Permission denied)

通过 修改chmod-socket的权限 , 可以避免

uwsgi --socket /tmp/uwsgi.sock --wsgi-file test.py --chmod-socket=644 # 666 permissions (very permissive)

3 nginx+uwsig 互联需要注意的地方

情况1:

如果单用uwsgi运行,ini配置文件里,直接写http地址和端口

# uwsgi.ini
http = IP:PORT
# uwsgi.ini
http = 127.0.0.1:8006
情况2:

如果nginx+uwsgi运行,ini 的 conf配置文件里,分三种情况:

# -1- 指定ip和端口
# uwsgi.ini
socket = IP:PORT
# nginx.conf
upstream boxx{
    server IP:PORT
}
# -2- 本地ip和端口
# uwsgi.ini
socket = 127.0.0.1:8003
# nginx.conf
upstream boxx{
    server 127.0.0.1:8003
}
# -3- 指定uwsgi.sock
# uwsgi.ini
socket = /to/your/project/uwsgi.sock
# nginx.conf
upstream boxx{
    server unix:///to/your/project/uwsgi.sock
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值