initial commit

This commit is contained in:
2026-02-11 11:17:40 -05:00
commit 50e2363837
72 changed files with 2414 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.vscode/

3
README.md Normal file
View File

@@ -0,0 +1,3 @@
# docker-compose
Collection of my personal docker-compose files

View File

@@ -0,0 +1,41 @@
---
# <REPLACE_NAME>
# <DESCRIPTION>
# Created by <APP_CREATOR_NAME>
# ↳ https://link.to.github
services:
<REPLACE_NAME>:
image: # creator/image_name:latest
container_name: <REPLACE_NAME>
restart: unless-stopped
networks:
- proxy
# ports:
# - 80:80
environment:
PUID: 1000
PGID: 1000
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
# - /path/to/host:path/in/container
# - unique_volume_name:/path/in/container
# labels:
# - 'enabled=true'
networks:
proxy:
external: true
# ip_address: 127.0.0.1
# volumes:
# unique_volume_name:
# driver: local
# Documentation available at https://link.to.docs

40
commits.md Normal file
View File

@@ -0,0 +1,40 @@
# 📝 Commit Messages
We follow the [Conventional Commits](https://www.conventionalcommits.org/) guideline for commit messages.
This helps keep our history clean and makes changelogs easier to generate.
# Format
```
<type>(optional scope): <description>
```
# Examples
```
feat(auth): add OAuth2 login
fix(ui): patch crash on empty input
docs(readme): update installation instructions
```
# Common Types
* **feat:** a new feature (may bump MINOR version)
* **fix:** a bug fix (may bump PATCH version)
* **docs:** documentation only
* **style:** formatting, whitespace, etc.
* **refactor:** code changes without behavior change
* **test:** add or update tests
* **chore:** maintenance (CI, build, tooling, assets)
👉 If your change introduces a **breaking change**, mark it with `!` or add a footer:
```
feat(api)!: remove legacy endpoint
BREAKING CHANGE: old /v1 endpoints were removed
```
---
⚠️ **Note:** This is a guideline, not a strict rule. If you forget, no worries — just try to follow the format when you can

View File

@@ -0,0 +1,35 @@
---
# AdGuard
# Privacy focused DNS server
# Created by AdGuard Team
# ↳ https://github.com/adguardteam
services:
adguard:
image: adguard/adguardhome:latest
container_name: adguard
restart: unless-stopped
networks:
- proxy
ports:
- 53:53/tcp
- 53:53/udp
- 853:853 # DNS over QUIC
environment:
PUID: 1000
PGID: 1000
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/adguard/data:/opt/adguardhome/work
- /home/fxequals/docker/adguard:/opt/adguardhome/conf
networks:
proxy:
external: true
# Documentation available at https://adguard.com/kb/adguard-for-windows/admins-documentation/

View File

@@ -0,0 +1,34 @@
---
# Preview of Arcane 1.0
services:
arcane:
image: ghcr.io/ofkm/arcane:1.0-preview
container_name: arcane
restart: unless-stopped
networks:
- proxy
# ports:
# - 3552:3552
environment:
PUID: 1000
PGID: 1000
ENVIRONMENT: production
ENCRYPTION_KEY: ${ENCRYPTION_KEY}
DATABASE_URL: 'file:data/arcane.db?_pragma=journal_mode(WAL)&_pragma=busy_timeout(2500)&_txlock=immediate' # Quotes for Dockge nonsense
JWT_SECRET: ${JWT_SECRET}
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/arcane/data:/app/data
- /opt/dockge:/app/data/projects
networks:
proxy:
external: true
# Documentation available at https://arcane.ofkm.dev/

View File

@@ -0,0 +1,2 @@
ENCRYPTION_KEY=
JWT_SECRET=

View File

@@ -0,0 +1,111 @@
{
"$schema": "https://templates.arcane.ofkm.dev/schema.json",
"author": "fxequals",
"description": "Docker App Templates",
"name": "emerald-theory",
"templates": [
{
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/emerald-theory/adguard/ad-guard.yml",
"description": "DNS Server",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/emerald-theory/adguard",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/emerald-theory/adguard/ad-guard.env",
"id": "adguard",
"name": "AdGuard",
"tags": [
"dns",
"webfilter"
],
"version": "1.0.0"
},
{
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/emerald-theory/arcane/arcane.yml",
"description": "Web based Docker GUI",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/emerald-theory/arcane/",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/emerald-theory/arcane/arcane.env",
"id": "arcane",
"name": "Arcane",
"tags": [
"identity",
"2fa",
"access"
],
"version": "1.0.0"
},
{
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/emerald-theory/arcane-preview-version-1/arcane-preview.yml",
"description": "Web based Docker GUI 1.0 preview",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/emerald-theory/arcane-preview-version-1/",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/emerald-theory/arcane-preview-version-1/arcane.env",
"id": "arcane-preview",
"name": "Arcane 1.0 Preview",
"tags": [
"docker-management",
"web-based"
],
"version": "1.0.0"
},
{
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/emerald-theory/authentik/authentik.yml",
"description": "2FA access & authorization",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/emerald-theory/authentik/",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/emerald-theory/authentik/authentik.env",
"id": "authentik",
"name": "Authentik",
"tags": [
"identity",
"2fa",
"access"
],
"version": "1.0.0"
},
{
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/emerald-theory/chevereto/chevereto.yml",
"description": "Imgur clone",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/emerald-theory/chevereto/",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/emerald-theory/chevereto/chevereto.env",
"id": "chevereto",
"name": "Chevereto",
"tags": [
"image-upload"
],
"version": "1.0.0"
},
{
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/emerald-theory/hugo/hugo.yml",
"description": "Static Site Generator",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/emerald-theory/hugo/",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/emerald-theory/adguard/hugo.env",
"id": "hugo",
"name": "Hugo",
"tags": [
"identity",
"2fa",
"access"
],
"version": "1.0.0"
},
{
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/emerald-theory/n8n/n8n.yaml",
"description": "Automation System",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/emerald-theory/n8n/",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/emerald-theory/n8n/n8n.env",
"id": "n8n",
"name": "n8n",
"tags": [
"identity",
"2fa",
"access"
],
"version": "1.0.0"
}
],
"url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/emerald-theory",
"version": "1.0.0"
}

View File

@@ -0,0 +1,2 @@
ENCRYPTION_KEY=
JWT_SECRET=

View File

@@ -0,0 +1,46 @@
---
# Arcane
# Modern Docker Web UI
# Created by Kyle Mendell
# ↳ https://github.com/getarcaneapp/arcane
services:
arcane:
image: ghcr.io/getarcaneapp/arcane
container_name: arcane
restart: unless-stopped
networks:
- proxy
# ports:
# - 3552:3552
environment:
PUID: 1000
PGID: 1000
APP_URL: https://arcane.mydigitalfix.com
ENCRYPTION_KEY: ${ENCRYPTION_KEY}
JWT_SECRET: ${JWT_SECRET}
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock
- /home/fxequals/docker/arcane/data:/app/data
- /opt/dockge:/opt/dockge # This maps existing Dockge stacks and lets Arcane manage them, otherwise /host/path/to/projects:/app/data/projects
upgrader:
image: ghcr.io/getarcaneapp/arcane:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
entrypoint: ['/app/arcane']
command: ['upgrade', '--auto']
profiles:
- tools
networks:
proxy:
external: true
# Documentation available at https://getarcane.app/docs

View File

@@ -0,0 +1,46 @@
---
# Arcane
# Modern Docker GUI Manager
# Created by Kyle Mendell
# ↳ https://github.com/getarcaneapp/arcane
services:
arcane:
image: ghcr.io/getarcaneapp/arcane
container_name: arcane
restart: unless-stopped
networks:
- proxy
# ports:
# - 3552:3552
environment:
PUID: 1000
PGID: 1000
APP_URL: https://arcane.wpsit.org
ENCRYPTION_KEY: ${ENCRYPTION_KEY}
JWT_SECRET: ${JWT_SECRET}
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock
- /home/wpsit/docker/arcane/data:/app/data
- /opt/dockge:/opt/dockge # This maps existing Dockge stacks and lets Arcane manage them, otherwise /host/path/to/projects:/app/data/projects
upgrader:
image: ghcr.io/getarcaneapp/arcane:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
entrypoint: ['/app/arcane']
command: ['upgrade', '--auto']
profiles:
- tools
networks:
proxy:
external: true
# Documentation available at https://getarcane.app/docs

View File

@@ -0,0 +1,191 @@
# **Authentik Overview**
Authentik is an open-source Identity Provider (IdP) that allows users to self-host authentication and single sign-on (SSO)
[GitHub Repository](https://github.com/goauthentik/authentik)
[Official Documentation](https://docs.goauthentik.io/docs)
# **Pre-Install**
## Dependencies
- None
## Generate PG_PASS for .env
- `openssl rand -base64 36`
## Generate AUTHENTIK_SECRET_KEY for .env
- `openssl rand -base64 60`
## Create Volume Folders
- certs
- custom-templates
- database
- media
- redis
## Create a .env file
```docker
AUTHENTIK_PORT_HTTP=9000
AUTHENTIK_PORT_HTTPS=9443
PG_PASS=
AUTHENTIK_SECRET_KEY=
AUTHENTIK_ERROR_REPORTING__ENABLED=true
AUTHENTIK_EMAIL__HOST=
AUTHENTIK_EMAIL__PORT=25
AUTHENTIK_EMAIL__USERNAME=
AUTHENTIK_EMAIL__PASSWORD=
AUTHENTIK_EMAIL__USE_TLS=true
AUTHENTIK_EMAIL__USE_SSL=false
AUTHENTIK_EMAIL__TIMEOUT=10
AUTHENTIK_EMAIL__FROM=
```
# **Post-Install**
> **⚠WARNING**
> Wait a few minutes before attempting to connect for the first time. All servers need to show as **Healthy** in Dockge
Go to http://your-server-ip:9000/if/flow/initial-setup/
- Create a unique email and password for admin account
- Don't use your primary email address for this account as it will conflict when you register yourself as a user
# **NGINX Proxy Manager**
## Details
- **Domain Names:** auth.ignitedinspirations.net
- **Scheme:** http
- **Forward Hostname / IP:** 172.18.1.10
- **Forward Port:** 9443
- **Cache Assets:** True
- **Block Common Exploits:** True
- **Websockets Support:** True
- **Access Lists:** Publicly Accessible
## Custom Locations
- None
## SSL
- **SSL Certificate:** Let's Encrypt
- **Force SSL:** True
- **HTTP/2 Support:** True
- **HSTS Enabled:** False
- **HSTS Subdomains:** False
## Advanced
The following code needs to be entered into the **Custom Nginx Configuration** in order to have Authentik protect this app
```NGINX
# Increase buffer size for large headers
# This is needed only if you get 'upstream sent too big header while reading response
# header from upstream' error when trying to access an application protected by goauthentik
proxy_buffers 8 16k;
proxy_buffer_size 32k;
location / {
# Put your proxy_pass to your application here
proxy_pass $forward_scheme://$server:$port;
# authentik-specific config
auth_request /outpost.goauthentik.io/auth/nginx;
error_page 401 = @goauthentik_proxy_signin;
auth_request_set $auth_cookie $upstream_http_set_cookie;
add_header Set-Cookie $auth_cookie;
# translate headers from the outposts back to the actual upstream
auth_request_set $authentik_username $upstream_http_x_authentik_username;
auth_request_set $authentik_groups $upstream_http_x_authentik_groups;
auth_request_set $authentik_email $upstream_http_x_authentik_email;
auth_request_set $authentik_name $upstream_http_x_authentik_name;
auth_request_set $authentik_uid $upstream_http_x_authentik_uid;
proxy_set_header X-authentik-username $authentik_username;
proxy_set_header X-authentik-groups $authentik_groups;
proxy_set_header X-authentik-email $authentik_email;
proxy_set_header X-authentik-name $authentik_name;
proxy_set_header X-authentik-uid $authentik_uid;
}
# all requests to /outpost.goauthentik.io must be accessible without authentication
location /outpost.goauthentik.io {
proxy_pass https://<IP_ADDRESS>:9443/outpost.goauthentik.io;
# ensure the host of this vserver matches your external URL you've configured
# in authentik
proxy_set_header Host $host;
proxy_set_header X-Original-URL $scheme://$http_host$request_uri;
add_header Set-Cookie $auth_cookie;
auth_request_set $auth_cookie $upstream_http_set_cookie;
# required for POST requests to work
proxy_pass_request_body off;
proxy_set_header Content-Length "";
}
# Special location for when the /auth endpoint returns a 401,
# redirect to the /start URL which initiates SSO
location @goauthentik_proxy_signin {
internal;
add_header Set-Cookie $auth_cookie;
return 302 /outpost.goauthentik.io/start?rd=$request_uri;
# For domain level, use the below error_page to redirect to your authentik server with the full redirect path
# return 302 https://authentik-server:9443/outpost.goauthentik.io/start?rd=$scheme://$http_host$request_uri;
}
```
> **Note**
> If you are using Portainer to manage your Docker environment, you need to specify the ENV_FILE name to be `stacks.env`
Edit the IP address in `proxy_pass` above and make sure it matches the one you specify in the Authentik docker-compose file
# **Authentik**
## Create Google OAuth2 token
1) Go to [Official Documentation](https://support.google.com/cloud/answer/6158849?hl=en) and follow steps there
- Make note of the Client ID and Client Secret
2) Add `https://your-authentik-domain-name/source/oauth/callback/google` to list of Authorized redirect URI
## Add Google SSO Support
[Official Documentation](https://docs.goauthentik.io/docs/users-sources/sources/social-logins/google/cloud/)
1) Click on **Directory** and then click on **Federation & Social login**
2) Click on **Create**
3) Click on **Google OAuth Source** and click **Next**
4) Enter Google for the **Name**
5) The **Slug** will automatically be filled
6) Enter your Client ID and Client Secret generated when creating Google OAuth2 token
7) Click **Finish**
## Add Google as a Login Source
[Official Documentation](https://docs.goauthentik.io/docs/users-sources/sources/#add-sources-to-default-login-page)
1) Click on **Flow and Stages** then click on **Stages**
2) Find the `default-authentication-identification` stage and click on the Edit button
3) Under **Source settings** click on `google` and then click on `>` to add it
## Add User to Directory
1) Navigate to **Directory** then click on **Users**
2) Enter your email address for the **Username**
3) Enter your full name for **Name**
4) Set **User type** to **Internal**
5) Enter your email address for **Email**
6) Click **Create**
## Add User to Admin Group
1) Navigate to **Directory** then click on **Groups**
2) Click on `authentik Admins`
3) Click on **Users** tab
4) Click on **Add existing user**
5) Click on `+` then select your account and click **Add**
6) Click **Add**
## Set New Users to Inactive by Default
1) Click on **Flow and Stages** then click on **Stages**
2) Find the `default-source-enrollment-write` stage and click the Edit button
3) Toggle the **Create users as inactive** to On
## Create Application & Provider
1) Click on **Create with Wizard**
2) Enter the Application's Name
- This will automatically fill the **Slug** name
3) Do not enter a Group Name
4) Set **Policy engine mode** to `any` and click **Next**
5) Select **Proxy Provider** and click **Next**
6) **Name** will automatically be filled in
7) Select `default-provider-authorization-explicit-consent` for **Authorization Flow**
8) Click on **Forward auth (single application)**
9) Enter the **External host** name and click **Next**
- This is generally the proxy hostname (ex. https://docker.mysite.com)
10) Skip **Policy/User/Group Bindings** step and click **Next**
11) Click **Close**
## Add Application to Outpost
1) Click on **Application** then click on **Outposts**
2) Find the `authentik Embedded Outpost` and click the Edit button on the right
3) Click on the application under the **Available Applications** and then click on the `>` button
4) Click on **Update**
# **Additional Information**
---
> **⚠WARNING**
> If you are using Portainer to manage your Docker environment, you need to specify the ENV_FILE name to be `stacks.env`

