with drysense

This commit is contained in:
NucBox_EVO-X2\robert 2025-12-22 22:12:22 -08:00
parent fa43a97880
commit 68facaccd8
53 changed files with 1290 additions and 30 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
deploy/sense/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

19
deploy/sense/index.html Normal file
View File

@ -0,0 +1,19 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/sense/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Turning Floods Into Fresh Starts">
<meta name="keywords" content="welldry, sense, manager, floods, prevention">
<title>WellDry Sense</title>
<script type="module" crossorigin src="/sense/assets/index-DppBefZu.js"></script>
<link rel="stylesheet" crossorigin href="/sense/assets/index-Dk30-nFi.css">
</head>
<body>
<div id="app"></div>
</body>
</html>

12
deploy_draysense.sh Normal file
View File

@ -0,0 +1,12 @@
#!/bin/bash
rm -rf ./well-dry-sense
TOKEN=715515426be5ce38d504aa1252fc8c9e9f789ddc
git clone https://$TOKEN@gitea.wellnua.com/pkresoja/well-dry-sense
cd ./well-dry-sense
echo "VITE_GIT_VERSION=$(git rev-parse --short HEAD)" >> .env
npm install
npm run build

View File

@ -35,7 +35,6 @@ services:
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik/config:/etc/traefik
- ./traefik/acme.json:/etc/traefik/acme.json
labels:
- "traefik.enable=true"
@ -48,35 +47,55 @@ services:
- "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$mG0yHveI$$y2hSROLHtMbuWFK4F.p2c1"
nginx:
build:
context: ./nginx
dockerfile: Dockerfile
restart: always
networks:
- traefik-public
volumes:
- /home/ubuntu/www:/usr/share/nginx/html
- /mnt/data/well_tests:/usr/share/nginx/html/well_tests
- /mnt/data/shared:/usr/share/nginx/html/shared
- /home/ubuntu/server-setup/well_mob_pwa/build:/usr/share/nginx/html/react
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./nginx/.htpasswd:/etc/nginx/.htpasswd:ro
labels:
- "traefik.enable=true"
# Main website
- "traefik.http.routers.nginx-web.rule=Host(`eluxnetworks.net`)"
- "traefik.http.routers.nginx-web.entrypoints=websecure"
- "traefik.http.routers.nginx-web.tls.certresolver=letsencrypt"
# React app
- "traefik.http.routers.nginx-react.rule=Host(`react.eluxnetworks.net`)"
- "traefik.http.routers.nginx-react.entrypoints=websecure"
- "traefik.http.routers.nginx-react.tls.certresolver=letsencrypt"
- "traefik.http.middlewares.security-headers.headers.stsSeconds=31536000"
- "traefik.http.middlewares.security-headers.headers.forceSTSHeader=true"
- "traefik.http.routers.nginx-web.middlewares=security-headers"
- "traefik.http.routers.nginx-react.middlewares=security-headers"
- "traefik.http.services.nginx-react.loadbalancer.server.port=80"
build:
context: ./nginx
dockerfile: Dockerfile
restart: always
networks:
- traefik-public
volumes:
- /home/ubuntu/www:/usr/share/nginx/html
- /mnt/data/well_tests:/usr/share/nginx/html/well_tests
- /mnt/data/shared:/usr/share/nginx/html/shared
- /home/ubuntu/server-setup/well_mob_pwa/build:/usr/share/nginx/html/react
- /home/ubuntu/server-setup/new-portal/dist:/usr/share/nginx/html/portal
- /home/ubuntu/server-setup/well-dry-sense/dist:/usr/share/nginx/html/drysense
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./nginx/.htpasswd:/etc/nginx/.htpasswd:ro
labels:
- "traefik.enable=true"
# Main website
- "traefik.http.routers.nginx-web.rule=Host(`eluxnetworks.net`)"
- "traefik.http.routers.nginx-web.entrypoints=websecure"
- "traefik.http.routers.nginx-web.tls.certresolver=letsencrypt"
- "traefik.http.routers.nginx-web.service=nginx-web"
- "traefik.http.services.nginx-web.loadbalancer.server.port=80"
# React app
- "traefik.http.routers.nginx-react.rule=Host(`react.eluxnetworks.net`)"
- "traefik.http.routers.nginx-react.entrypoints=websecure"
- "traefik.http.routers.nginx-react.tls.certresolver=letsencrypt"
- "traefik.http.routers.nginx-react.service=nginx-react"
- "traefik.http.services.nginx-react.loadbalancer.server.port=80"
# Portal app
- "traefik.http.routers.nginx-portal.rule=Host(`portal.eluxnetworks.net`)"
- "traefik.http.routers.nginx-portal.entrypoints=websecure"
- "traefik.http.routers.nginx-portal.tls.certresolver=letsencrypt"
- "traefik.http.routers.nginx-portal.service=nginx-portal"
- "traefik.http.services.nginx-portal.loadbalancer.server.port=80"
# Drysense app
- "traefik.http.routers.nginx-drysense.rule=Host(`drysense.eluxnetworks.net`)"
- "traefik.http.routers.nginx-drysense.entrypoints=websecure"
- "traefik.http.routers.nginx-drysense.tls.certresolver=letsencrypt"
- "traefik.http.routers.nginx-drysense.service=nginx-drysense"
- "traefik.http.services.nginx-drysense.loadbalancer.server.port=80"
# Security headers middleware
- "traefik.http.middlewares.security-headers.headers.stsSeconds=31536000"
- "traefik.http.middlewares.security-headers.headers.forceSTSHeader=true"
- "traefik.http.routers.nginx-web.middlewares=security-headers"
- "traefik.http.routers.nginx-react.middlewares=security-headers"
- "traefik.http.routers.nginx-portal.middlewares=security-headers"
- "traefik.http.routers.nginx-drysense.middlewares=security-headers"
rabbitmq:
networks:

