pastebin

module
v0.0.14 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 23, 2026 License: BSD-3-Clause

README

CI Release Go Report Card Go Reference

Pastebin

A simple, self-hosted pastebin service with S3-compatible storage backend.

Features

  • Store and share text snippets with unique URLs
  • Configurable time-to-live (TTL) for pastes
  • Automatic cleanup of expired pastes
  • Content-addressable storage using SHA256 checksums
  • S3-compatible storage backend (AWS S3, MinIO, etc.)
  • Data integrity verification on retrieval
  • Copy to clipboard functionality
  • Raw paste view

Security Features

  • CSRF protection using double-submit cookie pattern
  • Request body size limits to prevent memory exhaustion
  • Security headers (X-Content-Type-Options, X-Frame-Options, X-XSS-Protection, Referrer-Policy)
  • Input validation for all URL parameters
  • Configurable secure cookies for HTTPS deployments

Configuration

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

Installation

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.rpm

After installation, configure /etc/default/pastebin and start the service:

sudo systemctl enable pastebin
sudo systemctl start pastebin
From Binary

Download the binary for your platform from the releases page.

From Container Image

Container images are available from GitHub Container Registry:

docker pull ghcr.io/espebra/pastebin:latest

Available tags:

  • latest - Latest release
  • vX.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:latest

Running

Version Information
./pastebin --version
# pastebin v1.0.0 (commit: abc1234)
With Docker Compose

Create a docker-compose.yml file:

services:
  pastebin:
    image: ghcr.io/espebra/pastebin:latest
    ports:
      - "8080:8080"
    environment:
      - PASTEBIN_HOST=0.0.0.0
      - PASTEBIN_PORT=8080
      - PASTEBIN_S3_BUCKET=pastebin
      - PASTEBIN_S3_ENDPOINT=s3:9000
      - PASTEBIN_S3_REGION=us-east-1
      - PASTEBIN_S3_USE_SSL=false
      - PASTEBIN_S3_ACCESS_KEY=accesskey
      - PASTEBIN_S3_SECRET_KEY=secretkey
    depends_on:
      - s3

  s3:
    image: ghcr.io/espebra/s3s3:latest
    environment:
      - STUPID_BUCKET_NAME: pastebin
      - STUPID_RW_ACCESS_KEY: accesskey
      - STUPID_RW_SECRET_KEY: secretkey
    volumes:
      - s3-data:/var/lib/stupid-simple-s3/

volumes:
  s3-data:

Then run:

docker-compose up

The pastebin will be available at http://localhost:8080.

Manually
# 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

API Endpoints

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

Health Check

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
# OK

Storage

Pastes are stored in S3 with the following structure:

  • pastes/{checksum} - The paste content
  • meta/{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.

Development

Running Tests
go test ./...
Building
go build -o pastebin ./cmd/pastebin
Releasing

Releases are automated via GitHub Actions. To create a new release:

  1. Ensure all changes are committed and pushed to the main branch
  2. Create and push a version tag:
git tag v1.0.0
git push origin v1.0.0

The 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

License

See LICENSE file.

Directories

Path Synopsis
cmd
pastebin command
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL