尝试使用 Gunicorn 和 Nginx 将 django 应用程序部署到 AWS EC2 实例

Trying to deploy django app to AWS EC2 instance using Gunicorn and Nginx

我正在尝试在 AWS EC2 上部署一个 django 应用程序,并在此过程中使用 gunicorn 和 Nginx,我遵循了本教程 link。我不确定出了什么问题,这是我第一次使用 AWS EC2,当我尝试启动实例的 IP 地址时,它返回为:

“无法打开页面,因为 Safari 无法与服务器建立安全连接”

在我的 aws 控制台中,EC2 'instance state' 显示它是 运行

它已在 ubuntu 18.04 中设置,我还在我的 EC2 实例中设置了安全组,使用 http、https、443、80、8000、5432 和 22 都允许来自任何 IP 地址,除了只有我的 ip 地址作为访问权限的 22。同样在我的 Django 应用程序设置 'ALLOWED_HOSTS' 中,我添加了实例 IP 地址以及 '*'。

这是我的 gunicorn.socket 文件:

[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/run/gunicorn.sock

[Install]
WantedBy=sockets.target

和我的 gunicorn 服务文件:

[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
User=djangoadmin
Group=www-data
WorkingDirectory=/home/ubuntu/djangoapp1 /
ExecStart=/home/djangoadmin/pyapps/venv/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
djangoapp1.wsgi:application

[Install]
WantedBy=multi-user.target

ngnix 配置文件:

server {
listen 80;
listen 443;
server_name **.***.***.*;

location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/ubuntu/djangoapp1;
}

location /media/ {
root /home/ubuntu/djangoapp1;    
}

location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}

我用 :

检查 gunicorn 插座
sudo systemctl start gunicorn.socket
sudo systemctl enable gunicorn.socket
sudo systemctl status gunicorn.socket

它显示 运行 很好

我还创建了一个 nginx conf 文件:

sudo vim /etc/nginx/sites-available/djangoapp1

并将其链接到:

sudo ln -s /etc/nginx/sites-available/djangoapp1 /etc/nginx/sites-enabled

然后重启nginx服务器:

sudo systemctl restart nginx

仍然没有任何效果!将不胜感激

解决方案:

nginx 配置中的错误 server_name 配置

您是否为您的 EC2 实例分配了弹性 IP 地址?

Select EC2 实例 > 操作 > 网络 > 管理 IP 地址。然后使用选项“添加或编辑 IPv4 public IP 将弹性 IP 分配给此实例或网络接口”。

创建弹性IP 导航到弹性 IP 地址 link> 单击关联 IP Select关联IP并保存的实例。 现在您将拥有 public IP 的 EC2 实例,而没有 restarting/deleting EC2 实例。

否则,您的 EC2 实例将无法在 Aws 网络之外使用。

它要花钱,所以一定要检查价格。