Skip to content

Installation

How to install Fusionaly on your server

This method provides a streamlined installation process with automatic updates, ideal for Ubuntu Server users.

For the automated installation, we recommend using DigitalOcean or Hetzner as they provide reliable, affordable VPS hosting with public IP addresses.

  • 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

Before installing Fusionaly, ensure your server is properly hardened. Here are essential security guides:

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

Before installation, configure your DNS records to point to your server. This is optional but highly recommended for automatic SSL certificate setup.

  • 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.1
yourdomain.com. AAAA 2001:db8::1

The installer will automatically detect these records and configure SSL certificates for your domain using Let’s Encrypt.

Purchase your Fusionaly license from our pricing section to get started.

The installer automatically configures SSL certificates and uses Caddy as a proxy.

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

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.

Run the installer and follow its instructions.

Terminal window
curl -fsSL https://fusionaly.com/install | sh

This method is for users who prefer manual setup or are using a non-Ubuntu Linux distribution, deploying Fusionaly via a Docker image.

Purchase your Fusionaly license from our pricing section to get started.

Fusionaly is available as Docker images with support for both AMD64 and ARM64 architectures.

Fusionaly provides Docker images through the following repository:

  • Beta: karloscodes/fusionaly-beta - Latest features and updates from the main branch

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.

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 build
  • latest-arm64 - Latest ARM64 build
  • <commit-sha>-amd64 - Specific AMD64 version
  • <commit-sha>-arm64 - Specific ARM64 version
Terminal window
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:latest

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:

Terminal window
# Generate a private key
export FUSIONALY_PRIVATE_KEY=$(openssl rand -hex 32)
# Start the services
docker compose up -d

The following environment variables are required:

  • FUSIONALY_LICENSE_KEY - Your Fusionaly license key
  • FUSIONALY_DOMAIN - Your domain name (e.g., analytics.example.com)
  • FUSIONALY_PRIVATE_KEY - Secure random key for encryption (generate with openssl rand -hex 32)

Optional environment variables:

  • FUSIONALY_APP_PORT - Application port (default: 8080)
  • FUSIONALY_LOG_LEVEL - Logging level: debug, info, warn, error (default: info)

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:

Terminal window
-v fusionaly-storage:/app/storage
-v fusionaly-logs:/app/logs

Or using host directories:

Terminal window
-v /path/on/host/storage:/app/storage
-v /path/on/host/logs:/app/logs

To use the latest beta features, replace the image with:

Terminal window
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:latest

To update to the latest version:

Terminal window
# Pull the latest image
docker pull karloscodes/fusionaly-beta:latest
# Stop and remove the old container
docker stop fusionaly
docker 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:latest

Important: 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:

Terminal window
docker compose pull
docker compose up -d