diff --git a/Guest/PurposeFlow/auth/pflab-id/compose.yaml b/Guest/PurposeFlow/auth/pflab-id/compose.yaml new file mode 100644 index 0000000..59f8fd5 --- /dev/null +++ b/Guest/PurposeFlow/auth/pflab-id/compose.yaml @@ -0,0 +1,85 @@ +name: pflab-id + +########## ===== ANCHORS ===== ########## + +x-authentik-env: &authentik-env + AUTHENTIK_POSTGRESQL__HOST: pflab-postgres + AUTHENTIK_POSTGRESQL__PORT: 5432 + AUTHENTIK_POSTGRESQL__NAME: authentik + + AUTHENTIK_ERROR_REPORTING__ENABLED: false + AUTHENTIK_LOG_LEVEL: info + +########## ===== NETWORKS ===== ########## + +networks: + + pflab_proxy: + name: pflab_proxy + + pflab_backend: + name: pflab_backend + +########## ===== VOLUMES ===== ########## + +volumes: + + authentik_media: + name: pflab_authentik_media + driver: local + + authentik_templates: + name: pflab_authentik_template + driver: local + +########## ===== SERVICES ===== ########## + +services: + +##### AUTHENTIK SERVER ##### + + pflab-authentik: + + image: ghcr.io/goauthentik/server:2026.5.3 + container_name: pflab-authentik + + restart: unless-stopped + command: server + + env_file: [.secrets/.env] + environment: *authentik-env + + volumes: + - authentik_media:/media + - authentik_templates:/templates + + networks: + - pflab_proxy + - pflab_backend + +##### AUTHENTIK WORKER ##### + + pflab-authentik-worker: + + image: ghcr.io/goauthentik/server:2026.5.3 + container_name: pflab-authentik-worker + + restart: unless-stopped + command: worker + + env_file: [.secrets/.env] + environment: *authentik-env + + volumes: + - authentik_media:/media + - authentik_templates:/templates + + # Needed only if you want Authentik-managed outposts + - /var/run/docker.sock:/var/run/docker.sock + + networks: + - pflab_backend + + depends_on: + pflab-authentik: + condition: service_started diff --git a/Guest/PurposeFlow/auth/pflab-secrets/compose.yaml b/Guest/PurposeFlow/auth/pflab-secrets/compose.yaml new file mode 100644 index 0000000..f6ff0ed --- /dev/null +++ b/Guest/PurposeFlow/auth/pflab-secrets/compose.yaml @@ -0,0 +1,42 @@ +name: pflab-secrets + +########## ===== NETWORKS ===== ########## + +networks: + + pflab_proxy: + name: pflab_proxy + + pflab_auth: + name: pflab_auth + +########## ===== VOLUMES ===== ########## + +volumes: + + vaultwarden_data: + name: pflab_vaultwarden + driver: local + +########## ===== SERVICES ===== ########## + +services: + +##### VAULTWARDEN + pflab-vaultwarden: + + image: vaultwarden/server:latest + container_name: pflab-vaultwarden + restart: unless-stopped + + env_file: [.secrets/.env] + environment: + WEBSOCKET_ENABLED: "true" + LOG_LEVEL: warn + + volumes: + - vaultwarden_data:/data + + networks: + - pflab_proxy + - pflab_auth diff --git a/Guest/PurposeFlow/compose.yaml b/Guest/PurposeFlow/compose.yaml new file mode 100644 index 0000000..e5e03ce --- /dev/null +++ b/Guest/PurposeFlow/compose.yaml @@ -0,0 +1,41 @@ +name: pflab-master-compose + +########## ===== NETWORKS ===== ########### + +networks: + + proxy: + name: pflab_proxy + driver: bridge + + auth: + name: pflab_auth + driver: bridge + + backend: + name: pflab_backend + driver: bridge + +########## ===== INCLUDES ===== ########## + +include: + +##### REVERSE-PROXY + - ./reverse-proxy/pflab-proxy/compose.yaml + +##### AUTH +# - ./auth/pflab-id/compose.yaml + - ./auth/pflab-secrets/compose.yaml + +##### STORAGE + - ./storage/pflab-postgres/compose.yaml + - ./storage/pflab-git/compose.yaml +## SPACETIME-DB + +##### COMS +# - ./coms/pflab-alias/compose.yaml +# - ./coms/pflab-coms/compose.yaml + +##### MEDIA +## JELLYFIN + diff --git a/Guest/PurposeFlow/coms/pflab-alias/compose.yaml b/Guest/PurposeFlow/coms/pflab-alias/compose.yaml new file mode 100644 index 0000000..8041341 --- /dev/null +++ b/Guest/PurposeFlow/coms/pflab-alias/compose.yaml @@ -0,0 +1,163 @@ +name: simplelogin + +x-simplelogin-image: &simplelogin-image + image: simplelogin/app:4.6.5-beta + +x-simplelogin-env: &simplelogin-env + URL: https://alias.tinyhome.ndmv.net + EMAIL_DOMAIN: tinyhome.ndmv.net + SUPPORT_EMAIL: alias@postbox.tinyhome.ndmv.net + EMAIL_SERVERS_WITH_PRIORITY: '[(10, "alias.tinyhome.ndmv.net.")]' + DISABLE_ALIAS_SUFFIX: "1" + DKIM_PRIVATE_KEY_PATH: /dkim.key + GNUPGHOME: /sl/pgp + LOCAL_FILE_UPLOAD: "1" + POSTFIX_SERVER: simplelogin-postfix + +x-simplelogin-volumes: &simplelogin-volumes + - simplelogin_gpg:/sl/pgp + - simplelogin_upload:/code/static/upload + - ./.secrets/dkim-rsa.key:/dkim.key:ro + - ./.secrets/dkim.pub.key:/dkim.pub.key:ro + +networks: + pflab_proxy: + name: pflab_proxy + + pflab_backend: + name: pflab_backend + +volumes: + simplelogin_gpg: + name: pflab_simplelogin_gpg + driver: local + + simplelogin_upload: + name: pflab_simplelogin_uploads + driver: local + +services: + + simplelogin-migration: + <<: *simplelogin-image + command: ["alembic", "upgrade", "head"] + container_name: pflab-simplelogin-migration + env_file: + - ./.secrets/.env + environment: *simplelogin-env + + volumes: *simplelogin-volumes + networks: + - pflab_backend + + simplelogin-init: + <<: *simplelogin-image + command: ["python", "init_app.py"] + container_name: pflab-simplelogin-init + depends_on: + simplelogin-migration: + condition: service_completed_successfully + env_file: + - ./.secrets/.env + environment: *simplelogin-env + + volumes: *simplelogin-volumes + + networks: + - pflab_backend + + simplelogin-postfix: + image: simplelogin/postfix:latest + container_name: pflab-simplelogin-postfix + restart: unless-stopped + + env_file: + - ./.secrets/.env + environment: + ALIASES_DEFAULT_DOMAIN: tinyhome.ndmv.net + DB_HOST: pflab-postgres + DB_USER: simplelogin + DB_NAME: simplelogin + EMAIL_HANDLER_HOST: pflab-simplelogin-email + LETSENCRYPT_EMAIL: alias@postbox.tinyhome.ndmv.net + POSTFIX_FQDN: alias.tinyhome.ndmv.net + SIMPLELOGIN_COMPATIBILITY_MODE: v4 + # If you want the postfix container to use certs managed elsewhere, + # mount the files and uncomment these: + # TLS_KEY_FILE: /tls/privkey.pem + # TLS_CERT_FILE: /tls/fullchain.pem + + ports: + - "25:25" + - "587:587" + + networks: + - pflab_backend + + simplelogin: + <<: [*simplelogin-image] + container_name: pflab-simplelogin + restart: unless-stopped + depends_on: + - simplelogin-postfix + healthcheck: + test: ["CMD-SHELL", "curl -fsS http://localhost:7777 >/dev/null || exit 1"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 30s + + env_file: + - ./.secrets/.env + environment: *simplelogin-env + + volumes: *simplelogin-volumes + + networks: + - pflab_proxy + - pflab_backend + + simplelogin-email: + <<: [*simplelogin-image] + container_name: pflab-simplelogin-email + restart: unless-stopped + depends_on: + simplelogin-init: + condition: service_completed_successfully + simplelogin-postfix: + condition: service_healthy + + command: python email_handler.py + + env_file: + - ./.secrets/.env + environment: *simplelogin-env + + ports: + - "127.0.0.1:20381:20381" + + volumes: *simplelogin-volumes + + networks: + - pflab_backend + + simplelogin-worker: + <<: [*simplelogin-image] + container_name: pflab-simplelogin-worker + restart: unless-stopped + depends_on: + simplelogin-init: + condition: service_completed_successfully + simplelogin-email: + condition: service_started + + command: python job_runner.py + + env_file: + - ./.secrets/.env + environment: *simplelogin-env + + volumes: *simplelogin-volumes + + networks: + - pflab_backend diff --git a/Local/coms/thlab-alias/secrets/dkim.key b/Guest/PurposeFlow/coms/pflab-alias/secrets/dkim.key similarity index 100% rename from Local/coms/thlab-alias/secrets/dkim.key rename to Guest/PurposeFlow/coms/pflab-alias/secrets/dkim.key diff --git a/Local/coms/thlab-alias/secrets/dkim.pub.key b/Guest/PurposeFlow/coms/pflab-alias/secrets/dkim.pub.key similarity index 100% rename from Local/coms/thlab-alias/secrets/dkim.pub.key rename to Guest/PurposeFlow/coms/pflab-alias/secrets/dkim.pub.key diff --git a/Guest/PurposeFlow/reverse-proxy/pflab-proxy/compose.yaml b/Guest/PurposeFlow/reverse-proxy/pflab-proxy/compose.yaml new file mode 100644 index 0000000..ca55d40 --- /dev/null +++ b/Guest/PurposeFlow/reverse-proxy/pflab-proxy/compose.yaml @@ -0,0 +1,57 @@ +name: pflab-proxy + +########## ===== NETWORKS ===== ########## + +networks: + + edge_proxy: + external: true + + pflab_proxy: + name: pflab_proxy + + pflab_auth: + name: pflab_auth + +########## ===== VOLUMES ===== ########## + +volumes: + + npm_data: + name: pflab_npm_data + driver: local + + npm_letsencrypt: + name: pflab_npm_letsencrypt + driver: local + + npm_app: + name: pflab_npm_app + driver: local + +########## ===== SERVICES ===== ########## + +services: + +##### PROXY + pflab-nginx: + + image: jc21/nginx-proxy-manager:latest + container_name: pflab-nginx + + restart: unless-stopped + + env_file: [.secrets/.env] + environment: + DISABLE_IPV6: "true" + + volumes: + - npm_data:/data + - npm_letsencrypt:/etc/letsencrypt + - npm_app:/app + + networks: + pflab_proxy: + pflab_auth: + edge_proxy: + ipv4_address: 10.60.0.11 diff --git a/Guest/PurposeFlow/storage/pflab-git/compose.yaml b/Guest/PurposeFlow/storage/pflab-git/compose.yaml new file mode 100644 index 0000000..dda3630 --- /dev/null +++ b/Guest/PurposeFlow/storage/pflab-git/compose.yaml @@ -0,0 +1,62 @@ +name: pflab-git + +########## ===== NETWORKS ===== ########## + +networks: + + pflab_proxy: + name: pflab_proxy + + pflab_backend: + name: pflab_backend + +##### + +########## ===== VOLUMES ===== ########## + +volumes: + + gitea_data: + name: pflab_gitea + driver: local + +##### + +########## ===== SERVICES ===== ########## + +services: + +##### == GITEA == ##### + + pflab-gitea: + + image: docker.gitea.com/gitea:latest + container_name: pflab-gitea + + restart: unless-stopped + + env_file: [.secrets/.env] + environment: + USER_UID: "1000" + USER_GID: "1000" + GITEA__database__DB_TYPE: postgres + GITEA__database__HOST: pflab-postgres:5432 + GITEA__database__NAME: gitea + GITEA__server__SSH_PORT: "2223" + GITEA__server__SSH_LISTEN_PORT: "22" + GITEA__server__HTTP_PORT: "3000" + GITEA__mailer__ENABLED: "false" + GITEA__mailer__PROTOCOL: "smtp" + ports: + - "2223:22" + + volumes: + - gitea_data:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + + networks: + - pflab_proxy + - pflab_backend + +##### diff --git a/Guest/PurposeFlow/storage/pflab-postgres/compose.yaml b/Guest/PurposeFlow/storage/pflab-postgres/compose.yaml new file mode 100644 index 0000000..07b9fb7 --- /dev/null +++ b/Guest/PurposeFlow/storage/pflab-postgres/compose.yaml @@ -0,0 +1,42 @@ +name: pflab-postgres + +########## ===== NETWORKS ===== ########## + +networks: + + pflab_backend: + name: pflab_backend + +##### + +########## ===== VOLUMES ===== ########## + +volumes: + + postgres_data: + name: pflab_postgres + driver: local + +##### + +########## ===== SERVICES ===== ########## + +services: + + pflab-postgres: + image: postgres:17-alpine + container_name: pflab-postgres + + restart: unless-stopped + + env_file: [.secrets/.env] + + volumes: + - postgres_data:/var/lib/postgresql/data + + networks: + pflab_backend: + aliases: + - postgres + +#####