Ubuntu部署django+uwsgi+nginx教程

前言

为了方便网站集成功能比较好的采集系统,打算把网站程序换成python,物色了一遍选择了django这个框架,记录下部署django+uwsgi+nginx环境的过程,这里也是边学边写文章,如果有不对的地方欢迎大佬指出。

环境

系统:Ubuntu 22.04

python:3.10.6

web服务:nginx

安装pip

先安装pip,再用pip安装需要的包

sudo apt install -y python3-pip

pip修改国内镜像源可以查看这篇文章:

安装django、uwsgi

使用pip来安装django、uwsgi

pip install django
pip install uwsgi

创建网站项目

先建立存放项目的目录,然后设置所属用户,我放在/wwwroot目录下

sudo mkdir /wwwroot
sudo chown -R notevm:notevm /wwwroot

然后使用django-admin命令创建一个项目

cd /wwwroot
django-admin startproject notevm

创建项目成功后会有个notevm目录,目录结构如下:

notevm
├── manage.py
└── notevm
    ├── asgi.py
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

配置uwsgi

uwsgi支持ini、xml等方式配置,这里以ini为例

在项目目录下新建个uwsgi文件夹。

cd /wwwroot/notevm
mkdir uwsgi

然后在uwsgi目录里创建一个uwsgi.ini文件,写入以下配置

#添加配置选择
[uwsgi]
#配置和nginx连接的socket连接
socket=127.0.0.1:8800
#配置项目路径,项目的所在目录
chdir=/wwwroot/notevm/
#配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录名
wsgi-file=notevm/wsgi.py
#配置启动的进程数
processes=4
#配置每个进程的线程数
threads=2
#配置启动管理主进程
master=True
#配置存放主进程的进程号文件,用于重启、停止服务
pidfile=/wwwroot/notevm/uwsgi/uwsgi.pid
#配置dump日志记录
daemonize=/wwwroot/notevm/uwsgi/uwsgi.log

然后使用以下命令启动uwsgi

uwsgi --ini /wwwroot/notevm/uwsgi/uwsgi.ini

如果返回[uWSGI] getting INI configuration from /wwwroot/notevm/uwsgi/uwsgi.ini启动成功。

执行netstat -ntpl命令可以看到8800端口已经开启了。

可以通过以下命令来重启、停止uwsgi:

# 停止服务
uwsgi --stop /wwwroot/notevm/uwsgi/uwsgi.pid

# 重启服务
uwsgi --reload /wwwroot/notevm/uwsgi/uwsgi.pid

配置nginx

先找到nginx配置文件路径,我的是/usr/local/nginx/conf/,我的nginx.conf文件后面有一句include vhost/*.conf;,所以我只需要在/usr/local/nginx/conf/vhost/目录下创建个conf文件就可以。

/usr/local/nginx/conf/vhost/目录下建立一个notevm-uwsgi-django.conf文件,然后写入以下配置:

server {
        listen 80;
        server_name  www.notevm-django.com; #改为自己的域名
        charset utf-8;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:8800;  #端口要和uwsgi里配置的一样
           uwsgi_param UWSGI_SCRIPT notevm.wsgi;  #wsgi.py所在的目录名+.wsgi
           uwsgi_param UWSGI_CHDIR /wwwroot/notevm/; #项目路径

        }
        location /static/ {
        alias /wwwroot/notevm/static/; #静态资源路径,js、css、图片、字体等
        }
    }

保存配置后执行sudo nginx -t查看配置是否正确,如果返回以下信息说明配置正确。

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

然后重启nginx服务就可以

sudo nginx -s reload

由于是本地部署测试的,我是修改/etc/hosts文件将域名指向127.0.0.1。

然后用浏览器打开www.notevm-django.com

如果配置成功的话可以看到以下页面:

Ubuntu部署django+uwsgi+nginx教程

这错误信息是因为没绑定域名导致的,我们只是在nginx绑定了域名,django还没绑定。

修改/wwwroot/notevm/notevm/settings.py,在ALLOWED_HOSTS里面添加域名就可以了。

Ubuntu部署django+uwsgi+nginx教程

修改后重启uwsgi服务才能生效:

uwsgi --reload /wwwroot/notevm/uwsgi/uwsgi.pid

重启uwsgi服务后刷新以下浏览器就能看到django的欢迎页面了

Ubuntu部署django+uwsgi+nginx教程

原创文章,作者:小哆啦,如若转载,请注明出处:https://www.notevm.com/a/6784.html

(1)
小哆啦的头像小哆啦
上一篇 2023年2月25日 16:51
下一篇 2023年3月11日 13:04

相关推荐

发表回复

登录后才能评论

评论列表(2条)