万物之中, 希望至美.

树莓派搭建简单的 Nginx + uWSGI + Django

2018.02.24

当我们编写完成 Django 项目后,可以使用python manager.py runserver来运行 Django 自带的服务器,但这只适合于测试环境使用,项目正式上线时,我们需要一个可以稳定并且持续的服务器,比如Apache, Nginx等。手里吃灰很久的树莓派终于可以派上用场了😂。

准备工作

  • 烧写好系统的树莓派,我这里使用的是基于 Debian 的 Raspbian 系统,理论上后续搭建步骤在 Ubuntu/Debian 上都可以用。

注意 2016 年 11 月的新版本系统之后,树莓派默认禁用 SSH,你需要手动开启。如果没有屏幕,则在boot分区的根目录下创建一个名为 ssh 的文件即可开启

安装Nginx

sudo apt install nginx

安装完成后 nginx 服务器默认就启动了。

nginx 相关命令:

sudo service nginx start # 启动 nginx
sudo service nginx stop  # 停止 nginx
sudo service nginx restart # 重启 nginx

安装uWSGI

pip install uwsgi

测试 uWSGI 是否正常:

建立一个 test.py 文件,内容如下:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return "Hello World"

然后在命令行运行以下命令:

uwsgi --http :8000 --wsgi-file test.py

--http :8000:表示使用的是 http 协议,端口号为8000

--wsgi-file test.py:表示要运行的 wsgi 应用程序文件

更多参数使用请看:uWSGI 参数详解

uwsgi 命令运行后,在浏览器访问[服务器IP地址]:8000,若看到Hello World则表明 uWSGI 运行正常。

uWSGI配置

uWSGI 支持 ini、xml 等多种配置方式,这里以 ini 配置为例。在/var/www/html/[项目名]目录下创建一个 mysite_uwsgi.ini 文件,内容如下:

[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /var/www/html/your_project_name
# Django's wsgi file
module          = your_project_name.wsgi
# the virtualenv (full path)
home            = /path/to/virtualenv
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe
socket          = :8000
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true
# background the process & log
daemonize = /var/www/html/your_project_name/uwsgi.log
pidfile		= /tmp/uwsgi.pid

然后就可以使用配置文件的方式来使用 uWSGI :

uwsgi --ini mysite_uwsgi.ini

nginx配置

新建一个名为mysite_nginx.conf的文件,内容如下:

# mysite_nginx.conf

# the upstream component nginx needs to connect to
upstream django {
    # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
    server 127.0.0.1:8000; # for a web port socket (we'll use this first)
}

# configuration of the server
server {
    # the port your site will be served on
    listen      80;
    # the domain name it will serve for
    server_name .example.com; # 替换为你的机器的IP地址或者FQDN
    charset     utf-8;

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

    # Django media
    location /media  {
        alias /path/to/your/mysite/media;  # your Django project's media files - amend as required
    }

    location /static {
        alias /path/to/your/mysite/static; # your Django project's static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  django;
        include     /etc/nginx/uwsgi_params; # the uwsgi_params file you installed
    }
}

替换完成文件中的相关文件路径后,在/etc/nginx/sites-enabled目录下,建立该文件的符号链接:

sudo ln -s ~/[你的文件所在路径]/mysite_nginx.conf /etc/nginx/sites-enabled/

重启 nginx 服务器:

sudo service nginx restart

最后,将 uWSGI 运行起来,就看到你的 Django 项目已经跑起来了。

参考文章:

Setting up Django and your web server with uWSGI and nginx

comments powered by Disqus