Skip to the content.

Django+uwsgi+nginx搭建个人网站

用户环境:Ubuntu19桌面版;服务器环境:Ubuntu19服务器;程序IDE:pycharm-2019。

nginx服务器

1.1 下载

Ubuntu中直接一条命令即可下载安装:

sudo apt install nginx
1.2 启动与停止
nginx启动命令:systemctl start nginx   
nginx重启命令:systemctl restart nginx    
nginx停止命令:systemctl stop nginx
1.3 测试nginx

当nginx启动之后,用客户机在浏览器中访问192.168.221.130(这是我的服务器ip地址,你访问的时候应该换成你的服务器ip),即可看到默认的nginx静态网页。
如果浏览器中能看到nginx默认网页,则说明nginx安装成功。

uwsgi服务器

2.1 下载

在Ubuntu终端中下载uwsgi,使用命令:

pip3 install uwsgi   

在这之前你首先要装上Python3、Python3-pip。

2.2 测试

在你的Documents文件夹中创建一个文件,命名为:wsgiTest.py,使用vim wsgiTest.py编辑文件:

# !/usr/bin/python3
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

接下来我们启动 uWSGI 来运行一个 HTTP 服务器,将程序部署在HTTP端口 8080 上:

uwsgi --http :8080 --wsgi-file wsgiTest.py   

使用客户机在浏览器中访问192.168.221.130:8080即可看到一个Hello World的静态网页。此时说明uwsgi安装成功。

Django项目

3.1 下载

使用pip命令下载Django:

pip3 install django

如果下载速度慢的话,建议使用国内镜像,其命令为:

pip3 install django -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

-i参数后面跟的是国内镜像的地址,–trusted-host表示信任此地址

3.2 创建项目

使用django-admin命令创建你的项目,项目名为django_web:

django-admin startproject django_web
3.3 启动项目

使用django-admin运行该项目:

python3 manage.py runserver 8080

能打开网页说明此项目运行正常。
使用uwsgi启动项目:

uwsgi --http :8080 --module django_web.wsgi

此命令与上一个命令效果一样。
至此如果能正常访问项目则说明一切准备工作都已完成。接下来就是配置 nginx + uwsgi 托管项目。

3.4 配置

在项目的根目录(与manage.py同级目录)下创建 wsgi.ini 文件,并编辑如下:

# uwsgi 配置文件
[uwsgi]
#端口
socket = 127.0.0.1:8000
# django项目绝对路径
chdir = /home/lin01/mrlinfile/projects/django_web
# 模块路径(项目名称.wsgi)可以理解为wsgi.py的位置
module = django_web.wsgi
# 允许主进程
master = true
#最多进程数
processes  = 4
# 退出时候回收pid文件
vacuum = true

在目录 /etc/nginx/conf.d/ 下创建文件 nginx.conf,编辑如下:

server {
    # the port your site will be served on
    listen      8080;
    # the domain name it will serve for
    server_name localhost; # substitute your machine's IP address or FQDN
    charset     utf-8;
 
    # max upload size
    client_max_body_size 75M;   # adjust to taste
    location /static {
        alias /home/lin01/mrlinfile/projects/django_web/static; # your Django project's static files - amend as required
    }
    location / {
        uwsgi_pass  127.0.0.1:8000;
        include     /etc/nginx/uwsgi_params; # the uwsgi_params file you installed
    }
3.5 启动

启动uwsgi托管项目,其命令为:

# wsgi.ini配置文件的绝对路径
uwsgi --ini /home/lin01/mrlinfile/projects/django_web/wsgi.ini

启动完成后会提示:

[uWSGI] getting INI configuration from uwsgi.ini

表明uwsgi运行成功。
此时重启nginx,此项目就算部署完成,重启命令为:

systemctl restart nginx

至此整个项目部署完成,通过客户机就可以访问服务器了。


遇到的问题

在完成部署之后,打开浏览器访问,发现没有样式,网页长这个熊样: avatar

至于没有显示出样式,肯定是静态文件出问题了,要么就是根本就没创建静态文件目录,要么就是路径不对。

我呢,是两者都有问题。

现在来解决第一个问题。

第一步,在项目根目录下创建名为static的文件夹;

第二步,在settings里面设置

STATIC_ROOT = os.path.join(BASE_DIR, "static")

在项目的(不是APP的)urls.py里面设置

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

第三步,使用Python命令收集静态文件

python manage.py collectstatic

至此,第一个问题完美解决

现在解决第二个问题。

首先检查nginx目录下的conf.d/nginx.conf文件的配置,在下处查看静态文件夹位置是否跟你的实际位置一致。

# ...
location /static {
        alias /home/lin01/mrlinfile/projects/django_web/static; # your Django project's static files - amend as required
    }
# ...

如果不一致记得更改,如果一致,重启nginx服务即可。 不一致的改完此文件之后,还要再去另外一个地方检查,即nginx根目录下的nginx.conf,同样要在下处查看路径。

# ...
location /static {
        alias /home/lin01/mrlinfile/projects/django_web/static; # your Django project's static files - amend as required
    }
# ...

不一致的记得更改,一致的可以忽略。

(PS:这两个文件什么关系?)


django+nginx+uwsgi部署后修改代码不能及时更新

项目部署后,需要考虑uwsgi服务器,每次*修改代码都需要重启uwsgi*

方案:

代码修改后,进入服务器项目目录,查看uwsgi进程:

ps -ef|grep uwsgi 

然后kill掉所有进程:

killall -9 uwsgi

再重启uwsgi

uwsgi --ini uwsgi.ini