Skip to content

Docker Compose Examples

DevilsCoder edited this page Apr 13, 2024 · 17 revisions

PhotoPrism with SMB Examples

version: '3.5'
volumes:
  photoprism-originals1:
      driver_opts:
        type: cifs
        o: "addr=192.xxx.xx.xxx,username=SAMBA-USER,password=SAMBA-PASS,rw"
        device: "//192.xxx.xx.xxx/MyPhotosDirectory/"
  photoprism-originals2:
      driver_opts:
        type: cifs
        o: "addr=192.xxx.xx.xxx,username=Samber-USER2,password=SAMBA-PASS2,rw"
        device: "//192.xxx.xx.xxx/MyPhotosDirectory2/"
services:
  photoprism:
    image: photoprism/photoprism:latest
    volumes:
      - "photoprism-originals1:/photoprism/originals/1"
      - "photoprism-originals2:/photoprism/originals/2"
    depends_on:
      - mariadb
    security_opt:
      - seccomp:unconfined
      - apparmor:unconfined
    ports:
      - "2342:2342" # HTTP port (host:container)
    environment:
      PHOTOPRISM_ADMIN_PASSWORD: "insecure"          # !!! PLEASE CHANGE YOUR INITIAL "admin" PASSWORD !!!
      PHOTOPRISM_SITE_URL: ""  # public server URL incl http:// or https:// and /path, :port is optional
      PHOTOPRISM_ORIGINALS_LIMIT: 12000               # file size limit for originals in MB (increase for high-res video)
      PHOTOPRISM_HTTP_COMPRESSION: "gzip"            # improves transfer speed and bandwidth utilization (none or gzip)
      PHOTOPRISM_DEBUG: "false"                      # run in debug mode, shows additional log messages
      PHOTOPRISM_PUBLIC: "false"                     # no authentication required, disables password protection
      PHOTOPRISM_READONLY: "false"                   # don't modify originals folder; disables import, upload, and delete
      PHOTOPRISM_EXPERIMENTAL: "false"               # enables experimental features
      PHOTOPRISM_DISABLE_CHOWN: "false"              # disables storage permission updates on startup
      PHOTOPRISM_DISABLE_WEBDAV: "false"             # disables built-in WebDAV server
      PHOTOPRISM_DISABLE_SETTINGS: "false"           # disables Settings in Web UI
      PHOTOPRISM_DISABLE_TENSORFLOW: "false"         # disables all features depending on TensorFlow
      PHOTOPRISM_DISABLE_FACES: "false"              # disables facial recognition
      PHOTOPRISM_DISABLE_CLASSIFICATION: "false"     # disables image classification
      PHOTOPRISM_DARKTABLE_PRESETS: "false"          # enables Darktable presets and disables concurrent RAW conversion
      PHOTOPRISM_DETECT_NSFW: "false"                # flag photos as private that MAY be offensive (requires TensorFlow)
      PHOTOPRISM_UPLOAD_NSFW: "true"                 # allows uploads that MAY be offensive
      PHOTOPRISM_DATABASE_DRIVER: "mysql"            # use MariaDB 10.5+ or MySQL 8+ instead of SQLite for improved performance
      PHOTOPRISM_DATABASE_SERVER: "mariadb:3306"     # MariaDB or MySQL database server hostname (:port is optional)
      PHOTOPRISM_DATABASE_NAME: "photoprism"         # MariaDB or MySQL database schema name
      PHOTOPRISM_DATABASE_USER: "photoprism"         # MariaDB or MySQL database user name
      PHOTOPRISM_DATABASE_PASSWORD: "insecure"       # MariaDB or MySQL database user password
      PHOTOPRISM_SITE_TITLE: ""
      PHOTOPRISM_SITE_CAPTION: ""
      PHOTOPRISM_SITE_DESCRIPTION: ""
      PHOTOPRISM_SITE_AUTHOR: ""
      HOME: "/photoprism"
    working_dir: "/photoprism"

  ## Database Server (recommended)
  mariadb:
    restart: unless-stopped
    image: mariadb:10.6
    security_opt:
      - seccomp:unconfined
      - apparmor:unconfined
    command: mysqld --innodb-buffer-pool-size=128M --lower-case-table-names=1 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
    volumes:
      - "~/photoprism/mariadb/db:/var/lib/mysql"
    environment:
      MYSQL_ROOT_PASSWORD: insecure
      MYSQL_DATABASE: photoprism
      MYSQL_USER: photoprism
      MYSQL_PASSWORD: insecure

