How To Install Umami Analytics on Fedora 41

In this tutorial, we will show you how to install Umami Analytics on Fedora 41. Umami Analytics has emerged as a powerful alternative to conventional web analytics platforms, offering a privacy-focused approach that respects user data while providing comprehensive insights. Unlike traditional analytics tools that rely on cookies and collect personal information, Umami operates without cookies and fully complies with GDPR regulations, making it an excellent choice for privacy-conscious website owners. This comprehensive guide walks you through the complete process of installing Umami Analytics on Fedora 41, from preparation to final configuration.
Understanding Umami Analytics
What Makes Umami Different
Umami stands apart from conventional analytics tools through its privacy-first approach. The platform doesn’t use cookies, doesn’t collect personal data, and gives you complete ownership of your analytics information. This respect for privacy doesn’t come at the expense of functionality—Umami provides powerful insights without compromising user data.
Website owners increasingly seek analytics solutions that align with modern privacy expectations and regulations. Umami meets these needs by focusing on anonymous, aggregate data rather than individual tracking. The data stays on your server, giving you full control over how it’s stored and used.
Core Features Overview
Umami offers an impressive feature set despite its privacy-focused design:
- Real-time data tracking capabilities that show visitor activity as it happens
- Customizable dashboards that can be tailored to highlight metrics most relevant to your needs
- Event tracking functionality for measuring specific user interactions like button clicks
- Multi-site support for managing analytics across multiple websites from a single installation
- Simple website integration with a lightweight JavaScript snippet
The platform presents data through an intuitive interface with clean visualizations, making it easy to extract actionable insights without a steep learning curve.
Use Cases for Umami
Umami proves valuable across various scenarios:
- Personal websites and blogs seeking basic traffic insights without surveillance
- Business websites concerned with privacy regulations and user trust
- Projects requiring GDPR compliance and transparent data practices
- Organizations looking for ethical alternatives to conventional analytics
- Self-hosted enthusiasts who prefer keeping control of their data
Prerequisites
System Requirements
Before proceeding with installation, ensure your Fedora 41 system meets these requirements:
- Minimum: 1GB RAM, 2 CPU cores, 20GB storage
- Recommended: 2GB RAM, 2+ CPU cores, 40GB storage for optimal performance
While Umami can run on modest hardware, allocating additional resources will improve responsiveness, especially for websites with higher traffic volumes.
Required Software and Skills
The installation process requires:
- Basic command line proficiency
- A domain name pointed to your server’s IP address
- SSH access to your Fedora 41 server
- Root or sudo privileges
Familiarity with web servers and databases is helpful but not mandatory, as this guide covers all required steps in detail.
Pre-Installation Checklist
Complete these preparations before proceeding:
- Fully update your Fedora 41 system with the latest packages
- Configure firewall rules to allow necessary traffic (ports 80, 443, and 3000)
- Ensure your server has a stable internet connection
- Allocate approximately 30-60 minutes for the complete installation process
Installation Methods Overview
Umami offers multiple installation approaches to accommodate different preferences and technical requirements:
- Source Code Installation (primary focus) provides the most control over your installation and enables customization options not available through containerized deployments.
- Docker-Based Installation (alternative approach) simplifies the process by encapsulating Umami and its dependencies in a standardized container, reducing complexity and potential conflicts.
- Docker Compose Setup (for multi-container deployments) offers orchestration capabilities that streamline management of complex setups with multiple components.
Each method achieves the same result—a functioning Umami instance—but the best choice depends on your specific requirements and technical comfort level.
Method 1: Installing Umami from Source
Preparing Your Fedora 41 System
Begin by updating your system to ensure you have the latest security patches and package updates:
sudo dnf update -yInstall essential development packages and dependencies:
sudo dnf install -y git curl wget nanoConfigure your firewall to allow necessary traffic:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --reloadVerify the firewall configuration:
sudo firewall-cmd --list-allInstalling Node.js and Yarn
Umami requires Node.js version 14 or newer for optimal performance. Install Node.js:
sudo dnf module reset nodejs
sudo dnf module enable nodejs:18
sudo dnf install -y nodejsVerify the Node.js installation:
node --versionNext, install Yarn package manager, which Umami uses for dependency management:
sudo npm install -g yarnVerify the installation:
yarn --versionDatabase Setup
Umami supports both PostgreSQL and MySQL/MariaDB databases. This guide uses PostgreSQL for its robust performance. Install PostgreSQL:
sudo dnf install -y postgresql postgresql-server
sudo postgresql-setup --initdb
sudo systemctl enable postgresql
sudo systemctl start postgresqlCreate a database user and the Umami database:
sudo -i -u postgres
createuser -P umami
# Enter a secure password when prompted
createdb -O umami umami
exitConfigure PostgreSQL for secure access by editing the authentication configuration:
sudo nano /var/lib/pgsql/data/pg_hba.confLocate the line for local connections and change ident to md5:
# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     md5Save the file and restart PostgreSQL:
sudo systemctl restart postgresqlTest the database connection:
psql -h localhost -U umami -d umami
# Enter the password you created
# Type \q to exitDownloading and Building Umami
Clone the Umami repository from GitHub:
git clone https://github.com/umami-software/umami.git
cd umamiInstall the required dependencies:
yarn installCreate and configure the environment file:
cp .env.example .env
nano .envConfigure the database connection string in the .env file:
DATABASE_URL=postgresql://umami:yourpassword@localhost:5432/umamiReplace yourpassword with the database password you created earlier.
Build the application:
yarn buildThe build process creates the initial admin account with username admin and password umami.
Start the application to verify everything is working:
yarn startVisit http://your-server-ip:3000 in your browser to confirm Umami is running. You should see the login page.
Method 2: Docker Installation
Setting Up Docker on Fedora 41
Install Docker and Docker Compose:
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-pluginStart and enable the Docker service:
sudo systemctl enable docker
sudo systemctl start dockerAdd your user to the Docker group (optional, for running Docker without sudo):
sudo usermod -aG docker $USER
# Log out and back in for this to take effectTest the Docker installation:
docker --version
docker compose versionDeploying Umami with Docker
Create a project directory:
mkdir ~/umami-docker && cd ~/umami-dockerCreate a docker-compose.yml file:
nano docker-compose.ymlAdd the following configuration:
version: '3'
services:
  umami:
    image: docker.umami.is/umami-software/umami:postgresql-latest
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgresql://umami:umami@db:5432/umami
      DATABASE_TYPE: postgresql
      HASH_SALT: your-random-string
    depends_on:
      - db
    restart: always
  db:
    image: postgres:14-alpine
    environment:
      POSTGRES_DB: umami
      POSTGRES_USER: umami
      POSTGRES_PASSWORD: umami
    volumes:
      - umami-db-data:/var/lib/postgresql/data
    restart: always
