尝试使用 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 网络之外使用。
它要花钱,所以一定要检查价格。
我正在尝试在 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 网络之外使用。
它要花钱,所以一定要检查价格。