Documentation Index
Fetch the complete documentation index at: https://docs.nihalxkumar.dev/llms.txt
Use this file to discover all available pages before exploring further.
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
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:
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
-
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
-
Copy binaries:
sudo cp target/release/httpd /opt/zingat/
sudo cp target/release/clipclient /opt/zingat/
sudo chown zingat:zingat /opt/zingat/*
-
Enable and start service:
sudo systemctl daemon-reload
sudo systemctl enable zingat
sudo systemctl start zingat
-
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
- Port conflicts: Check if port 8000 is already in use
- Permission errors: Verify file ownership and permissions
- Database errors: Check database connection string
- 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.