Standartized docker-compose files. Added some documentation (AI generated)

This commit is contained in:
2025-08-23 23:18:02 +02:00
parent 550ee9282b
commit 4bde51cb96
18 changed files with 509 additions and 299 deletions

View File

@@ -1 +1,38 @@
All yaml configs using stack.env variables, as they was designed to be used with Portainer # Docker Projects
This directory contains Docker Compose setups for various self-hosted applications. Each project is in its own directory and includes a `docker-compose.yaml` file and any other necessary configuration files.
Most of these configurations use `.env` files for environment variables. These were designed to be used with Portainer, but can be used with `docker-compose` as well.
## Projects
- [Bookstack](bookstack/README.md)
- [DDNS Cloudflare](ddns-cloudflare/README.md)
- [Garmin Grafana](garmin-grafana/README.md)
- [Guacamole](guacamole/README.md)
- [Heimdall](heimdall/README.md)
- [Homepage](homepage/README.md)
- [Immich](immich/README.md)
- [IT-Tools](it-tools/README.md)
- [Mealie](mealie/README.md)
- [n8n](n8n/README.md)
- [Nextcloud](nextcloud/README.md)
- [Nginx Proxy Manager](nginx-proxy-manager/README.md)
- [pgAdmin](pgadmin/README.md)
- [Portainer](portainer/README.md)
- [Seafile](seafile/README.md)
- [Transmission (haugene-openvpn)](transmission/haugene-openvpn/README.md)
- [Transmission (lscr.io)](transmission/lscr.io/README.md)
- [Vaultwarden](vaultwarden/README.md)
- [Webtop](webtop/README.md)
## Usage
To use these projects, you will need to have Docker and Docker Compose installed. You will also need to create a `.env` file in each project directory with the required environment variables.
Once you have Docker and Docker Compose set up and the `.env` file created, you can start a project using the following command:
```
cd <project_directory>
docker-compose up -d
```

47
bookstack/README.md Normal file
View File

