Standartized docker-compose files. Added some documentation (AI generated)
This commit is contained in:
18
Ansible/README.md
Normal file
18
Ansible/README.md
Normal file
@@ -0,0 +1,18 @@
|
||||
# Ansible Playbooks
|
||||
|
||||
This directory contains Ansible playbooks for automating server configuration and management tasks.
|
||||
|
||||
## Playbooks
|
||||
|
||||
- **apt_upgrade.yml**: This playbook updates all packages on a Debian/Ubuntu server.
|
||||
- **zabbix_agent_upgrade.yml**: This playbook upgrades the Zabbix agent on a server.
|
||||
|
||||
## Usage
|
||||
|
||||
To use these playbooks, you will need to have Ansible installed on your control machine. You will also need to have an inventory file that defines the hosts you want to manage.
|
||||
|
||||
Once you have Ansible and an inventory file set up, you can run a playbook using the following command:
|
||||
|
||||
```
|
||||
ansible-playbook -i <inventory_file> <playbook>.yml
|
||||
```
|
||||
@@ -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
Docker/bookstack/README.md
Normal file
47
Docker/bookstack/README.md
Normal 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
Docker/ddns-cloudflare/README.md
Normal file
31
Docker/ddns-cloudflare/README.md
Normal 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.
|
||||
@@ -1,37 +1,37 @@
|
||||
services:
|
||||
cloudflare-ddns:
|
||||
image: favonia/cloudflare-ddns:latest
|
||||
container_name: cloudflare-ddns
|
||||
env_file: .env
|
||||
# Choose the appropriate tag based on your need:
|
||||
# - "latest" for the latest stable version (which could become 2.x.y
|
||||
# in the future and break things)
|
||||
# - "1" for the latest stable version whose major version is 1
|
||||
# - "1.x.y" to pin the specific version 1.x.y
|
||||
network_mode: host
|
||||
# This bypasses network isolation and makes IPv6 easier (optional; see below)
|
||||
restart: always
|
||||
# Restart the updater after reboot
|
||||
user: "1000:1000"
|
||||
# Run the updater with specific user and group IDs (in that order).
|
||||
# You can change the two numbers based on your need.
|
||||
read_only: true
|
||||
# Make the container filesystem read-only (optional but recommended)
|
||||
cap_drop: [all]
|
||||
# Drop all Linux capabilities (optional but recommended)
|
||||
security_opt: [no-new-privileges:true]
|
||||
# Another protection to restrict superuser privileges (optional but recommended)
|
||||
environment:
|
||||
- CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN}
|
||||
# Your Cloudflare API token
|
||||
- DOMAINS=${DOMAINS}
|
||||
# Your domains (separated by commas)
|
||||
- PROXIED=true
|
||||
# Tell Cloudflare to cache webpages and hide your IP (optional)
|
||||
#networks:
|
||||
# LAN0:
|
||||
# external: true
|
||||
# name: LAN0
|
||||
# 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
|
||||
services:
|
||||
cloudflare-ddns:
|
||||
image: favonia/cloudflare-ddns:latest
|
||||
container_name: cloudflare-ddns
|
||||
env_file: .env
|
||||
# Choose the appropriate tag based on your need:
|
||||
# - "latest" for the latest stable version (which could become 2.x.y
|
||||
# in the future and break things)
|
||||
# - "1" for the latest stable version whose major version is 1
|
||||
# - "1.x.y" to pin the specific version 1.x.y
|
||||
network_mode: host
|
||||
# This bypasses network isolation and makes IPv6 easier (optional; see below)
|
||||
restart: always
|
||||
# Restart the updater after reboot
|
||||
user: "1000:1000"
|
||||
# Run the updater with specific user and group IDs (in that order).
|
||||
# You can change the two numbers based on your need.
|
||||
read_only: true
|
||||
# Make the container filesystem read-only (optional but recommended)
|
||||
cap_drop: [all]
|
||||
# Drop all Linux capabilities (optional but recommended)
|
||||
security_opt: [no-new-privileges:true]
|
||||
# Another protection to restrict superuser privileges (optional but recommended)
|
||||
environment:
|
||||
- CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN}
|
||||
# Your Cloudflare API token
|
||||
- DOMAINS=${DOMAINS}
|
||||
# Your domains (separated by commas)
|
||||
- PROXIED=true
|
||||
# Tell Cloudflare to cache webpages and hide your IP (optional)
|
||||
#networks:
|
||||
# LAN0:
|
||||
# external: true
|
||||
# name: LAN0
|
||||
# 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
|
||||
# Docker's host. This section is required for the 'networks' section of each 'services'.
|
||||
41
Docker/garmin-grafana/README.md
Normal file
41
Docker/garmin-grafana/README.md
Normal 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.
|
||||
@@ -1,52 +1,52 @@
|
||||
services:
|
||||
garmin-fetch-data:
|
||||
restart: unless-stopped
|
||||
image: thisisarpanghosh/garmin-fetch-data:latest
|
||||
container_name: garmin-fetch-data
|
||||
depends_on:
|
||||
- influxdb
|
||||
volumes:
|
||||
- ${GARMINCONNECT_TOKENS}:/home/appuser/.garminconnect # (persistant tokens storage - garminconnect-tokens folder must be owned by 1000:1000)
|
||||
environment:
|
||||
- INFLUXDB_HOST=influxdb
|
||||
- INFLUXDB_PORT=8086
|
||||
- INFLUXDB_USERNAME=influxdb_user
|
||||
- INFLUXDB_PASSWORD=influxdb_secret_password
|
||||
- INFLUXDB_DATABASE=GarminStats
|
||||
- UPDATE_INTERVAL_SECONDS=300
|
||||
- LOG_LEVEL=INFO
|
||||
- GARMINCONNECT_EMAIL=${GARMINCONNECT_EMAIL}
|
||||
- GARMINCONNECT_BASE64_PASSWORD=${GARMINCONNECT_PASSWORD} # (must be base64 encoded)
|
||||
|
||||
|
||||
influxdb:
|
||||
restart: unless-stopped
|
||||
container_name: influxdb
|
||||
hostname: influxdb
|
||||
environment:
|
||||
- INFLUXDB_DB=GarminStats
|
||||
- INFLUXDB_USER=influxdb_user
|
||||
- INFLUXDB_USER_PASSWORD=influxdb_secret_password
|
||||
- INFLUXDB_DATA_INDEX_VERSION=tsi1
|
||||
ports:
|
||||
- '8086:8086'
|
||||
volumes:
|
||||
- influxdb_data:/var/lib/influxdb
|
||||
image: 'influxdb:1.11'
|
||||
|
||||
grafana:
|
||||
restart: unless-stopped
|
||||
container_name: grafana
|
||||
hostname: grafana
|
||||
environment:
|
||||
- GF_SECURITY_ADMIN_USER=admin
|
||||
- GF_SECURITY_ADMIN_PASSWORD=admin
|
||||
volumes:
|
||||
- grafana_data:/var/lib/grafana
|
||||
ports:
|
||||
- '3000:3000'
|
||||
image: 'grafana/grafana:latest'
|
||||
|
||||
volumes:
|
||||
influxdb_data:
|
||||
services:
|
||||
garmin-fetch-data:
|
||||
restart: unless-stopped
|
||||
image: thisisarpanghosh/garmin-fetch-data:latest
|
||||
container_name: garmin-fetch-data
|
||||
depends_on:
|
||||
- influxdb
|
||||
volumes:
|
||||
- ${GARMINCONNECT_TOKENS}:/home/appuser/.garminconnect # (persistant tokens storage - garminconnect-tokens folder must be owned by 1000:1000)
|
||||
environment:
|
||||
- INFLUXDB_HOST=influxdb
|
||||
- INFLUXDB_PORT=8086
|
||||
- INFLUXDB_USERNAME=influxdb_user
|
||||
- INFLUXDB_PASSWORD=influxdb_secret_password
|
||||
- INFLUXDB_DATABASE=GarminStats
|
||||
- UPDATE_INTERVAL_SECONDS=300
|
||||
- LOG_LEVEL=INFO
|
||||
- GARMINCONNECT_EMAIL=${GARMINCONNECT_EMAIL}
|
||||
- GARMINCONNECT_BASE64_PASSWORD=${GARMINCONNECT_PASSWORD} # (must be base64 encoded)
|
||||
|
||||
|
||||
influxdb:
|
||||
restart: unless-stopped
|
||||
container_name: influxdb
|
||||
hostname: influxdb
|
||||
environment:
|
||||
- INFLUXDB_DB=GarminStats
|
||||
- INFLUXDB_USER=influxdb_user
|
||||
- INFLUXDB_USER_PASSWORD=influxdb_secret_password
|
||||
- INFLUXDB_DATA_INDEX_VERSION=tsi1
|
||||
ports:
|
||||
- '8086:8086'
|
||||
volumes:
|
||||
- influxdb_data:/var/lib/influxdb
|
||||
image: 'influxdb:1.11'
|
||||
|
||||
grafana:
|
||||
restart: unless-stopped
|
||||
container_name: grafana
|
||||
hostname: grafana
|
||||
environment:
|
||||
- GF_SECURITY_ADMIN_USER=admin
|
||||
- GF_SECURITY_ADMIN_PASSWORD=admin
|
||||
volumes:
|
||||
- grafana_data:/var/lib/grafana
|
||||
ports:
|
||||
- '3000:3000'
|
||||
image: 'grafana/grafana:latest'
|
||||
|
||||
volumes:
|
||||
influxdb_data:
|
||||
grafana_data:
|
||||
30
Docker/guacamole/README.md
Normal file
30
Docker/guacamole/README.md
Normal 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
Docker/heimdall/README.md
Normal file
24
Docker/heimdall/README.md
Normal 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.
|
||||
@@ -1,16 +1,16 @@
|
||||
version: "2.1"
|
||||
|
||||
services:
|
||||
heimdall:
|
||||
image: lscr.io/linuxserver/heimdall:latest
|
||||
container_name: heimdall
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Warsaw
|
||||
volumes:
|
||||
- /home/mbuz/docker/heimdall/config:/config
|
||||
ports:
|
||||
- 80:80
|
||||
- 443:443
|
||||
version: "2.1"
|
||||
|
||||
services:
|
||||
heimdall:
|
||||
image: lscr.io/linuxserver/heimdall:latest
|
||||
container_name: heimdall
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Warsaw
|
||||
volumes:
|
||||
- /home/mbuz/docker/heimdall/config:/config
|
||||
ports:
|
||||
- 80:80
|
||||
- 443:443
|
||||
restart: unless-stopped
|
||||
@@ -1,7 +1,7 @@
|
||||
services:
|
||||
it-tools:
|
||||
image: 'corentinth/it-tools:latest'
|
||||
ports:
|
||||
- '8182:80' # change if needed
|
||||
restart: unless-stopped
|
||||
services:
|
||||
it-tools:
|
||||
image: 'corentinth/it-tools:latest'
|
||||
ports:
|
||||
- '8182:80' # change if needed
|
||||
restart: unless-stopped
|
||||
container_name: it-tools
|
||||
@@ -1,33 +1,33 @@
|
||||
services:
|
||||
mealie-frontend:
|
||||
image: hkotel/mealie:latest
|
||||
container_name: mealie-frontend
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
# Set Frontend ENV Variables Here
|
||||
- API_URL=http://mealie-api:9000
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9925:3000"
|
||||
volumes:
|
||||
- ${DATA_FOLDER}/mealie:/app/data/
|
||||
mealie-api:
|
||||
image: hkotel/mealie:api-v1.0.0beta-5
|
||||
container_name: mealie-api
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 1024M
|
||||
volumes:
|
||||
- ${DATA_FOLDER}/mealie:/app/data/
|
||||
environment:
|
||||
# Set Backend ENV Variables Here
|
||||
- ALLOW_SIGNUP=true
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Warsaw
|
||||
- MAX_WORKERS=1
|
||||
- WEB_CONCURRENCY=1
|
||||
- BASE_URL=${BASE_URL}
|
||||
services:
|
||||
mealie-frontend:
|
||||
image: hkotel/mealie:latest
|
||||
container_name: mealie-frontend
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
# Set Frontend ENV Variables Here
|
||||
- API_URL=http://mealie-api:9000
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9925:3000"
|
||||
volumes:
|
||||
- ${DATA_FOLDER}/mealie:/app/data/
|
||||
mealie-api:
|
||||
image: hkotel/mealie:api-v1.0.0beta-5
|
||||
container_name: mealie-api
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 1024M
|
||||
volumes:
|
||||
- ${DATA_FOLDER}/mealie:/app/data/
|
||||
environment:
|
||||
# Set Backend ENV Variables Here
|
||||
- ALLOW_SIGNUP=true
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Warsaw
|
||||
- MAX_WORKERS=1
|
||||
- WEB_CONCURRENCY=1
|
||||
- BASE_URL=${BASE_URL}
|
||||
restart: unless-stopped
|
||||
@@ -1,22 +1,22 @@
|
||||
services:
|
||||
mealie:
|
||||
image: ghcr.io/mealie-recipes/mealie:latest #
|
||||
container_name: mealie
|
||||
env_file:
|
||||
- .env
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9925:9000" #
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 1000M #
|
||||
volumes:
|
||||
- ${DATA_FOLDER}:/app/data/
|
||||
environment:
|
||||
# Set Backend ENV Variables Here
|
||||
ALLOW_SIGNUP: "false"
|
||||
PUID: 1000
|
||||
PGID: 1000
|
||||
TZ: Europe/Warsaw
|
||||
services:
|
||||
mealie:
|
||||
image: ghcr.io/mealie-recipes/mealie:latest #
|
||||
container_name: mealie
|
||||
env_file:
|
||||
- .env
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9925:9000" #
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 1000M #
|
||||
volumes:
|
||||
- ${DATA_FOLDER}:/app/data/
|
||||
environment:
|
||||
# Set Backend ENV Variables Here
|
||||
ALLOW_SIGNUP: "false"
|
||||
PUID: 1000
|
||||
PGID: 1000
|
||||
TZ: Europe/Warsaw
|
||||
BASE_URL: ${YOUR_DOMAIN:-https://mealie.yourdomain.com}
|
||||
@@ -1,21 +1,21 @@
|
||||
services:
|
||||
n8n:
|
||||
image: docker.n8n.io/n8nio/n8n
|
||||
container_name: n8n
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 5678:5678
|
||||
environment:
|
||||
- N8N_HOST=${DOMAIN}
|
||||
- N8N_PORT=5678
|
||||
- N8N_PROTOCOL=https
|
||||
- NODE_ENV=production
|
||||
- WEBHOOK_URL=https://${DOMAIN}/
|
||||
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
|
||||
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
|
||||
- N8N_RUNNERS_ENABLED=true
|
||||
volumes:
|
||||
- n8n_data:/home/node/.n8n
|
||||
- ${PATH_TO_FILES}:/files
|
||||
volumes:
|
||||
services:
|
||||
n8n:
|
||||
image: docker.n8n.io/n8nio/n8n
|
||||
container_name: n8n
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 5678:5678
|
||||
environment:
|
||||
- N8N_HOST=${DOMAIN}
|
||||
- N8N_PORT=5678
|
||||
- N8N_PROTOCOL=https
|
||||
- NODE_ENV=production
|
||||
- WEBHOOK_URL=https://${DOMAIN}/
|
||||
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
|
||||
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
|
||||
- N8N_RUNNERS_ENABLED=true
|
||||
volumes:
|
||||
- n8n_data:/home/node/.n8n
|
||||
- ${PATH_TO_FILES}:/files
|
||||
volumes:
|
||||
n8n_data:
|
||||
@@ -1,48 +1,48 @@
|
||||
version: '3.3'
|
||||
services:
|
||||
nextcloud:
|
||||
image: lscr.io/linuxserver/nextcloud:latest
|
||||
container_name: nextcloud
|
||||
env_file:
|
||||
- stack.env
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- PHP_MEMORY_LIMIT=${PHP_MEMORY_LIMIT}
|
||||
- PHP_UPLOAD_LIMIT=${PHP_UPLOAD_LIMIT}
|
||||
- TZ=${TZ}
|
||||
|
||||
volumes:
|
||||
- ${CONFIG}:/config
|
||||
- ${DATA}:/data
|
||||
ports:
|
||||
- 5443:443
|
||||
restart: unless-stopped
|
||||
links:
|
||||
- nextcloud-mariadb
|
||||
depends_on:
|
||||
- nextcloud-mariadb
|
||||
|
||||
nextcloud-mariadb:
|
||||
image: lscr.io/linuxserver/mariadb:latest
|
||||
container_name: nextloud-mariadb
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=${TZ}
|
||||
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
|
||||
- MYSQL_DATABASE=nextcloud
|
||||
- MYSQL_USER=nextcloud
|
||||
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
|
||||
|
||||
volumes:
|
||||
- ${MARIADB}:/config
|
||||
ports:
|
||||
- 5306:3306
|
||||
restart: unless-stopped
|
||||
|
||||
|
||||
networks:
|
||||
default:
|
||||
name: nextcloud
|
||||
version: '3.3'
|
||||
services:
|
||||
nextcloud:
|
||||
image: lscr.io/linuxserver/nextcloud:latest
|
||||
container_name: nextcloud
|
||||
env_file:
|
||||
- stack.env
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- PHP_MEMORY_LIMIT=${PHP_MEMORY_LIMIT}
|
||||
- PHP_UPLOAD_LIMIT=${PHP_UPLOAD_LIMIT}
|
||||
- TZ=${TZ}
|
||||
|
||||
volumes:
|
||||
- ${CONFIG}:/config
|
||||
- ${DATA}:/data
|
||||
ports:
|
||||
- 5443:443
|
||||
restart: unless-stopped
|
||||
links:
|
||||
- nextcloud-mariadb
|
||||
depends_on:
|
||||
- nextcloud-mariadb
|
||||
|
||||
nextcloud-mariadb:
|
||||
image: lscr.io/linuxserver/mariadb:latest
|
||||
container_name: nextloud-mariadb
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=${TZ}
|
||||
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
|
||||
- MYSQL_DATABASE=nextcloud
|
||||
- MYSQL_USER=nextcloud
|
||||
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
|
||||
|
||||
volumes:
|
||||
- ${MARIADB}:/config
|
||||
ports:
|
||||
- 5306:3306
|
||||
restart: unless-stopped
|
||||
|
||||
|
||||
networks:
|
||||
default:
|
||||
name: nextcloud
|
||||
driver: bridge
|
||||
@@ -1,37 +1,37 @@
|
||||
services:
|
||||
transmission-openvpn:
|
||||
image: haugene/transmission-openvpn
|
||||
container_name: transmission-openvpn
|
||||
restart: unless-stopped
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 2G # adjust to your needs
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
volumes:
|
||||
- ${PATH_TO_CONFIG}:/config
|
||||
- ${PATH_TO_DOWNLOADS}:/data # optional
|
||||
- ${PATH_TO_WATCH_FOLDER}:/data/watch # optional
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Warsaw
|
||||
- OPENVPN_PROVIDER=${OPENVPN_PROVIDER}
|
||||
- NORDVPN_COUNTRY=${NORDVPN_COUNTRY}
|
||||
# - OPENVPN_CONFIG=${OPENVPN_CONFIG}
|
||||
# Do not use NordVPN username!
|
||||
# To obtain the credentials proceed with the manual configuration in NordVPN account.
|
||||
- OPENVPN_USERNAME=${OPENVPN_USERNAME}
|
||||
- OPENVPN_PASSWORD=${OPENVPN_PASSWORD}
|
||||
- LOCAL_NETWORK=${LOCAL_NETWORK} # see .env file for comments
|
||||
- TRANSMISSION_WEB_UI=${TRANSMISSION_WEB_UI} # optional
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: 10m
|
||||
ports:
|
||||
- '9091:9091'
|
||||
|
||||
# Not all the countries and servers are supporting p2p, so you need to choose the right server. Here's the hint:
|
||||
services:
|
||||
transmission-openvpn:
|
||||
image: haugene/transmission-openvpn
|
||||
container_name: transmission-openvpn
|
||||
restart: unless-stopped
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 2G # adjust to your needs
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
volumes:
|
||||
- ${PATH_TO_CONFIG}:/config
|
||||
- ${PATH_TO_DOWNLOADS}:/data # optional
|
||||
- ${PATH_TO_WATCH_FOLDER}:/data/watch # optional
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Warsaw
|
||||
- OPENVPN_PROVIDER=${OPENVPN_PROVIDER}
|
||||
- NORDVPN_COUNTRY=${NORDVPN_COUNTRY}
|
||||
# - OPENVPN_CONFIG=${OPENVPN_CONFIG}
|
||||
# Do not use NordVPN username!
|
||||
# To obtain the credentials proceed with the manual configuration in NordVPN account.
|
||||
- OPENVPN_USERNAME=${OPENVPN_USERNAME}
|
||||
- OPENVPN_PASSWORD=${OPENVPN_PASSWORD}
|
||||
- LOCAL_NETWORK=${LOCAL_NETWORK} # see .env file for comments
|
||||
- TRANSMISSION_WEB_UI=${TRANSMISSION_WEB_UI} # optional
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: 10m
|
||||
ports:
|
||||
- '9091:9091'
|
||||
|
||||
# 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
|
||||
@@ -1,24 +1,24 @@
|
||||
---
|
||||
services:
|
||||
transmission:
|
||||
image: lscr.io/linuxserver/transmission:latest
|
||||
container_name: transmission
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Warsaw
|
||||
- TRANSMISSION_WEB_HOME= #optional
|
||||
- USER=${USERNAME} #optional
|
||||
- PASS=${PASSWORD} #optional
|
||||
- WHITELIST= #optional
|
||||
- PEERPORT= #optional
|
||||
- HOST_WHITELIST= #optional
|
||||
volumes:
|
||||
- ${PATH_TO_CONFIG}:/config
|
||||
- ${PATH_TO_DOWNLOADS}:/downloads #optional
|
||||
- ${PATH_TO_WATCH_FOLDER}:/watch #optional
|
||||
ports:
|
||||
- 9091:9091
|
||||
- 51413:51413
|
||||
- 51413:51413/udp
|
||||
restart: unless-stopped
|
||||
---
|
||||
services:
|
||||
transmission:
|
||||
image: lscr.io/linuxserver/transmission:latest
|
||||
container_name: transmission
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Warsaw
|
||||
- TRANSMISSION_WEB_HOME= #optional
|
||||
- USER=${USERNAME} #optional
|
||||
- PASS=${PASSWORD} #optional
|
||||
- WHITELIST= #optional
|
||||
- PEERPORT= #optional
|
||||
- HOST_WHITELIST= #optional
|
||||
volumes:
|
||||
- ${PATH_TO_CONFIG}:/config
|
||||
- ${PATH_TO_DOWNLOADS}:/downloads #optional
|
||||
- ${PATH_TO_WATCH_FOLDER}:/watch #optional
|
||||
ports:
|
||||
- 9091:9091
|
||||
- 51413:51413
|
||||
- 51413:51413/udp
|
||||
restart: unless-stopped
|
||||
@@ -1,11 +1,11 @@
|
||||
services:
|
||||
vaultwarden:
|
||||
image: vaultwarden/server:latest
|
||||
container_name: vaultwarden
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
DOMAIN: "${DOMAIN}"
|
||||
volumes:
|
||||
- ${PATH_TO_DATA}:/data
|
||||
ports:
|
||||
services:
|
||||
vaultwarden:
|
||||
image: vaultwarden/server:latest
|
||||
container_name: vaultwarden
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
DOMAIN: "${DOMAIN}"
|
||||
volumes:
|
||||
- ${PATH_TO_DATA}:/data
|
||||
ports:
|
||||
- 8033:80
|
||||
28
README.md
28
README.md
@@ -1,9 +1,27 @@
|
||||
# Max's Homelab
|
||||
|
||||
Welcome to my personal Homelab repository! This repository contains various projects that I use, have used, or plan to use in my Homelab.
|
||||
At the moment I have a Lenovo P520 running as a server and I am experimenting a lot. Use with caution, I am not responsible for your data. But feel free to explore and use the resources provided to enhance your home lab setup.
|
||||
Welcome to my personal Homelab repository! This repository contains various projects that I use, have used, or plan to use in my Homelab. At the moment I have a Lenovo P520 running as a server and I am experimenting a lot. Use with caution, I am not responsible for your data. But feel free to explore and use the resources provided to enhance your home lab setup.
|
||||
|
||||
- **Docker Projects**: Pre-configured Docker containers for different applications and services. Sample configuration files for this services.
|
||||
- **Scripting & Automation**: Useful scripts for automation and management tasks, Ansible playbooks.
|
||||
## Overview
|
||||
|
||||
Contributions and suggestions are always welcome!
|
||||
This repository is organized into the following directories:
|
||||
|
||||
- **Ansible**: Contains Ansible playbooks for automating server configuration and management tasks.
|
||||
- **Docker**: Contains Docker Compose setups for various self-hosted applications.
|
||||
- **Scripts**: Contains various scripts for system administration and automation.
|
||||
|
||||
## Docker Projects
|
||||
|
||||
This repository contains a collection of pre-configured Docker containers for different applications and services. Each Docker project is contained in its own directory and includes a `docker-compose.yaml` file and any other necessary configuration files.
|
||||
|
||||
For more information about the Docker projects, please see the [Docker README](Docker/README.md).
|
||||
|
||||
## Scripting & Automation
|
||||
|
||||
This repository also contains a collection of useful scripts for automation and management tasks, as well as Ansible playbooks.
|
||||
|
||||
For more information about the scripts and playbooks, please see the [Ansible README](Ansible/README.md) and the [Scripts README](Scripts/README.md).
|
||||
|
||||
## Contributions
|
||||
|
||||
Contributions and suggestions are always welcome! If you have any ideas for new projects or improvements to existing ones, please feel free to open an issue or submit a pull request.
|
||||
Reference in New Issue
Block a user