services:
  megarepo:
    image: bsnsoft/megarepo:latest
    ports:
      - "8080:8080"
    environment:
      SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/megarepo?stringtype=unspecified
      SPRING_DATASOURCE_USERNAME: megarepo
      SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD}
      MEGAREPO_SECURITY_JWT_SECRET: ${MEGAREPO_JWT_SECRET}
      MEGAREPO_DATA_DIRECTORY: /opt/megarepo/data
    volumes:
      - megarepo-data:/opt/megarepo/data
    depends_on:
      db:
        condition: service_healthy
    restart: unless-stopped

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: megarepo
      POSTGRES_USER: megarepo
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - postgres-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U megarepo"]
    restart: unless-stopped

volumes:
  megarepo-data:
  postgres-data:

POSTGRES_PASSWORD=your-secure-db-password
MEGAREPO_JWT_SECRET=random-string-at-least-32-characters-long

docker compose up -d

<settings>
  <mirrors>
    <mirror>
      <id>megarepo</id>
      <mirrorOf>*</mirrorOf>
      <url>http://megarepo.example.com:8080/repository/maven-public/</url>
    </mirror>
  </mirrors>

  <servers>
    <server>
      <id>megarepo-releases</id>
      <username>deployer</username>
      <password>your-password</password>
    </server>
    <server>
      <id>megarepo-snapshots</id>
      <username>deployer</username>
      <password>your-password</password>
    </server>
  </servers>
</settings>

<distributionManagement>
  <repository>
    <id>megarepo-releases</id>
    <url>http://megarepo.example.com:8080/repository/maven-releases/</url>
  </repository>
  <snapshotRepository>
    <id>megarepo-snapshots</id>
    <url>http://megarepo.example.com:8080/repository/maven-snapshots/</url>
  </snapshotRepository>
</distributionManagement>

// Resolve dependencies
repositories {
    maven {
        url = uri("http://megarepo.example.com:8080/repository/maven-public/")
        credentials {
            username = "deployer"
            password = "your-password"
        }
    }
}

// Publish artifacts
publishing {
    repositories {
        maven {
            name = "megarepo"
            url = uri("http://megarepo.example.com:8080/repository/maven-releases/")
            credentials {
                username = "deployer"
                password = "your-password"
            }
        }
    }
}

# Resolve packages through MegaRepo
registry=http://megarepo.example.com:8080/repository/npm-public/

# Authenticate for publishing to the hosted repo
//megarepo.example.com:8080/repository/npm-hosted/:_authToken=your-jwt-token

[global]
index-url = http://megarepo.example.com:8080/repository/pypi-public/simple/
trusted-host = megarepo.example.com

[distutils]
index-servers = megarepo

[megarepo]
repository = http://megarepo.example.com:8080/repository/pypi-hosted/
username = deployer
password = your-password

{
  "insecure-registries": ["megarepo.example.com:8080"]
}

# Log in
docker login megarepo.example.com:8080

# Push an image
docker tag myimage:latest megarepo.example.com:8080/myimage:latest
docker push megarepo.example.com:8080/myimage:latest

# Pull through the proxy (Docker Hub cache)
docker pull megarepo.example.com:8080/library/alpine:latest

🔀