@@ -0,0 +1,47 @@
# Bookstack
[Bookstack](https://www.bookstackapp.com/) is a simple, self-hosted, easy-to-use platform for organizing and storing information.
## Docker Compose Setup
This directory contains a Docker Compose setup for Bookstack.
### Services
- **bookstack**: The Bookstack application itself.
- **bookstack_database**: A MariaDB database for Bookstack.
### Volumes
- `${PATH_TO_CONFIG}`: Stores the Bookstack configuration files.
- `${PATH_TO_DB}`: Stores the MariaDB database files.
### Ports
- `6875:80`: The Bookstack application is accessible on port 6875.
## Usage
1. Create a `.env` file with the following variables:
```
# Password for bookstack MySQL user
DB_USER_PASS=<your_strong_pass>
# Password for root MySQL user
DB_ROOT_PASS=<your_strongest_pass>
# Directory, where the bookstack itself will store the files
PATH_TO_CONFIG=/path/to/bookstack/config
# Directory, where MySQL data will be stored
PATH_TO_DB=/path/to/db/data
# Your timezone
TZ=Europe/Warsaw
# The IP:port or URL your application will be accessed on (ie. http://192.168.1.1:6875 or https://bookstack.mydomain.com
APP_URL=https://bookstack.example.com
```
2. Run `docker-compose up -d` to start the containers.

31
ddns-cloudflare/README.md Normal file
View File

@@ -0,0 +1,31 @@
# Cloudflare DDNS
This directory contains a Docker Compose setup for a Cloudflare DDNS client.
This service will automatically update your Cloudflare DNS records with your public IP address.
## Docker Compose Setup
### Services
- **cloudflare-ddns**: The Cloudflare DDNS client.
### Environment Variables
- `CLOUDFLARE_API_TOKEN`: Your Cloudflare API token.
- `DOMAINS`: A comma-separated list of domains to update.
- `PROXIED`: Whether or not to proxy the domains through Cloudflare.
## Usage
1. Create a `.env` file with the following variables:
```
# Cloudflare API key. User -> My Profile -> API tokens
CLOUDFLARE_API_TOKEN=your_api_key
# Cloudflare zone, which will be used. Dashboard -> Web Sites
DOMAINS=your_domains
```
2. Run `docker-compose up -d` to start the container.

View File

@@ -1,37 +1,37 @@
services: services:
cloudflare-ddns: cloudflare-ddns:
image: favonia/cloudflare-ddns:latest image: favonia/cloudflare-ddns:latest
container_name: cloudflare-ddns container_name: cloudflare-ddns
env_file: .env env_file: .env
# Choose the appropriate tag based on your need: # Choose the appropriate tag based on your need:
# - "latest" for the latest stable version (which could become 2.x.y # - "latest" for the latest stable version (which could become 2.x.y
# in the future and break things) # in the future and break things)
# - "1" for the latest stable version whose major version is 1 # - "1" for the latest stable version whose major version is 1
# - "1.x.y" to pin the specific version 1.x.y # - "1.x.y" to pin the specific version 1.x.y
network_mode: host network_mode: host
# This bypasses network isolation and makes IPv6 easier (optional; see below) # This bypasses network isolation and makes IPv6 easier (optional; see below)
restart: always restart: always
# Restart the updater after reboot # Restart the updater after reboot
user: "1000:1000" user: "1000:1000"
# Run the updater with specific user and group IDs (in that order). # Run the updater with specific user and group IDs (in that order).
# You can change the two numbers based on your need. # You can change the two numbers based on your need.
read_only: true read_only: true
# Make the container filesystem read-only (optional but recommended) # Make the container filesystem read-only (optional but recommended)
cap_drop: [all] cap_drop: [all]
# Drop all Linux capabilities (optional but recommended) # Drop all Linux capabilities (optional but recommended)
security_opt: [no-new-privileges:true] security_opt: [no-new-privileges:true]
# Another protection to restrict superuser privileges (optional but recommended) # Another protection to restrict superuser privileges (optional but recommended)
environment: environment:
- CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN} - CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN}
# Your Cloudflare API token # Your Cloudflare API token
- DOMAINS=${DOMAINS} - DOMAINS=${DOMAINS}
# Your domains (separated by commas) # Your domains (separated by commas)
- PROXIED=true - PROXIED=true
# Tell Cloudflare to cache webpages and hide your IP (optional) # Tell Cloudflare to cache webpages and hide your IP (optional)
#networks: #networks:
# LAN0: # LAN0:
# external: true # external: true
# name: LAN0 # name: LAN0
# Introduce custom Docker networks to the 'services' in this file. A common use case # Introduce custom Docker networks to the 'services' in this file. A common use case
# for this is binding one of the 'services' to a specific network interface available at # for this is binding one of the 'services' to a specific network interface available at
# Docker's host. This section is required for the 'networks' section of each 'services'. # Docker's host. This section is required for the 'networks' section of each 'services'.

41
garmin-grafana/README.md Normal file
View File

@@ -0,0 +1,41 @@
# Garmin Grafana
This directory contains a Docker Compose setup for a Garmin Grafana dashboard.
This setup will fetch your Garmin Connect data and store it in an InfluxDB database. You can then use Grafana to visualize the data.
## Docker Compose Setup
### Services
- **garmin-fetch-data**: Fetches your Garmin Connect data and stores it in InfluxDB.
- **influxdb**: An InfluxDB database for storing your Garmin Connect data.
- **grafana**: A Grafana instance for visualizing your Garmin Connect data.
### Volumes
- `${GARMINCONNECT_TOKENS}`: Stores the Garmin Connect tokens.
- `influxdb_data`: Stores the InfluxDB database files.
- `grafana_data`: Stores the Grafana configuration files.
### Ports
- `8086:8086`: The InfluxDB API is accessible on port 8086.
- `3000:3000`: The Grafana web interface is accessible on port 3000.
## Usage
1. Create a `.env` file with the following variables:
```
# Your Garmin Connect email address
GARMINCONNECT_EMAIL=<your_email>
# Your Garmin Connect password, base64 encoded
GARMINCONNECT_PASSWORD=<your_base64_encoded_password>
# Path to a directory where the Garmin Connect tokens will be stored
GARMINCONNECT_TOKENS=/path/to/garminconnect/tokens
```
2. Run `docker-compose up -d` to start the containers.

View File