View File

@ -0,0 +1,184 @@
networks:
traefik-public:
driver: bridge
services:
traefik:
networks:
- traefik-public
image: traefik:latest
restart: always
command:
- "--api.dashboard=true"
- "--api.insecure=false"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--providers.file.directory=/etc/traefik"
- "--providers.file.watch=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.websecure.http.tls=true"
- "--entrypoints.websecure.http.tls.certresolver=letsencrypt"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.email=robert@wellnuo.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/etc/traefik/acme.json"
- "--api.dashboard=true"
- "--api.insecure=true"
- "--entrypoints.amqp.address=:5672"
- "--log.level=DEBUG"
ports:
- "80:80"
- "443:443"
- "8080:8080" # Add this line for dashboard internal access
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik/config:/etc/traefik
labels:
- "traefik.enable=true"
# Dashboard
- "traefik.http.routers.dashboard.rule=Host(`traefik.eluxnetworks.net`)"
- "traefik.http.routers.dashboard.service=api@internal"
- "traefik.http.routers.dashboard.entrypoints=websecure"
- "traefik.http.routers.dashboard.tls.certresolver=letsencrypt"
- "traefik.http.routers.dashboard.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$mG0yHveI$$y2hSROLHtMbuWFK4F.p2c1"
nginx:
build:
context: ./nginx
dockerfile: Dockerfile
restart: always
networks:
- traefik-public
volumes:
- /home/ubuntu/www:/usr/share/nginx/html
- /mnt/data/well_tests:/usr/share/nginx/html/well_tests
- /mnt/data/shared:/usr/share/nginx/html/shared
- /home/ubuntu/server-setup/well_mob_pwa/build:/usr/share/nginx/html/react
- /home/ubuntu/server-setup/new-portal/dist:/usr/share/nginx/html/portal
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./nginx/.htpasswd:/etc/nginx/.htpasswd:ro
labels:
- "traefik.enable=true"
# Main website
- "traefik.http.routers.nginx-web.rule=Host(`eluxnetworks.net`)"
- "traefik.http.routers.nginx-web.entrypoints=websecure"
- "traefik.http.routers.nginx-web.tls.certresolver=letsencrypt"
- "traefik.http.routers.nginx-web.service=nginx-web"
- "traefik.http.services.nginx-web.loadbalancer.server.port=80"
# React app
- "traefik.http.routers.nginx-react.rule=Host(`react.eluxnetworks.net`)"
- "traefik.http.routers.nginx-react.entrypoints=websecure"
- "traefik.http.routers.nginx-react.tls.certresolver=letsencrypt"
- "traefik.http.routers.nginx-react.service=nginx-react"
- "traefik.http.services.nginx-react.loadbalancer.server.port=80"
# Portal app
- "traefik.http.routers.nginx-portal.rule=Host(`portal.eluxnetworks.net`)"
- "traefik.http.routers.nginx-portal.entrypoints=websecure"
- "traefik.http.routers.nginx-portal.tls.certresolver=letsencrypt"
- "traefik.http.routers.nginx-portal.service=nginx-portal"
- "traefik.http.services.nginx-portal.loadbalancer.server.port=80"
# Security headers middleware
- "traefik.http.middlewares.security-headers.headers.stsSeconds=31536000"
- "traefik.http.middlewares.security-headers.headers.forceSTSHeader=true"
- "traefik.http.routers.nginx-web.middlewares=security-headers"
- "traefik.http.routers.nginx-react.middlewares=security-headers"
- "traefik.http.routers.nginx-portal.middlewares=security-headers"
rabbitmq:
networks:
- traefik-public
user: "999:65534"
image: rabbitmq:3.13-management
restart: always
hostname: "rabbitmq" # Add this line
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=Cbx696969!
- RABBITMQ_NODENAME=rabbit@rabbitmq # Add this line
- RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=-rabbit log_levels [{connection,error}]
- RABBITMQ_MNESIA_DIR=/var/lib/rabbitmq/mnesia
volumes:
- /mnt/data/rabbitmq:/var/lib/rabbitmq
ports:
- "5672:5672" # AMQP port
- "15672:15672" # Management UI
expose:
- 5672
- 15672
labels:
- "traefik.enable=true"
- "traefik.http.routers.rabbitmq.rule=Host(`rabbitmq.eluxnetworks.net`)"
- "traefik.http.routers.rabbitmq.entrypoints=websecure"
- "traefik.http.routers.rabbitmq.tls.certresolver=letsencrypt"
- "traefik.http.services.rabbitmq.loadbalancer.server.port=15672"
minio:
image: minio/minio:latest
restart: always
command: server /data --console-address ":9001" --address ":9000"
environment:
# Admin credentials for console login
- MINIO_ROOT_USER=admin
- MINIO_ROOT_PASSWORD=Cbx696969!
# Access keys for API access
- MINIO_ACCESS_KEY=well_pipe
- MINIO_SECRET_KEY=WellNuo_2024
# Optional: Force all credentials to be set before starting
- MINIO_SITE_REGION=us-east-1
- MINIO_BROWSER_REDIRECT_URL=https://minio-console.eluxnetworks.net
ports:
- "9000:9000"
- "9001:9001" # Adding explicit port mapping for debugging
volumes:
- /mnt/data/minio:/data
networks:
- traefik-public
labels:
- "traefik.enable=true"
# API Service
- "traefik.http.routers.minio-api.rule=Host(`minio.eluxnetworks.net`)"
- "traefik.http.routers.minio-api.entrypoints=websecure"
- "traefik.http.routers.minio-api.tls.certresolver=letsencrypt"
- "traefik.http.services.minio-api-service.loadbalancer.server.port=9000"
- "traefik.http.routers.minio-api.service=minio-api-service"
# Console Service
- "traefik.http.routers.minio-console.rule=Host(`minio-console.eluxnetworks.net`)"
- "traefik.http.routers.minio-console.entrypoints=websecure"
- "traefik.http.routers.minio-console.tls.certresolver=letsencrypt"
- "traefik.http.services.minio-console-service.loadbalancer.server.port=9001"
- "traefik.http.routers.minio-console.service=minio-console-service"
registry:
image: registry:latest
restart: always
ports:
- "5000:5000"
networks:
- traefik-public
labels:
- "traefik.enable=true"
- "traefik.http.routers.registry.rule=Host(`repo.eluxnetworks.net`)"
- "traefik.http.routers.registry.entrypoints=websecure"
- "traefik.http.routers.registry.tls.certresolver=letsencrypt"
- "traefik.http.services.registry.loadbalancer.server.port=5000"
redis:
image: redis:alpine
restart: always
networks:
- traefik-public
volumes:
- /mnt/data/redis:/data
ports:
- "6379:6379"
command: redis-server --appendonly yes
labels:
- "traefik.enable=false" # No need to expose Redis to the internet

