【问题标题】:HTTPS for docker containersDocker 容器的 HTTPS
【发布时间】:2022-01-10 09:39:28
【问题描述】:

我正在开发一个工作流服务作为一个培训项目。从细节中抽象出来,这个问题你需要知道的一切都在image。对于部署,我租用了一台服务器并在其上运行 docker-compose。一切正常,但我担心的是端口 8000 和 5432 是开放的。

第一个问题是,值得担心吗?如果是这样,如何摆脱它? Docker-compose 文件内容如下

version: "3"

services:
  db:
    container_name: 'emkk-db'
    image: postgres
    volumes:
      - ./backend/data:/var/lib/postgresql/data
    env_file:
      - ./backend/db.env
    ports:
    - "5432:5432"

  backend:
    container_name: 'emkk-backend'
    image: emkk_backend
    build: ./backend
    volumes:
      - ./backend:/emkk/backend
    env_file:
      - ./backend/.env
    ports:
      - "8000:8000"
    depends_on:
      - db

  frontend:
    container_name: 'emkk-frontend'
    image: emkk_frontend
    build: ./frontend
    command: npm run start
    env_file:
      - ./frontend/.env
    volumes:
      - /emkk/frontend/node_modules
      - ./frontend:/emkk/frontend
    ports:
      - "80:80"
    depends_on:
      - backend

我也想配置 HTTPS 协议。我尝试安装 nginx 并使用 certbot 在其上放置证书,然后将请求代理到容器。我为此坐了几个小时,但我仍然没有设法为 nginx 起始页面实现比 HTTPS 更好的东西。

也许我在做完全错误的事情,但我是新手,我以前没有处理过部署。我会很感激您的回答,其中将包含您如何做到这一点的想法或示例。

【问题讨论】:

    标签: docker nginx https ssl-certificate certbot


    【解决方案1】:

    如果您没有从外部服务器连接到 8000(可能是 WAS)或 5432(数据库),您可以将 docker-compose.yml 更改为:

    • 您必须只为外部客户端公开必要的端口。
    • 当你从web连接到backend时,你应该使用backend:8000这样的服务名
    • 当您从backend 连接到db 时,您应该使用类似db:5432 的服务名称
    version: "3"
    
    services:
      db:
        container_name: 'emkk-db'
        image: postgres
        volumes:
          - ./backend/data:/var/lib/postgresql/data
        env_file:
          - ./backend/db.env
    
      backend:
        container_name: 'emkk-backend'
        image: emkk_backend
        build: ./backend
        volumes:
          - ./backend:/emkk/backend
        env_file:
          - ./backend/.env
        depends_on:
          - db
    
      frontend:
        container_name: 'emkk-frontend'
        image: emkk_frontend
        build: ./frontend
        command: npm run start
        env_file:
          - ./frontend/.env
        volumes:
          - /emkk/frontend/node_modules
          - ./frontend:/emkk/frontend
        ports:
          - "80:80"
        depends_on:
          - backend
    

    而且,您可以使用 nginx proxy manager 使用 HTTPS 和来自 certbot 的证书进行服务。

    【讨论】:

      猜你喜欢
      • 2017-01-30
      • 2017-10-14
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      • 2016-05-19
      • 2019-02-10
      • 1970-01-01
      相关资源
      最近更新 更多