@@ -1,52 +1,52 @@
services: services:
garmin-fetch-data: garmin-fetch-data:
restart: unless-stopped restart: unless-stopped
image: thisisarpanghosh/garmin-fetch-data:latest image: thisisarpanghosh/garmin-fetch-data:latest
container_name: garmin-fetch-data container_name: garmin-fetch-data
depends_on: depends_on:
- influxdb - influxdb
volumes: volumes:
- ${GARMINCONNECT_TOKENS}:/home/appuser/.garminconnect # (persistant tokens storage - garminconnect-tokens folder must be owned by 1000:1000) - ${GARMINCONNECT_TOKENS}:/home/appuser/.garminconnect # (persistant tokens storage - garminconnect-tokens folder must be owned by 1000:1000)
environment: environment:
- INFLUXDB_HOST=influxdb - INFLUXDB_HOST=influxdb
- INFLUXDB_PORT=8086 - INFLUXDB_PORT=8086
- INFLUXDB_USERNAME=influxdb_user - INFLUXDB_USERNAME=influxdb_user
- INFLUXDB_PASSWORD=influxdb_secret_password - INFLUXDB_PASSWORD=influxdb_secret_password
- INFLUXDB_DATABASE=GarminStats - INFLUXDB_DATABASE=GarminStats
- UPDATE_INTERVAL_SECONDS=300 - UPDATE_INTERVAL_SECONDS=300
- LOG_LEVEL=INFO - LOG_LEVEL=INFO
- GARMINCONNECT_EMAIL=${GARMINCONNECT_EMAIL} - GARMINCONNECT_EMAIL=${GARMINCONNECT_EMAIL}
- GARMINCONNECT_BASE64_PASSWORD=${GARMINCONNECT_PASSWORD} # (must be base64 encoded) - GARMINCONNECT_BASE64_PASSWORD=${GARMINCONNECT_PASSWORD} # (must be base64 encoded)
influxdb: influxdb:
restart: unless-stopped restart: unless-stopped
container_name: influxdb container_name: influxdb
hostname: influxdb hostname: influxdb
environment: environment:
- INFLUXDB_DB=GarminStats - INFLUXDB_DB=GarminStats
- INFLUXDB_USER=influxdb_user - INFLUXDB_USER=influxdb_user
- INFLUXDB_USER_PASSWORD=influxdb_secret_password - INFLUXDB_USER_PASSWORD=influxdb_secret_password
- INFLUXDB_DATA_INDEX_VERSION=tsi1 - INFLUXDB_DATA_INDEX_VERSION=tsi1
ports: ports:
- '8086:8086' - '8086:8086'
volumes: volumes:
- influxdb_data:/var/lib/influxdb - influxdb_data:/var/lib/influxdb
image: 'influxdb:1.11' image: 'influxdb:1.11'
grafana: grafana:
restart: unless-stopped restart: unless-stopped
container_name: grafana container_name: grafana
hostname: grafana hostname: grafana
environment: environment:
- GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin - GF_SECURITY_ADMIN_PASSWORD=admin
volumes: volumes:
- grafana_data:/var/lib/grafana - grafana_data:/var/lib/grafana
ports: ports:
- '3000:3000' - '3000:3000'
image: 'grafana/grafana:latest' image: 'grafana/grafana:latest'
volumes: volumes:
influxdb_data: influxdb_data:
grafana_data: grafana_data:

30
guacamole/README.md Normal file
View File