volumes:
  umami-db-data:Replace your-random-string with a unique random string for security.
Start the containers:
docker compose up -dCheck the container status:
docker compose psAccess Umami at http://your-server-ip:3000 and log in with the default credentials (username: admin, password: umami).
Web Server Configuration
Nginx Setup as Reverse Proxy
sudo dnf install -y nginxCreate a new server block configuration:
sudo nano /etc/nginx/conf.d/umami.confAdd the following configuration:
server {
    listen 80;
    server_name your-domain.com;
    location / {
        proxy_pass http://localhost:3000;
        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;
    }
}Replace your-domain.com with your actual domain name.
Test the Nginx configuration:
sudo nginx -tIf the test passes, enable and restart Nginx:
sudo systemctl enable nginx
sudo systemctl restart nginxSSL Certificate Implementation
Install Certbot for Let’s Encrypt SSL certificates:
sudo dnf install -y certbot python3-certbot-nginxObtain an SSL certificate:
sudo certbot --nginx -d your-domain.comFollow the prompts to complete the certificate installation. Certbot automatically modifies your Nginx configuration to enable HTTPS.
Test your secure connection by visiting https://your-domain.com.
Configure automatic certificate renewal:
sudo systemctl enable certbot-renew.timer
sudo systemctl start certbot-renew.timerThis ensures your SSL certificates are automatically renewed before expiration.
Post-Installation Setup
First-time Login
Access your Umami installation at https://your-domain.com and log in with the default credentials:
- Username: admin
- Password: umami

Immediately change the default password:
- Click on your username in the top-right corner
- Select “Settings”
- Click “Change password”
- Enter a strong, unique password
- Click “Save”
Systemd Service Configuration
For source-code installations, create a systemd service to manage Umami:
sudo nano /etc/systemd/system/umami.serviceAdd the following configuration:
[Unit]
Description=Umami Analytics
After=network.target
[Service]
Type=simple
User=your-username
WorkingDirectory=/path/to/umami
ExecStart=/usr/bin/yarn start
Restart=on-failure
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.targetReplace your-username with your system username and /path/to/umami with the actual path to your Umami installation.
Enable and start the service:
sudo systemctl enable umami
sudo systemctl start umamiMonitor the service status:
sudo systemctl status umamiThis ensures Umami runs continuously and restarts automatically after system reboots.
Implementing Tracking on Websites
Generating Tracking Code
Log in to your Umami dashboard and add a website:
- Navigate to “Settings” > “Websites”
- Click “Add website”
- Enter your website details:
- Name: A descriptive name for your site
- Domain: Your website’s domain (without http/https)
- Enable share URL: Optional, creates a public dashboard link
 
