所以我有一个 DigitalOcean 服务器和一个有效的域名,我想为我的后端获得 HTTPS 支持。我想使用 Let's Encrypt,我所看到的使用它的常用方法是与 Nginx 结合使用。我很困惑我应该如何运行它。如果我运行我的 docker 容器而不是端口 80 已经在使用,这意味着 nginx 服务无法启动,但是如果我启动 nginx,我就不能卷曲我的后端。
这是我后端的 Dockerfile
FROM tiangolo/uvicorn-gunicorn:python3.8
LABEL maintainer="Sebastian Ramirez <tiangolo@gmail.com>"
WORKDIR /app/backend
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
EXPOSE 8000
COPY . .
CMD ["uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port", "8000"]
这是我的 nginx 配置
server{
listen 80;
server_name example.xyz www.example.xyz;
location / {
include proxy_params;
proxy_pass http://127.0.0.1:8000;
}
}
我可以 curl 到 example.com 并获得 200 和 localhost:80
编辑: 我现在不能 curl 到我的域名,但我可以 curl 到 localhost:8000
答案 0 :(得分:1)
您有几个不同的选择,但首先将 uvicorn 设置为在另一个端口(例如 8080
)上运行可能是最简单的
然后使用 -p
to map ("publish") 容器的 web 端口到主机的一个(您可以设置任何端口之间的映射,但使其相同可以简化未来的理解)
docker run ... -p 8080:8080
然后在您的 nginx 配置中,将其设置为 proxy_pass 到您的映射端口
proxy_pass http://127.0.0.1:8080;
执行此操作后重新启动 nginx 以获取新配置