From 4b2ef7e24696e49e9746a8a2005d5ee31de81281 Mon Sep 17 00:00:00 2001 From: GSRN Date: Thu, 18 Sep 2025 00:50:03 +0200 Subject: [PATCH] chore: Remove legacy Docker configuration and documentation ### 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. --- .gitea/workflows/docker-build.yml | 234 ----------------------- README.md | 85 ++++---- docker-compose.dev.yml | 124 ------------ docker-compose.yml | 97 ---------- docs/DOCKER_RATE_LIMIT_FIX.md | 201 ------------------- docs/structure.txt | 12 +- env.example | 9 +- frontend/Dockerfile | 24 --- frontend/Dockerfile.dev | 18 -- services/api-docs/Dockerfile | 31 --- services/api-docs/Dockerfile.dev | 31 --- services/api-gateway/Dockerfile | 17 -- services/api-gateway/Dockerfile.dev | 21 -- services/service-adapters/Dockerfile | 21 -- services/service-adapters/Dockerfile.dev | 21 -- 15 files changed, 45 insertions(+), 901 deletions(-) delete mode 100644 .gitea/workflows/docker-build.yml delete mode 100644 docker-compose.dev.yml delete mode 100644 docker-compose.yml delete mode 100644 docs/DOCKER_RATE_LIMIT_FIX.md delete mode 100644 frontend/Dockerfile delete mode 100644 frontend/Dockerfile.dev delete mode 100644 services/api-docs/Dockerfile delete mode 100644 services/api-docs/Dockerfile.dev delete mode 100644 services/api-gateway/Dockerfile delete mode 100644 services/api-gateway/Dockerfile.dev delete mode 100644 services/service-adapters/Dockerfile delete mode 100644 services/service-adapters/Dockerfile.dev diff --git a/.gitea/workflows/docker-build.yml b/.gitea/workflows/docker-build.yml deleted file mode 100644 index 49978c5..0000000 --- a/.gitea/workflows/docker-build.yml +++ /dev/null @@ -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" diff --git a/README.md b/README.md index 050c921..1b64543 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml deleted file mode 100644 index 2a79524..0000000 --- a/docker-compose.dev.yml +++ /dev/null @@ -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 diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 07602bc..0000000 --- a/docker-compose.yml +++ /dev/null @@ -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 diff --git a/docs/DOCKER_RATE_LIMIT_FIX.md b/docs/DOCKER_RATE_LIMIT_FIX.md deleted file mode 100644 index 8527b5b..0000000 --- a/docs/DOCKER_RATE_LIMIT_FIX.md +++ /dev/null @@ -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/) diff --git a/docs/structure.txt b/docs/structure.txt index 7310f12..c5efab4 100644 --- a/docs/structure.txt +++ b/docs/structure.txt @@ -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 \ No newline at end of file + ├── SONARQUBE_INTEGRATION.md # SonarQube integration documentation \ No newline at end of file diff --git a/env.example b/env.example index 06fa417..fc3c4f4 100644 --- a/env.example +++ b/env.example @@ -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 diff --git a/frontend/Dockerfile b/frontend/Dockerfile deleted file mode 100644 index e067af5..0000000 --- a/frontend/Dockerfile +++ /dev/null @@ -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"] diff --git a/frontend/Dockerfile.dev b/frontend/Dockerfile.dev deleted file mode 100644 index 025593c..0000000 --- a/frontend/Dockerfile.dev +++ /dev/null @@ -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"] diff --git a/services/api-docs/Dockerfile b/services/api-docs/Dockerfile deleted file mode 100644 index b94def0..0000000 --- a/services/api-docs/Dockerfile +++ /dev/null @@ -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"] diff --git a/services/api-docs/Dockerfile.dev b/services/api-docs/Dockerfile.dev deleted file mode 100644 index 349b543..0000000 --- a/services/api-docs/Dockerfile.dev +++ /dev/null @@ -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"] diff --git a/services/api-gateway/Dockerfile b/services/api-gateway/Dockerfile deleted file mode 100644 index 9f52b55..0000000 --- a/services/api-gateway/Dockerfile +++ /dev/null @@ -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"] diff --git a/services/api-gateway/Dockerfile.dev b/services/api-gateway/Dockerfile.dev deleted file mode 100644 index 6f6780d..0000000 --- a/services/api-gateway/Dockerfile.dev +++ /dev/null @@ -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'"] diff --git a/services/service-adapters/Dockerfile b/services/service-adapters/Dockerfile deleted file mode 100644 index 789c7e1..0000000 --- a/services/service-adapters/Dockerfile +++ /dev/null @@ -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"] diff --git a/services/service-adapters/Dockerfile.dev b/services/service-adapters/Dockerfile.dev deleted file mode 100644 index 4e6cb82..0000000 --- a/services/service-adapters/Dockerfile.dev +++ /dev/null @@ -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"]