This guide provides installation instructions for deploying Psono on Linux servers. Choose the deployment method that best fits your infrastructure: Docker Compose for containerized deployments, Ansible for automated provisioning, or manual installation for full control.
Current Stable Version: v15.x (2025) | Supported OS: Debian 10+, Ubuntu 20.04+, RHEL 9+
| Resource | Minimum (Test) | Production |
|---|---|---|
| CPU | 2 cores | 4+ cores |
| RAM | 2 GB | 4-8 GB |
| Storage | 10 GB SSD | 50+ GB SSD |
| Network | 100 Mbps | 1 Gbps+ |
Docker Compose provides the easiest deployment with minimal configuration.
# Create project directory
sudo mkdir -p /opt/psono
cd /opt/psono
# Create docker-compose.yml
sudo tee docker-compose.yml << 'EOF'
version: '3.8'
services:
psono-server:
image: psono/psono-server:latest
container_name: psono-server
restart: unless-stopped
environment:
- PSONO_DATABASE_ENGINE=django.db.backends.postgresql
- PSONO_DATABASE_NAME=psono
- PSONO_DATABASE_USER=psono
- PSONO_DATABASE_PASSWORD=CHANGE_ME_STRONG_PASSWORD
- PSONO_DATABASE_HOST=postgres
- PSONO_DATABASE_PORT=5432
- PSONO_SECRET_KEY=CHANGE_ME_64_CHAR_RANDOM_STRING
volumes:
- psono-settings:/etc/psono
- psono-static:/var/www/static
depends_on:
postgres:
condition: service_healthy
networks:
- psono-network
postgres:
image: postgres:15-alpine
container_name: psono-postgres
restart: unless-stopped
environment:
- POSTGRES_DB=psono
- POSTGRES_USER=psono
- POSTGRES_PASSWORD=CHANGE_ME_STRONG_PASSWORD
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U psono"]
interval: 10s
timeout: 5s
retries: 5
networks:
- psono-network
networks:
psono-network:
driver: bridge
volumes:
psono-settings:
psono-static:
postgres-data:
EOF
# Start the stack
docker compose up -d
# Check status
docker compose ps
💡 Production Hint: Replace
latestwith a specific version tag (e.g.,15.1) for reproducible deployments. See Docker Setup for advanced configurations.
Use Ansible for repeatable, automated deployments across multiple servers.
# Install Ansible on control node
sudo apt-get update && sudo apt-get install -y ansible # Debian/Ubuntu
sudo dnf install -y ansible # RHEL/Rocky/Alma
# Create inventory file
tee inventory.ini << 'EOF'
[psono_servers]
psono.example.com ansible_user=deploy ansible_ssh_private_key_file=~/.ssh/id_rsa
EOF
# Run the playbook (see setup/ansible.md for full playbook)
ansible-playbook -i inventory.ini psono-deploy.yml
See Psono Ansible Setup for the complete production-ready playbook.
For testing purposes only – not recommended for production:
bash <(curl -s https://gitlab.com/esaqa/psono/psono-quickstart/raw/master/install.sh)
⚠️ Warning: The quickstart script is designed for demo/evaluation use. It does not include production hardening, backup configuration, or proper TLS setup.
# Generate SECRET_KEY (64 characters)
python3 -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
# Generate database password
openssl rand -base64 32
Point your domain to the server:
psono.example.com. IN A 192.0.2.1
# Install Certbot
sudo apt-get install -y certbot python3-certbot-nginx # Debian/Ubuntu
# Obtain certificate
sudo certbot --nginx -d psono.example.com
# Auto-renewal is configured automatically
sudo certbot renew --dry-run
https://psono.example.com# Create backup script
sudo tee /usr/local/bin/psono-backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/var/backups/psono"
DATE=$(date +%Y%m%d_%H%M%S)
# Backup PostgreSQL
docker exec psono-postgres pg_dump -U psono psono > ${BACKUP_DIR}/db_${DATE}.sql
# Backup settings
docker cp psono-server:/etc/psono ${BACKUP_DIR}/settings_${DATE}
# Keep only last 7 backups
find ${BACKUP_DIR} -type f -mtime +7 -delete
EOF
sudo chmod +x /usr/local/bin/psono-backup.sh
# Add to crontab (daily at 2 AM)
echo "0 2 * * * /usr/local/bin/psono-backup.sh" | sudo crontab -
After installation, proceed with:
Server Configuration – Configure domains, email, and application settings
→ Psono Configuration
Security Hardening – Apply security best practices before going live
→ Psono Security
Docker Advanced Setup – Production Docker configurations with networking and volumes
→ Psono Docker Setup
Ansible Automation – Complete Ansible playbook for automated deployments
→ Psono Ansible Setup
| Issue | Solution |
|---|---|
| Container fails to start | Check Docker logs: docker compose logs psono-server |
| Database connection error | Verify DATABASE_* environment variables match |
| TLS certificate errors | Ensure DNS propagates before requesting certificates |
| High memory usage | Increase container memory limits or add swap space |
# View logs
docker compose logs -f psono-server
# Restart services
docker compose restart
# Update to latest version
docker compose pull && docker compose up -d
# Check database connection
docker exec psono-postgres psql -U psono -c "\l"
# Access container shell
docker exec -it psono-server /bin/bash
15.1 or latest (verify tag points to correct version)Any questions?
Feel free to contact us. Find all contact information on our contact page.