如何使用gunicorn配置在不同系统端口上使用相同IP运行的多个django项目



这个问题有点长,但我试图从我的疑虑和试验中提供尽可能多的信息。我一直在摆弄gunicorn和nginx配置,以便在AWS EC2 ubuntu服务器上托管3个django项目。我一直无法对它们进行排序以运行,也无法完全理解设置。

(1(首先我有它们如下(每个项目文件夹都有自己的venv设置(:

drwxrwxr-x 10 ubuntu ubuntu 4096 Mar 26 02:10 first_project/
drwxrwxr-x  7 ubuntu ubuntu 4096 Mar 26 01:20 second_project/
drwxrwxr-x  7 ubuntu ubuntu 4096 Mar 26 01:25 third_project/

(2(我尝试在/etc/systemd/system/文件夹中创建单独的.socket文件

-rw-r--r--  1 root root  112 Mar 26 02:17  gunicorn_first.socket
-rw-r--r--  1 root root  112 Mar 26 02:19  gunicorn_second.socket
-rw-r--r--  1 root root  112 Mar 26 02:22  gunicorn_third.socket

(3(并包含所有内容相同的

[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target

(4(添加.socket文件后,我添加了.service文件

-rw-r--r--  1 root root  112 Mar 26 02:35  gunicorn_first.service
-rw-r--r--  1 root root  112 Mar 26 02:39  gunicorn_second.service
-rw-r--r--  1 root root  112 Mar 26 02:44  gunicorn_third.service

(5(并添加如下内容

[Unit]
Description=gunicorn daemon
Requires=gunicorn_NTH.socket
After=network.target
[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu/NTH_project
ExecStart=/home/ubuntu/NTH_project/venv/bin/gunicorn --workers 3 --access-logfile - --bind unix:/run/gunicorn.sock NTH_project.wsgi:application
[Install]
WantedBy=multi-user.target

(6(最后我的nginx默认配置(/etc/nginx/sites-enabled/default)如下。我已经打开了8081、8082、8083端口-每个项目一个

server {
listen 8081;
server_name MY_IP;
location /first_project {
root /home/ubuntu/first_project;
}

location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn_first.sock;
}
}
server {
listen 8082;
server_name MY_IP;
location /second_project {
root /home/ubuntu/second_project;
}

location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn_second.sock;
}
}
server {
listen 8083;
server_name MY_IP;
location /third_project {
root /home/ubuntu/third_project;
}

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

上面的方法不起作用,所以我用http://unix:/run/gunicorn.sock->如果我这样做,当我从邮递员(http://MY_IP:8083/some_endpoint)向端点发送请求时,只有最后一个应用程序(8083(在工作。其他2个正在声明django错误,即未找到路由(404(

有人能帮助我如何确保所有3个应用程序都在运行吗

(http://MY_IP:8081/some1_endpoint)
(http://MY_IP:8082/some2_endpoint)
(http://MY_IP:8083/some3_endpoint)

如果你能指出1-6中哪些部分可以编辑,那就太好了提前谢谢。

您提到gunicorn.sock可以工作(用于其中一个站点(。套接字和服务配置是否在进行原始更改后重新启动,所有服务是否都在运行?

sudo systemctl restart <name>.socket
sudo systemctl restart <name>.service
sudo systemctl status <name>.service

这些服务是否可以直接访问(即当不使用nginx作为代理时(?请考虑修改gunicorn exec并查看错误日志。

ExecStart=/home/ubuntu/NTH_project/venv/bin/gunicorn --workers 3 --error-logfile /path/to/error.log ...

一旦确认服务可访问,请检查nginx配置是否有错误,确保proxy_params位于预期位置,或者如果有问题,请删除此行,并直接输入任何所需的代理配置。

sudo nginx -t

验证后,重新启动nginx以重新建立与Gunicorn的套接字连接,并验证没有进一步的问题。

sudo systemctl restart nginx
sudo systemctl status nginx
tail var/log/nginx/error.log

最新更新