View File

@@ -0,0 +1,13 @@
AUTHENTIK_PORT_HTTP=9000
AUTHENTIK_PORT_HTTPS=9443
PG_PASS= # <-- openssl rand -base64 36 | tr -d '\n'
AUTHENTIK_SECRET_KEY= # <-- openssl rand -base64 36 | tr -d '\n'
AUTHENTIK_ERROR_REPORTING__ENABLED=true
AUTHENTIK_EMAIL__HOST=
AUTHENTIK_EMAIL__PORT=
AUTHENTIK_EMAIL__USERNAME=
AUTHENTIK_EMAIL__PASSWORD=
AUTHENTIK_EMAIL__USE_TLS=true
AUTHENTIK_EMAIL__USE_SSL=false
AUTHENTIK_EMAIL__TIMEOUT=10
AUTHENTIK_EMAIL__FROM=

View File

@@ -0,0 +1,132 @@
---
# Authentik
# 2FA for web apps
# Created by Authentik Security, LLC
# ↳ https://github.com/goauthentik/authentik
services:
authentik-postgresql:
image: docker.io/library/postgres:12-alpine
container_name: authentik-postgresql
restart: unless-stopped
networks:
- proxy
healthcheck:
test:
- CMD-SHELL
- pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}
start_period: 20s
interval: 30s
retries: 5
timeout: 5s
volumes:
- /home/fxequals/docker/authentik/database:/var/lib/postgresql/data
environment:
PUID: 1000
PGID: 1000
POSTGRES_PASSWORD: ${PG_PASS:?database password required}
POSTGRES_USER: ${PG_USER:-authentik}
POSTGRES_DB: ${PG_DB:-authentik}
env_file:
- .env
authentik-redis:
image: docker.io/library/redis:alpine
container_name: authentik-redis
command: --save 60 1 --loglevel warning
restart: unless-stopped
networks:
- proxy
healthcheck:
test:
- CMD-SHELL
- redis-cli ping | grep PONG
start_period: 20s
interval: 30s
retries: 5
timeout: 3s
volumes:
- /home/fxequals/docker/authentik/redis:/data
environment:
PUID: 1000
PGID: 1000
authentik-server:
image: ghcr.io/goauthentik/server:latest
command: server
container_name: authentik-server
restart: unless-stopped
networks:
proxy:
ipv4_address: 172.18.1.10
ports:
- 9000:9000 # Remove after putting Authentik behind NGINX
- 9443:9443 # Remove after putting Authentik behind NGINX
environment:
PUID: 1000
PGID: 1000
AUTHENTIK_REDIS__HOST: authentik-redis
AUTHENTIK_POSTGRESQL__HOST: authentik-postgresql
AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
volumes:
- /home/fxequals/docker/authentik/media:/media
- /home/fxequals/docker/authentik/custom-templates:/templates
env_file:
- .env
depends_on:
- authentik-postgresql
- authentik-redis
authentik-worker:
image: ghcr.io/goauthentik/server:latest
restart: unless-stopped
container_name: authentik-worker
command: worker
networks:
- proxy
environment:
PUID: 1000
PGID: 1000
AUTHENTIK_REDIS__HOST: authentik-redis
AUTHENTIK_POSTGRESQL__HOST: authentik-postgresql
AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
volumes:
- /home/fxequals/docker/authentik/media:/media
- /home/fxequals/docker/authentik/certs:/certs
- /home/fxequals/docker/authentik/custom-templates:/templates
env_file:
- .env
depends_on:
- authentik-postgresql
- authentik-redis
networks:
proxy:
external: true
# Documentation available at https://docs.goauthentik.io/docs/install-config/install/docker-compose

