Skip to main content

Zingat Deployment Guide

Complete production deployment instructions for Zingat. This guide covers Docker deployment, systemd service setup, and production configuration.

Docker Deployment

Zingat includes a Dockerfile for containerized deployment.

Build Docker Image

docker build -t zingat .

Run Docker Container

docker run -d \
  -p 8000:8000 \
  -e DATABASE_URL=sqlite:///data/zingat.db \
  -v zingat_data:/data \
  --name zingat \
  zingat

Docker Compose

Create a docker-compose.yml file:
version: '3.8'
services:
  zingat:
    build: .
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=sqlite:///data/zingat.db
      - PORT=8000
      - RUST_LOG=info
    volumes:
      - zingat_data:/data
    restart: unless-stopped

volumes:
  zingat_data:
Run with Docker Compose:
docker-compose up -d

Systemd Service

For Linux servers, create a systemd service file.

Create Service File

Create /etc/systemd/system/zingat.service:
[Unit]
Description=Zingat Pastebin Service
After=network.target

[Service]
Type=simple
User=zingat
Group=zingat
WorkingDirectory=/opt/zingat
Environment="DATABASE_URL=sqlite:///opt/zingat/data/zingat.db"
Environment="PORT=8000"
Environment="RUST_LOG=info"
ExecStart=/opt/zingat/target/release/httpd
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Setup Steps

  1. Create user and directory:
    sudo useradd --system --create-home --shell /usr/sbin/nologin zingat
    sudo mkdir -p /opt/zingat/data
    sudo chown zingat:zingat /opt/zingat/data
    
  2. Copy binaries:
    sudo cp target/release/httpd /opt/zingat/
    sudo cp target/release/clipclient /opt/zingat/
    sudo chown zingat:zingat /opt/zingat/*
    
  3. Enable and start service:
    sudo systemctl daemon-reload
    sudo systemctl enable zingat
    sudo systemctl start zingat
    
  4. Check status:
    sudo systemctl status zingat
    

Production Configuration

Environment Variables

Create a production .env file:
DATABASE_URL=sqlite:///var/lib/zingat/zingat.db
PORT=8000
RUST_LOG=info
MAX_PASTE_SIZE=10485760
RATE_LIMIT_REQUESTS=60
RATE_LIMIT_WINDOW=60

Database Configuration

SQLite Production Tips

  • Use absolute paths for database file
  • Ensure proper file permissions
  • Regular backups recommended
DATABASE_URL=sqlite:///var/lib/zingat/zingat.db

PostgreSQL Production Setup

For higher traffic, use PostgreSQL:
DATABASE_URL=postgres://username:password@localhost:5432/zingat
PostgreSQL configuration:
  • Enable connection pooling
  • Set appropriate memory settings
  • Configure backups

Security Hardening

File Permissions

sudo chown zingat:zingat /opt/zingat
sudo chmod 750 /opt/zingat
sudo chown zingat:zingat /var/lib/zingat
sudo chmod 700 /var/lib/zingat

Firewall Configuration

sudo ufw allow 8000/tcp
sudo ufw enable

Reverse Proxy Setup

Nginx Configuration

Create /etc/nginx/sites-available/zingat:
server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://localhost:8000;
        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;
    }

    # Rate limiting
    limit_req_zone $binary_remote_addr zone=zingat:10m rate=10r/s;
    location /api/paste {
        limit_req zone=zingat burst=20 nodelay;
        proxy_pass http://localhost:8000;
    }
}
Enable the site:
sudo ln -s /etc/nginx/sites-available/zingat /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

SSL with Let’s Encrypt

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com

Monitoring and Logging

Log Management

Zingat outputs structured JSON logs. Use log rotation:
sudo apt install logrotate
Create /etc/logrotate.d/zingat:
/var/log/zingat/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    copytruncate
}

Health Checks

Monitor service health:
curl -f http://localhost:8000/health || exit 1

Performance Monitoring

Use tools like:
  • htop for system monitoring
  • nginx status for web server metrics
  • sqlite3 for database health

Backup Strategy

Database Backups

SQLite Backup

# Daily backup script
sqlite3 /var/lib/zingat/zingat.db ".backup '/backup/zingat-$(date +%Y%m%d).db'"

PostgreSQL Backup

pg_dump zingat > zingat-backup-$(date +%Y%m%d).sql

Configuration Backups

Backup important files:
  • Service configuration
  • Environment files
  • SSL certificates

Scaling Considerations

Vertical Scaling

  • Increase server resources (CPU, RAM)
  • Use faster storage for database
  • Optimize database configuration

Horizontal Scaling

For very high traffic:
  • Use PostgreSQL instead of SQLite
  • Implement load balancing
  • Consider Redis for caching

Troubleshooting Production

Common Issues

  1. Port conflicts: Check if port 8000 is already in use
  2. Permission errors: Verify file ownership and permissions
  3. Database errors: Check database connection string
  4. Memory issues: Monitor system resources

Debug Mode

Enable debug logging temporarily:
export RUST_LOG=debug
./target/release/httpd

Maintenance

Regular Updates

  • Keep Rust and dependencies updated
  • Monitor security advisories
  • Apply security patches promptly

Database Maintenance

# SQLite vacuum
sqlite3 zingat.db "VACUUM;"

# PostgreSQL maintenance
vacuumdb zingat
This deployment guide provides a solid foundation for running Zingat in production environments with proper security, monitoring, and maintenance practices.