前言
为了方便网站集成功能比较好的采集系统,打算把网站程序换成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
。
如果配置成功的话可以看到以下页面:

这错误信息是因为没绑定域名导致的,我们只是在nginx绑定了域名,django还没绑定。
修改/wwwroot/notevm/notevm/settings.py
,在ALLOWED_HOSTS
里面添加域名就可以了。

修改后重启uwsgi服务才能生效:
uwsgi --reload /wwwroot/notevm/uwsgi/uwsgi.pid
重启uwsgi服务后刷新以下浏览器就能看到django的欢迎页面了

文章参考django中文网:https://www.django.cn/article/show-32.html
原创文章,作者:小哆啦,如若转载,请注明出处:https://www.notevm.com/a/6784.html