View File

@@ -0,0 +1 @@
DB_PASSWORD=

View File

@@ -0,0 +1,77 @@
---
# Chevereto
# Self-hosted Imgur clone
# Created by
# ↳ https://github.com/chevereto/docker
services:
chevereto-db:
image: mariadb:jammy
container_name: chevereto-db
restart: unless-stopped
healthcheck:
test: ["CMD", "healthcheck.sh", "--su-mysql", "--connect"]
interval: 10s
timeout: 5s
retries: 3
networks:
- proxy
# ports:
# - 80:80
environment:
PUID: 1000
PGID: 1000
MYSQL_ROOT_PASSWORD: ${DB_ROOTPASSWORD}
MYSQL_DATABASE: chevereto
MYSQL_USER: chevereto
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- chevereto-database:/var/lib/mysql
chevereto-server:
image: chevereto/chevereto:latest
container_name: chevereto-server
restart: unless-stopped
networks:
- proxy
# ports:
# - 80:80
environment:
PUID: 1000
PGID: 1000
CHEVERETO_DB_HOST: chevereto-db
CHEVERETO_DB_USER: chevereto
CHEVERETO_DB_PASS: ${DB_PASSWORD}
CHEVERETO_DB_PORT: 3306
CHEVERETO_DB_NAME: chevereto
CHEVERETO_HOSTNAME: photos.ignitedinspirations.net
CHEVERETO_HOSTNAME_PATH: /
CHEVERETO_HTTPS: 1
CHEVERETO_MAX_POST_SIZE: 1G
CHEVERETO_MAX_UPLOAD_SIZE: 1G
CHEVERETO_SERVICING: server
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- chevereto-storage:/var/www/html/images/
- chevereto-app:/var/www/html/
volumes:
database:
storage:
app:
networks:
proxy:
external: true
# Documentation available at https://v4-docs.chevereto.com/#install

View File

View File

@@ -0,0 +1,32 @@
---
# Hugo
# Static Site Generator
# Created by Hugo
# ↳ https://github.com/gohugoio/hugo
services:
hugo:
image: ghcr.io/gohugoio/hugo:latest
container_name: hugo
restart: unless-stopped
networks:
- proxy
# ports:
# - 80:80
environment:
PUID: 1000
PGID: 1000
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/hugo/website:/src
networks:
proxy:
external: true
# Documentation available at https://gohugo.io/documentation

View File

@@ -0,0 +1,3 @@
DOMAIN_NAME=
SUBDOMAIN=
GENERIC_TIMEZONE=America/New_York

View File

