通过 URL 而不是 IP 地址访问本地 dockerized Django 项目

时间:2021-04-09 17:41:16

标签: django docker nginx

我有一个在 docker 容器中运行的小型 Django 项目,并且仅在本地(不需要将它暴露给整个互联网,只是我的办公室),但由于它是一个公司项目,我想给使用它的人可以使用 URL(可能类似于“projectName.corporateWhereIWork.org”)而不是主机 IP 地址:端口来访问它。老实说,我已经阅读并搜索过诸如“反向代理”、“伴侣”、“ACME”、“DNS”之类的术语,但这些概念对我来说很难理解,我不知道如何配置nginx 正确。

这是我的 nginx 配置文件(看这是一个非常简单的配置):

client_max_body_size 10M;

upstream project {  
  ip_hash;
  server project:8000;
}

server {

    location /static/ {    
        autoindex on;    
        alias /src/static/; 
    }

    location /media/ {
        autoindex on;
        alias /src/media/;
    }

    location / {
        proxy_pass http://project/;
    }
    listen 8000;
    server_name localhost;
}

还有我的 Django 图像入口点:

CMD ["sh", "-c", "python manage.py collectstatic --no-input; python manage.py migrate; gunicorn project.wsgi -b 0.0.0.0:8000"]

两个容器都暴露在同一个端口。

1 个答案:

答案 0 :(得分:1)

如果只是少数人在同一台机器上工作,那么最简单的方法就是在每台机器上编辑本地主机文件。例如。在 Windows 上,您可以将 192.168.0.10 example.com 之类的条目附加到 C:\Windows\System32\drivers\etc\hosts,该机器现在会将 example.com 解析为给定的 IP 地址。

如果您的要求涉及许多人和机器,那么不幸的是,您将不得不熟悉 DNS。

不过别担心。出于您所述的目的,您不需要了解比 DNS 的基本功能更复杂的东西——即将名称解析为 IP 地址,如上面 hosts 示例中所做的那样。

此处您感兴趣的条目类型是 A(将名称解析为 IP)和 CNAME(将名称解析为另一个名称)。例如。您可以设置将 A 解析为 example.com192.168.0.10 记录和将 CNAME 解析为 www.example.comexample.com 记录。然后后者会将 www.example.com 解析为为 example.com 提供的 IP 地址。

然而,您实际上如何设置它需要您进行一些研究。您可能会很幸运,并在您的办公室路由器中内置了该功能,但不要指望它。