chore: Remove legacy Docker configuration and documentation
Some checks failed
API Gateway (Java Spring Boot) / test (21) (push) Successful in 2m2s
API Gateway (Java Spring Boot) / test (17) (push) Successful in 2m2s
Frontend (React) / test (20) (push) Successful in 2m11s
Integration Tests / integration-tests (push) Failing after 25s
Integration Tests / performance-tests (push) Has been skipped
API Docs (Node.js Express) / test (20) (push) Successful in 2m36s
API Gateway (Java Spring Boot) / build (push) Failing after 40s
Service Adapters (Python FastAPI) / test (3.11) (push) Successful in 1m24s
Service Adapters (Python FastAPI) / test (3.12) (push) Successful in 1m27s
Service Adapters (Python FastAPI) / test (3.13) (push) Successful in 1m27s
Frontend (React) / build (push) Failing after 58s
Service Adapters (Python FastAPI) / build (push) Failing after 21s
Frontend (React) / lighthouse (push) Has been skipped
API Docs (Node.js Express) / build (push) Failing after 1m24s

### Summary of Changes
- Deleted `docker-compose.dev.yml` and `docker-compose.yml` files to streamline the project structure.
- Removed outdated Dockerfiles for services (API Gateway, Service Adapters, API Docs, and Frontend) to eliminate redundancy.
- Updated `env.example` to reflect changes in service configurations, including local host settings for PostgreSQL and Redis.
- Revised `README.md` to remove references to Docker deployment and clarify local development setup instructions.
- Cleaned up documentation structure by removing obsolete files related to Docker rate limits and compatibility fixes.

### Expected Results
- Simplified project setup and improved clarity for developers by focusing on current configurations and removing legacy artifacts.
This commit is contained in:
GSRN
2025-09-18 00:50:03 +02:00
parent 7bb753e293
commit 4b2ef7e246
15 changed files with 45 additions and 901 deletions

View File

@@ -1,234 +0,0 @@
name: Docker Build and Push
on:
push:
branches: [ main, develop ]
tags: [ 'v*' ]
pull_request:
branches: [ main, develop ]
env:
REGISTRY: gittea.kammenstraatha.duckdns.org
REGISTRY_URL: https://gittea.kammenstraatha.duckdns.org
REPO_OWNER: admin
IMAGE_PREFIX: labfusion
jobs:
# Shared setup job for common steps
setup:
runs-on: self-hosted
outputs:
version: ${{ steps.meta.outputs.version }}
labels: ${{ steps.meta.outputs.labels }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: |
${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/api-gateway
${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/service-adapters
${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/api-docs
${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/frontend
tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha,prefix={{branch}}-
type=raw,value=latest,enable={{is_default_branch}}
# API Gateway build and push
build-push-api-gateway:
runs-on: self-hosted
needs: setup
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY_URL }}
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- name: Build and push API Gateway (Legacy Builder)
uses: docker/build-push-action@v5
with:
context: ./services/api-gateway
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/api-gateway:${{ needs.setup.outputs.version }}
labels: ${{ needs.setup.outputs.labels }}
cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/api-gateway:cache
cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/api-gateway:cache,mode=max
# Use legacy builder for maximum compatibility
builder: default
build-args: |
BUILDKIT_INLINE_CACHE=0
# Service Adapters build and push
build-push-service-adapters:
runs-on: self-hosted
needs: setup
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY_URL }}
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- name: Build and push Service Adapters (Legacy Builder)
uses: docker/build-push-action@v5
with:
context: ./services/service-adapters
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/service-adapters:${{ needs.setup.outputs.version }}
labels: ${{ needs.setup.outputs.labels }}
cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/service-adapters:cache
cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/service-adapters:cache,mode=max
# Use legacy builder for maximum compatibility
builder: default
build-args: |
BUILDKIT_INLINE_CACHE=0
# API Docs build and push
build-push-api-docs:
runs-on: self-hosted
needs: setup
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY_URL }}
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- name: Build and push API Docs (Legacy Builder)
uses: docker/build-push-action@v5
with:
context: ./services/api-docs
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/api-docs:${{ needs.setup.outputs.version }}
labels: ${{ needs.setup.outputs.labels }}
cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/api-docs:cache
cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/api-docs:cache,mode=max
# Use legacy builder for maximum compatibility
builder: default
build-args: |
BUILDKIT_INLINE_CACHE=0
# Frontend build and push
build-push-frontend:
runs-on: self-hosted
needs: setup
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY_URL }}
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- name: Build and push Frontend (Legacy Builder)
uses: docker/build-push-action@v5
with:
context: ./frontend
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/frontend:${{ needs.setup.outputs.version }}
labels: ${{ needs.setup.outputs.labels }}
cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/frontend:cache
cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/frontend:cache,mode=max
# Use legacy builder for maximum compatibility
builder: default
build-args: |
BUILDKIT_INLINE_CACHE=0
# Compatibility test job
test-compatibility:
runs-on: self-hosted
needs: [build-push-api-gateway, build-push-service-adapters, build-push-api-docs, build-push-frontend]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Test API Docs compatibility
run: |
echo "Testing API Docs image compatibility..."
# Pull the latest image
docker pull ${{ env.REGISTRY }}/admin/api-docs:${{ needs.setup.outputs.version }}
# Test running the container
docker run --rm -d --name test-api-docs \
-p 8083:8083 \
${{ env.REGISTRY }}/admin/api-docs:${{ needs.setup.outputs.version }}
# Wait for container to start
sleep 10
# Check if container is running
if docker ps | grep -q test-api-docs; then
echo "✓ API Docs container started successfully"
else
echo "✗ API Docs container failed to start"
docker logs test-api-docs
exit 1
fi
# Clean up
docker stop test-api-docs || true
- name: Test docker-compose compatibility
run: |
echo "Testing docker-compose configuration..."
# Validate docker-compose.yml
docker-compose config > /dev/null
if [ $? -eq 0 ]; then
echo "✓ docker-compose.yml is valid"
else
echo "✗ docker-compose.yml has syntax errors"
exit 1
fi
- name: Compatibility test completed
run: |
echo "✓ All compatibility tests passed"
echo "Images are ready for deployment with maximum Docker version compatibility"