@@ -0,0 +1,39 @@
---
# n8n
# Event Automation
# Created by <APP_CREATOR_NAME>
# ↳ https://github.com/n8n-io/n8n
services:
n8n:
image: docker.n8n.io/n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
networks:
- proxy
# ports:
# - 5678:5678
environment:
PUID: 1000
PGID: 1000
N8N_HOST: ${SUBDOMAIN}.${DOMAIN_NAME}
N8N_PORT: 5678
N8N_PROTOCOL: https
NODE_ENV: production
WEBHOOK_URL: https://${SUBDOMAIN}.${DOMAIN_NAME}/
GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/n8n/data:/home/node/.n8n
- /home/fxequals/docker/n8n/files:/files
networks:
proxy:
external: true
# Documentation available at https://docs.n8n.io/

View File

@@ -0,0 +1 @@
# Overview

View File

@@ -0,0 +1,2 @@
DB_USER=
DB_PASS=

View File

@@ -0,0 +1,44 @@
services:
wiki-js-server:
image: ghcr.io/requarks/wiki:2
container_name: wiki-js-server
restart: unless-stopped
depends_on:
- wiki-js-database
networks:
- proxy
# ports:
# - 80:80
environment:
PUID: 1000
PGID: 1000
DB_TYPE: postgres
DB_HOST: wiki-js-database
DB_PORT: 5432
DB_USER: ${DB_USER}
DB_PASS: ${DB_PASS}
DB_NAME: wiki
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
wiki-js-database:
image: postgres:15-alpine
container_name: wiki-js-database
restart: unless-stopped
networks:
- proxy
# ports:
# - 3000:3000
environment:
POSTGRES_PASSWORD: ${DB_PASS}
POSTGRES_USER: ${DB_USER}
POSTGRES_DB: wiki
volumes:
- /home/fxequals/docker/wiki-js/database:/var/lib/postgresql/data
networks:
proxy:
external: true
# Documentation available at https://docs.requarks.io/

View File

@@ -0,0 +1,35 @@
---
# Dockge
# Modern docker-compose file manager
# Created by louislam
# ↳ https://github.com/louislam/dockge
services:
dockge:
image: louislam/dockge:latest
container_name: dockge
restart: unless-stopped
networks:
- proxy
# ports:
# - 5001:5001
environment:
PUID: 1000
PGID: 1000
DOCKGE_STACKS_DIR: "/opt/dockge/stacks"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /opt/dockge/stacks:/opt/dockge/stacks
- ./data:/app/data
networks:
proxy:
external: true
# Documentation available at https://github.com/louislam/dockge

View File

@@ -0,0 +1,32 @@
---
# Uptime Kuma
# Web based status monitoring
# Created by Louise Lam
# ↳ https://github.com/louislam/uptime-kuma
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
restart: unless-stopped
networks:
- proxy
# ports:
# - 3001:3001
environment:
PUID: 1000
PGID: 1000
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/uptime-kuma/data:/app/data
networks:
proxy:
external: true
# Documentation available at https://github.com/louislam/uptime-kuma/wiki

View File

@@ -0,0 +1,186 @@
{
"$schema": "https://raw.githubusercontent.com/getarcaneapp/templates/refs/heads/main/schema.json",
"name": "obsidian-logic",
"description": "docker apps for obsidian-logic",
"version": "1.0.0",
"author": "fxequals",
"url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/obsidian-logic",
"templates": [
{
"id": "authentik",
"name": "Authentik",
"description": "2FA access & authorization",
"version": "1.0.0",
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/authentik/authentik.yml",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/authentik/authentik.env",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/obsidian-logic/authentik/",
"tags": ["identity", "2fa", "access"]
},
{
"id": "dozzle",
"name": "Dozzle",
"description": "Docker Logs Web GUI",
"version": "1.0.0",
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/dozzle/dozzle.yml",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/dozzle/dozzle.env",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/obsidian-logic/dozzle/",
"tags": ["gui", "logs", "docker"]
},
{
"id": "fresh-rss",
"name": "FreshRSS",
"description": "RSS Feed Aggregation",
"version": "1.0.0",
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/fresh-rss/fresh-rss.yaml",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/fresh-rss/fresh-rss.env",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/obsidian-logic/fresh-rss/",
"tags": ["rss", "feeds", "aggregiator"]
},
{
"id": "fulltext-rss",
"name": "Full-Text RSS",
"description": "RSS Feed Article Expansion",
"version": "1.0.0",
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/fulltext-rss/fulltext-rss.yaml",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/fulltext-rss/fulltext-rss.env",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/obsidian-logic/fulltext-rss/",
"tags": ["feeds", "text", "rss"]
},
{
"id": "gitea",
"name": "Gitea",
"description": "Github Alternative",
"version": "1.0.0",
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/gitea/gitea.yaml",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/gitea/gitea.env",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/obsidian-logic/gitea/",
"tags": ["code", "repository", "github"]
},
{
"id": "goaccess",
"name": "GoAccess",
"description": "NGINX Log Visualizer",
"version": "1.0.0",
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/goaccess/goaccess.yaml",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/goaccess/goaccess.env",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/obsidian-logic/goaccess/",
"tags": ["nginx", "logs", "visualizer"]
},
{
"id": "homepage",
"name": "Homepage",
"description": "Dashboard for Services",
"version": "1.0.0",
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/homepage/homepage.yaml",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/homepage/homepage.env",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/obsidian-logic/homepage/",
"tags": ["bookmarks", "landing-page", "dashboard"]
},
{
"id": "nginx-proxy-manager",
"name": "NGINX Proxy Manager",
"description": "Reverse Proxy for Web Services",
"version": "1.0.0",
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/nginx-proxy-manager/nginx-proxy-manager.yaml",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/nginx-proxy-manager/nginx-proxy-manager.env",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/obsidian-logic/nginx-proxy-manager/",
"tags": ["web", "reverse-proxy", "proxy"]
},
{
"id": "privatebin",
"name": "Privatebin",
"description": "Zero Knowledge Messaging",
"version": "1.0.0",
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/privatebin/privatebin.yaml",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/privatebin/privatebin.env",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/obsidian-logic/privatebin/",
"tags": ["web", "reverse-proxy", "proxy"]
},
{
"id": "remotely",
"name": "Remotely",
"description": "Remote Access Services",
"version": "1.0.0",
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/remotely/remotely.yaml",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/remotely/remotely.env",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/obsidian-logic/remotely/",
"tags": ["access", "web", "remote"]
},
{
"id": "shlinks",
"name": "Shlinks",
"description": "URL Shortening Service",
"version": "1.0.0",
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/shlinks/shlinks.yaml",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/shlinks/shlinks.env",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/obsidian-logic/shlinks/",
"tags": ["url", "shortener", "service"]
},
{
"id": "spdf",
"name": "sPDF",
"description": "Various PDF Tools",
"version": "1.0.0",
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/spdf/spdf.yaml",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/spdf/spdf.env",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/obsidian-logic/spdf/",
"tags": ["pdf", "web", "tools"]
},
{
"id": "vaultwarden",
"name": "VaultWarden",
"description": "Password Manager",
"version": "1.0.0",
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/vaultwarden/vaultwarden.yaml",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/vaultwarden/vaultwarden.env",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/obsidian-logic/vaultwarden/",
"tags": ["password", "manager", "bitwarden"]
},
{
"id": "watchtower",
"name": "WatchTower",
"description": "Auto Docker Image Updater",
"version": "1.0.0",
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/watchtower/watchtower.yaml",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/watchtower/watchtower.env",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/obsidian-logic/watchtower/",
"tags": ["updater", "images", "docker"]
},
{
"id": "wordpress",
"name": "WordPress",
"description": "Hosted CMS Website",
"version": "1.0.0",
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/wordpress/wordpress.yaml",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/wordpress/wordpress.env",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/obsidian-logic/wordpress/",
"tags": ["web", "website", "cms"]
},
{
"id": "romm",
"name": "RomM",
"description": "Web GUI for managing and playing Roms",
"version": "1.0.0",
"author": "fxequals",
"compose_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/romm/romm.yml",
"env_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/raw/branch/main/obsidian-logic/romm/romm.env",
"documentation_url": "https://gitea.mydigitalfix.com/fxequals/docker-compose/src/branch/main/obsidian-logic/romm/",
"tags": ["roms", "gui", "web-based"]
}
]
}

