如何在AWS Windows Server实例上部署Django应用?
在AWS Windows实例部署Django应用的步骤
1. 基础环境搭建
- 从Python官网下载适配Windows Server的3.8+版本安装包,安装时务必勾选
Add Python to PATH选项。 - 打开管理员权限的PowerShell/CMD,验证安装:
python --version - 升级pip:
python -m pip install --upgrade pip - 安装核心依赖:
pip install django waitress(Waitress是Windows原生WSGI服务器,比Gunicorn更适配Windows环境)
2. 项目准备与配置
- 通过RDP文件传输、Git克隆等方式,将本地Django项目上传至Windows实例的指定目录(比如
C:\DjangoApps\myproject)。 - 进入项目根目录,修改
settings.py:- 关闭调试模式:
DEBUG = False - 添加允许访问的主机:
ALLOWED_HOSTS = ['实例公网IP', '你的域名'] - 配置静态文件收集路径:
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') STATIC_URL = '/static/'
- 关闭调试模式:
- 执行静态文件收集:
python manage.py collectstatic,确认staticfiles目录生成并包含所有静态资源。
3. 用Waitress启动应用(测试阶段)
- 在项目根目录创建启动脚本
run_app.py:from waitress import serve import os import sys sys.path.append(os.path.dirname(os.path.abspath(__file__))) from myproject.wsgi import application if __name__ == '__main__': # 绑定0.0.0.0允许外部访问,端口可自定义 serve(application, host='0.0.0.0', port=8000) - 运行脚本:
python run_app.py,本地浏览器访问http://实例公网IP:8000验证应用可用性。
4. 配置Windows服务(后台运行)
- 安装服务依赖:
pip install pywin32 - 创建服务脚本
django_service.py:import win32serviceutil import win32service import win32event import servicemanager import sys import os from waitress import serve from myproject.wsgi import application class DjangoAppService(win32serviceutil.ServiceFramework): _svc_name_ = "DjangoAppService" _svc_display_name_ = "Django应用服务" _svc_description_ = "Windows Server上运行的Django应用后台服务" def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) self.is_running = True def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.hWaitStop) self.is_running = False def SvcDoRun(self): servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.PYS_SERVICE_STARTED, (self._svc_name_, '')) self.main() def main(self): os.chdir('C:\\DjangoApps\\myproject') serve(application, host='0.0.0.0', port=8000) if __name__ == '__main__': if len(sys.argv) == 1: servicemanager.Initialize() servicemanager.PrepareToHostSingle(DjangoAppService) servicemanager.StartServiceCtrlDispatcher() else: win32serviceutil.HandleCommandLine(DjangoAppService) - 注册并启动服务:
- 管理员权限PowerShell执行:
python django_service.py install - 启动服务:
python django_service.py start - 可通过Windows服务管理器(services.msc)查看、启停服务。
- 管理员权限PowerShell执行:
5. IIS反向代理配置(生产环境可选)
若需用IIS处理静态资源、SSL证书,可按以下步骤操作:
- 打开服务器管理器,添加
Web服务器(IIS)角色,勾选CGI、URL重写模块。 - 安装
wfastcgi:pip install wfastcgi - 在IIS中创建网站,物理路径指向项目根目录,绑定公网IP与80/443端口。
- 在项目根目录创建
web.config:<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers> <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\Python39\python.exe|C:\Python39\Lib\site-packages\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" /> </handlers> <rewrite> <rules> <rule name="Static Files" stopProcessing="true"> <match url="^static/(.*)$" /> <action type="Rewrite" url="staticfiles/{R:1}" /> </rule> <rule name="Django App" stopProcessing="true"> <match url="^(.*)$" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="myproject/wsgi.py/{R:1}" /> </rule> </rules> </rewrite> </system.webServer> <appSettings> <add key="WSGI_HANDLER" value="myproject.wsgi.application" /> <add key="PYTHONPATH" value="C:\DjangoApps\myproject" /> <add key="DJANGO_SETTINGS_MODULE" value="myproject.settings" /> </appSettings> </configuration> - 重启IIS,访问
http://实例公网IP验证应用与静态资源可用性。
6. 数据库适配(Windows环境常用)
若使用SQL Server,需做以下配置:
- 安装ODBC Driver 17 for SQL Server。
- 安装依赖:
pip install pyodbc django-mssql-backend - 修改
settings.py数据库配置:DATABASES = { 'default': { 'ENGINE': 'sql_server.pyodbc', 'NAME': 'mydb', 'USER': 'dbuser', 'PASSWORD': 'dbpass', 'HOST': 'localhost', 'OPTIONS': { 'driver': 'ODBC Driver 17 for SQL Server', }, } }
关键注意事项
- 确保AWS安全组开放对应端口(80/443/8000)。
- 生产环境必须保持
DEBUG=False,避免泄露敏感信息。 - 定期备份项目文件与数据库。
- HTTPS配置可通过IIS导入AWS Certificate Manager颁发的证书实现。
内容的提问来源于stack exchange,提问作者Arun
相关产品推荐
相关产品推荐