Save as docker-compose.yml

Nextcloud

version: '2'

services:
  db:
    image: mariadb:10.6
    restart: always
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    volumes:
      - C:\Tools\Nextcloud\db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=SQLROOTPASSWORD
      - MYSQL_PASSWORD=MYSQLPASSOWRD
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
  app:
    image: nextcloud:production
    restart: always
    ports:
      - 9111:80
    links:
      - db
    volumes:
      - J:/Nextcloud:/data
      - J:/Nextcloud:/var/www/html
    environment:
      - MYSQL_DPASSWORD=MYSQLPASSWORD
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db
#      - OVERWRITECLIURL=https://memories.mydomain.com #only enable these after you have enable your reverse proxy
#      - OVERWRITEPROTOCOL=https #only enable these after you have enable your reverse proxy
  #ONLY REMOVE THE # FOR HWA IF YOU HAVE A GPU AND WANT TO USE MEMORIES APP INSIDE NEXTCLOUD
#  go-vod:
#    image: radialapps/go-vod
#    restart: always
#    depends_on:
#      - app
#    devices:
#      - /dev/dri:/dev/dri # VA-API (omit for NVENC)
#    environment:
#      - NEXTCLOUD_HOST=https://NEXTCLOUD.DOMAIN.COM
#      - NEXTCLOUD_ALLOW_INSECURE=1 # (self-signed certs or no HTTPS)
#    volumes:
      #this is where you want your files stored on nextcloud
#      - J:/Nextcloud:/data
      #this is where your configs and all nextcloud system files are stored
#      - J:/Nextcloud:/var/www/html      
      #only enable if you have a nvidia 1xxx or later and want to use it to transcode
#    deploy:
#      resources:
#        reservations:
#          devices:
#          - driver: nvidia
#            count: 1
#            capabilities: [gpu]

Dockerfile

FROM nextcloud:production
RUN apt-get update \
 && apt-get install -y \
    cmake \
    ffmpeg \
    ghostscript \
    git \
    imagemagick \ 
    libbz2-dev \
    liblapack-dev \
    libopenblas-dev \
    libx11-dev \
    sudo \
    nano \
 && apt-get clean

RUN git clone https://github.com/davisking/dlib.git \
 && cd dlib/dlib \
 && mkdir build \
 && cd build \
 && cmake -DBUILD_SHARED_LIBS=ON .. \
 && make \
 && make install

RUN git clone https://github.com/goodspb/pdlib.git /usr/src/php/ext/pdlib

RUN docker-php-ext-install pdlib

RUN docker-php-ext-install bz2

RUN echo '12 * * * * php /var/www/html/occ face:background_job' >> /var/spool/cron/crontabs/www-data

RUN echo '37 * * * * php /var/www/html/occ preview:pre-generate' >> /var/spool/cron/crontabs/www-data

RUN apt update \
  && apt install -y wget gnupg2 unzip

# Enable repo and install dlib
#RUN echo "deb https://repo.delellis.com.ar bullseye bullseye" > /etc/apt/sources.list.d/20-pdlib.list \
#  && wget -qO - https://repo.delellis.com.ar/repo.gpg.key | apt-key add -
#RUN apt update \
#  && apt install -y libdlib-dev

# Install pdlib extension
RUN wget https://github.com/goodspb/pdlib/archive/master.zip \
  && mkdir -p /usr/src/php/ext/ \
  && unzip -d /usr/src/php/ext/ master.zip \
  && rm master.zip
RUN docker-php-ext-install pdlib-master

# Increase memory limits
RUN echo memory_limit=1024M > /usr/local/etc/php/conf.d/memory-limit.ini

# These last lines are just for testing the extension.. You can delete them.
RUN wget https://github.com/matiasdelellis/pdlib-min-test-suite/archive/master.zip \
  && unzip -d /tmp/ master.zip \
  && rm master.zip
