目录
Django项目本地部署
在进行以下步骤之前,首先要确保Django项目能够成功运行,即运行下面代码:
python manage.py runserver
如果运行没有问题,则可以准备在本地部署属于你的Django项目啦!!!
一、安装和启动Daphne或Waitress
1. 在PyCharm终端中安装:
-
打开PyCharm,进入你的Django项目,打开PyCharm终端(Terminal)。
-
安装Daphne或Waitress:
pip install daphne
或
pip install waitress
2. 在命令提示符中进入目标目录
- 先切换到目标驱动器:
C:\Users\user_name>E: # 假设Django项目在E盘
- 使用cd命令进入你想要的目录:
E:\>cd path\to\your\files # 需更换自己的目录
- 在目标目录中,可以使用dir命令查看目录内容,确保进入了正确的目录:
E:\path\to\your\files\>dir # 需更换自己的目录
3. 在命令提示符或PowerShell中运行Daphne 或Waitress:
-
打开命令提示符(Command Prompt)或PowerShell
-
进入你的Django项目目录,确认项目为以下结构(假设项目在
project
文件夹下,项目名称为myproject
):
project/
-- manage.py
-- myproject/
---- __init__.py
---- settings.py
---- urls.py
---- wsgi.py
- 使用以下命令启动Daphne或Waitress:
daphne -b 127.0.0.1 -p 8001 myproject.asgi:application # 若使用Daphne
或
waitress-serve --port=8001 myproject.wsgi:application # 若使用Waitress
二、 配置和运行Nginx(这一部分需要在操作系统的命令提示符或PowerShell中进行)
1. 安装Nginx
-
下载 Nginx for Windows:Nginx for Windows
-
解压并安装Nginx(记住安装目录)
2. 配置Nginx
-
打开Nginx配置文件nginx.conf,通常位于nginx安装目录下的conf文件夹中
-
添加以下内容来配置反向代理:
http {
...
upstream django {
server 127.0.0.1:8001; # Daphne 或 Waitress 服务地址和端口
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://django;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
- 配置静态文件(可选)
A. 在Django中,静态文件的路径通常由STATIC_ROOT指定。你可以在settings.py中找到或设置它。一般为STATIC_ROOT = '/path/to/your/static/files'
B. 编辑你的nginx.conf文件,增加一个新的location块,用于处理静态文件。假设你的静态文件目录是C:/path/to/your/static/files,配置如下(注意:location指令必须放在server块内,而不是http块内。确保你的nginx.conf文件中location指令在正确的位置。):
server {
… …
location /static/ {
alias C:/path/to/your/static/files/; # 需替换自己的路径
# 或者使用 root:
# root C:/path/to/;
# 注意: 如果使用 root, 你需要确保 /static/ 对应的是实际文件路径的子路径
# 例如: 你的文件路径为 C:/path/to/static/files/
# 那么 root 应该配置为 C:/path/to/static/
}
location / {
… …
}
}
C. 收集静态文件:python manage.py collectstatic
3. 启动Nginx
打开命令提示符,进入Nginx安装目录,运行以下命令启动Nginx:start nginx
4. 补充Nginx命令
-
停止Nginx:
nginx -s stop
-
如果修改了配置文件,重新加载配置:
nginx -s reload
-
查看Nginx错误日志文件,以确认是否有其他错误消息:
notepad E:\path\to\your\nginx\logs\error.log
三、 验证和设置为Windows服务
1. 验证设置
-
打开浏览器,访问http://127.0.0.1:8001/。你应该能看到Django项目运行的页面
-
如果出现错误,请检查:
· Daphne或Waitress是否正在运行,并监听正确的端口
· Nginx配置是否正确,并且Nginx服务是否已启动
2. 设置为Windows服务
1)打开命令提示符(以管理员身份运行),导航到 nssm 目录(若没有,需先安装)
2)Nginx设置为服务
· 使用nssm工具(Non-Sucking Service Manager)将Nginx添加为Windows服务:
nssm install nginx "C:\path\to\nginx.exe" -p "C:\path\to\nginx.conf" # 目录为安装目录
B. 使用nssm set命令来设置服务的启动目录和参数
nssm set nginx AppDirectory "E:\path\to\your\nginx\files"
nssm set nginx AppParameters "-p E:\path\to\your\nginx\conf\nginx.conf"
可以检查服务的配置,确保设置正确:nssm get nginx
配置完成后,启动Nginx服务:nssm start nginx
C. Daphne或Waitress设置为服务(选其一)
· Daphne服务
安装:nssm install daphne "C:\path\to\python.exe"
配置:
nssm set daphne AppDirectory "C:\path\to\your\project"
nssm set daphne AppParameters "-m daphne -b 127.0.0.1 -p 8001 myproject.asgi:application"
启动:nssm start daphne
· Waitress服务
安装:nssm install waitress "C:\path\to\python.exe"
配置:
nssm set waitress AppDirectory "C:\path\to\your\project"
nssm set waitress AppParameters "-m waitress --port=8001 myproject.wsgi:application"
启动:nssm start waitress
通过以上这些步骤,你可以在Windows环境下配置生产服务器,无需手动运行程序即可运行Django项目(访问 http://127.0.0.1:8001/),并将其设置为系统服务,以便在启动时自动运行。
四、 关于重启服务
1. 在pycharm的终端中
1)静态内容更新:无需重启服务,但需要python manage.py collectstatic
2)数据库结构更新:无需重启服务,但可能需要运行迁移命令
python manage.py makemigrations
python manage.py migrate
2. 在命令提示符中(需要进入安装目录)
1)后端代码更新:需要重启Waitress服务以应用更改: nssm restart waitress
2)Nginx配置更新:需要重新加载或重启Nginx服务: nssm restart nginx
关于选择Daphne或Waitress作为Django的生产服务器,可以根据以下几点考虑:
1. Daphne
1)优点:
异步支持:Daphne完全支持异步应用,这意味着如果你的Django项目使用了Django
Channels或其他异步功能,Daphne是更合适的选择。
性能:对于处理大量并发连接,Daphne的性能可能会更好,因为它是为异步操作而设计的。
2)缺点:
复杂性:配置可能比Waitress稍微复杂一些,尤其是如果你对异步编程不太熟悉。
2. Waitress
1)优点:
简单易用:Waitress 是一个同步的WSGI服务器,使用和配置都非常简单,特别适合传统的同步Django项目。
轻量级:对于简单的项目,Waitress的资源占用较小,适合在笔记本电脑这样的环境中运行。
Windows兼容性:Waitress对Windows的支持非常好,运行起来相对稳定。
2)缺点:
异步支持较差:如果你的项目需要处理异步任务,Waitress可能不太适合。
3. 性能和资源占用
在资源占用方面,Waitress通常会比Daphne轻量一些,尤其是在处理同步请求时。然而,如果你的项目需要处理大量并发连接或异步任务,Daphne可能会更高效。
4. 选择建议
如果你的项目是传统的同步Django应用,并且你希望配置简单且资源占用小,那么Waitress可能是更好的选择。
如果你的项目使用了Django Channels或其他异步功能,需要处理大量并发连接,那么Daphne会是更好的选择。