View File

@ -0,0 +1,188 @@
networks:
traefik-public:
driver: bridge
services:
traefik:
networks:
- traefik-public
image: traefik:latest
restart: always
command:
- "--api.dashboard=true"
- "--api.insecure=false"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--providers.file.directory=/etc/traefik"
- "--providers.file.watch=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.websecure.http.tls=true"
- "--entrypoints.websecure.http.tls.certresolver=letsencrypt"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.email=robert@wellnuo.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/etc/traefik/acme.json"
- "--api.dashboard=true"
- "--api.insecure=true"
- "--entrypoints.amqp.address=:5672"
- "--log.level=DEBUG"
ports:
- "80:80"
- "443:443"
- "8080:8080" # Add this line for dashboard internal access
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik/config:/etc/traefik
labels:
- "traefik.enable=true"
# Dashboard
- "traefik.http.routers.dashboard.rule=Host(`traefik.eluxnetworks.net`)"
- "traefik.http.routers.dashboard.service=api@internal"
- "traefik.http.routers.dashboard.entrypoints=websecure"
- "traefik.http.routers.dashboard.tls.certresolver=letsencrypt"
- "traefik.http.routers.dashboard.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$mG0yHveI$$y2hSROLHtMbuWFK4F.p2c1"
nginx:
build:
context: ./nginx
dockerfile: Dockerfile
restart: always
networks:
- traefik-public
volumes:
- /home/ubuntu/www:/usr/share/nginx/html
- /mnt/data/well_tests:/usr/share/nginx/html/well_tests
- /mnt/data/shared:/usr/share/nginx/html/shared
- /home/ubuntu/server-setup/well_mob_pwa/build:/usr/share/nginx/html/react
- /home/ubuntu/server-setup/new-portal/dist:/usr/share/nginx/html/portal
- /home/ubuntu/server-setup/deploy/sense:/usr/share/nginx/html/sense # <-- FINAL, CORRECTED LINE
#- /home/ubuntu/well-dry-sense/dist:/var/www/sense # existing LINE for well-dry-sense (with copy)
#- /home/ubuntu/well-dry-sense/dist:/usr/share/nginx/html/sense # new LINE for well-dry-sense (no copy)
#- /home/ubuntu/server-setup/well-dry-sense/dist:/usr/share/nginx/html/sense # old, requires copy
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./nginx/.htpasswd:/etc/nginx/.htpasswd:ro
labels:
- "traefik.enable=true"
# Main website
- "traefik.http.routers.nginx-web.rule=Host(`eluxnetworks.net`)"
- "traefik.http.routers.nginx-web.entrypoints=websecure"
- "traefik.http.routers.nginx-web.tls.certresolver=letsencrypt"
- "traefik.http.routers.nginx-web.service=nginx-web"
- "traefik.http.services.nginx-web.loadbalancer.server.port=80"
# React app
- "traefik.http.routers.nginx-react.rule=Host(`react.eluxnetworks.net`)"
- "traefik.http.routers.nginx-react.entrypoints=websecure"
- "traefik.http.routers.nginx-react.tls.certresolver=letsencrypt"
- "traefik.http.routers.nginx-react.service=nginx-react"
- "traefik.http.services.nginx-react.loadbalancer.server.port=80"
# Portal app
- "traefik.http.routers.nginx-portal.rule=Host(`portal.eluxnetworks.net`)"
- "traefik.http.routers.nginx-portal.entrypoints=websecure"
- "traefik.http.routers.nginx-portal.tls.certresolver=letsencrypt"
- "traefik.http.routers.nginx-portal.service=nginx-portal"
- "traefik.http.services.nginx-portal.loadbalancer.server.port=80"
# Security headers middleware
- "traefik.http.middlewares.security-headers.headers.stsSeconds=31536000"
- "traefik.http.middlewares.security-headers.headers.forceSTSHeader=true"
- "traefik.http.routers.nginx-web.middlewares=security-headers"
- "traefik.http.routers.nginx-react.middlewares=security-headers"
- "traefik.http.routers.nginx-portal.middlewares=security-headers"
rabbitmq:
networks:
- traefik-public
user: "999:65534"
image: rabbitmq:3.13-management
restart: always
hostname: "rabbitmq" # Add this line
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=Cbx696969!
- RABBITMQ_NODENAME=rabbit@rabbitmq # Add this line
- RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=-rabbit log_levels [{connection,error}]
- RABBITMQ_MNESIA_DIR=/var/lib/rabbitmq/mnesia
volumes:
- /mnt/data/rabbitmq:/var/lib/rabbitmq
ports:
- "5672:5672" # AMQP port
- "15672:15672" # Management UI
expose:
- 5672
- 15672
labels:
- "traefik.enable=true"
- "traefik.http.routers.rabbitmq.rule=Host(`rabbitmq.eluxnetworks.net`)"
- "traefik.http.routers.rabbitmq.entrypoints=websecure"
- "traefik.http.routers.rabbitmq.tls.certresolver=letsencrypt"
- "traefik.http.services.rabbitmq.loadbalancer.server.port=15672"
minio:
image: minio/minio:latest
restart: always
command: server /data --console-address ":9001" --address ":9000"
environment:
# Admin credentials for console login
- MINIO_ROOT_USER=admin
- MINIO_ROOT_PASSWORD=Cbx696969!
# Access keys for API access
- MINIO_ACCESS_KEY=well_pipe
- MINIO_SECRET_KEY=WellNuo_2024
# Optional: Force all credentials to be set before starting
- MINIO_SITE_REGION=us-east-1
- MINIO_BROWSER_REDIRECT_URL=https://minio-console.eluxnetworks.net
ports:
- "9000:9000"
- "9001:9001" # Adding explicit port mapping for debugging
volumes:
- /mnt/data/minio:/data
networks:
- traefik-public
labels:
- "traefik.enable=true"
# API Service
- "traefik.http.routers.minio-api.rule=Host(`minio.eluxnetworks.net`)"
- "traefik.http.routers.minio-api.entrypoints=websecure"
- "traefik.http.routers.minio-api.tls.certresolver=letsencrypt"
- "traefik.http.services.minio-api-service.loadbalancer.server.port=9000"
- "traefik.http.routers.minio-api.service=minio-api-service"
# Console Service
- "traefik.http.routers.minio-console.rule=Host(`minio-console.eluxnetworks.net`)"
- "traefik.http.routers.minio-console.entrypoints=websecure"
- "traefik.http.routers.minio-console.tls.certresolver=letsencrypt"
- "traefik.http.services.minio-console-service.loadbalancer.server.port=9001"
- "traefik.http.routers.minio-console.service=minio-console-service"
registry:
image: registry:latest
restart: always
ports:
- "5000:5000"
networks:
- traefik-public
labels:
- "traefik.enable=true"
- "traefik.http.routers.registry.rule=Host(`repo.eluxnetworks.net`)"
- "traefik.http.routers.registry.entrypoints=websecure"
- "traefik.http.routers.registry.tls.certresolver=letsencrypt"
- "traefik.http.services.registry.loadbalancer.server.port=5000"
redis:
image: redis:alpine
restart: always
networks:
- traefik-public
volumes:
- /mnt/data/redis:/data
ports:
- "6379:6379"
command: redis-server --appendonly yes
labels:
- "traefik.enable=false" # No need to expose Redis to the internet

View File

@ -0,0 +1,186 @@
networks:
traefik-public:
driver: bridge
services:
traefik:
networks:
- traefik-public
image: traefik:latest
restart: always
# ADD THIS BLOCK TO ENABLE HOST COMMUNICATION
extra_hosts:
- "host.docker.internal:host-gateway"
# END OF ADDED BLOCK
command:
- "--api.dashboard=true"
- "--api.insecure=false"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--providers.file.directory=/etc/traefik"
- "--providers.file.watch=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.websecure.http.tls=true"
- "--entrypoints.websecure.http.tls.certresolver=letsencrypt"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.email=robert@wellnuo.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/etc/traefik/acme.json"
- "--api.dashboard=true"
- "--api.insecure=true"
- "--entrypoints.amqp.address=:5672"
- "--log.level=DEBUG"
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik/config:/etc/traefik
labels:
- "traefik.enable=true"
# Dashboard
- "traefik.http.routers.dashboard.rule=Host(`traefik.eluxnetworks.net`)"
- "traefik.http.routers.dashboard.service=api@internal"
- "traefik.http.routers.dashboard.entrypoints=websecure"
- "traefik.http.routers.dashboard.tls.certresolver=letsencrypt"
- "traefik.http.routers.dashboard.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$mG0yHveI$$y2hSROLHtMbuWFK4F.p2c1"
# ... other services remain unchanged ...
nginx:
build:
context: ./nginx
dockerfile: Dockerfile
restart: always
networks:
- traefik-public
volumes:
- /home/ubuntu/www:/usr/share/nginx/html
- /mnt/data/well_tests:/usr/share/nginx/html/well_tests
- /mnt/data/shared:/usr/share/nginx/html/shared
- /home/ubuntu/server-setup/well_mob_pwa/build:/usr/share/nginx/html/react
- /home/ubuntu/server-setup/new-portal/dist:/usr/share/nginx/html/portal
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./nginx/.htpasswd:/etc/nginx/.htpasswd:ro
labels:
- "traefik.enable=true"
# Main website
- "traefik.http.routers.nginx-web.rule=Host(`eluxnetworks.net`)"
- "traefik.http.routers.nginx-web.entrypoints=websecure"
- "traefik.http.routers.nginx-web.tls.certresolver=letsencrypt"
- "traefik.http.routers.nginx-web.service=nginx-web"
- "traefik.http.services.nginx-web.loadbalancer.server.port=80"
# React app
- "traefik.http.routers.nginx-react.rule=Host(`react.eluxnetworks.net`)"
- "traefik.http.routers.nginx-react.entrypoints=websecure"
- "traefik.http.routers.nginx-react.tls.certresolver=letsencrypt"
- "traefik.http.routers.nginx-react.service=nginx-react"
- "traefik.http.services.nginx-react.loadbalancer.server.port=80"
# Portal app
- "traefik.http.routers.nginx-portal.rule=Host(`portal.eluxnetworks.net`)"
- "traefik.http.routers.nginx-portal.entrypoints=websecure"
- "traefik.http.routers.nginx-portal.tls.certresolver=letsencrypt"
- "traefik.http.routers.nginx-portal.service=nginx-portal"
- "traefik.http.services.nginx-portal.loadbalancer.server.port=80"
# Security headers middleware
- "traefik.http.middlewares.security-headers.headers.stsSeconds=31536000"
- "traefik.http.middlewares.security-headers.headers.forceSTSHeader=true"
- "traefik.http.routers.nginx-web.middlewares=security-headers"
- "traefik.http.routers.nginx-react.middlewares=security-headers"
- "traefik.http.routers.nginx-portal.middlewares=security-headers"
rabbitmq:
networks:
- traefik-public
user: "999:65534"
image: rabbitmq:3.13-management
restart: always
hostname: "rabbitmq" # Add this line
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=Cbx696969!
- RABBITMQ_NODENAME=rabbit@rabbitmq # Add this line
- RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=-rabbit log_levels [{connection,error}]
- RABBITMQ_MNESIA_DIR=/var/lib/rabbitmq/mnesia
volumes:
- /mnt/data/rabbitmq:/var/lib/rabbitmq
ports:
- "5672:5672" # AMQP port
- "15672:15672" # Management UI
expose:
- 5672
- 15672
labels:
- "traefik.enable=true"
- "traefik.http.routers.rabbitmq.rule=Host(`rabbitmq.eluxnetworks.net`)"
- "traefik.http.routers.rabbitmq.entrypoints=websecure"
- "traefik.http.routers.rabbitmq.tls.certresolver=letsencrypt"
- "traefik.http.services.rabbitmq.loadbalancer.server.port=15672"
minio:
image: minio/minio:latest
restart: always
command: server /data --console-address ":9001" --address ":9000"
environment:
# Admin credentials for console login
- MINIO_ROOT_USER=admin
- MINIO_ROOT_PASSWORD=Cbx696969!
# Access keys for API access
- MINIO_ACCESS_KEY=well_pipe
- MINIO_SECRET_KEY=WellNuo_2024
# Optional: Force all credentials to be set before starting
- MINIO_SITE_REGION=us-east-1
- MINIO_BROWSER_REDIRECT_URL=https://minio-console.eluxnetworks.net
ports:
- "9000:9000"
- "9001:9001" # Adding explicit port mapping for debugging
volumes:
- /mnt/data/minio:/data
networks:
- traefik-public
labels:
- "traefik.enable=true"
# API Service
- "traefik.http.routers.minio-api.rule=Host(`minio.eluxnetworks.net`)"
- "traefik.http.routers.minio-api.entrypoints=websecure"
- "traefik.http.routers.minio-api.tls.certresolver=letsencrypt"
- "traefik.http.services.minio-api-service.loadbalancer.server.port=9000"
- "traefik.http.routers.minio-api.service=minio-api-service"
# Console Service
- "traefik.http.routers.minio-console.rule=Host(`minio-console.eluxnetworks.net`)"
- "traefik.http.routers.minio-console.entrypoints=websecure"
- "traefik.http.routers.minio-console.tls.certresolver=letsencrypt"
- "traefik.http.services.minio-console-service.loadbalancer.server.port=9001"
- "traefik.http.routers.minio-console.service=minio-console-service"
registry:
image: registry:latest
restart: always
ports:
- "5000:5000"
networks:
- traefik-public
labels:
- "traefik.enable=true"
- "traefik.http.routers.registry.rule=Host(`repo.eluxnetworks.net`)"
- "traefik.http.routers.registry.entrypoints=websecure"
- "traefik.http.routers.registry.tls.certresolver=letsencrypt"
- "traefik.http.services.registry.loadbalancer.server.port=5000"
redis:
image: redis:alpine
restart: always
networks:
- traefik-public
volumes:
- /mnt/data/redis:/data
ports:
- "6379:6379"
command: redis-server --appendonly yes
labels:
- "traefik.enable=false"

