Caddy服务器:使用docker-compose在反向代理后面运行Django应用

问题描述

我刚刚发现了CaddyServer,它看起来非常有前途,可以与Docker在同一VPS上运行多个应用程序。

但是我正在努力将docker-compose.yml文件设置为可用于外部域。我将在稍后的生产中使用gunicorn,现在我很乐意让Django runserver正常工作。

这是我的目录结构:

caddy/
    Caddyfile
    docker-compose.yml
djangoApp/
    docker-compose.yml
    Dockerfile
    config/
       ...
    manage.py
    requirements.txt
myghostapp/
    

这是caddy/Caddyfile

{
    email [email protected] 
    acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
}

app1.example.com {
    reverse_proxy django:8000
}

# app2.example.com {
#     reverse_proxy ghost:2368
# }

app2.example.com是我想要的第二个域,它指向虚幻应用程序。无需评论(我将其包括在内以供参考)可使用此功能。

这是caddy/docker-compose(反向代理)

version: "3"

networks:
    web:
        external: true

services:
    caddy:
        image: caddy:2-alpine
        restart: unless-stopped
        ports:
            - "80:80"
            - "443:443"
        volumes:
            - /data/caddy/Caddyfile:/etc/caddy/Caddyfile
        networks:
            - web

    django:
        build:
            context: /data/djangoApp/
            dockerfile: /data/djangoApp/Dockerfile
        restart: unless-stopped
        environment:
            - url=app1.example.com 
        volumes:
            - /data/djangoApp:/app/
        networks:
            - web

    # ghost:
    #     image: ghost:3.22-alpine
    #     restart: unless-stopped
    #     environment:
    #         - url=app2.example.com 
    #     volumes:
    #         - /data/myghostapp:/var/lib/ghost/content
    #     networks:
    #         - web

就目前而言,让Django应用程序正常运行将是很棒的事情。

djangoApp文件夹中,我有一个像这样的Dockerfile:

# djangoApp/Dockerfile
FROM python:3

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN mkdir /app
WORKDIR /app
COPY requirements.txt /app/
RUN pip install -r requirements.txt
COPY . /app/

还有一个docker-compose.yml

# djangoApp/docker-compose.yml
version: "3.8"

services:
  db:
    image: postgres:10.5-alpine
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    networks:
      - web
      
  djangy:
    build: .
    command: bash -c "python /app/manage.py migrate --noinput && python /app/manage.py runserver 0.0.0.0:8000"
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db
    networks:
      - web
    links:
      - db:db  

volumes:
  postgres_data:

networks:
  web:
    external: true

我一直认为在我的VPS上,我可以 docker create network web 然后运行 docker-compose up --build caddy/内,然后是djangoApp/

但是我明白了 当我尝试在浏览器中访问域时,lookup django on 127.0.0.11:53: no such host记录了日志中的错误msg。

任何帮助将不胜感激!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)