- Click “Save”
After adding your website, Umami generates a tracking code snippet. Click “Details” next to your website entry to view the code.
Implementation Methods
For WordPress Sites
Install a plugin like “Header and Footer Scripts” or “Insert Headers and Footers,” then add the Umami tracking script to the site header.
For Static HTML Sites
Add the tracking code to the <head> section of your HTML:
<script async defer data-website-id="your-website-id" src="https://your-domain.com/umami.js"></script>Replace your-website-id with the ID provided in your Umami dashboard and your-domain.com with your actual domain.
For Other CMS Platforms
Most content management systems provide options to add custom scripts to the site header. Consult your CMS documentation for specific instructions.
Verifying Tracking Works
After implementing the tracking code:
- Visit your website in a browser
- Return to your Umami dashboard
- Check the “Realtime” section to confirm visitor activity
- Perform various actions on your site to verify event tracking
If no data appears, try clearing your browser cache and refreshing the page.
Troubleshooting Common Issues
Database Connection Problems
If Umami cannot connect to the database:
- Verify the database credentials in your .envfile
- Ensure PostgreSQL is running: sudo systemctl status postgresql
- Check database logs: sudo journalctl -u postgresql
- Test direct database connection: psql -h localhost -U umami -d umami
- Confirm firewall rules allow database connections
Common error: “Could not connect to database” typically indicates incorrect credentials or PostgreSQL configuration issues.
Node.js and Build Issues
If the build process fails:
- Ensure Node.js version is 14 or newer: node --version
- Clear the Yarn cache: yarn cache clean
- Remove the node_modulesdirectory and reinstall:rm -rf node_modules && yarn install
- Check for disk space issues: df -h
- Review build logs for specific error messages
Networking and Firewall Problems
If you cannot access Umami after installation:
- Verify the application is running: sudo systemctl status umamiordocker compose ps
- Check firewall rules: sudo firewall-cmd --list-all
- Ensure SELinux isn’t blocking connections: sudo setenforce 0temporarily disables SELinux for testing
- Verify Nginx configuration: sudo nginx -t
- Check Nginx logs: sudo tail -f /var/log/nginx/error.log
Web Server Configuration Issues
For Nginx-related problems:
- Ensure server blocks are correctly configured
- Verify domain DNS resolves to your server
- Check for syntax errors in configuration files
- Restart Nginx after configuration changes: sudo systemctl restart nginx
- Review logs for specific errors: sudo journalctl -u nginx
Maintenance and Updates
Keeping Umami Updated
For source code installations:
cd /path/to/umami
git pull
yarn install
yarn build
sudo systemctl restart umamiFor Docker installations:
cd ~/umami-docker
docker compose pull
docker compose down
docker compose up -dRegular updates ensure you have the latest features and security patches.
Database Maintenance
Implement a backup strategy:
# Create a database backup
pg_dump -U umami umami > umami_backup_$(date +%Y%m%d).sql
# Automate backups with a cron job
crontab -e
# Add: 0 2 * * * pg_dump -U umami umami > /path/to/backups/umami_backup_$(date +%Y%m%d).sqlPeriodically clean old data to maintain performance:
-- Connect to the database
psql -U umami umami
-- Delete data older than 6 months
DELETE FROM session WHERE created_at < NOW() - INTERVAL '6 months';
DELETE FROM pageview WHERE created_at < NOW() - INTERVAL '6 months';
DELETE FROM event WHERE created_at < NOW() - INTERVAL '6 months';Security Best Practices
- Change default credentials immediately after installation
- Implement strong, unique passwords for all accounts
- Keep all system packages updated: sudo dnf update -y
- Configure automatic security updates: sudo dnf install dnf-automatic
- Regularly review access logs for suspicious activity
- Restrict SSH access to specific IP addresses when possible
Congratulations! You have successfully installed Umami Analytics. Thanks for using this tutorial for installing the Umami modern analytics platform on Fedora 41. For additional help or useful information, we recommend you check the official Umami website.
