Installation
How to install Fusionaly on your server
Automated Installation
Section titled “Automated Installation”This method provides a streamlined installation process with automatic updates, ideal for Ubuntu Server users.
Recommended Hosting Providers
Section titled “Recommended Hosting Providers”For the automated installation, we recommend using DigitalOcean or Hetzner as they provide reliable, affordable VPS hosting with public IP addresses.
Requirements:
Section titled “Requirements:”- Public IP Address: Both providers offer VPS instances with public IP addresses, which are required for the installer to work properly
- Ubuntu Server: The automated installer is optimized for Ubuntu Server (20.04 LTS or newer)
- Server Hardening: After creating your server, you should harden it for security
Important Security Considerations:
Section titled “Important Security Considerations:”Before installing Fusionaly, ensure your server is properly hardened. Here are essential security guides:
- DigitalOcean Server Hardening Guide
- Ubuntu Server Security Best Practices
- Hetzner Security Guidelines
Key hardening steps include:
- Setting up a non-root user with sudo privileges
- Configuring SSH key authentication and disabling password authentication
- Setting up a firewall (UFW recommended) - Note: The installer will automatically configure UFW to allow ports 80 and 443 for HTTPS
- Keeping the system updated with security patches
DNS Setup (Recommended)
Section titled “DNS Setup (Recommended)”Before installation, configure your DNS records to point to your server. This is optional but highly recommended for automatic SSL certificate setup.
Required DNS Records:
Section titled “Required DNS Records:”- A Record: Point your domain to your server’s IPv4 address
- AAAA Record (if available): Point your domain to your server’s IPv6 address
Example:
yourdomain.com. A 203.0.113.1yourdomain.com. AAAA 2001:db8::1The installer will automatically detect these records and configure SSL certificates for your domain using Let’s Encrypt.
1. Get your license
Section titled “1. Get your license”Purchase your Fusionaly license from our pricing section to get started.
2. Fusionaly Installer and Updater
Section titled “2. Fusionaly Installer and Updater”The installer automatically configures SSL certificates and uses Caddy as a proxy.
What the Automated Installer Provides
Section titled “What the Automated Installer Provides”The automated installer includes:
- Automatic Updates: Keeps your Fusionaly installation up to date with the latest features and security patches via scheduled cron jobs
- Automated Database Backups: Comprehensive backup system with daily, weekly, and monthly snapshots:
- Daily backups: Full database backups created every night (retained for 30 days)
- Weekly backups: Additional weekly snapshots for extended recovery options
- Monthly backups: Long-term monthly archives for historical data preservation
- SSL Certificates: Automatic Let’s Encrypt SSL certificate provisioning and renewal
- Reverse Proxy: Caddy web server configured as a reverse proxy with automatic HTTPS
Recommended Dual Backup Strategy
Section titled “Recommended Dual Backup Strategy”While Fusionaly provides application-level backups, we strongly recommend implementing server-level backups as well:
Why Two Backup Strategies:
- Application backups (Fusionaly): Protect your analytics data and configuration
- Server backups (VPS snapshots): Protect the entire system, including OS, dependencies, and configuration files
Server Backup Options:
- DigitalOcean: Use automated snapshots or backups service
- Hetzner: Enable automatic snapshots in the Hetzner Cloud Console
- Other providers: Configure automated server snapshots through your hosting provider
This dual approach ensures complete protection - if your server fails completely, you can restore the entire system from a server snapshot. If only the application data is corrupted, you can use the faster application-level backups.
For more details, see the Fusionaly Installer on GitHub.
Install with a single command
Section titled “Install with a single command”Run the installer and follow its instructions.
curl -fsSL https://fusionaly.com/install | shSelf-Managed Installation
Section titled “Self-Managed Installation”This method is for users who prefer manual setup or are using a non-Ubuntu Linux distribution, deploying Fusionaly via a Docker image.
1. Get your license
Section titled “1. Get your license”Purchase your Fusionaly license from our pricing section to get started.
2. Docker Installation
Section titled “2. Docker Installation”Fusionaly is available as Docker images with support for both AMD64 and ARM64 architectures.
Available Docker Images
Section titled “Available Docker Images”Fusionaly provides Docker images through the following repository:
- Beta:
karloscodes/fusionaly-beta- Latest features and updates from the main branch
Supported Architectures
Section titled “Supported Architectures”The beta repository supports multi-architecture images:
- AMD64 (x86_64) - For standard Intel/AMD processors
- ARM64 (aarch64) - For ARM-based systems (Apple Silicon, Raspberry Pi 4/5, AWS Graviton, etc.)
Docker will automatically pull the correct architecture for your system when using the multi-arch tags.
Available Tags
Section titled “Available Tags”Multi-Architecture Tags (Recommended):
latest- Latest stable build (automatically selects AMD64 or ARM64)<commit-sha>- Specific version by commit SHA (first 7 characters)
Architecture-Specific Tags:
latest-amd64- Latest AMD64 buildlatest-arm64- Latest ARM64 build<commit-sha>-amd64- Specific AMD64 version<commit-sha>-arm64- Specific ARM64 version
Quick Start with Docker
Section titled “Quick Start with Docker”docker run -d \ --name fusionaly \ -p 8080:8080 \ -e FUSIONALY_LICENSE_KEY="your-license-key" \ -e FUSIONALY_DOMAIN="your-domain.com" \ -e FUSIONALY_PRIVATE_KEY="$(openssl rand -hex 32)" \ -v fusionaly-storage:/app/storage \ -v fusionaly-logs:/app/logs \ karloscodes/fusionaly-beta:latestDocker Compose Example
Section titled “Docker Compose Example”Create a docker-compose.yml file:
version: '3.8'
services: fusionaly: image: karloscodes/fusionaly-beta:latest container_name: fusionaly restart: unless-stopped ports: - "8080:8080" environment: - FUSIONALY_LICENSE_KEY=your-license-key - FUSIONALY_DOMAIN=your-domain.com - FUSIONALY_PRIVATE_KEY=${FUSIONALY_PRIVATE_KEY} - FUSIONALY_APP_PORT=8080 - FUSIONALY_LOG_LEVEL=info volumes: - fusionaly-storage:/app/storage - fusionaly-logs:/app/logs
volumes: fusionaly-storage: fusionaly-logs:Then run:
# Generate a private keyexport FUSIONALY_PRIVATE_KEY=$(openssl rand -hex 32)
# Start the servicesdocker compose up -dEnvironment Variables
Section titled “Environment Variables”The following environment variables are required:
FUSIONALY_LICENSE_KEY- Your Fusionaly license keyFUSIONALY_DOMAIN- Your domain name (e.g., analytics.example.com)FUSIONALY_PRIVATE_KEY- Secure random key for encryption (generate withopenssl rand -hex 32)
Optional environment variables:
FUSIONALY_APP_PORT- Application port (default: 8080)FUSIONALY_LOG_LEVEL- Logging level: debug, info, warn, error (default: info)
Data Persistence
Section titled “Data Persistence”Fusionaly stores its data in two directories inside the container:
/app/storage- SQLite database and application data/app/logs- Application logs
Make sure to mount volumes to persist your analytics data:
-v fusionaly-storage:/app/storage-v fusionaly-logs:/app/logsOr using host directories:
-v /path/on/host/storage:/app/storage-v /path/on/host/logs:/app/logsUsing Beta Releases
Section titled “Using Beta Releases”To use the latest beta features, replace the image with:
docker run -d \ --name fusionaly-beta \ -p 8080:8080 \ -e FUSIONALY_LICENSE_KEY="your-license-key" \ -e FUSIONALY_DOMAIN="your-domain.com" \ -e FUSIONALY_PRIVATE_KEY="$(openssl rand -hex 32)" \ -v fusionaly-storage:/app/storage \ -v fusionaly-logs:/app/logs \ karloscodes/fusionaly-beta:latestUpdating
Section titled “Updating”To update to the latest version:
# Pull the latest imagedocker pull karloscodes/fusionaly-beta:latest
# Stop and remove the old containerdocker stop fusionalydocker rm fusionaly
# Start with the new image (data is preserved in the volumes)docker run -d \ --name fusionaly \ -p 8080:8080 \ -e FUSIONALY_LICENSE_KEY="your-license-key" \ -e FUSIONALY_DOMAIN="your-domain.com" \ -e FUSIONALY_PRIVATE_KEY="your-existing-private-key" \ -v fusionaly-storage:/app/storage \ -v fusionaly-logs:/app/logs \ karloscodes/fusionaly-beta:latestImportant: When updating, make sure to use the same FUSIONALY_PRIVATE_KEY as your original installation to maintain data encryption compatibility.
Note: Unlike the automated installation method, self-managed Docker deployments do not include automatic updates or automated database backups. You will need to manually update your containers and implement your own backup strategy.
Or with Docker Compose:
docker compose pulldocker compose up -d