Initial server setup configuration
This commit is contained in:
parent
1062898c73
commit
42b03fd03a
16
.gitignore
vendored
Normal file
16
.gitignore
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# RabbitMQ data files
|
||||||
|
rabbitmq/data/
|
||||||
|
rabbitmq/logs/
|
||||||
|
|
||||||
|
# Traefik temporary files
|
||||||
|
traefik/*~*
|
||||||
|
traefik/AEEB2D~O
|
||||||
|
|
||||||
|
# Any temporary/lock files
|
||||||
|
*~*
|
||||||
|
*.tmp
|
||||||
|
*.lock
|
||||||
|
|
||||||
|
# Log files
|
||||||
|
*.log
|
||||||
|
logs/
|
||||||
173
docker-compose.yml
Normal file
173
docker-compose.yml
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
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
|
||||||
|
- ./traefik/acme.json:/etc/traefik/acme.json
|
||||||
|
|
||||||
|
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
|
||||||
|
- ./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"
|
||||||
|
|
||||||
|
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
|
||||||
38
rabbitmq/definitions.json
Normal file
38
rabbitmq/definitions.json
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"name": "admin",
|
||||||
|
"password_hash": "YX91m9ZBhL8oXzpxcrYtVAOv4vgTDfS0YCCYJA1UDPPbNJ+m",
|
||||||
|
"hashing_algorithm": "rabbit_password_hashing_sha256",
|
||||||
|
"tags": ["administrator"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "well_pipe",
|
||||||
|
"password_hash": "AzdMI/4joetKPS2J5AsBOVKMZzW6Dp/ov6xal8vFbLpal43F",
|
||||||
|
"hashing_algorithm": "rabbit_password_hashing_sha256",
|
||||||
|
"tags": ["api_user"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vhosts": [
|
||||||
|
{
|
||||||
|
"name": "/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"permissions": [
|
||||||
|
{
|
||||||
|
"user": "admin",
|
||||||
|
"vhost": "/",
|
||||||
|
"configure": ".*",
|
||||||
|
"write": ".*",
|
||||||
|
"read": ".*"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"user": "well_pipe",
|
||||||
|
"vhost": "/",
|
||||||
|
"configure": ".*",
|
||||||
|
"write": ".*",
|
||||||
|
"read": ".*"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user