# Stacks

My favorites docker stacks

# Utils

## Services

### Nginx proxy manager

#### Env

- TZ

#### Volumes

- /config

### Shepherd

Automated service image updater

#### Env

- SHEPHERD_SLEEP_TIME
- SHEPHERD_IMAGE_AUTOCLEAN_LIMIT
- TZ

### Ofelia

Docker cron scheduler

#### Env

- TZ

#### Volumes

- /var/run/docker.sock

## Stack

```yml
version: '3'
services:
  nginx_proxy_manager:
    image: jlesage/nginx-proxy-manager:latest
    restart: always
    ports:
      - '80:8080' # Public HTTP Port
      - '443:4443' # Public HTTPS Port
      #- '81:8181' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP
    environment:
      TZ: ${TZ}
      # Uncomment this if IPv6 is not enabled on your host
      DISABLE_IPV6: 'true'
    volumes:
      - nginx_proxy_data:/config
    networks:
      - proxy_network

  shepherd:
    image: mazzolino/shepherd:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      SLEEP_TIME: ${SHEPHERD_SLEEP_TIME}
      IMAGE_AUTOCLEAN_LIMIT: ${SHEPHERD_IMAGE_AUTOCLEAN_LIMIT}
      TZ: ${TZ}
    deploy:
      placement:
        constraints:
          - node.role == manager

  scheduler:
    image: mcuadros/ofelia:latest
    command: daemon --docker
    environment:
      TZ: ${TZ}
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      #labels:
      #ofelia.job-local.my-test-job.schedule: "@every 5m"
      #ofelia.job-local.my-test-job.command: "date"


volumes:
  nginx_proxy_data:
    external: true

networks:
  proxy_network:
    external: true
```

# Filebrowser

## Services

### Filebrowser

Filebrowser is a web file manager that allows you to manage your files in a web browser.

#### Env

- TZ
- PUID
- PGID

#### Volumes

- /config
- /database
- /srv

## Stack 

```yml
version: '3'

services:
  app:
    image: 'filebrowser/filebrowser:s6'
    volumes:
      - filebrowser_settings:/config
      - filebrowser_data:/database
      - /mnt/disk:/srv
    environment:
      TZ: ${TZ}
      PGID: ${PGID}
      PUID: ${PUID}
    networks:
      - proxy_network

volumes:
  filebrowser_settings:
  filebrowser_data:

networks:
  proxy_network:
    external: true
```

# Nextcloud

## Services

### MariaDB

#### Env

- MYSQL_ROOT_PASSWORD

#### Volumes

- /var/lib/mysql

#### Command

- `--transaction-isolation=READ-COMMITTED --binlog-format=ROW`

### Nextcloud

#### Env

- APACHE_DISABLE_REWRITE_IP
- OVERWRITEHOST
- OVERWRITEPROTOCOL
- OVERWRITEWEBROOT
- PHP_MEMORY_LIMIT
- PHP_UPLOAD_LIMIT
- TRUSTED_PROXIES
- PGID
- PUID
- TZ

#### Volumes

- /var/www/html
- /var/www/html/data

## Stack

```yml
version: '3'

services:
  db:
    image: mariadb:10.5
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    volumes:
      - mariadb:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
    networks:
      - nextcloud_network

  app:
    depends_on:
      - db
    image: nextcloud:latest
    restart: always
    volumes:
      - config:/var/www/html
      - ${NEXTCLOUD_DATA_PATH}:/var/www/html/data
    environment:
      APACHE_DISABLE_REWRITE_IP: 1
      OVERWRITEHOST: nextcloud.mydomain.fr
      OVERWRITEPROTOCOL: https
      OVERWRITEWEBROOT: /
      PHP_MEMORY_LIMIT: 4G
      PHP_UPLOAD_LIMIT: 10G
      TRUSTED_PROXIES: IPV4 Gateway - 10.0.3.1
      PGID: ${PGID}
      PUID: ${PUID}
      TZ: ${TZ}
    networks:
      - proxy_network
      - nextcloud_network

volumes:
  config:
  mariadb:

networks:
  proxy_network:
    external: true
  nextcloud_network:
```