View File

@@ -10,7 +10,7 @@ A unified dashboard and integration hub for your homelab services. LabFusion pro
- **Data Correlation**: Cross-service insights and event correlation
- **Customizable Widgets**: Build dashboards with charts, tables, and status cards
- **Polyglot Architecture**: Java Spring Boot API gateway with Python FastAPI adapters
- **Dockerized Deployment**: Easy setup with Docker Compose
- **Multi-Service Architecture**: Modular services with clear separation of concerns
## Architecture
@@ -32,9 +32,12 @@ A unified dashboard and integration hub for your homelab services. LabFusion pro
### Prerequisites
- Docker and Docker Compose
- Java 17+ (for API Gateway)
- Python 3.9+ (for Service Adapters)
- Node.js 18+ (for Frontend and API Docs)
- Git
- Access to container registry (optional, for pre-built images)
- PostgreSQL (for data storage)
- Redis (for message bus)
### Installation
@@ -51,11 +54,6 @@ cp env.example .env
3. Edit `.env` file with your configuration:
```bash
# Docker Registry Configuration (for pre-built images)
DOCKER_REGISTRY=gittea.kammenstraatha.duckdns.org/admin
DOCKER_USERNAME=admin
IMAGE_TAG=main
# Service Integration URLs (update with your actual service URLs and tokens)
HOME_ASSISTANT_URL=http://homeassistant.local:8123
HOME_ASSISTANT_TOKEN=your-ha-token-here
@@ -67,27 +65,23 @@ IMMICH_API_KEY=your-immich-api-key-here
4. Start the services:
```bash
# Using pre-built images from registry (recommended)
docker-compose up -d
# Start API Gateway (Java Spring Boot)
cd services/api-gateway
./mvnw spring-boot:run
# Or for development with local builds
docker-compose -f docker-compose.dev.yml up -d
# Start Service Adapters (Python FastAPI)
cd services/service-adapters
python -m uvicorn main:app --reload --port 8000
# Start Frontend (React)
cd frontend
npm start
# Start API Docs (Node.js Express)
cd services/api-docs
npm start
```
**Docker Compatibility Issues?** If you encounter BuildKit cache errors (common with Docker 27.x), run our compatibility fix:
**Windows:**
```powershell
.\scripts\fix-docker-compatibility.ps1
```
**Linux/macOS:**
```bash
./scripts/fix-docker-compatibility.sh
```
See [Docker Compatibility Guide](docs/DOCKER_COMPATIBILITY.md) for detailed troubleshooting.
5. Access the application:
- Frontend: http://localhost:3000
- API Gateway: http://localhost:8080
@@ -179,32 +173,33 @@ npm start
- **API Gateway**: http://localhost:8080/swagger-ui.html
- **Service Adapters**: http://localhost:8000/docs
## Docker Deployment
## Development
LabFusion supports both pre-built images from container registries and local builds:
### Pre-built Images (Recommended)
### Local Development Setup
```bash
# Configure registry settings in .env
DOCKER_REGISTRY=gittea.kammenstraatha.duckdns.org/admin
DOCKER_USERNAME=admin
IMAGE_TAG=main
# Start PostgreSQL and Redis (using your preferred method)
# Then start each service in separate terminals:
# Deploy with pre-built images
docker-compose up -d
# Terminal 1: API Gateway
cd services/api-gateway
./mvnw spring-boot:run
# Terminal 2: Service Adapters
cd services/service-adapters
python -m uvicorn main:app --reload --port 8000
# Terminal 3: Frontend
cd frontend
npm start
# Terminal 4: API Docs
cd services/api-docs
npm start
```
### Local Development
```bash
# Build and run locally
docker-compose -f docker-compose.dev.yml up -d
```
For detailed deployment instructions, see [Docker Deployment Guide](docs/DOCKER_DEPLOYMENT.md).
## Roadmap
- [x] Basic project structure and Docker setup
- [x] Basic project structure and service setup
- [x] Spring Boot API gateway with authentication
- [x] FastAPI service adapters with modular structure
- [x] React frontend with dashboard

View File

@@ -1,124 +0,0 @@
version: '3.8'
# Global BuildKit compatibility settings
x-buildkit-args: &buildkit-args
BUILDKIT_INLINE_CACHE: 1
services:
# Database
postgres:
image: postgres:latest
environment:
POSTGRES_DB: labfusion
POSTGRES_USER: labfusion
POSTGRES_PASSWORD: labfusion_password
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
networks:
- labfusion-network
# Redis for message bus
redis:
image: redis:latest
ports:
- "6379:6379"
volumes:
- redis_data:/data
networks:
- labfusion-network
# Java Spring Boot API Gateway (Development)
api-gateway:
build:
context: ./services/api-gateway
dockerfile: Dockerfile.dev
args: *buildkit-args
ports:
- "8080:8080"
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/labfusion
- SPRING_DATASOURCE_USERNAME=labfusion
- SPRING_DATASOURCE_PASSWORD=labfusion_password
- REDIS_HOST=redis
- REDIS_PORT=6379
- SPRING_PROFILES_ACTIVE=dev
depends_on:
- postgres
- redis
networks:
- labfusion-network
volumes:
- ./services/api-gateway:/app
- maven_cache:/root/.m2
# Python FastAPI Service Adapters (Development)
service-adapters:
build:
context: ./services/service-adapters
dockerfile: Dockerfile.dev
args: *buildkit-args
ports:
- "8000:8000"
environment:
- REDIS_HOST=redis
- REDIS_PORT=6379
- POSTGRES_URL=postgresql://labfusion:labfusion_password@postgres:5432/labfusion
depends_on:
- postgres
- redis
networks:
- labfusion-network
volumes:
- ./services/service-adapters:/app
# React Frontend (Development)
frontend:
build:
context: ./frontend
dockerfile: Dockerfile.dev
args: *buildkit-args
ports:
- "3000:3000"
environment:
- REACT_APP_API_URL=http://localhost:8080
- REACT_APP_WEBSOCKET_URL=ws://localhost:8080/ws
depends_on:
- api-gateway
networks:
- labfusion-network
volumes:
- ./frontend:/app
- /app/node_modules
# API Documentation Service (Development)
api-docs:
build:
context: ./services/api-docs
dockerfile: Dockerfile.dev
args: *buildkit-args
ports:
- "8083:8083"
environment:
- API_GATEWAY_URL=http://api-gateway:8080
- SERVICE_ADAPTERS_URL=http://service-adapters:8000
- METRICS_COLLECTOR_URL=http://metrics-collector:8081
- NOTIFICATION_SERVICE_URL=http://notification-service:8082
depends_on:
- api-gateway
- service-adapters
networks:
- labfusion-network
volumes:
- ./services/api-docs:/app
- /app/node_modules
volumes:
postgres_data:
redis_data:
maven_cache:
networks:
labfusion-network:
driver: bridge

View File

@@ -1,97 +0,0 @@
version: '3.8'
services:
# Database
postgres:
image: postgres:14
environment:
POSTGRES_DB: labfusion
POSTGRES_USER: labfusion
POSTGRES_PASSWORD: labfusion_password
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
networks:
- labfusion-network
# Redis for message bus
redis:
image: redis:latest
ports:
- "6379:6379"
volumes:
- redis_data:/data
networks:
- labfusion-network
# Java Spring Boot API Gateway
api-gateway:
image: gittea.kammenstraatha.duckdns.org/admin/api-gateway:main
ports:
- "8080:8080"
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/labfusion
- SPRING_DATASOURCE_USERNAME=labfusion
- SPRING_DATASOURCE_PASSWORD=labfusion_password
- REDIS_HOST=redis
- REDIS_PORT=6379
- SPRING_PROFILES_ACTIVE=prod
depends_on:
- postgres
- redis
networks:
- labfusion-network
# Python FastAPI Service Adapters
service-adapters:
image: gittea.kammenstraatha.duckdns.org/admin/service-adapters:main
ports:
- "8000:8000"
environment:
- REDIS_HOST=redis
- REDIS_PORT=6379
- POSTGRES_URL=postgresql://labfusion:labfusion_password@postgres:5432/labfusion
depends_on:
- postgres
- redis
networks:
- labfusion-network
# React Frontend
frontend:
image: gittea.kammenstraatha.duckdns.org/admin/frontend:main
ports:
- "3000:3000"
environment:
- REACT_APP_API_URL=http://localhost:8080
- REACT_APP_WEBSOCKET_URL=ws://localhost:8080/ws
depends_on:
- api-gateway
networks:
- labfusion-network
# API Documentation Service
api-docs:
image: gittea.kammenstraatha.duckdns.org/admin/api-docs:cache
ports:
- "8083:8083"
environment:
- API_GATEWAY_URL=http://api-gateway:8080
- SERVICE_ADAPTERS_URL=http://service-adapters:8000
- METRICS_COLLECTOR_URL=http://metrics-collector:8081
- NOTIFICATION_SERVICE_URL=http://notification-service:8082
depends_on:
- api-gateway
- service-adapters
networks:
- labfusion-network
volumes:
postgres_data:
redis_data:
maven_cache:
networks:
labfusion-network:
driver: bridge

View File

@@ -1,201 +0,0 @@
# Docker Hub Rate Limit Fix
## Problem
```
Error response from daemon: toomanyrequests: You have reached your unauthenticated pull rate limit. https://www.docker.com/increase-rate-limit
```
Docker Hub has strict rate limits:
- **Unauthenticated**: 100 pulls per 6 hours per IP
- **Authenticated (free)**: 200 pulls per 6 hours per user
- **Pro/Team**: Higher limits
## Solutions
### Solution 1: Use Docker Hub Authentication (Recommended)
#### 1.1. Create Docker Hub Account
1. Go to [Docker Hub](https://hub.docker.com)
2. Create a free account
3. Note your username and password
#### 1.2. Update Runner Configurations
Add Docker authentication to each runner config:
**`runners/config_heavy.yaml`:**
```yaml
container:
# Docker registry authentication
docker_username: "your_dockerhub_username"
docker_password: "your_dockerhub_password"
```
**`runners/config_light.yaml`:**
```yaml
container:
# Docker registry authentication
docker_username: "your_dockerhub_username"
docker_password: "your_dockerhub_password"
```
**`runners/config_docker.yaml`:**
```yaml
container:
# Docker registry authentication
docker_username: "your_dockerhub_username"
docker_password: "your_dockerhub_password"
```
**`runners/config_security.yaml`:**
```yaml
container:
# Docker registry authentication
docker_username: "your_dockerhub_username"
docker_password: "your_dockerhub_password"
```
#### 1.3. Alternative: Use Environment Variables
Instead of hardcoding credentials, use environment variables:
**Update `runners/.env.runners`:**
```bash
# Docker Hub credentials
DOCKER_USERNAME=your_dockerhub_username
DOCKER_PASSWORD=your_dockerhub_password
```
**Update config files:**
```yaml
container:
docker_username: ${DOCKER_USERNAME}
docker_password: ${DOCKER_PASSWORD}
```
### Solution 2: Use Alternative Registries
#### 2.1. Use GitHub Container Registry (ghcr.io)
Update image references to use GitHub's registry:
**Heavy Runner:**
```yaml
labels:
- "java:docker://ghcr.io/openjdk/openjdk:17-jdk-slim"
- "python:docker://ghcr.io/library/python:3.11-slim"
```
**Light Runner:**
```yaml
labels:
- "nodejs:docker://ghcr.io/library/node:20-slim"
- "frontend:docker://ghcr.io/library/node:20-slim"
```
#### 2.2. Use Quay.io Registry
```yaml
labels:
- "java:docker://quay.io/eclipse/alpine_jdk17:latest"
- "python:docker://quay.io/python/python:3.11-slim"
- "nodejs:docker://quay.io/node/node:20-slim"
```
### Solution 3: Use Local Image Caching
#### 3.1. Pre-pull Images on Runner Host
```bash
# On your runner host machine
docker pull openjdk:17-jdk-slim
docker pull python:3.11-slim
docker pull node:20-slim
docker pull docker:24-dind
docker pull alpine:3.19
# Tag as local images
docker tag openjdk:17-jdk-slim localhost:5000/openjdk:17-jdk-slim
docker tag python:3.11-slim localhost:5000/python:3.11-slim
docker tag node:20-slim localhost:5000/node:20-slim
docker tag docker:24-dind localhost:5000/docker:24-dind
docker tag alpine:3.19 localhost:5000/alpine:3.19
```
#### 3.2. Update Config to Use Local Images
```yaml
labels:
- "java:docker://localhost:5000/openjdk:17-jdk-slim"
- "python:docker://localhost:5000/python:3.11-slim"
- "nodejs:docker://localhost:5000/node:20-slim"
```
### Solution 4: Reduce Image Pulls
#### 4.1. Disable Force Pull
Update all config files:
```yaml
container:
# Don't pull if image already exists
force_pull: false
```
#### 4.2. Use Image Caching
```yaml
container:
# Enable image caching
force_pull: false
force_rebuild: false
```
### Solution 5: Use Self-Hosted Registry
#### 5.1. Set up Local Registry
```bash
# Run local Docker registry
docker run -d -p 5000:5000 --name registry registry:2
# Mirror images to local registry
docker pull openjdk:17-jdk-slim
docker tag openjdk:17-jdk-slim localhost:5000/openjdk:17-jdk-slim
docker push localhost:5000/openjdk:17-jdk-slim
```
#### 5.2. Update Configs to Use Local Registry
```yaml
labels:
- "java:docker://localhost:5000/openjdk:17-jdk-slim"
```
## Recommended Approach
**For immediate fix**: Use Solution 1 (Docker Hub authentication)
**For long-term**: Combine Solutions 1 + 4 (auth + caching)
## Implementation Steps
1. **Create Docker Hub account** (if you don't have one)
2. **Update `.env.runners`** with credentials
3. **Update all config files** with authentication
4. **Set `force_pull: false`** to reduce pulls
5. **Test with a simple job**
## Verification
After implementing, test with:
```bash
# Check if authentication works
docker login
docker pull openjdk:17-jdk-slim
```
## References
- [Docker Hub Rate Limits](https://www.docker.com/increase-rate-limit)
- [Gitea Actions Documentation](https://docs.gitea.com/usage/actions/design#act-runner)
- [Docker Registry Authentication](https://docs.docker.com/engine/reference/commandline/login/)

View File

@@ -149,12 +149,7 @@ runners/
# Scripts
scripts/
├── check-registry.ps1 # Windows PowerShell registry check script
── check-registry.sh # Linux/macOS registry check script
├── docker-compatibility.ps1 # Windows PowerShell Docker compatibility fix
├── docker-compatibility.sh # Linux/macOS Docker compatibility fix
├── fix-docker-compatibility.ps1 # Windows PowerShell quick fix script
├── fix-docker-compatibility.sh # Linux/macOS quick fix script
└── test-docker-compatibility.ps1 # Windows PowerShell compatibility test
── check-registry.sh # Linux/macOS registry check script
└── docs/ # Documentation
├── specs.md # Project specifications
@@ -163,9 +158,6 @@ scripts/
├── RUNNERS.md # Gitea runners setup and management
├── RUNNER_LABELS.md # Runner labels technical documentation
├── OPTIMIZATION_RECOMMENDATIONS.md # CI/CD optimization recommendations
├── DOCKER_RATE_LIMIT_FIX.md # Docker Hub rate limit solutions
├── CI_CD.md # CI/CD pipeline documentation
├── CACHE_TROUBLESHOOTING.md # Cache troubleshooting guide
├── SONARQUBE_INTEGRATION.md # SonarQube integration documentation
├── DOCKER_DEPLOYMENT.md # Docker deployment and registry guide
└── DOCKER_COMPATIBILITY.md # Docker version compatibility guide
├── SONARQUBE_INTEGRATION.md # SonarQube integration documentation

View File

@@ -1,15 +1,12 @@
# Docker Registry Configuration
DOCKER_REGISTRY=gittea.kammenstraatha.duckdns.org/admin
DOCKER_USERNAME=admin
IMAGE_TAG=main
# Database Configuration
POSTGRES_DB=labfusion
POSTGRES_USER=labfusion
POSTGRES_PASSWORD=labfusion_password
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
# Redis Configuration
REDIS_HOST=redis
REDIS_HOST=localhost
REDIS_PORT=6379
# API Gateway Configuration

View File

@@ -1,24 +0,0 @@
FROM node:18-alpine
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm install
# Copy source code
COPY . .
# Build the application
RUN npm run build
# Install serve to run the app
RUN npm install -g serve
# Expose port
EXPOSE 3000
# Start the application
CMD ["serve", "-s", "build", "-l", "3000"]

View File

@@ -1,18 +0,0 @@
FROM node:18-alpine
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm install
# Copy source code
COPY . .
# Expose port
EXPOSE 3000
# Run in development mode with hot reload
CMD ["npm", "start"]

View File

@@ -1,31 +0,0 @@
FROM node:20-alpine
# Set working directory
WORKDIR /app
# Copy package files first for better caching
COPY package*.json ./
# Install dependencies with npm ci for production builds
RUN npm ci --only=production && npm cache clean --force
# Copy source code
COPY . .
# Create non-root user for security
RUN addgroup -g 1001 -S nodejs && \
adduser -S nextjs -u 1001
# Change ownership of the app directory
RUN chown -R nextjs:nodejs /app
USER nextjs
# Expose port
EXPOSE 8083
# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:8083/health || exit 1
# Start the application
CMD ["npm", "start"]

View File

@@ -1,31 +0,0 @@
FROM node:18-alpine
# Set working directory
WORKDIR /app
# Copy package files first for better caching
COPY package*.json ./
# Install dependencies with npm ci for production builds
RUN npm ci --only=production && npm cache clean --force
# Copy source code
COPY . .
# Create non-root user for security
RUN addgroup -g 1001 -S nodejs && \
adduser -S nextjs -u 1001
# Change ownership of the app directory
RUN chown -R nextjs:nodejs /app
USER nextjs
# Expose port
EXPOSE 8083
# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:8083/health || exit 1
# Start the application in development mode
CMD ["npm", "run", "dev"]

View File

@@ -1,17 +0,0 @@
FROM openjdk:17-jdk-slim
WORKDIR /app
# Copy Maven files
COPY pom.xml .
COPY src ./src
# Install Maven
RUN apt-get update && apt-get install -y maven && rm -rf /var/lib/apt/lists/*
# Build the application
RUN mvn clean package -DskipTests
# Run the application
EXPOSE 8080
CMD ["java", "-jar", "target/api-gateway-1.0.0.jar"]

View File

@@ -1,21 +0,0 @@
FROM openjdk:17-jdk-slim
WORKDIR /app
# Install Maven
RUN apt-get update && apt-get install -y maven && rm -rf /var/lib/apt/lists/*
# Copy Maven files
COPY pom.xml .
# Download dependencies
RUN mvn dependency:go-offline -B
# Copy source code
COPY src ./src
# Expose port
EXPOSE 8080
# Run in development mode with hot reload
CMD ["mvn", "spring-boot:run", "-Dspring-boot.run.jvmArguments='-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005'"]

View File

@@ -1,21 +0,0 @@
FROM python:3.11-slim
WORKDIR /app
# Install system dependencies
RUN apt-get update && apt-get install -y \
gcc \
&& rm -rf /var/lib/apt/lists/*
# Copy requirements and install Python dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy application code
COPY . .
# Expose port
EXPOSE 8000
# Run the application
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]

View File

@@ -1,21 +0,0 @@
FROM python:3.11-slim
WORKDIR /app
# Install system dependencies
RUN apt-get update && apt-get install -y \
gcc \
&& rm -rf /var/lib/apt/lists/*
# Copy requirements and install Python dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy application code
COPY . .
# Expose port
EXPOSE 8000
# Run in development mode with hot reload
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]