View File

@ -0,0 +1,192 @@
networks:
traefik-public:
driver: bridge
services:
traefik:
networks:
- traefik-public
image: traefik:latest
restart: always
command:
- "--api.dashboard=true"
- "--api.insecure=false"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--providers.file.directory=/etc/traefik"
- "--providers.file.watch=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.websecure.http.tls=true"
- "--entrypoints.websecure.http.tls.certresolver=letsencrypt"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.email=robert@wellnuo.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/etc/traefik/acme.json"
- "--api.dashboard=true"
- "--api.insecure=true"
- "--entrypoints.amqp.address=:5672"
- "--log.level=DEBUG"
ports:
- "80:80"
- "443:443"
- "8080:8080" # Add this line for dashboard internal access
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik/config:/etc/traefik
labels:
- "traefik.enable=true"
# Dashboard
- "traefik.http.routers.dashboard.rule=Host(`traefik.eluxnetworks.net`)"
- "traefik.http.routers.dashboard.service=api@internal"
- "traefik.http.routers.dashboard.entrypoints=websecure"
- "traefik.http.routers.dashboard.tls.certresolver=letsencrypt"
- "traefik.http.routers.dashboard.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$mG0yHveI$$y2hSROLHtMbuWFK4F.p2c1"
nginx:
build:
context: ./nginx
dockerfile: Dockerfile
restart: always
networks:
- traefik-public
volumes:
- /home/ubuntu/www:/usr/share/nginx/html
- /mnt/data/well_tests:/usr/share/nginx/html/well_tests
- /mnt/data/shared:/usr/share/nginx/html/shared
- /home/ubuntu/server-setup/well_mob_pwa/build:/usr/share/nginx/html/react
- /home/ubuntu/server-setup/new-portal/dist:/usr/share/nginx/html/portal
- /home/ubuntu/server-setup/well-dry-sense/dist:/usr/share/nginx/html/drysense
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./nginx/.htpasswd:/etc/nginx/.htpasswd:ro
labels:
- "traefik.enable=true"
# Main website
- "traefik.http.routers.nginx-web.rule=Host(`eluxnetworks.net`)"
- "traefik.http.routers.nginx-web.entrypoints=websecure"
- "traefik.http.routers.nginx-web.tls.certresolver=letsencrypt"
- "traefik.http.routers.nginx-web.service=nginx-web"
- "traefik.http.services.nginx-web.loadbalancer.server.port=80"
# React app
- "traefik.http.routers.nginx-react.rule=Host(`react.eluxnetworks.net`)"
- "traefik.http.routers.nginx-react.entrypoints=websecure"
- "traefik.http.routers.nginx-react.tls.certresolver=letsencrypt"
- "traefik.http.routers.nginx-react.service=nginx-react"
- "traefik.http.services.nginx-react.loadbalancer.server.port=80"
# Portal app
- "traefik.http.routers.nginx-portal.rule=Host(`portal.eluxnetworks.net`)"
- "traefik.http.routers.nginx-portal.entrypoints=websecure"
- "traefik.http.routers.nginx-portal.tls.certresolver=letsencrypt"
- "traefik.http.routers.nginx-portal.service=nginx-portal"
- "traefik.http.services.nginx-portal.loadbalancer.server.port=80"
# Drysense app
- "traefik.http.routers.nginx-drysense.rule=Host(`drysense.eluxnetworks.net`)"
- "traefik.http.routers.nginx-drysense.entrypoints=websecure"
- "traefik.http.routers.nginx-drysense.tls.certresolver=letsencrypt"
- "traefik.http.routers.nginx-drysense.service=nginx-drysense"
- "traefik.http.services.nginx-drysense.loadbalancer.server.port=80"
# Security headers middleware
- "traefik.http.middlewares.security-headers.headers.stsSeconds=31536000"
- "traefik.http.middlewares.security-headers.headers.forceSTSHeader=true"
- "traefik.http.routers.nginx-web.middlewares=security-headers"
- "traefik.http.routers.nginx-react.middlewares=security-headers"
- "traefik.http.routers.nginx-portal.middlewares=security-headers"
- "traefik.http.routers.nginx-drysense.middlewares=security-headers"
rabbitmq:
networks:
- traefik-public
user: "999:65534"
image: rabbitmq:3.13-management
restart: always
hostname: "rabbitmq" # Add this line
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=Cbx696969!
- RABBITMQ_NODENAME=rabbit@rabbitmq # Add this line
- RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=-rabbit log_levels [{connection,error}]
- RABBITMQ_MNESIA_DIR=/var/lib/rabbitmq/mnesia
volumes:
- /mnt/data/rabbitmq:/var/lib/rabbitmq
ports:
- "5672:5672" # AMQP port
- "15672:15672" # Management UI
expose:
- 5672
- 15672
labels:
- "traefik.enable=true"
- "traefik.http.routers.rabbitmq.rule=Host(`rabbitmq.eluxnetworks.net`)"
- "traefik.http.routers.rabbitmq.entrypoints=websecure"
- "traefik.http.routers.rabbitmq.tls.certresolver=letsencrypt"
- "traefik.http.services.rabbitmq.loadbalancer.server.port=15672"
minio:
image: minio/minio:latest
restart: always
command: server /data --console-address ":9001" --address ":9000"
environment:
# Admin credentials for console login
- MINIO_ROOT_USER=admin
- MINIO_ROOT_PASSWORD=Cbx696969!
# Access keys for API access
- MINIO_ACCESS_KEY=well_pipe
- MINIO_SECRET_KEY=WellNuo_2024
# Optional: Force all credentials to be set before starting
- MINIO_SITE_REGION=us-east-1
- MINIO_BROWSER_REDIRECT_URL=https://minio-console.eluxnetworks.net
ports:
- "9000:9000"
- "9001:9001" # Adding explicit port mapping for debugging
volumes:
- /mnt/data/minio:/data
networks:
- traefik-public
labels:
- "traefik.enable=true"
# API Service
- "traefik.http.routers.minio-api.rule=Host(`minio.eluxnetworks.net`)"
- "traefik.http.routers.minio-api.entrypoints=websecure"
- "traefik.http.routers.minio-api.tls.certresolver=letsencrypt"
- "traefik.http.services.minio-api-service.loadbalancer.server.port=9000"
- "traefik.http.routers.minio-api.service=minio-api-service"
# Console Service
- "traefik.http.routers.minio-console.rule=Host(`minio-console.eluxnetworks.net`)"
- "traefik.http.routers.minio-console.entrypoints=websecure"
- "traefik.http.routers.minio-console.tls.certresolver=letsencrypt"
- "traefik.http.services.minio-console-service.loadbalancer.server.port=9001"
- "traefik.http.routers.minio-console.service=minio-console-service"
registry:
image: registry:latest
restart: always
ports:
- "5000:5000"
networks:
- traefik-public
labels:
- "traefik.enable=true"
- "traefik.http.routers.registry.rule=Host(`repo.eluxnetworks.net`)"
- "traefik.http.routers.registry.entrypoints=websecure"
- "traefik.http.routers.registry.tls.certresolver=letsencrypt"
- "traefik.http.services.registry.loadbalancer.server.port=5000"
redis:
image: redis:alpine
restart: always
networks:
- traefik-public
volumes:
- /mnt/data/redis:/data
ports:
- "6379:6379"
command: redis-server --appendonly yes
labels:
- "traefik.enable=false" # No need to expose Redis to the internet

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 577 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