View File

@@ -0,0 +1,3 @@
# Overview
On first run, default user is `arcane` and password is `arcane-admin`

View File

@@ -0,0 +1,2 @@
ENCRYPTION_KEY=
JWT_SECRET=

View File

@@ -0,0 +1,49 @@
---
# Arcane
# Modern Docker Web UI
# Created by arcane
# ↳ https://github.com/getarcaneapp/arcane
services:
arcane:
image: ghcr.io/getarcaneapp/arcane
container_name: arcane
restart: unless-stopped
networks:
- proxy
# ports:
# - 3552:3552
environment:
PUID: 1000
PGID: 1000
APP_URL: https://arcane.mydigitalfix.com
ENCRYPTION_KEY: ${ENCRYPTION_KEY}
JWT_SECRET: ${JWT_SECRET}
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock
- /home/fxequals/docker/arcane/data:/app/data
- /opt/dockge:/opt/dockge # This maps existing Dockge stacks and lets Arcane manage them, otherwise /host/path/to/projects:/app/data/projects
upgrader:
image: ghcr.io/getarcaneapp/arcane:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
entrypoint:
- /app/arcane
command:
- upgrade
- --auto
profiles:
- tools
networks:
proxy:
external: true
# Documentation available at https://getarcane.app/docs

View File

@@ -0,0 +1,13 @@
AUTHENTIK_PORT_HTTP=9000
AUTHENTIK_PORT_HTTPS=9443
PG_PASS=
AUTHENTIK_SECRET_KEY=
AUTHENTIK_ERROR_REPORTING__ENABLED=true
AUTHENTIK_EMAIL__HOST=
AUTHENTIK_EMAIL__PORT=25
AUTHENTIK_EMAIL__USERNAME=
AUTHENTIK_EMAIL__PASSWORD=
AUTHENTIK_EMAIL__USE_TLS=true
AUTHENTIK_EMAIL__USE_SSL=false
AUTHENTIK_EMAIL__TIMEOUT=10
AUTHENTIK_EMAIL__FROM=

View File

@@ -0,0 +1,132 @@
---
# Authentik
# 2FA for web apps
# Created by Authentik Security, LLC
# ↳ https://github.com/goauthentik/authentik
services:
authentik-postgresql:
image: docker.io/library/postgres:12-alpine
container_name: authentik-postgresql
restart: unless-stopped
networks:
- proxy
healthcheck:
test:
- CMD-SHELL
- pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}
start_period: 20s
interval: 30s
retries: 5
timeout: 5s
volumes:
- /home/fxequals/docker/authentik/database:/var/lib/postgresql/data
environment:
PUID: 1000
PGID: 1000
POSTGRES_PASSWORD: ${PG_PASS:?database password required}
POSTGRES_USER: ${PG_USER:-authentik}
POSTGRES_DB: ${PG_DB:-authentik}
env_file:
- .env
authentik-redis:
image: docker.io/library/redis:alpine
container_name: authentik-redis
command: --save 60 1 --loglevel warning
restart: unless-stopped
networks:
- proxy
healthcheck:
test:
- CMD-SHELL
- redis-cli ping | grep PONG
start_period: 20s
interval: 30s
retries: 5
timeout: 3s
volumes:
- /home/fxequals/docker/authentik/redis:/data
environment:
PUID: 1000
PGID: 1000
authentik-server:
image: ghcr.io/goauthentik/server:latest
command: server
container_name: authentik-server
restart: unless-stopped
networks:
proxy:
ipv4_address: 172.18.1.10
ports:
- 9000:9000 # Remove after putting Authentik behind NGINX
- 9443:9443 # Remove after putting Authentik behind NGINX
environment:
PUID: 1000
PGID: 1000
AUTHENTIK_REDIS__HOST: authentik-redis
AUTHENTIK_POSTGRESQL__HOST: authentik-postgresql
AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
volumes:
- /home/fxequals/docker/authentik/media:/media
- /home/fxequals/docker/authentik/custom-templates:/templates
env_file:
- .env
depends_on:
- authentik-postgresql
- authentik-redis
authentik-worker:
image: ghcr.io/goauthentik/server:latest
restart: unless-stopped
container_name: authentik-worker
command: worker
networks:
- proxy
environment:
PUID: 1000
PGID: 1000
AUTHENTIK_REDIS__HOST: authentik-redis
AUTHENTIK_POSTGRESQL__HOST: authentik-postgresql
AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
volumes:
- /home/fxequals/docker/authentik/media:/media
- /home/fxequals/docker/authentik/certs:/certs
- /home/fxequals/docker/authentik/custom-templates:/templates
env_file:
- .env
depends_on:
- authentik-postgresql
- authentik-redis
networks:
proxy:
external: true
# Documentation available at https://docs.goauthentik.io/docs/install-config/install/docker-compose

View File

View File

@@ -0,0 +1,32 @@
---
# Dozzle
# Log viewer for Docker containers
# Created by amir20
# ↳ https://github.com/amir20/dozzle
services:
dozzle:
image: amir20/dozzle:latest
container_name: dozzle
restart: unless-stopped
networks:
- proxy
# ports:
# - 8080:8080
environment:
PUID: 1000
PGID: 1000
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock
networks:
proxy:
external: true
# Documentation available at https://dozzle.dev/

View File

@@ -0,0 +1,35 @@
---
# EmulatorJS
# Retro game emulation in the web browser
# Created by michael-j-green
# ↳ https://github.com/EmulatorJS/EmulatorJS
services:
emulator-js:
image: lscr.io/linuxserver/emulatorjs:latest
container_name: emulator-js
restart: unless-stopped
networks:
- proxy
# ports:
# - 80:80
# - 3000:3000
environment:
PUID: 1000
PGID: 1000
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/emulator-js/config:/config
- /home/fxequals/docker/emulator-js/data:/data
- /home/fxequals/docker/emulator-js/
networks:
proxy:
external: true
# Documentation available at https://emulatorjs.org/docs

View File

View File

@@ -0,0 +1,34 @@
---
# FreshRSS
# An RSS aggregator app
# Created by
# ↳ https://github.com/FreshRSS/FreshRSS
services:
fresh-rss:
image: freshrss/freshrss:latest
container_name: fresh-rss
restart: unless-stopped
networks:
- proxy
# ports:
# - 80:80
environment:
PUID: 1000
PGID: 1000
CRON_MIN: '13,43' # Specifies Feed Update Time
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/fresh-rss/data:/var/www/FreshRSS/data
- /home/fxequals/docker/fresh-rss/extensions:/var/www/FreshRss/extensions
networks:
proxy:
external: true
# Documentation available at https://freshrss.github.io/FreshRSS/en/admins/01_Index.html

View File

@@ -0,0 +1,32 @@
---
# Full Text RSS
# Converts RSS feed snipits into full text articles
# Created by Five Filters
# ↳ https://github.com/heussd/fivefilters-full-text-rss-docker
services:
full-text-rss:
image: heussd/fivefilters-full-text-rss:latest
container_name: full-text-rss
restart: unless-stopped
networks:
- proxy
# ports:
# - 80:80
environment:
PUID: 1000
PGID: 1000
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/full-text-rss/cache:/var/www/html/cache/rss
networks:
proxy:
external: true
# Documentation available at https://github.com/heussd/fivefilters-full-text-rss-docker

View File

View File

@@ -0,0 +1,33 @@
---
# Gitea
# Open-source Github alternative
# Gitea
# ↳ https://github.com/go-gitea/gitea
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: unless-stopped
networks:
- proxy
# ports:
# - 22:22
# - 3000:3000
environment:
PUID: 1000
PGID: 1000
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/gitea:/data
networks:
proxy:
external: true
# Documentation available at https://docs.gitea.com/

View File

View File

@@ -0,0 +1,34 @@
---
# GoAccess
# Web based log visualizer for NGINX Proxy Manager
# Created by xavierh
# ↳ https://github.com/xavier-hernandez/goaccess-for-nginxproxymanager
services:
goaccess:
image: xavierh/goaccess-for-nginxproxymanager:latest
container_name: goaccess
restart: unless-stopped
networks:
- proxy
# ports:
# - 7880:7880
environment:
PUID: 1000
PGID: 1000
HTML_REFRESH: 5
EXCLUDE_IPS: '172.18.0.1'
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/nginx/data/logs:/opt/log
networks:
proxy:
external: true
# Documentation available at https://goaccess.io/man

View File

@@ -0,0 +1,33 @@
---
# Homepage
# A dashboard for your self-hosted environment
# Created by
# ↳ https://github.com/gethomepage/homepage
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
restart: unless-stopped
networks:
- proxy
# ports:
# - 3000:3000
environment:
PUID: 1000
PGID: 1000
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/homepage/config:/app/config
- /home/fxequals/docker/homepage/images:/app/public/images
networks:
proxy:
external: true
# Documentation available at https://gethomepage.dev/

View File

View File

@@ -0,0 +1,31 @@
---
# IT Tools
# Collection of various IT tools
# Created by CorentinTh
# ↳ https://github.com/CorentinTh/it-tools
services:
it-tools:
image: corentinth/it-tools:latest
container_name: it-tools
restart: unless-stopped
networks:
- proxy
# ports:
# - 80:80
environment:
PUID: 1000
PGID: 1000
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
networks:
proxy:
external: true
# Documentation available at https://github.com/CorentinTh/it-tools

View File

@@ -0,0 +1,54 @@
# Configuration file for Synapse.
#
# This is a YAML file: see [1] for a quick introduction. Note in particular
# that *indentation is important*: all the elements of a list or dictionary
# should have the same indentation.
#
# [1] https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html
#
# For more information on how to configure Synapse, including a complete accounting of
# each option, go to docs/usage/configuration/config_documentation.md or
# https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html
server_name: "mydigitalfix.com"
pid_file: /data/homeserver.pid
listeners:
- port: 8008
resources:
- compress: false
names:
- client
- federation
tls: false
type: http
x_forwarded: true
database:
name: psycopg2
txn_limit: 10000
args:
user: synapse
password:
database: synapse
host: synapse-db
port: 5432
cp_min: 5
cp_max: 10
log_config: "/data/mydigitalfix.log.config"
media_store_path: /data/media_store
registration_shared_secret:
report_stats: true
macaroon_secret_key:
form_secret:
signing_key_path: "/data/mydigitalfix.signing.key"
trusted_key_servers:
- server_name: "matrix.org"
turn_uris:
- "turn:matrix.mydigitalfix:3478?transport=udp"
- "turn:matrix.mydigitalfix:3478?transport=tcp"
- "turns:matrix.mydigitalfix:3478?transport=udp"
- "turns:matrix.mydigitalfix:3478?transport=tcp"
turn_shared_secret:
turn_user_lifetime: 86400000
turn_allow_guests: False
# vim:ft=yaml

View File

@@ -0,0 +1 @@
POSTGRES_PASSWORD=

View File

@@ -0,0 +1,111 @@
---
# Matrix
# Privacy focused messaging platform
# Created by matrix.org
# ↳ https://github.com/matrix-org
services:
synapse:
image: docker.io/matrixdotorg/synapse:latest
container_name: matrix-synapse
restart: unless-stopped
depends_on:
- synapse_db
networks:
- proxy
environment:
SYNAPSE_CONFIG_PATH: "/data/homeserver.yaml"
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- synapse-data:/data
synapse_db:
image: docker.io/postgres:17.5
container_name: matrix-db
restart: unless-stopped
networks:
- proxy
environment:
POSTGRES_USER: "synapse"
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --lc-collate=C --lc-ctype=C"
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- synapse-db:/var/lib/postgresql/data
nginx:
image: nginx:stable
container_name: matrix-web
restart: "always"
networks:
- proxy
# ports:
# - 80:80
# - 443:443
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- matrix-nginx:/etc/nginx/conf.d
coturn:
image: instrumentisto/coturn:latest
container_name: matrix-coturn
restart: unless-stopped
networks:
- proxy
# ports:
# - 49160-49200:49160-49200/udp
# - 3478:3478
# - 5349:5349
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- matrix-coturn:/etc/coturn
element:
image: vectorim/element-web:latest
container_name: matrix-element
restart: unless-stopped
networks:
- proxy
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- matrix-element:/app
networks:
proxy:
external: true
volumes:
synapse-data:
driver: local
synapse-db:
driver: local
matrix-nginx:
driver: local
matrix-element:
driver: local
matrix-coturn:
driver: local
# Documentation available at https://matrix.org/docs/chat_basics/matrix-for-im/

View File

@@ -0,0 +1,11 @@
use-auth-secret
static-auth-secret=
realm=matrix.mydigitalfix.com
listening-port=3478
tls-listening-port=5349
min-port=49160
max-port=49200
verbose
allow-loopback-peers
cli-password=
external-ip=97.107.140.166

View File

@@ -0,0 +1,35 @@
---
# NGINX Proxy Manager
# A reverse proxy for web apps
# Created by Igor Sysoev
# ↳ https://github.com/nginx/nginx
services:
nginx:
image: jc21/nginx-proxy-manager:latest
container_name: nginx-proxy-manager
restart: unless-stopped
networks:
- proxy
ports:
- 80:80
- 443:443
# - 81:81
environment:
PUID: 1000
PGID: 1000
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/nginx/data:/data
- /home/fxequals/docker/nginx/letsencrypt:/etc/letsencrypt
networks:
proxy:
external: true
# Documentation available at https://nginxproxymanager.com/guide/

View File

View File

@@ -0,0 +1,32 @@
---
# PrivateBin
# An opensource Pastebin zero-knowledge server
# Created by Pastebin
# ↳ https://github.com/PrivateBin/PrivateBin
services:
privatebin:
image: privatebin/nginx-fpm-alpine:latest
container_name: privatebin
restart: unless-stopped
networks:
- proxy
# ports:
# - 8080:8080
environment:
PUID: 1000
PGID: 1000
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/privatebin/data:/srv/data # sudo chown 65534:82 on host folder
networks:
proxy:
external: true
# Documentation available at https://github.com/PrivateBin/docker-nginx-fpm-alpine

View File

@@ -0,0 +1 @@
DOCKERGW=

View File

