214 lines
6.5 KiB
Markdown
214 lines
6.5 KiB
Markdown
# Arti-Api
|
|
|
|
This is the api part of artifactory server.
|
|
|
|
Artifactory server consist in backends servers providing services to applications:
|
|
- **docker** : a docker registry
|
|
- **helm** : chart museum
|
|
- **debian** : Nginx serving .deb files for arm64 and amd64 binaries
|
|
|
|
Each server are in a pod, sharing a pvc volume, with following folder structure :
|
|
|
|
```console
|
|
.
|
|
├── docker
|
|
├── debian
|
|
| ├── dist
|
|
| | ├── Release
|
|
| | └── main
|
|
| | ├── binary-arm64
|
|
| | └── binary-amd64
|
|
| └── pool
|
|
└── charts
|
|
```
|
|
|
|
## Api
|
|
|
|
The api pod, must be able to update shared pvc volume :
|
|
- add / update / delete binary
|
|
- refresh what is needed
|
|
|
|
## Container Application
|
|
|
|
This repository now contains a complete containerized FastAPI application that provides REST endpoints to manage the artifactory server components.
|
|
|
|
### Features
|
|
|
|
- **Debian Package Management**: Upload, delete, and list `.deb` packages
|
|
- **Helm Chart Management**: Upload, delete, and list Helm charts (`.tgz` files)
|
|
- **Docker Registry Integration**: List Docker images in the registry
|
|
- **User Management**: Create, update, delete, and list Docker registry users with htpasswd authentication
|
|
- **Repository Refresh**: Refresh package indexes and chart repositories
|
|
- **Health Monitoring**: Health check endpoints for container orchestration
|
|
|
|
### API Endpoints
|
|
|
|
#### Health & Status
|
|
- `GET /` - Root endpoint with API status
|
|
- `GET /health` - Health check endpoint
|
|
|
|
#### Debian Repository
|
|
- `POST /debian/upload` - Upload .deb packages
|
|
- `GET /debian/packages` - List all Debian packages
|
|
- `DELETE /debian/package/{package_name}` - Delete a specific package
|
|
- `POST /refresh/debian` - Refresh Debian package indexes
|
|
|
|
#### Helm Repository
|
|
- `POST /helm/upload` - Upload Helm charts (.tgz files)
|
|
- `GET /helm/charts` - List all Helm charts
|
|
- `DELETE /helm/chart/{chart_name}` - Delete a specific chart
|
|
- `POST /refresh/helm` - Refresh Helm chart index
|
|
|
|
#### Docker Registry
|
|
- `GET /docker/images` - List Docker images
|
|
|
|
#### User Management
|
|
- `GET /users` - List all Docker registry users
|
|
- `GET /users/{username}` - Get user information
|
|
- `POST /users` - Create or update a user
|
|
- `DELETE /users/{username}` - Delete a user
|
|
|
|
#### General Operations
|
|
- `POST /refresh/all` - Refresh all repositories
|
|
|
|
### Quick Start
|
|
|
|
#### Using Docker Compose (Recommended for development)
|
|
```bash
|
|
# Build and run the container
|
|
./build.sh
|
|
docker-compose up -d
|
|
|
|
# Access the API
|
|
curl http://localhost:8000/health
|
|
```
|
|
|
|
#### Using Kubernetes (Recommended for production)
|
|
```bash
|
|
# Build the container
|
|
./build.sh
|
|
|
|
# Deploy to Kubernetes
|
|
kubectl apply -f kubernetes.yaml
|
|
|
|
# Check deployment status
|
|
kubectl get pods -l app=arti-api
|
|
```
|
|
|
|
#### Manual Docker Build
|
|
```bash
|
|
# Build the image
|
|
docker build -t arti-api:latest .
|
|
|
|
# Run the container
|
|
docker run -d \
|
|
-p 8000:8000 \
|
|
-v $(pwd)/data:/data \
|
|
--name arti-api \
|
|
arti-api:latest
|
|
```
|
|
|
|
### Configuration
|
|
|
|
The application expects the shared PVC volume to be mounted at `/data` with the following structure:
|
|
- `/data/docker` - Docker registry data
|
|
- `/data/debian/dist` - Debian distribution metadata
|
|
- `/data/debian/pool` - Debian package pool
|
|
- `/data/charts` - Helm charts storage
|
|
- `/data/htpasswd` - Docker registry user authentication file
|
|
|
|
### Environment Variables
|
|
|
|
- `PYTHONUNBUFFERED=1` - Ensures real-time logging output
|
|
|
|
### API Documentation
|
|
|
|
Once the container is running, you can access comprehensive API documentation:
|
|
|
|
#### Interactive Documentation
|
|
- **Swagger UI**: `http://localhost:8000/docs` - Interactive API testing interface
|
|
- **ReDoc**: `http://localhost:8000/redoc` - Clean, responsive API documentation
|
|
- **OpenAPI Schema**: `http://localhost:8000/openapi.json` - Machine-readable API specification
|
|
|
|
#### Quick Documentation Server
|
|
```bash
|
|
# Start documentation server with one command
|
|
./serve-docs.sh
|
|
|
|
# Or manually
|
|
docker run -d -p 8000:8000 --name arti-api-docs arti-api:latest
|
|
```
|
|
|
|
#### API Features in Documentation
|
|
- 📋 **Comprehensive endpoint documentation** with detailed descriptions
|
|
- 🔧 **Interactive testing interface** - test endpoints directly from the browser
|
|
- 📝 **Request/response examples** with real data samples
|
|
- 🏷️ **Organized by tags** - endpoints grouped by functionality (health, debian, helm, docker, refresh)
|
|
- 📊 **Schema definitions** for all data models
|
|
- ⚠️ **Error response documentation** with HTTP status codes
|
|
- 🚀 **Example curl commands** for all endpoints
|
|
|
|
#### Testing Examples
|
|
See `API_EXAMPLES.md` for comprehensive testing examples including:
|
|
- Curl commands for all endpoints
|
|
- Python code examples
|
|
- Expected response formats
|
|
- Error handling examples
|
|
|
|
### File Structure
|
|
|
|
```
|
|
.
|
|
├── app.py # Main FastAPI application with comprehensive Swagger docs
|
|
├── requirements.txt # Python dependencies
|
|
├── Dockerfile # Container definition
|
|
├── docker-compose.yaml # Simple Docker Compose configuration
|
|
├── docker-compose-full.yaml # Complete artifactory stack with authentication
|
|
├── kubernetes.yaml # Kubernetes deployment manifests
|
|
├── build.sh # Build script
|
|
├── serve-docs.sh # Documentation server script
|
|
├── setup-full-stack.sh # Complete artifactory setup with authentication
|
|
├── API_EXAMPLES.md # Comprehensive API testing examples
|
|
├── CHARTMUSEUM_AUTH.md # Chart Museum authentication guide
|
|
├── .dockerignore # Docker ignore file
|
|
└── README.md # This file
|
|
```
|
|
|
|
## Chart Museum Authentication
|
|
|
|
Yes! Chart Museum can be protected with the same htpasswd file managed by the Arti-API. See `CHARTMUSEUM_AUTH.md` for complete configuration details.
|
|
|
|
### Quick Setup with Authentication
|
|
|
|
```bash
|
|
# Setup complete authenticated artifactory stack
|
|
./setup-full-stack.sh
|
|
|
|
# This creates:
|
|
# - Arti-API (port 8000)
|
|
# - Chart Museum with htpasswd auth (port 8080)
|
|
# - Docker Registry with htpasswd auth (port 5000)
|
|
# - Default users: admin, developer, readonly
|
|
```
|
|
|
|
### Chart Museum Configuration
|
|
|
|
Chart Museum supports htpasswd authentication using these environment variables:
|
|
```bash
|
|
HTPASSWD_PATH=/data/htpasswd
|
|
AUTH_ANONYMOUS_GET=false
|
|
AUTH_REALM="Chart Museum"
|
|
```
|
|
|
|
### Usage Examples
|
|
|
|
```bash
|
|
# Test authenticated access
|
|
curl -u admin:admin123 http://localhost:8080/api/charts
|
|
|
|
# Add authenticated Helm repository
|
|
helm repo add myrepo http://admin:admin123@localhost:8080
|
|
|
|
# Upload chart with authentication
|
|
curl -u admin:admin123 --data-binary "@chart.tgz" http://localhost:8080/api/charts
|
|
``` |