Docker Web SSL / HTTPS

Someone from Upwork helped me with implementing Traefik to the .wappler\targets\target-name\docker-compose.yml file.

Old compose file:

version: '3'
services:
  db:
    environment:
      MYSQL_ROOT_PASSWORD: ---
      MYSQL_DATABASE: intranet
      MYSQL_USER: db_user
      MYSQL_PASSWORD: ---
    volumes:
      - 'db-volume:/var/lib/mysql'
    ports:
      - '9906:3306'
    restart: always
    command:
      - '--character-set-server=utf8mb4'
      - '--collation-server=utf8mb4_unicode_ci'
      - '--default-authentication-plugin=mysql_native_password'
    build:
      context: .
      dockerfile: db/Dockerfile
  web:
    depends_on:
      - db
    ports:
      - '80:80'
    restart: always
    stdin_open: true
    tty: true
    build:
      context: ../../../
      dockerfile: .wappler/targets/Docker Remote/web/Dockerfile
volumes:
  db-volume: ~

New file:

version: '3.5'
services:
  portainer:
    image: portainer/portainer
    container_name: portainer
    command: '-H unix:///var/run/docker.sock'
    restart: always
    ports:
      - '9000:9000'
      - '8000:8000'
    volumes:
      - '/var/run/docker.sock:/var/run/docker.sock'
      - 'portainer_data:/data'
  db:
    environment:
      MYSQL_ROOT_PASSWORD: ---
      MYSQL_DATABASE: intranet
      MYSQL_USER: db_user
      MYSQL_PASSWORD: ---
    volumes:
      - 'db-volume:/var/lib/mysql'
    ports:
      - '9906:3306'
    restart: always
    container_name: db
    command:
      - '--character-set-server=utf8mb4'
      - '--collation-server=utf8mb4_unicode_ci'
      - '--default-authentication-plugin=mysql_native_password'
    build:
      context: .
      dockerfile: db/Dockerfile
  web:
    depends_on:
      - db
    labels:
      - traefik.enable=true
      - traefik.http.routers.myweb.tls.certresolver=myresolver
      - traefik.http.routers.myweb.rule=Host(`your.domain.com`)
    restart: always
    container_name: web
    stdin_open: true
    tty: true
    build:
      context: ../../../
      dockerfile: .wappler/targets/Docker Remote/web/Dockerfile
  traefik2:
    image: traefik:v2.2
    container_name: traefik2
    restart: always
    command:
      - "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--entrypoints.web.http.redirections.entryPoint.to=websecure"
      - "--entrypoints.web.http.redirections.entryPoint.scheme=https"
      - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
      - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.myresolver.acme.email=your@email.com"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - letsencrypt:/letsencrypt

volumes:
  db-volume: ~
  portainer_data: ~
  letsencrypt:
    driver: local

You just need to replace the email and domain name. By then deploying the remote docker connection from within Wappler, it automatically installs SSL and portainer.

Hope someone has use for this, until Wappler implements their own SSL support.

5 Likes