# JDownloader

## Services

### JDownloader

#### Env

- MYJD_DEVICE_NAME
- MYJD_PASSWORD
- MYJD_USER
- XDG_DOWNLOAD_DIR
- PUID
- PGID

#### Volumes

- /downloads
- /opt/JDownloader
- /opt/JDownloader/cfg

## Stack 

```yml
version: '3'

services:
  app:
    image: jaymoulin/jdownloader:latest
    ports:
      - '3129:3129'
    volumes:
      - ${DIRECT_DOWNLOAD_PATH}:/downloads
      - app:/opt/JDownloader
      - config:/opt/JDownloader/app/cfg
    environment:
      MYJD_DEVICE_NAME: ${MYJD_DEVICE_NAME}
      MYJD_PASSWORD: ${MYJD_PASSWORD}
      MYJD_USER: ${MYJD_USER}
      XDG_DOWNLOAD_DIR: /downloads
      PUID: ${PUID}
      PGID: ${PGID}

volumes:
  config:
  app:
```

# Sonarqube

## Services

### Postgres

#### Env

- ALLOW_EMPTY_PASSWORD
- POSTGRESQL_USERNAME
- POSTGRESQL_DATABASE
- TZ

#### Volumes

- /bitnami/postgresql
- /docker-entrypoint-initdb.d
- /docker-entrypoint-preinitdb.d

### Sonarqube

#### Env

- ALLOW_EMPTY_PASSWORD
- SONARQUBE_DATABASE_HOST
- SONARQUBE_DATABASE_PORT_NUMBER
- SONARQUBE_DATABASE_USER
- SONARQUBE_DATABASE_NAME
- SONARQUBE_USERNAME
- SONARQUBE_PASSWORD
- SONARQUBE_EMAIL
- TZ

#### Volumes

- /bitnami/sonarqube

## Stack

```yml
version: '3'
services:
  postgresql:
    image: docker.io/bitnami/postgresql:13
    volumes:
      - 'postgresql_data:/bitnami/postgresql'
      - 'entry_point:/docker-entrypoint-preinitdb.d'
      - 'entry_point:/docker-entrypoint-initdb.d'
    environment:
      # ALLOW_EMPTY_PASSWORD is recommended only for development.
      ALLOW_EMPTY_PASSWORD: 'yes'
      POSTGRESQL_USERNAME: ${SONARQUBE_DB_USER}
      POSTGRESQL_DATABASE: ${SONARQUBE_DB_NAME}
      TZ: ${TZ}
    networks:
      - proxy_network
  sonarqube:
    image: bitnami/sonarqube:9.6.1
      #ports:
    # - '8080:8080'
    volumes:
      - 'sonarqube_data:/bitnami/sonarqube'
    depends_on:
      - postgresql
    environment:
      # ALLOW_EMPTY_PASSWORD is recommended only for development.
      ALLOW_EMPTY_PASSWORD: 'yes'
      SONARQUBE_DATABASE_HOST: postgresql
      SONARQUBE_DATABASE_PORT_NUMBER: 5432
      SONARQUBE_DATABASE_USER: ${SONARQUBE_DB_USER}
      SONARQUBE_DATABASE_NAME: ${SONARQUBE_DB_NAME}
      SONARQUBE_USERNAME: ${SONARQUBE_USER}
      SONARQUBE_PASSWORD: ${SONARQUBE_PASSWORD}
      SONARQUBE_EMAIL: ${SONARQUBE_EMAIL}

      TZ: ${TZ}
    networks:
      - proxy_network
volumes:
  postgresql_data:
  sonarqube_data:
  entry_point:

networks:
  proxy_network:
    external: true
```