In today’s digital landscape, providing exceptional customer support is crucial for any business. FreeScout, an open-source help desk and shared mailbox solution, offers a powerful alternative to expensive platforms like Zendesk and Help Scout. This guide will walk you through setting up FreeScout using Docker containers managed through Portainer, making deployment and maintenance a breeze.
What is FreeScout?
FreeScout is a lightweight, open-source help desk and shared inbox platform built on PHP with the Laravel framework. Often described as a self-hosted clone of Help Scout, it provides all the essential features of premium help desk solutions without the hefty price tag.
FreeScout has been actively developed since 2018 and recently celebrated its 7th year of success. It continues to gain popularity in the self-hosted community due to its robust feature set and active development.
Key Features
- Unlimited support agents, tickets, and mailboxes
- 100% Mobile-friendly interface
- Multilingual support for over 20 languages
- Seamless email integration including modern Microsoft Exchange authentication
- Rich collaboration tools including internal notes, forwarding, merging conversations
- Push notifications and real-time updates
- Advanced search capabilities
- Kanban boards for visual ticket management
- Integration options for WhatsApp, Facebook, Telegram, Slack, and more
- Support for screen readers (accessibility features)
- Dark mode for reduced eye strain
- Mobile apps for iOS and Android
Why Docker and Portainer?
Docker containers provide an isolated environment for running applications, ensuring consistent behavior across different systems. Portainer offers a user-friendly web interface for managing Docker containers, making it accessible even for those without extensive command-line experience.
The combination of Docker and Portainer offers several benefits:
- Simplified deployment with pre-configured containers
- Easy updates without disrupting your entire system
- Resource efficiency through containerization
- Visual management of containers, networks, and volumes
- Simplified backup and restoration processes
Prerequisites
Before we begin, ensure you have:
- A server or VPS running Linux
- Docker installed on your server
- Portainer installed and configured
- Basic understanding of networking and ports
- Domain name (optional but recommended for production)
Step 1: Installing Portainer (If Not Already Installed)
If you don’t have Portainer installed yet, you can set it up with the following commands:
1 2 3 4 5 6 7 8 9 10 11 12 |
# Create a volume for Portainer data docker volume create portainer_data # Install Portainer CE (Community Edition) docker run -d -p 8000:8000 -p 9443:9443 --name portainer \ --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:latest |
Once installed, access Portainer by navigating to https://your-server-ip:9443
in your browser.
Step 2: Setting Up FreeScout with Docker Compose
The easiest way to deploy FreeScout is using Docker Compose. We’ll create a stack in Portainer using a Docker Compose file.
- In Portainer, navigate to “Stacks” in the left sidebar
- Click “Add stack”
- Give your stack a name, such as “freescout”
- In the “Web editor” tab, paste the following Docker Compose configuration:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
version: '2' services: freescout-app: image: tiredofit/freescout container_name: freescout-app links: - freescout-db volumes: - ./data:/data - ./logs/:/www/logs environment: - VIRTUAL_HOST=freescout.yourdomain.com - VIRTUAL_PORT=80 - CONTAINER_NAME=freescout-app - DB_HOST=freescout-db - DB_NAME=freescout - DB_USER=freescout - DB_PASS=your_secure_password - SITE_URL=https://freescout.yourdomain.com - ADMIN_EMAIL=admin@yourdomain.com - ADMIN_PASS=your_admin_password - ENABLE_SSL_PROXY=TRUE - DISPLAY_ERRORS=FALSE - TIMEZONE=America/New_York ports: - "8080:80" networks: - freescout-network restart: always freescout-db: image: tiredofit/mariadb container_name: freescout-db volumes: - ./db:/var/lib/mysql environment: - ROOT_PASS=your_root_password - DB_NAME=freescout - DB_USER=freescout - DB_PASS=your_secure_password - CONTAINER_NAME=freescout-db networks: - freescout-network restart: always networks: freescout-network: driver: bridge |
- Make sure to replace the placeholder values:
freescout.yourdomain.com
with your actual domainyour_secure_password
with a strong database passwordadmin@yourdomain.com
with your admin emailyour_admin_password
with a strong admin password- Adjust the timezone as needed
- Click “Deploy the stack”
Step 3: Setting Up Required Directories
Before FreeScout can run properly, you need to create the necessary directories on your host system:
1 2 3 4 5 6 |
mkdir -p freescout/data mkdir -p freescout/logs mkdir -p freescout/db |
Make sure these directories have the proper permissions:
1 2 3 4 |
chmod -R 755 freescout |
Step 4: Accessing FreeScout
After deploying the stack, FreeScout will be accessible at http://your-server-ip:8080
or at your configured domain if you’ve set up DNS and a reverse proxy.
The first boot can take 2-5 minutes depending on your CPU, as FreeScout needs to set up the proper schemas in the database.
Once loaded, you’ll be presented with the FreeScout login screen. Use the admin email and password you configured in the Docker Compose file to log in.
Step 5: Setting Up a Reverse Proxy (Optional but Recommended)
For production environments, it’s highly recommended to set up a reverse proxy with SSL encryption. This can be done using Nginx Proxy Manager, Traefik, or Caddy.
If you’re using Nginx Proxy Manager (also available as a Docker container), you can set up a proxy host pointing to your FreeScout container with SSL enabled.
Step 6: Managing Your FreeScout Installation with Portainer
Portainer makes it easy to manage your FreeScout installation:
- Viewing logs: In Portainer, go to Containers, select the FreeScout container, and click on “Logs” to view real-time logs.
- Updating FreeScout: To update to the latest version, go to your stack in Portainer, click “Editor,” and then “Deploy the stack” again. Portainer will pull the latest image and update your installation.
- Backing up data: It’s crucial to regularly back up your data. The important directories to back up are:
./db
– Contains your database./data
– Contains FreeScout data and sessions
You can add a backup container to your stack for automated database backups:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
freescout-db-backup: container_name: freescout-db-backup image: tiredofit/db-backup links: - freescout-db volumes: - ./dbbackup:/backup environment: - CONTAINER_NAME=freescout-db-backup - DB_HOST=freescout-db - DB_TYPE=mariadb - DB_NAME=freescout - DB_USER=freescout - DB_PASS=your_secure_password - DB01_BACKUP_INTERVAL=1440 - DB01_BACKUP_BEGIN=0000 - DB_CLEANUP_TIME=8640 - COMPRESSION=BZ - MD5=TRUE networks: - freescout-network restart: always |
Enhancing Your FreeScout Installation
FreeScout offers numerous modules to extend its functionality. As of 2024-2025, some popular modules include:
- Mobile Notifications – Enables push notifications for the mobile app
- WhatsApp Integration – Connect WhatsApp to your help desk
- Knowledge Base – Create and share help articles
- Live Chat – Offer real-time support through your website
- Slack Integration – Connect FreeScout with Slack for notifications
To install modules, you can either:
- Purchase and install them through the FreeScout web interface
- Add them to a custom modules directory mapped to your container
Thoughts
Setting up FreeScout with Docker and Portainer provides a powerful, cost-effective help desk solution that you control entirely. With its rich feature set and active development, FreeScout is an excellent alternative to costly SaaS options like Zendesk and Help Scout.
By following this guide, you now have a modern help desk solution running in Docker containers, easily managed through Portainer’s intuitive interface. This setup ensures easy updates, backups, and scalability as your support needs grow.