@@ -0,0 +1,30 @@
# Guacamole
[Guacamole](https://guacamole.apache.org/) is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH.
This directory contains a Docker Compose setup for Guacamole.
## Docker Compose Setup
### Services
- **guacamole**: The Guacamole application.
### Volumes
- `${PATH_TO_CONFIG}`: Stores the Guacamole configuration files.
### Ports
- `8080:8080`: The Guacamole web interface is accessible on port 8080.
## Usage
1. Create a `.env` file with the following variables:
```
# Path to a directory where the Guacamole configuration files will be stored
PATH_TO_CONFIG=/path/to/guacamole/config
```
2. Run `docker-compose up -d` to start the container.

24
heimdall/README.md Normal file
View File

@@ -0,0 +1,24 @@
# Heimdall
[Heimdall](https://heimdall.site/) is a dashboard for all your web applications.
This directory contains a Docker Compose setup for Heimdall.
## Docker Compose Setup
### Services
- **heimdall**: The Heimdall application.
### Volumes
- `/home/mbuz/docker/heimdall/config:/config`: Stores the Heimdall configuration files. You should change this to a path on your own system.
### Ports
- `80:80`: The Heimdall web interface is accessible on port 80.
- `443:443`: The Heimdall web interface is accessible on port 443.
## Usage
1. Run `docker-compose up -d` to start the container.

View File

@@ -1,16 +1,16 @@
version: "2.1" version: "2.1"
services: services:
heimdall: heimdall:
image: lscr.io/linuxserver/heimdall:latest image: lscr.io/linuxserver/heimdall:latest
container_name: heimdall container_name: heimdall
environment: environment:
- PUID=1000 - PUID=1000
- PGID=1000 - PGID=1000
- TZ=Europe/Warsaw - TZ=Europe/Warsaw
volumes: volumes:
- /home/mbuz/docker/heimdall/config:/config - /home/mbuz/docker/heimdall/config:/config
ports: ports:
- 80:80 - 80:80
- 443:443 - 443:443
restart: unless-stopped restart: unless-stopped

View File

@@ -1,7 +1,7 @@
services: services:
it-tools: it-tools:
image: 'corentinth/it-tools:latest' image: 'corentinth/it-tools:latest'
ports: ports:
- '8182:80' # change if needed - '8182:80' # change if needed
restart: unless-stopped restart: unless-stopped
container_name: it-tools container_name: it-tools

View File

@@ -1,33 +1,33 @@
services: services:
mealie-frontend: mealie-frontend:
image: hkotel/mealie:latest image: hkotel/mealie:latest
container_name: mealie-frontend container_name: mealie-frontend
env_file: env_file:
- .env - .env
environment: environment:
# Set Frontend ENV Variables Here # Set Frontend ENV Variables Here
- API_URL=http://mealie-api:9000 - API_URL=http://mealie-api:9000
restart: unless-stopped restart: unless-stopped
ports: ports:
- "9925:3000" - "9925:3000"
volumes: volumes:
- ${DATA_FOLDER}/mealie:/app/data/ - ${DATA_FOLDER}/mealie:/app/data/
mealie-api: mealie-api:
image: hkotel/mealie:api-v1.0.0beta-5 image: hkotel/mealie:api-v1.0.0beta-5
container_name: mealie-api container_name: mealie-api
deploy: deploy:
resources: resources:
limits: limits:
memory: 1024M memory: 1024M
volumes: volumes:
- ${DATA_FOLDER}/mealie:/app/data/ - ${DATA_FOLDER}/mealie:/app/data/
environment: environment:
# Set Backend ENV Variables Here # Set Backend ENV Variables Here
- ALLOW_SIGNUP=true - ALLOW_SIGNUP=true
- PUID=1000 - PUID=1000
- PGID=1000 - PGID=1000
- TZ=Europe/Warsaw - TZ=Europe/Warsaw
- MAX_WORKERS=1 - MAX_WORKERS=1
- WEB_CONCURRENCY=1 - WEB_CONCURRENCY=1
- BASE_URL=${BASE_URL} - BASE_URL=${BASE_URL}
restart: unless-stopped restart: unless-stopped

View File

@@ -1,22 +1,22 @@
services: services:
mealie: mealie:
image: ghcr.io/mealie-recipes/mealie:latest # image: ghcr.io/mealie-recipes/mealie:latest #
container_name: mealie container_name: mealie
env_file: env_file:
- .env - .env
restart: unless-stopped restart: unless-stopped
ports: ports:
- "9925:9000" # - "9925:9000" #
deploy: deploy:
resources: resources:
limits: limits:
memory: 1000M # memory: 1000M #
volumes: volumes:
- ${DATA_FOLDER}:/app/data/ - ${DATA_FOLDER}:/app/data/
environment: environment:
# Set Backend ENV Variables Here # Set Backend ENV Variables Here
ALLOW_SIGNUP: "false" ALLOW_SIGNUP: "false"
PUID: 1000 PUID: 1000
PGID: 1000 PGID: 1000
TZ: Europe/Warsaw TZ: Europe/Warsaw
BASE_URL: ${YOUR_DOMAIN:-https://mealie.yourdomain.com} BASE_URL: ${YOUR_DOMAIN:-https://mealie.yourdomain.com}

View File

@@ -1,21 +1,21 @@
services: services:
n8n: n8n:
image: docker.n8n.io/n8nio/n8n image: docker.n8n.io/n8nio/n8n
container_name: n8n container_name: n8n
restart: unless-stopped restart: unless-stopped
ports: ports:
- 5678:5678 - 5678:5678
environment: environment:
- N8N_HOST=${DOMAIN} - N8N_HOST=${DOMAIN}
- N8N_PORT=5678 - N8N_PORT=5678
- N8N_PROTOCOL=https - N8N_PROTOCOL=https
- NODE_ENV=production - NODE_ENV=production
- WEBHOOK_URL=https://${DOMAIN}/ - WEBHOOK_URL=https://${DOMAIN}/
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE} - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- N8N_RUNNERS_ENABLED=true - N8N_RUNNERS_ENABLED=true
volumes: volumes:
- n8n_data:/home/node/.n8n - n8n_data:/home/node/.n8n
- ${PATH_TO_FILES}:/files - ${PATH_TO_FILES}:/files
volumes: volumes:
n8n_data: n8n_data:

View File

@@ -1,48 +1,48 @@
version: '3.3' version: '3.3'
services: services:
nextcloud: nextcloud:
image: lscr.io/linuxserver/nextcloud:latest image: lscr.io/linuxserver/nextcloud:latest
container_name: nextcloud container_name: nextcloud
env_file: env_file:
- stack.env - stack.env
environment: environment:
- PUID=1000 - PUID=1000
- PGID=1000 - PGID=1000
- PHP_MEMORY_LIMIT=${PHP_MEMORY_LIMIT} - PHP_MEMORY_LIMIT=${PHP_MEMORY_LIMIT}
- PHP_UPLOAD_LIMIT=${PHP_UPLOAD_LIMIT} - PHP_UPLOAD_LIMIT=${PHP_UPLOAD_LIMIT}
- TZ=${TZ} - TZ=${TZ}
volumes: volumes:
- ${CONFIG}:/config - ${CONFIG}:/config
- ${DATA}:/data - ${DATA}:/data
ports: ports:
- 5443:443 - 5443:443
restart: unless-stopped restart: unless-stopped
links: links:
- nextcloud-mariadb - nextcloud-mariadb
depends_on: depends_on:
- nextcloud-mariadb - nextcloud-mariadb
nextcloud-mariadb: nextcloud-mariadb:
image: lscr.io/linuxserver/mariadb:latest image: lscr.io/linuxserver/mariadb:latest
container_name: nextloud-mariadb container_name: nextloud-mariadb
environment: environment:
- PUID=1000 - PUID=1000
- PGID=1000 - PGID=1000
- TZ=${TZ} - TZ=${TZ}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=nextcloud - MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud - MYSQL_USER=nextcloud
- MYSQL_PASSWORD=${MYSQL_PASSWORD} - MYSQL_PASSWORD=${MYSQL_PASSWORD}
volumes: volumes:
- ${MARIADB}:/config - ${MARIADB}:/config
ports: ports:
- 5306:3306 - 5306:3306
restart: unless-stopped restart: unless-stopped
networks: networks:
default: default:
name: nextcloud name: nextcloud
driver: bridge driver: bridge

View File

@@ -1,37 +1,37 @@
services: services:
transmission-openvpn: transmission-openvpn:
image: haugene/transmission-openvpn image: haugene/transmission-openvpn
container_name: transmission-openvpn container_name: transmission-openvpn
restart: unless-stopped restart: unless-stopped
deploy: deploy:
resources: resources:
limits: limits:
memory: 2G # adjust to your needs memory: 2G # adjust to your needs
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN
volumes: volumes:
- ${PATH_TO_CONFIG}:/config - ${PATH_TO_CONFIG}:/config
- ${PATH_TO_DOWNLOADS}:/data # optional - ${PATH_TO_DOWNLOADS}:/data # optional
- ${PATH_TO_WATCH_FOLDER}:/data/watch # optional - ${PATH_TO_WATCH_FOLDER}:/data/watch # optional
environment: environment:
- PUID=1000 - PUID=1000
- PGID=1000 - PGID=1000
- TZ=Europe/Warsaw - TZ=Europe/Warsaw
- OPENVPN_PROVIDER=${OPENVPN_PROVIDER} - OPENVPN_PROVIDER=${OPENVPN_PROVIDER}
- NORDVPN_COUNTRY=${NORDVPN_COUNTRY} - NORDVPN_COUNTRY=${NORDVPN_COUNTRY}
# - OPENVPN_CONFIG=${OPENVPN_CONFIG} # - OPENVPN_CONFIG=${OPENVPN_CONFIG}
# Do not use NordVPN username! # Do not use NordVPN username!
# To obtain the credentials proceed with the manual configuration in NordVPN account. # To obtain the credentials proceed with the manual configuration in NordVPN account.
- OPENVPN_USERNAME=${OPENVPN_USERNAME} - OPENVPN_USERNAME=${OPENVPN_USERNAME}
- OPENVPN_PASSWORD=${OPENVPN_PASSWORD} - OPENVPN_PASSWORD=${OPENVPN_PASSWORD}
- LOCAL_NETWORK=${LOCAL_NETWORK} # see .env file for comments - LOCAL_NETWORK=${LOCAL_NETWORK} # see .env file for comments
- TRANSMISSION_WEB_UI=${TRANSMISSION_WEB_UI} # optional - TRANSMISSION_WEB_UI=${TRANSMISSION_WEB_UI} # optional
logging: logging:
driver: json-file driver: json-file
options: options:
max-size: 10m max-size: 10m
ports: ports:
- '9091:9091' - '9091:9091'
# Not all the countries and servers are supporting p2p, so you need to choose the right server. Here's the hint: # Not all the countries and servers are supporting p2p, so you need to choose the right server. Here's the hint:
# https://support.nordvpn.com/hc/en-us/articles/20465085067665-NordVPN-proxy-setup-for-BitTorrent # https://support.nordvpn.com/hc/en-us/articles/20465085067665-NordVPN-proxy-setup-for-BitTorrent

View File

@@ -1,24 +1,24 @@
--- ---
services: services:
transmission: transmission:
image: lscr.io/linuxserver/transmission:latest image: lscr.io/linuxserver/transmission:latest
container_name: transmission container_name: transmission
environment: environment:
- PUID=1000 - PUID=1000
- PGID=1000 - PGID=1000
- TZ=Europe/Warsaw - TZ=Europe/Warsaw
- TRANSMISSION_WEB_HOME= #optional - TRANSMISSION_WEB_HOME= #optional
- USER=${USERNAME} #optional - USER=${USERNAME} #optional
- PASS=${PASSWORD} #optional - PASS=${PASSWORD} #optional
- WHITELIST= #optional - WHITELIST= #optional
- PEERPORT= #optional - PEERPORT= #optional
- HOST_WHITELIST= #optional - HOST_WHITELIST= #optional
volumes: volumes:
- ${PATH_TO_CONFIG}:/config - ${PATH_TO_CONFIG}:/config
- ${PATH_TO_DOWNLOADS}:/downloads #optional - ${PATH_TO_DOWNLOADS}:/downloads #optional
- ${PATH_TO_WATCH_FOLDER}:/watch #optional - ${PATH_TO_WATCH_FOLDER}:/watch #optional
ports: ports:
- 9091:9091 - 9091:9091
- 51413:51413 - 51413:51413
- 51413:51413/udp - 51413:51413/udp
restart: unless-stopped restart: unless-stopped

View File

@@ -1,11 +1,11 @@
services: services:
vaultwarden: vaultwarden:
image: vaultwarden/server:latest image: vaultwarden/server:latest
container_name: vaultwarden container_name: vaultwarden
restart: unless-stopped restart: unless-stopped
environment: environment:
DOMAIN: "${DOMAIN}" DOMAIN: "${DOMAIN}"
volumes: volumes:
- ${PATH_TO_DATA}:/data - ${PATH_TO_DATA}:/data
ports: ports:
- 8033:80 - 8033:80