RUN cd /tmp/pdlib-min-test-suite-master \
    && make

RUN set -ex; \
    \
    apt-get update; \
    apt-get install -y --no-install-recommends \
        ffmpeg \
        ghostscript \
        libmagickcore-6.q16-6-extra \
        procps \
        smbclient \
        supervisor \
#       libreoffice \
    ; \
    rm -rf /var/lib/apt/lists/*

RUN set -ex; \
    \
    savedAptMark="$(apt-mark showmanual)"; \
    \
    apt-get update; \
    apt-get install -y --no-install-recommends \
        libbz2-dev \
        libc-client-dev \
        libkrb5-dev \
        libsmbclient-dev \
    ; \
    \
    docker-php-ext-configure imap --with-kerberos --with-imap-ssl; \
    docker-php-ext-install \
        bz2 \
        imap \
    ; \
    pecl install smbclient; \
    docker-php-ext-enable smbclient; \
    \
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
    apt-mark auto '.*' > /dev/null; \
    apt-mark manual $savedAptMark; \
    ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \
        | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); print so }' \
        | sort -u \
        | xargs -r dpkg-query --search \
        | cut -d: -f1 \
        | sort -u \
        | xargs -rt apt-mark manual; \
    \
    apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
    rm -rf /var/lib/apt/lists/*

RUN mkdir -p \
    /var/log/supervisord \
    /var/run/supervisord \
;

COPY supervisord.conf /

ENV NEXTCLOUD_UPDATE=1

CMD ["/usr/bin/supervisord", "-c", "/supervisord.conf"]
FROM tensorflow/tensorflow:latest-gpu
WORKDIR /tf-knugs  # This specifies the directory to work
RUN pip install --upgrade pip
RUN pip install --upgrade -r requirements.txt
EXPOSE 3008
ENTRYPOINT ["jupyter", "lab","--ip=0.0.0.0","--allow-root","--no-browser"]

supervisord.conf

[supervisord]
nodaemon=true
logfile=/var/log/supervisord/supervisord.log
pidfile=/var/run/supervisord/supervisord.pid
childlogdir=/var/log/supervisord/
logfile_maxbytes=50MB                           ; maximum size of logfile before rotation
logfile_backups=10                              ; number of backed up logfiles
loglevel=error

[program:apache2]
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
command=apache2-foreground

[program:cron]
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
command=/cron.sh

Jellyseerr

version: '3'
services:
    jellyseerr:
       image: fallenbagel/jellyseerr:latest
       container_name: jellyseerr
       environment:
            - LOG_LEVEL=debug
            - TZ=America/Chicago
       ports:
            - 5055:5055
       volumes:
            - /path/to/appdata/config:/app/config
       restart: unless-stopped

Jellystat

version: '3'
services:
  jellystat-db:
    image: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: MyPassword
    volumes:
    - C:/Tools/Jellystat/postgres-data:/var/lib/postgresql/data # Mounting the volume
  jellystat:
    image: cyfershepard/jellystat:latest
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: MyPassword
      POSTGRES_IP: jellystat-db
      POSTGRES_PORT: 5432
      JWT_SECRET: 'MyPassword'
    ports:
      - "3000:3000" #Server Port
      - "3004:3004" #websocket port
    volumes:
      - C:/Tools/Jellystat/backup-data:/app/backend/backup-data # Mounting the volume

    depends_on:
      - jellystat-db
    restart: unless-stopped
networks:
  default:

Kitchen Owl

version: "3"
services:
  front:
    image: tombursch/kitchenowl-web:latest
    environment:
      - FRONT_URL=https://yoururl.com
      # - BACK_URL=back:5000 # Optional should not be changed unless you know what youre doing
    ports:
      - "9090:80"
    depends_on:
      - back
    networks:
      - default
  back:
    image: tombursch/kitchenowl:latest
    restart: unless-stopped
    ports: # Optional and only needed when only hosting the http backend
      - "9191:80"
    networks:
      - default
    environment:
      - JWT_SECRET_KEY=MYSECRETKEY?
      - FRONT_URL=http://localhost:9090
    volumes:
    - kitchenowl_data:/data

volumes:
  kitchenowl_data:

networks:
  default: