Tutorial7 min readApril 28, 2025

Install FreeScout on Hetzner — Complete Guide (2025)

Step-by-step guide to install FreeScout on Hetzner Cloud. Covers Cloud Servers, reverse DNS, backups, and why Hetzner is the best value for FreeScout.

Hetzner is the cheapest option for hosting FreeScout in Europe and Asia. Their Cloud Servers cost €2.99–€4.99/month and have better performance than DigitalOcean at half the price.

This guide covers the fastest way to get FreeScout running on Hetzner.

Why Hetzner?

| Provider | 2GB RAM / 2 vCPU | Region | Backups | Support | |---|---|---|---|---| | Hetzner | €2.99/mo | EU, Asia | Optional | Community | | DigitalOcean | $6/mo | Global | Optional | Standard | | Linode | $12/mo | Global | Optional | Standard | | Vultr | $3.50/mo | Global | Optional | Standard |

Hetzner is the cheapest and fastest for EU-based teams. If you're in the US, DigitalOcean or Vultr are better. If you're in Asia, Hetzner Singapore is unbeatable.


Step 1: Create a Hetzner Account

  1. Go to https://www.hetzner.com/cloud
  2. Sign up (requires credit card)
  3. Verify email

Step 2: Create a Cloud Server

  1. Go to Cloud Console → Servers → Create Server
  2. Location: Choose the closest datacenter to your users
    • Falkenstein (Germany) — best for Europe
    • Nuremberg (Germany) — alternative EU location
    • Singapore — best for Asia
    • Ashburn (US East) — if serving US customers
  3. Image: Ubuntu 22.04
  4. Type: Select CX22 (€2.99/month) — 2GB RAM, 2 vCPU, 40GB SSD
    • For more traffic, upgrade to CX32 (€4.99/month) — 4GB RAM, 2 vCPU, 80GB SSD
  5. SSH Key: Create or upload your SSH key (required for secure access)
  6. Name: freescout (or your preference)
  7. Click "Create Server"

Server boots in 30 seconds.


Step 3: Configure Reverse DNS (Critical for Email)

This step is unique to Hetzner and critical for email deliverability.

  1. In Cloud Console, go to Servers → Your Server → Network
  2. Find your IPv4 address
  3. Click the three dots → "Edit reverse DNS"
  4. Set it to your domain: mail.your-domain.com (not your server's hostname)
  5. Save

Without this, emails will be flagged as spam.


Step 4: Point Your Domain to Hetzner

  1. Go to your domain registrar
  2. Update the A record to point to your server's IP address
  3. (Optional) Add PTR record for reverse DNS confirmation
  4. Wait 15–30 minutes for DNS propagation

Step 5: Initial Server Setup

SSH into your server:

ssh root@your-server-ip
apt update && apt upgrade -y
apt install -y curl wget git unzip supervisor

Create a non-root user (security best practice):

adduser freescout
usermod -aG sudo freescout
su - freescout

Step 6: Install PHP 8.2 & Dependencies

sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install -y php8.2 php8.2-fpm php8.2-mysql php8.2-mbstring \
  php8.2-xml php8.2-curl php8.2-imap php8.2-zip php8.2-gd \
  php8.2-bcmath php8.2-intl nginx mysql-server

Step 7: MySQL Setup

sudo mysql_secure_installation
sudo mysql -u root -p
CREATE DATABASE freescout CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'freescout'@'localhost' IDENTIFIED BY 'strong_password_here';
GRANT ALL PRIVILEGES ON freescout.* TO 'freescout'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Step 8: Download FreeScout

cd /var/www
sudo git clone https://github.com/freescout-helpdesk/freescout.git
sudo chown -R www-data:www-data /var/www/freescout
cd /var/www/freescout

Install Composer dependencies:

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
sudo -u www-data composer install --no-dev --optimize-autoloader

Step 9: Configure Environment

sudo cp .env.example .env
sudo nano .env

Update:

APP_URL=https://your-domain.com
APP_KEY=   # Leave blank, auto-generated
DB_DATABASE=freescout
DB_USERNAME=freescout
DB_PASSWORD=strong_password_here
MAIL_DRIVER=smtp
MAIL_HOST=smtp.sendgrid.net
MAIL_PORT=587
MAIL_USERNAME=apikey
MAIL_PASSWORD=your-sendgrid-api-key

Step 10: Generate Keys & Migrate

sudo -u www-data php8.2 artisan key:generate
sudo -u www-data php8.2 artisan migrate --force
sudo -u www-data php8.2 artisan freescout:after-app-update
sudo -u www-data php8.2 artisan storage:link

Step 11: Configure NGINX

Create /etc/nginx/sites-available/freescout:

server {
    listen 80;
    server_name your-domain.com www.your-domain.com;
    root /var/www/freescout/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }
}

Enable it:

sudo ln -s /etc/nginx/sites-available/freescout /etc/nginx/sites-enabled/
sudo systemctl enable nginx
sudo systemctl reload nginx

Step 12: Install SSL

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com -d www.your-domain.com

Step 13: Queue Workers

Create /etc/supervisor/conf.d/freescout.conf:

[program:freescout-worker]
process_name=%(program_name)s_%(process_num)02d
command=php8.2 /var/www/freescout/artisan queue:work database --sleep=3 --tries=3 --timeout=60
autostart=true
autorestart=true
user=www-data
numprocs=1
stdout_logfile=/var/www/freescout/storage/logs/worker.log
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start freescout-worker:*

Step 14: Cron Job

sudo crontab -u www-data -e

Add:

* * * * * /usr/bin/php8.2 /var/www/freescout/artisan schedule:run >> /dev/null 2>&1

Step 15: Email Configuration

See our complete email configuration guide for SMTP, IMAP, SPF, DKIM, and DMARC setup.


Hetzner-Specific Tips

Tip 1: Backups Enable automated backups in Cloud Console → Servers → Your Server → Settings. Costs €0.50 per backup. Weekly backups are cheap insurance.

Tip 2: Monitoring Hetzner provides free monitoring:

  1. Cloud Console → Monitoring
  2. Track CPU, RAM, disk, network
  3. Set up alerts for CPU > 80%

Tip 3: Resize Later If you outgrow CX22, you can upgrade to CX32 or CX42 with one click. No downtime (for stopped servers).

Tip 4: Network Isolation Create a private network to isolate your server from public internet:

  1. Cloud Console → Networks → Create Network
  2. Add your server to the network
  3. Configure firewall to block unnecessary ports

Hetzner vs DigitalOcean vs Vultr

| | Hetzner | DigitalOcean | Vultr | |---|---|---|---| | Cheapest 2GB plan | €2.99 | $6 | $3.50 | | EU datacenters | ✅ | ✅ | ✅ | | Reverse DNS | Easy | Medium | Easy | | Backups | Optional | Optional | Optional | | Best for | EU customers, budget-conscious | US customers, ease of use | Global presence, affordable |

Choose Hetzner if: You're in Europe and want the cheapest option. Choose DigitalOcean if: You want simplicity and don't mind paying more. Choose Vultr if: You need global datacenters at low cost.


Troubleshooting

| Issue | Cause | Fix | |---|---|---| | Emails going to spam | Reverse DNS not set | Set PTR record in Cloud Console → Network | | Server slow | CPU/RAM maxed out | Check Monitoring tab, upgrade to CX32 if needed | | SSH timeout | Firewall blocking port 22 | Check Cloud Console → Firewall rules | | HTTPS not working | DNS not propagated yet | Wait 24 hours, then certbot again |

Want FreeScout installed and optimized on Hetzner in 24 hours?

We handle the full FreeScout installation on your server — SSL, email, security hardening, and a 1-hour onboarding call. Done in 24 hours.

One-time fee · 30-day support · Money-back guarantee

Resources

Need FreeScout Installed Professionally?

Skip the complexity. We install and configure FreeScout on your server in 24 hours — SSL, email, security, and a full onboarding call included.

Get It Done for $100

One-time fee · 30-day support · Money-back guarantee

Related Articles