Git Product home page Git Product logo

docker-nginx-letsencrypt-proxy's Introduction

Docker Nginx Proxy with Let's Encrypt

GitHub Release Version Docker Hub Pulls Docker Hub Stars GitHub Open Issues

Docker Nginx Proxy with Let's Encrypt simplifies application integration with Let's Encrypt.

This project provides a simple nginx configuration and auto-updating Let's Encrypt for integration with existing services.

Docker Hub image: docker-nginx-letsencrypt-proxy

Quick Deploy (docker-compose.yml)

"Put this in your stack and deploy it."

version: '2'
docker-nginx-letsencrypt-proxy:
    build: .
    ports:
        - 80:80
        - 443:443
    container_name: docker-nginx-letsencrypt-proxy
    log_opt:
         max-size: 50k
    environment:
        - LE_ENABLED=true
        # - LE_TEST=true # LE is rate limited. While doing development, be sure to set testing mode so requests don't count against our quota.
        - [email protected] # Your email, here
        - LE_DOMAIN=domain.com #A comma separated list of your domains, here
        - PROXY_DEST=https://www.google.com #A comma separated list of destinations for the proxied services
        # - PROXY_PORT=8443
        # - SLACK_NOTIFICATIONS_INFRA_URL=https://hooks.slack.com/services/???????? # Be sure to fill this in using your URL for the slack webhook integration
    volumes:
      - "/etc/letsencrypt"
    # links:
    #   - mycontainer
    # If using version 1, link to your container

Configuration

The following docker environment variables are required for proper usage:

  • LE_EMAIL, the email address for use with Let's Encrypt (simply registers your public key for retrieval).
  • LE_DOMAIN, a comma separated list of domains current configured to point at your server
  • PROXY_DEST, a comma separated list of destinations for the proxied services; along the lines of http://mydestination.com or http://localhost:8000. There should be as many destinations as LE_DOMAINs; however, for each without a corresponding destination, the first destination will be used for the remaining LE_DOMAINs.
  • PROXY_PORT, the port on which the https connections will be served. Defaults to 443
  • SLACK_NOTIFICATIONS_INFRA_URL (optional), the slack webhook integration URL to receive slack notifications upon certificate update or letsencrypt-auto error.
  • LE_ENABLED (optional, defaults to true), For local, non-public development stacks, set to false. This will disable requests to Let's Encrypt for certificates and use self signed certificates instead.
  • LE_TEST (optional), LE is rate limited. While testing your stack, be sure to set testing mode so requests don't count against your domain quota. Such certificates will not be valid, but are sufficient to test your setup.
  • TLS_SETTING (optional), one of MODERN, INTERMEDIATE, OR OLD. All other values will be igored. MODERN is default to allow for the best security setting.
  • LOGROTATE_SIZE (optional, defaults to 10k), the size limit of the log files
  • LOGROTATE_FILE_LIMIT (optional, defaults to 7), the number of log files to keep
  • CRON_SCHEDULE (optional, defaults to 0 * * * *), the cron schedule for logrotate
Configuration Oldest compatible client
MODERN Firefox 27, Chrome 30, IE 11 on Windows 7, Edge, Opera 17, Safari 9, Android 5.0, Java 8
INTERMEDIATE Firefox 1, Chrome 1, IE 7, Opera 5, Safari 1, Windows XP IE8, Android 2.3, Java 7
OLD Windows XP IE6, Java 6

How It Works

When certificates are updated, the event handler will:

  1. Move the resulting certificates to /etc/nginx/ssl
  2. Tell supervisor to restart nginx: supervisorctl restart nginx
  3. If SLACK_NOTIFICATIONS_INFRA_URL is set, send a notification to your slack channel.

The premise is simple:

  • The image is configured to request a Let's Encrypt certificate for each of the (comma separated) domains listed in the LE_DOMAIN env variable provided in docker-compose.yml
    • Since Let's Encrypt is rate limited, an env variable of LE_TEST=true can be provided during testing (in docker-compose.yml).
  • supervisor handles the running of nginx and the letsencrypt event handler, which is run every hour.
  • If the hourly Let's Encrypt script yields an updated certificate, files are copied and nginx is restarted using the supervisor control call.
    • Provide a SLACK_NOTIFICATIONS_INFRA_URL in the docker-compose.yml to get a Slack notification of a certificate update!

docker-nginx-letsencrypt-proxy's People

Contributors

bittner avatar cfairweather avatar jjacobson93 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.