Installation
Installation
Artifact Keeper can be deployed using Docker Compose for quick setup, or built from source for customization.
Docker Compose (Recommended)
The easiest way to run Artifact Keeper with all dependencies.
Full Stack Setup
The included docker-compose.yml provides a complete setup with:
- Artifact Keeper backend (Rust API server)
- Frontend (React UI)
- PostgreSQL 15 (metadata storage)
- MinIO (S3-compatible artifact storage)
- Trivy (vulnerability scanning)
git clone https://github.com/yourusername/artifact-keeper.gitcd artifact-keeperdocker compose up -dDefault Ports:
- Frontend:
http://localhost:3000 - Backend API:
http://localhost:8080 - MinIO Console:
http://localhost:9001
Customizing Docker Compose
Edit docker-compose.yml or create a docker-compose.override.yml:
services: backend: environment: - LOG_LEVEL=debug - JWT_SECRET=your-secret-key-change-this volumes: - ./local-storage:/var/lib/artifact-keeper/artifactsFrom Source
Build Artifact Keeper from source for development or custom deployments.
Prerequisites
- Rust: 1.75 or later (install rustup)
- Node.js: 20.x or later (install node)
- PostgreSQL: 15 or later
- Git: For cloning the repository
Build Backend
# Clone repositorygit clone https://github.com/yourusername/artifact-keeper.gitcd artifact-keeper
# Build backend (release mode)cargo build --release
# Binary will be at: target/release/artifact-keeperBuild Frontend
cd frontend
# Install dependenciesnpm install
# Build for productionnpm run build
# Production build will be in: dist/Setup Database
- Create PostgreSQL database:
CREATE DATABASE artifact_keeper;CREATE USER artifact_keeper WITH PASSWORD 'your-password';GRANT ALL PRIVILEGES ON DATABASE artifact_keeper TO artifact_keeper;- Run migrations:
# Set database URLexport DATABASE_URL=postgresql://artifact_keeper:your-password@localhost/artifact_keeper
# Run migrations (handled automatically on first start)./target/release/artifact-keeper migrateConfigure Environment
Create a .env file or set environment variables:
# Requiredexport DATABASE_URL=postgresql://artifact_keeper:your-password@localhost/artifact_keeperexport JWT_SECRET=generate-a-secure-random-string-here
# Optionalexport BIND_ADDRESS=0.0.0.0:8080export LOG_LEVEL=infoexport STORAGE_BACKEND=filesystemexport STORAGE_PATH=/var/lib/artifact-keeper/artifactsSee the Configuration Reference for all available options.
Run the Application
# Start backend./target/release/artifact-keeper
# In another terminal, serve frontend (for development)cd frontendnpm run dev
# Or serve the production build with a static file servernpx serve -s dist -l 3000Production Deployment
Systemd Service (Linux)
Create /etc/systemd/system/artifact-keeper.service:
[Unit]Description=Artifact KeeperAfter=network.target postgresql.service
[Service]Type=simpleUser=artifact-keeperWorkingDirectory=/opt/artifact-keeperEnvironmentFile=/opt/artifact-keeper/.envExecStart=/opt/artifact-keeper/artifact-keeperRestart=always
[Install]WantedBy=multi-user.targetEnable and start:
sudo systemctl enable artifact-keepersudo systemctl start artifact-keepersudo systemctl status artifact-keeperReverse Proxy (Nginx)
server { listen 80; server_name artifacts.example.com;
# Frontend location / { root /var/www/artifact-keeper/frontend; try_files $uri $uri/ /index.html; }
# Backend API location /api { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
# Package repositories location ~ ^/(maven|npm|docker|pypi) { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; client_max_body_size 1G; }}Storage Options
Filesystem Storage (Default)
Simple and performant for single-node deployments:
export STORAGE_BACKEND=filesystemexport STORAGE_PATH=/var/lib/artifact-keeper/artifactsEnsure the directory exists and is writable:
sudo mkdir -p /var/lib/artifact-keeper/artifactssudo chown artifact-keeper:artifact-keeper /var/lib/artifact-keeper/artifactsS3-Compatible Storage
For distributed deployments or cloud environments:
export STORAGE_BACKEND=s3export S3_BUCKET=artifact-keeperexport S3_REGION=us-east-1export S3_ENDPOINT=https://s3.amazonaws.com # Optional, for MinIO/custom endpointsexport AWS_ACCESS_KEY_ID=your-access-keyexport AWS_SECRET_ACCESS_KEY=your-secret-keyWorks with AWS S3, MinIO, DigitalOcean Spaces, and other S3-compatible services.
Verification
Check that everything is running:
# Backend health checkcurl http://localhost:8080/health
# Expected response:# {"status":"healthy"}
# Frontendcurl http://localhost:3000
# Should return the HTML of the React appNext Steps
- Configuration Reference - Configure authentication, scanning, and integrations
- Quickstart Guide - Create your first repository and push artifacts
- Package Formats - See all supported formats and endpoints