A simple, self-hosted pastebin service with S3-compatible storage backend.
- Store and share text snippets with unique URLs
- Configurable time-to-live (TTL) for pastes
- Automatic cleanup of expired pastes
- S3 as the storage backend (AWS S3, MinIO, etc.)
- Data integrity verification on retrieval
- Copy to clipboard functionality
- Raw paste view
Configuration is done via environment variables:
| Variable | Description | Default |
|---|---|---|
PASTEBIN_S3_BUCKET |
S3 bucket name (required) | - |
PASTEBIN_S3_ENDPOINT |
S3 endpoint URL | s3.amazonaws.com |
PASTEBIN_S3_REGION |
S3 region | us-east-1 |
PASTEBIN_S3_USE_SSL |
Use HTTPS for S3 | true |
PASTEBIN_S3_ACCESS_KEY |
S3 access key | - |
PASTEBIN_S3_SECRET_KEY |
S3 secret key | - |
PASTEBIN_HOST |
Listen host | 127.0.0.1 |
PASTEBIN_PORT |
Listen port | 8080 |
PASTEBIN_MAX_PASTE_SIZE |
Maximum paste size in bytes | 1048576 (1MB) |
PASTEBIN_DEFAULT_TTL |
Default paste TTL | 8760h (1 year) |
PASTEBIN_CLEANUP_INTERVAL |
Interval between cleanup runs | 1h |
PASTEBIN_LOG_FORMAT |
Log format (text or json) |
text |
PASTEBIN_LOG_LEVEL |
Log level (debug, info, warn, error) |
info |
PASTEBIN_SECURE_COOKIES |
Set Secure flag on cookies (enable for HTTPS) | false |
Container images are available from GitHub Container Registry:
docker pull ghcr.io/espebra/pastebin:latestAvailable tags:
latest- Latest releasevX.Y.Z- Specific version (e.g.,v1.0.0)X.Y- Minor version (e.g.,1.0)X- Major version (e.g.,1)
Run with:
docker run -p 8080:8080 \
-e PASTEBIN_HOST=0.0.0.0 \
-e PASTEBIN_S3_BUCKET=pastebin \
-e PASTEBIN_S3_ENDPOINT=your-s3-endpoint:9000 \
-e PASTEBIN_S3_ACCESS_KEY=your-access-key \
-e PASTEBIN_S3_SECRET_KEY=your-secret-key \
ghcr.io/espebra/pastebin:latestCreate a docker-compose.yml file:
version: "3"
services:
s3:
image: ghcr.io/espebra/stupid-simple-s3:latest
ports:
- "5553:5553"
environment:
- STUPID_RW_ACCESS_KEY=accesskey
- STUPID_RW_SECRET_KEY=secretkey
volumes:
- s3-data:/var/lib/stupid-simple-s3/
restart: unless-stopped
pastebin:
image: ghcr.io/espebra/pastebin:latest
ports:
- "8080:8080"
environment:
- PASTEBIN_HOST=0.0.0.0
- PASTEBIN_S3_BUCKET=pastebin
- PASTEBIN_S3_ENDPOINT=s3:5553
- PASTEBIN_S3_USE_SSL=false
- PASTEBIN_S3_ACCESS_KEY=accesskey
- PASTEBIN_S3_SECRET_KEY=secretkey
depends_on:
- s3
volumes:
s3-data:Then run:
docker-compose upThe pastebin service will be available at http://localhost:8080.
Download the latest .deb or .rpm package from the releases page.
# Debian/Ubuntu
sudo dpkg -i pastebin_1.0.0_amd64.deb
# RHEL/CentOS/Fedora
sudo rpm -i pastebin-1.0.0.x86_64.rpmAfter installation, configure /etc/default/pastebin and start the service:
sudo systemctl enable pastebin
sudo systemctl start pastebinDownload the binary for your platform from the releases page.
# Build
go build -o pastebin ./cmd/pastebin
# Run (with MinIO example)
export PASTEBIN_S3_BUCKET=pastebin
export PASTEBIN_S3_ENDPOINT=localhost:9000
export PASTEBIN_S3_USE_SSL=false
export PASTEBIN_S3_ACCESS_KEY=minioadmin
export PASTEBIN_S3_SECRET_KEY=minioadmin
./pastebin./pastebin --version
# pastebin v1.0.0 (commit: abc1234)| Method | Path | Description |
|---|---|---|
| GET | / |
Home page with paste form |
| POST | / |
Create a new paste |
| GET | /{checksum} |
View a paste |
| GET | /raw/{checksum} |
View raw paste content |
| POST | /delete/{checksum} |
Delete a paste |
| GET | /health |
Health check endpoint |
The /health endpoint returns 200 OK with body OK when the service is running. This can be used for load balancer health checks and monitoring.
curl http://localhost:8080/health
# OKPastes are stored in S3 with the following structure:
pastes/{checksum}- The paste contentmeta/{checksum}.json- Metadata (created time, expiry, size)
The checksum is the SHA256 hash of the paste content, ensuring deduplication and data integrity verification on retrieval.
make test
make fuzzgo build -o pastebin ./cmd/pastebinReleases are automated via GitHub Actions. To create a new release:
- Ensure all changes are committed and pushed to the main branch
- Create and push a version tag:
git tag v1.0.0
git push origin v1.0.0The release workflow will automatically:
- Build binaries for Linux (amd64, arm64) and macOS (amd64, arm64)
- Build and push multi-arch Docker images to
ghcr.io - Create a GitHub release with binaries and checksums
Docker images are tagged with:
- Full version (e.g.,
v1.0.0) - Minor version (e.g.,
1.0) - Major version (e.g.,
1) - Git SHA
See LICENSE file.