@@ -0,0 +1,37 @@
---
# Remotely
# Web based remote access and support
# Created by ?
# ↳ https://github.com/immense/Remotely
services:
remotely:
image: immybot/remotely:latest
container_name: remotely
restart: unless-stopped
networks:
- proxy
# ports:
# - 5000:5000
environment:
PUID: 1000
PGID: 1000
ASPNETCORE_ENVIRONMENT: 'Production'
ASPNETCORE_HTTP_PORTS: 5000
Remotely_ApplicationOptions__DbProvider: 'SQLite'
Remotely_ApplicationOptions__DockerGateway: ${DOCKER_GW}
Remotely_ConnectionStrings__SQLite=Data Source: /app/AppData/Remotely.db
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/remotely/data:/app/AppData
networks:
proxy:
external: true
# Documentation available at https://github.com/immense/Remotely

View File

@@ -0,0 +1,129 @@
# This is a generic example of a configuration file
# Rename this file to `config.yml`, copy it to a `config` folder, and mount that folder as per the docker-compose.example.yml
# Only uncomment the lines you want to use/modify, or add new ones where needed
exclude:
# Exclude platforms to be scanned
platforms: [] # ['my_excluded_platform_1', 'my_excluded_platform_2']
# Exclude roms or parts of roms to be scanned
roms:
# Single file games section.
# Will not apply to files that are in sub-folders (multi-disc roms, games with updates, DLC, patches, etc.)
single_file:
# Exclude all files with certain extensions to be scanned
extensions: [] # ['xml', 'txt']
# Exclude matched file names to be scanned.
# Supports unix filename pattern matching
# Can also exclude files by extension
names: [] # ['info.txt', '._*', '*.nfo']
# Multi files games section
# Will apply to files that are in sub-folders (multi-disc roms, games with updates, DLC, patches, etc.)
multi_file:
# Exclude matched 'folder' names to be scanned (RomM identifies folders as multi file games)
names: [] # ['my_multi_file_game', 'DLC']
# Exclude files within sub-folders.
parts:
# Exclude matched file names to be scanned from multi file roms
# Keep in mind that RomM doesn't scan folders inside multi files games,
# so there is no need to exclude folders from inside of multi files games.
names: [] # ['data.xml', '._*'] # Supports unix filename pattern matching
# Exclude all files with certain extensions to be scanned from multi file roms
extensions: [] # ['xml', 'txt']
system:
# Asociate different platform names to your current file system platform names
# [your custom platform folder name]: [RomM platform name]
# In this example if you have a 'gc' folder, RomM will treat it like the 'ngc' folder and if you have a 'psx' folder, RomM will treat it like the 'ps' folder
platforms: {} # { gc: 'ngc', psx: 'ps' }
# Asociate one platform to it's main version
versions: {} # { naomi: 'arcade' }
# The folder name where your roms are located
filesystem: {} # { roms_folder: 'roms' } For example if your folder structure is /home/user/library/roms_folder
# scan:
# # Metadata priority during scans
# priority:
# # Below are the default priority values used
# metadata: # Top-level metadata source priority
# - "igdb" # IGDB (highest priority)
# - "moby" # MobyGames
# - "ss" # Screenscraper
# - "ra" # RetroAchievements
# - "launchbox" # Launchbox
# - "gamelist" # ES-DE gamelist.xml
# - "hasheous" # Hasheous
# - "flashpoint" # Flashpoint Project
# - "hltb" # HowLongToBeat (lowest priority)
# artwork: # Cover art and screenshots
# - "igdb" # IGDB
# - "moby" # MobyGames
# - "ss" # Screenscraper
# - "ra" # RetroAchievements
# - "launchbox" # Launchbox
# - "gamelist" # ES-DE gamelist.xml
# - "hasheous" # Hasheous
# - "flashpoint" # Flashpoint Project
# - "hltb" # HowLongToBeat
# region: # Used by IGDB and ScreenScraper for regional variants
# - "us"
# - "wor"
# - "ss"
# - "eu"
# - "jp"
# language: # Used by ScreenScraper for descriptions
# - "en"
# - "fr"
# # Media assets to download
# # Only used by Screenscraper and ES-DE gamelist.xml
# media:
# # Used as alternative cover art
# - box2d # Normal cover art (always enabled)
# - box3d # 3D box art
# - miximage # Mixed image of multiple media
# - physical # Disc, cartridge, etc.
# # Added to the screenshots carousel
# - screenshot # Screenshot (enabled by default)
# - title_screen # Title screen
# - fanart # User uploaded artwork
# # Bezel displayed around the emulatorjs window
# - bezel
# # Manual in PDF format
# - manual # Manual (enabled by default)
# # Gameplay video
# - video # Video (warning: large file size)
# # Media used for batocera gamelist.xml export
# - box2d_back # Back cover art
# - logo # Transparent logo
# # Other media assets (might be used in the future)
# - marquee # Custom marquee
EmulatorJS per-core options
emulatorjs:
debug: true # Available options will be logged to the browser console
cache_limit: null # Cache limit per ROM (in bytes)
settings:
parallel_n64: # Use the exact core name
vsync: disabled
snes9x:
snes9x_region: ntsc
default: # These settings apply to all cores
fps: show
controls: # https://emulatorjs.org/docs4devs/control-mapping/
snes9x:
0: # Player 1
0: # A MAPPING FOR EACH BUTTON MUST BE SET!
value: x # Mapping for keyboard
value2: BUTTON_2 # Mapping for connected controller
1:
value:
value2:
1: # Player 2
2: # Player 3
3: # Player 4

View File

@@ -0,0 +1,12 @@
DB_ROOTPWD=
DB_HOST=
DB_NAME=
DB_USER=
DB_PASSWD=
ROMM_AUTH_SECRET_KEY=
RETROACHIEVEMENTS_API_KEY=
STEAMGRIDDB_API_KEY=
IGDB_CLIENT_ID=
IGDB_CLIENT_SECRET=
SCREENSCRAPER_USER=
SCREENSCRAPER_PASSWORD=

View File

