【问题标题】:How to change http to https using LetsEncrypt with 'docker: nginx + uwgsi + django + solr + db + ...'?如何使用带有'docker:nginx + uwgsi + django + solr + db + ...'的LetsEncrypt将http更改为https?
【发布时间】:2019-02-24 19:31:27
【问题描述】:

目前我使用官方的nginx docker 镜像 + 我自己的 'django with uwsgi' 构建,一切正常。我想使用jwilder/nginx-proxy + jrcs/letsencrypt-nginx-proxy-companionSSL 添加到项目中。

我的项目结构如下:

myproject/
| -- data/
| -- media/
| -- static/
| -- sources/
     | -- dockerfiles/
          | -- nginx/
               | -- nginx.conf
               | -- uwsgi_params
          | -- solr/
               | -- default/ (configs)
               | -- Dockerfile
          | -- web/
               | -- Dockerfile
               | -- requirements.txt
     | -- myproject/
          | -- app_1/
          | -- app_2/
          | -- settings/
               | -- myproject_uwsgi.ini
     | -- docker-compose.yml

相关配置如下:

# myproject/sources/docker-compose.yml

version: '2'
services:
  nginx:
    image: nginx:latest
    container_name: myproject_nginx-container
    ports:
      - "80:80"
    depends_on:
      - web
    volumes:
      - ./dockerfiles/nginx:/etc/nginx/conf.d
      - ../static:/static
      - ../media:/media

  web:
    build: ./dockerfiles/web/
    container_name: myproject_django-container
    command: bash -c 'uwsgi --ini ./settings/myproject_uwsgi.ini'
    volumes:
      - ./web:/web
      - ../static:/static
      - ../media:/media

  solr-docker:
    build: ./dockerfiles/solr/
    container_name: myproject_solr-container
    entrypoint:
      - docker-entrypoint.sh
      - solr-precreate
      - default
    ports:
      - "8983:8983"
    volumes:
      - ./dockerfiles/solr/default:/opt/solr/server/solr/mycores/default  # configs
      - ../data/solr/default/data:/opt/solr/server/solr/mycores/default/data  # indexes

  # other-services...

下一个:

# myproject/sources/myproject/settings/myproject_uwsgi.ini

[uwsgi]

master = True
lazy-apps = True

# Number of worker processes for handling requests
%k = cpu count
processes = %(%k * 2)

# Number of threads for handling requests
threads = %(%k * 2)

# Respawn processes that take more than ... seconds
# harakiri = 20

# Respawn processes after serving ... requests
max-requests = 5000

# Clear environment on exit
vacuum = True

# the base directory (full path)
chdir = /myproject/

# Django's wsgi file (path starting from chdir/)
module = settings.wsgi:application

# location of settings
# env = DJANGO_SETTINGS_MODULE=$(DJANGO_PROJECT_NAME).settings

socket = :8000

还有一个:

# myproject/dockerfiles/nginx/nginx.conf

upstream django {
  ip_hash;
  server web:8000;
}

# Redirection from WWW to non-WWW
server {
    listen 80;
    server_name www.myproject.com;

    rewrite ^/(.*) http://myproject.com/$1 permanent;
}

server {
    listen 80 default_server;
    server_name myproject.com;
    charset utf-8;
    keepalive_timeout 5;

    location /media  {
        alias /media;
    }

    location /static {
        alias /static;
    }

    location / {
        uwsgi_pass django;
        include uwsgi_params;
    }
}

uwsgi_params文件有一个典型的配置,可以看到HERE

如何将http 转换为https 您可以在下面的答案中找到。

【问题讨论】:

    标签: django docker nginx https uwsgi


    【解决方案1】:

    为了实现https,需要在现有的docker-compose.yml 中添加下两个图像:jwilder/nginx-proxy + jrcs/letsencrypt-nginx-proxy-companion 并添加环境变量为:nginx 通过服务django 的服务uwsgi + 代表solr。其他所有内容(配置)都可以保持原样。

    所以这是最终结果:

    # myproject/sources/docker-compose.yml
    
    version: '2'
    services:
      nginx-proxy: # <-- NEW SECTION
        image: jwilder/nginx-proxy
        container_name: myproject_nginx-proxy
        ports:
          - "80:80"
          - "443:443"
        volumes:
          - "/var/run/docker.sock:/tmp/docker.sock:ro"
          - "/etc/nginx/conf.d"
          - "/etc/nginx/vhost.d"
          - "/usr/share/nginx/html"
          - "./volumes/proxy/certs:/etc/nginx/certs"
        labels:
          - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
    
      letsencrypt-companion: # <-- NEW SECTION
        restart: always
        image: jrcs/letsencrypt-nginx-proxy-companion
        container_name: myproject_letsencrypt-companion-container
        volumes_from:
          - nginx-proxy
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock:ro"
          - "./volumes/proxy/certs:/etc/nginx/certs:rw"
    
      # ###############################
      # Old settings. ALMOST identical.
      nginx:
        image: nginx:latest
        container_name: myproject_nginx-container
    
        # ports:  <-- REMOVE SECTION
        #   - "80:80"
        volumes:
          - ./dockerfiles/nginx:/etc/nginx/conf.d
          - ../static:/static
          - ../media:/media
        depends_on:
          - nginx-proxy # <-- NEW SECTION
          - web
        environment: # <-- NEW SECTION
          - VIRTUAL_HOST=myproject.com
          - LETSENCRYPT_HOST=myproject.com
          - LETSENCRYPT_EMAIL=info@myproject.com
    
      web:
        build: ./dockerfiles/web/
        container_name: myproject_django-container
        command: bash -c 'uwsgi --ini ./settings/myproject_uwsgi.ini'
        volumes:
          - ./web:/web
          - ../static:/static
          - ../media:/media
    
      solr-docker:
        build: ./dockerfiles/solr/
        container_name: myproject_solr-container
        entrypoint:
          - docker-entrypoint.sh
          - solr-precreate
          - default
        # ports:  <-- REMOVE SECTION
        #   - "8983:8983"
        volumes:
          - ./dockerfiles/solr/default:/opt/solr/server/solr/mycores/default  # configs
          - ../data/solr/default/data:/opt/solr/server/solr/mycores/default/data  # indexes
        environment: # <-- NEW SECTION
          - VIRTUAL_HOST=solr.myproject.com
          - VIRTUAL_PORT=8983
          - LETSENCRYPT_HOST=solr.myproject.com
          - LETSENCRYPT_EMAIL=info@myproject.com
    
      # other-services...
    

    如果您想现在打开Solr 的仪表板,而不是myproject.com:8983,您需要使用solr.myproject.com

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2018-05-22
      • 2015-01-21
      • 2016-07-10
      • 2019-05-21
      相关资源
      最近更新 更多