initial zot setup
This commit is contained in:
107
README.md
Normal file
107
README.md
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
# Registry: Zot
|
||||||
|
|
||||||
|
[More information](https://zotregistry.dev/v2.1.8/)
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Zot is a lightweight, OCI-native container registry serving as the central image repository for this homelab. It provides a performant, self-hosted alternative to Docker Hub with built-in authentication, deduplication, and garbage collection.
|
||||||
|
|
||||||
|
## Architecture Integration
|
||||||
|
|
||||||
|
The registry operates within the NUC homelab infrastructure:
|
||||||
|
|
||||||
|
- **Network Access**: External requests to `registry.pynezz.dev` hit the VPS Caddy, which proxies through WireGuard tunnel (10.100.100.0/24) to the NUC's internal Caddy on port 3333
|
||||||
|
- **Internal Routing**: NUC Caddy routes `/registry/*` paths to the Zot container at `10.10.10.3:3000`
|
||||||
|
- **Container Runtime**: Managed via Podman with systemd integration for automatic restarts
|
||||||
|
- **Storage**: Persistent data stored in `./data` directory with filesystem deduplication enabled
|
||||||
|
|
||||||
|
## Directory Structure
|
||||||
|
|
||||||
|
```plaintext
|
||||||
|
zot/
|
||||||
|
├── data/ # Registry blobs and metadata
|
||||||
|
│ ├── _blobs/ # Deduplicated image layers
|
||||||
|
│ └── _uploads/ # Temporary upload staging
|
||||||
|
└── zot-config.json # Main configuration
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration Highlights
|
||||||
|
|
||||||
|
Key settings in `zot-config.json`:
|
||||||
|
|
||||||
|
- **Storage**: Deduplicated filesystem backend with garbage collection
|
||||||
|
- **Authentication**: htpasswd-based auth (credentials in config)
|
||||||
|
- **Network**: Listens on 0.0.0.0:3000 inside container
|
||||||
|
- **Extensions**: Search, scrub (integrity checks), and metrics enabled
|
||||||
|
- **Performance**: Caching enabled for metadata and converted manifests
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
**Push images:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
podman tag localhost/myapp:latest pkg.pynezz.dev/myapp:latest
|
||||||
|
podman push pkg.pynezz.dev/myapp:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
**Pull images:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
podman pull pkg.pynezz.dev/myapp:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
**Login:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
podman login pkg.pynezz.dev
|
||||||
|
```
|
||||||
|
|
||||||
|
## Maintenance
|
||||||
|
|
||||||
|
- **Storage location**: `./data` should be backed up regularly
|
||||||
|
- **Garbage collection**: Runs automatically based on retention policy
|
||||||
|
- **Monitoring**: Metrics available at `:3000/metrics` for Prometheus scraping
|
||||||
|
- **Logs**: Check with `podman logs zot` or journald if systemd-managed
|
||||||
|
|
||||||
|
## Security Considerations
|
||||||
|
|
||||||
|
- Auth required for all operations (read/write)
|
||||||
|
- TLS terminated at VPS Caddy with Let's Encrypt certificates
|
||||||
|
- Internal communication over WireGuard encrypted tunnel
|
||||||
|
- Registry isolated in podman network, not exposed to home LAN directly
|
||||||
|
|
||||||
|
## Performance Notes
|
||||||
|
|
||||||
|
Deduplication significantly reduces storage overhead when pushing similar images. The NUC's single-core CPU handles typical homelab registry traffic efficiently, though concurrent large pushes may experience throttling due to the 512MB VPS relay point.
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
[More information](https://zotregistry.dev/v2.1.8/)
|
||||||
|
|
||||||
|
## directory structure
|
||||||
|
|
||||||
|
```plaintext
|
||||||
|
Zot
|
||||||
|
|--data
|
||||||
|
L--zot-config.json
|
||||||
|
```
|
||||||
|
|
||||||
|
## zot-config
|
||||||
|
|
||||||
|
```json
|
||||||
|
´´´
|
||||||
|
```
|
22
zot-config.json
Normal file
22
zot-config.json
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"storage": {
|
||||||
|
"rootDirectory": "/var/lib/zot"
|
||||||
|
},
|
||||||
|
"http": {
|
||||||
|
"address": "0.0.0.0",
|
||||||
|
"port": 5000
|
||||||
|
},
|
||||||
|
"log": {
|
||||||
|
"level": "debug"
|
||||||
|
},
|
||||||
|
"extensions": {
|
||||||
|
"search": {
|
||||||
|
"cve": {
|
||||||
|
"updateInterval": "2h"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ui": {
|
||||||
|
"enable": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user