@@ -0,0 +1,77 @@
---
# RomM
# Web based rom player and manager
# Created by gantoine
# ↳ https://github.com/rommapp/romm
services:
romm:
image: rommapp/romm:latest
container_name: romm
restart: unless-stopped
networks:
- proxy
# ports:
# - 8080:8080
environment:
PUID: 1000
PGID: 1000
DB_HOST: romm-db
DB_NAME: ${DB_NAME}
DB_USER: ${DB_USER}
DB_PASSWD: ${DB_PASSWORD}
ROMM_AUTH_SECRET_KEY: ${ROMM_AUTH_SECRET_KEY}
SCREENSCRAPER_USER: ${SCREENSCRAPER_USER}
SCREENSCRAPER_PASSWORD: ${SCREENSCRAPER_PASSWORD}
RETROACHIEVEMENTS_API_KEY: ${RETROACHIEVEMENTS_API_KEY}
STEAMGRIDDB_API_KEY: ${STEAMGRIDDB_API_KEY}
IGDB_CLIENT_ID: ${IGDB_CLIENT_ID}
IGDB_CLIENT_SECRET: ${IGDB_CLIENT_SECRET}
HASHEOUS_API_ENABLED: true
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/romm/romm_resources:/romm/resources
- /home/fxequals/docker/romm/romm_redis:/redis-data
- /home/fxequals/docker/romm/roms:/romm/library
- /home/fxequals/docker/romm:/romm/config
- /home/fxequals/docker/romm/assets:/romm/assets
romm-db:
image: mariadb:latest
container_name: romm-db
restart: unless-stopped
networks:
- proxy
environment:
MARIADB_ROOT_PASSWORD: ${DB_ROOTPWD}
MARIADB_DATABASE: ${DB_NAME}
MARIADB_USER: ${DB_USER}
MARIADB_PASSWORD: ${DB_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
start_period: 30s
start_interval: 10s
interval: 10s
timeout: 5s
retries: 5
networks:
proxy:
external: true
volumes:
mysql_data:
driver: local
# Documentation available at https://docs.romm.app/latest/

View File

View File

@@ -0,0 +1,61 @@
---
# SearXNG
# Privacy Focused Search Engine
# Created by Searxng
# ↳ https://github.com/searxng/searxng
services:
searxng-server:
image: docker.io/searxng/searxng:latest
container_name: searxng
restart: unless-stopped
networks:
- search
# ports:
# - 8080:8080
environment:
PUID: 1000
PGID: 1000
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/searxng/search:/etc/searxng:rw
searxng-redis:
image: docker.io/valkey/valkey:8-alpine
container_name: redis
restart: unless-stopped
command: valkey-server --save 30 1 --loglevel warning
networks:
- search
environment:
PUID: 1000
PGID: 1000
volumes:
- /home/fxequals/docker/searsng/redis:/data
cap_drop:
- ALL
cap_add:
- SETGID
- SETUID
- DAC_OVERRIDE
logging:
driver: "json-file"
options:
max-size: "1m"
max-file: "1"
networks:
search:
external: true
# Documentation available at https://docs.searxng.org/

View File

View File

@@ -0,0 +1,57 @@
---
# Shlink
# Web link URL shortener
# Created by Alejandro Celaya
# ↳ https://github.com/shlinkio/shlink
services:
shlink-server:
image: ghcr.io/shlinkio/shlink:latest
container_name: shlink
restart: unless-stopped
networks:
- proxy
# ports:
# - 8080:8080
environment:
PUID: 1000
PGID: 1000
DEFAULT_DOMAIN: 'links.mydomain.net'
IS_HTTPS_ENABLED: false
GEOLITE_LICENSE_KEY: ${GEO_KEY}
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/shlink/data:/data
shlink-web-client:
image: ghcr.io/shlinkio/shlink-web-client:latest
container_name: shlink-web-client
restart: unless-stopped
networks:
- proxy
environment:
PUID: 1000
PGID: 1000
SHLINK_SERVER_URL: 'https://shlinks.mydomain.net'
# SHLINK_SERVER_API_KEY: <--- See Notes
networks:
proxy:
external: true
# Documentation available at https://shlink.io/documentation/install-docker-image/
# Notes
#
# Create and start container
# Run docker exec -it <SHLINK_CONTAINER_ID> shlink api-key:generate
# Copy key and go to Servers - Manage Servers - Click 3 dot menu - Edit
# Paste API key
#

View File

View File

@@ -0,0 +1,32 @@
---
# sPDF
# Self-hosted suite of PDF tools
# Created by Stirling PDF
# ↳ https://github.com/Stirling-Tools/Stirling-PDF
services:
spdf:
image: frooodle/s-pdf:latest
container_name: spdf
restart: unless-stopped
networks:
- proxy
# ports:
# - 8080:8080
environment:
PUID: 1000
PGID: 1000
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/spdf/configs:/configs
networks:
proxy:
external: true
# Documentation available at https://hub.docker.com/r/stirlingtools/stirling-pdf

View File

@@ -0,0 +1,32 @@
---
# Vaultwarden
# Open-source Bitwarden password manager
# Created by Daniel García
# ↳ https://github.com/dani-garcia/vaultwarden
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
networks:
- proxy
# ports:
# - 80:80
environment:
PUID: 1000
PGID: 1000
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/vaultwarden/data:/data
networks:
proxy:
external: true
# Documentation available at https://github.com/dani-garcia/vaultwarden/wiki

View File

View File

@@ -0,0 +1,8 @@
WATCHTOWER_NOTIFICATION_EMAIL_FROM=
WATCHTOWER_NOTIFICATION_EMAIL_TO=
WATCHTOWER_NOTIFICATION_EMAIL_SERVER=
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=25
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=
WATCHTOWER_NOTIFICATION_EMAIL_DELAY=3
WATCHTOWER_NOTIFICATION_EMAIL_SUBJECTTAG=

View File

@@ -0,0 +1,40 @@
---
# Watchtower
# Docker Image Updater & Notifications
# Created by containrrr
# ↳ https://github.com/containrrr/watchtower
services:
watchtower:
image: containrrr/watchtower:latest
container_name: watchtower
restart: unless-stopped
networks:
- proxy
environment:
PUID: 1000
PGID: 1000
WATCHTOWER_MONITOR_ONLY: true
WATCHTOWER_NOTIFICATIONS: email
WATCHTOWER_NOTIFICATION_EMAIL_FROM: ${WATCHTOWER_NOTIFICATION_EMAIL_FROM}
WATCHTOWER_NOTIFICATION_EMAIL_TO: ${WATCHTOWER_NOTIFICATION_EMAIL_TO}
WATCHTOWER_NOTIFICATION_EMAIL_SERVER: ${WATCHTOWER_NOTIFICATION_EMAIL_SERVER}
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT: ${WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT}
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER: ${WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER}
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD: ${WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD}
WATCHTOWER_NOTIFICATION_EMAIL_DELAY: 3
WATCHTOWER_NOTIFICATION_EMAIL_SUBJECTTAG: ${WATCHTOWER_NOTIFICATION_EMAIL_SUBJECTTAG}
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock
networks:
proxy:
external: true
# Documentation available at https://containrrr.dev/watchtower/

View File

@@ -0,0 +1,3 @@
DB_USER=
DB_PASS=
DB_ROOT=

View File

@@ -0,0 +1,69 @@
---
# WordPress
# Content Management System
# Created by WordPress Foundation
# ↳ https://github.com/WordPress
services:
wordpress:
image: docker.io/bitnami/wordpress:latest
container_name: wordpress-server
restart: unless-stopped
depends_on:
- wordpress-mariadb
networks:
- proxy
# ports:
# - 80:80
# - 443:443
environment:
PUID: 1000
PGID: 1000
WORDPRESS_DATABASE_HOST: 'wordpress-mariadb'
WORDPRESS_DATABASE_USER: ${DB_USER}
WORDPRESS_DATABASE_PASSWORD: ${DB_PASS}
WORDPRESS_DATABASE_PORT_NUMBER: 3306
WORDPRESS_DATABASE_NAME: 'wordpress'
WORDPRESS_USERNAME: ${WP_USER}
WORDPRESS_PASSWORD: ${WP_PASS}
WORDPRESS_EMAIL: ${WP_EMAIL}
WORDPRESS_FIRSTNAME: ${WP_FNAME}
WORDPRESS_LASTNAME: ${WP_LNAME}
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/wordpress/data:/bitnami/wordpress # sudo chown 1001 on host folder
wordpress-mariadb:
image: docker.io/bitnami/mariadb:latest
container_name: wordpress-mariadb
restart: unless-stopped
networks:
- proxy
# ports:
# - 3306:3306
environment:
PUID: 1000
PGID: 1000
ALLOW_EMPTY_PASSWORD: no
MARIADB_USER: ${DB_USER}
MARIADB_PASSWORD: ${DB_PASS}
MARIADB_DATABASE: wordpress
MARIADB_ROOT_PASSWORD: ${DB_ROOT}
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/fxequals/docker/wordpress/database:/bitnami/mariadb # sudo chown 1001 on host folder
networks:
proxy:
external: true
# Documentation available at https://wordpress.com/support/