109
new-portal/dist/assets/index-CViSXwoP.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 577 KiB

BIN
new-portal/dist/assets/nav-qbtiZ8QF.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
new-portal/dist/favicon.ico vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

19
new-portal/dist/index.html vendored Normal file
View File

@ -0,0 +1,19 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Configure and manage your WellNuo plugs effortlessly with our user-friendly portal">
<meta name="keywords" content="wellnuo, portal, caretaker, plug, beneficiary">
<title>WellNuo Portal</title>
<script type="module" crossorigin src="/assets/index-CViSXwoP.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-Dxv2Uy3x.css">
</head>
<body>
<div id="app"></div>
</body>
</html>

BIN
new-portal/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

19
new-portal/index.html Normal file
View File

@ -0,0 +1,19 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Configure and manage your WellNuo plugs effortlessly with our user-friendly portal">
<meta name="keywords" content="wellnuo, portal, caretaker, plug, beneficiary">
<title>WellNuo Portal</title>
<script type="module" crossorigin src="/assets/index-1B55Va0l.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-DLAHgo0g.css">
</head>
<body>
<div id="app"></div>
</body>
</html>

View File

@ -0,0 +1,15 @@
http:
routers:
drysense:
rule: "Host(`drysense.eluxnetworks.net`)"
entryPoints:
- "websecure"
service: "drysense-svc"
tls:
certresolver: "letsencrypt"
services:
drysense-svc:
loadBalancer:
servers:
- url: "http://host.docker.internal:3012"

View File

@ -7,6 +7,15 @@ http:
#tls:
#certresolver: "letsencrypt"
#priority: 100
# ERPNext configuration
erpnext:
rule: "Host(`erpnext.eluxnetworks.net`)"
service: "erpnext-service"
entrypoints: ["websecure"]
tls:
certresolver: "letsencrypt"
openfaas-gateway:
rule: "Host(`faasd.eluxnetworks.net`)"
service: "openfaas-gateway-service"
@ -25,6 +34,13 @@ http:
loadBalancer:
servers:
- url: "http://192.168.68.70:8082/function/well-api"
# ERPNext service
erpnext-service:
loadBalancer:
servers:
- url: "http://192.168.68.70:8090"
redis-commander:
loadBalancer:
servers: