如何将 Django 应用程序部署到 (AWS) 域名?
Posted
技术标签:
【中文标题】如何将 Django 应用程序部署到 (AWS) 域名?【英文标题】:How do I deploy Django app to (AWS) domain name? 【发布时间】:2018-03-26 06:51:54 【问题描述】:我只使用 Django 几个星期,刚刚学习了部署。我有一个 AWS EC2 实例,我可以将我的 Django 网站/应用程序部署到该实例(即,如果我在浏览器中访问 IP 地址,我就可以访问我的网站)。但是,我不知道如何将同一个网站部署到我在 AWS 上注册的域名。
我遵循 AWS 的文档 (http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-ec2-instance.html),https://cachecheck.opendns.com/ 显示我的域名路由到我的 EC2 实例。但是,当我在浏览器中访问我的域名时,它会显示 400 Bad Request。当我设置 nginx 或 gunicorn 时,我还需要做些什么吗?我尝试将 nginx 代码中的 yourEC2.public.ip
替换为我的域名而不是 IP 地址。
我无法在网上找到任何其他关于域名部署的资源,尤其是 AWS。
这是我用于部署到 EC2 实例的内容:
settings.py
:
DEBUG = False
ALLOWED_HOSTS = ['yourEC2.public.ip']
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
(venv) ubuntu@54.162.31.253:~myRepoName$ python manage.py collectstatic
独角兽
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/repoName
ExecStart=/home/ubuntu/repoName/venv/bin/gunicorn --workers 3 --bind
unix:/home/ubuntu/repoName/projectName.sock
projectName.wsgi:application
[Install]
WantedBy=multi-user.target
nginx:
server
listen 80;
server_name yourEC2.public.ip;
location = /favicon.ico access_log off; log_not_found off;
location /static/
root /home/ubuntu/myRepoName;
location /
include proxy_params;
proxy_pass http://unix:/home/ubuntu/myRepoName/projectName.sock;
【问题讨论】:
你在Route53中创建了一个记录集,A记录到IP地址还是CName到EC2实例的公共域名? @Ashan:是的,我创建了一个记录集并将值设置为我的 EC2 实例/IP 地址。 @Selcuk:是的,如果我输入我的 IP 地址,我的 Django 应用程序/网站就会出现。只是在输入域名时不起作用。我会尝试设置ALLOWED_HOSTS
。
【参考方案1】:
您应该将ALLOWED_HOSTS
设置为您的主机名,例如['example.com', 'www.example.com']
:
表示此 Django 站点可以提供的主机/域名的字符串列表。这是一种防止 HTTP Host 标头攻击的安全措施,即使在许多看似安全的 Web 服务器配置下也可能发生这种攻击。
【讨论】:
【参考方案2】:我遇到了同样的问题,实际上发现您的各种帖子也在寻求解决方案。有趣的是,我们俩在如此相似的时间窗口中遇到了完全相同的问题。
我做了三件事:
首先,正如 Selcuk 所说,我更新了我的 ALLOWED_HOSTS
:
ALLOWED_HOSTS = ['12.345.67.890', 'sub.domain.com', 'www.sub.domain.com']
然后,我还在我的 nginx 配置中编辑了server_name
设置:
server_name 12.345.67.890 sub.domain.com www.sub.domain.com;
最后,我重新启动了 nginx 并重新启动机器以确保一切正常:
sudo service nginx restart
sudo reboot
在此之后,我能够加载我的域并且应用程序将加载。我知道你已经找到了你的解决方案,但我想把它正式化,因为我在 *** 上找到了你的问题,希望其他人也能这样,这样他们就可以幸免于难!
【讨论】:
以上是关于如何将 Django 应用程序部署到 (AWS) 域名?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Django Fixtures 部署到 Amazon AWS
将 Django 部署到 AWS Fargate 时,如何将本地 ip 添加到 ALLOWED_HOSTS
ModuleNotFoundError:没有名为“应用程序”的模块 [将 Django 部署到 AWS]
将 Django 应用程序部署到 AWS 时出现“ValueError:要解压的值太多”