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:
# 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:
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:
- 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:
mkdir -p freescout/data
mkdir -p freescout/logs
mkdir -p freescout/db
Make sure these directories have the proper permissions:
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:
You can add a backup container to your stack for automated database backups:
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.
