Everything you need to install, configure and run APBoard – explained in full, even for complete beginners.
The recommended installation method. Docker automatically takes care of PHP, Apache and MariaDB – you don’t need to configure anything manually. Follow this step-by-step guide.
You need a Linux server with SSH access and a domain. If you don’t have that yet, read What you need first.
Docker is software that runs programs in isolated environments (called containers). Think of containers like sealed boxes: each box contains everything the program needs and doesn’t interfere with other programs.
APBoard uses several containers:
The advantage: you do not need to install PHP, Apache and MariaDB on your server. Docker handles that for you.
If Docker is not yet installed on your server, follow these steps. First connect to your server via SSH.
# Remove old Docker if present
sudo apt remove docker docker-engine docker.io containerd runc 2>/dev/null
# Install dependencies
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
# Add official Docker GPG key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add Docker repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Start Docker service and enable autostart
sudo systemctl enable --now docker
# Check if Docker is running
docker --version
docker compose version
In this guide, all commands are run as root. If you work as a normal user,
make sure your user is in the docker group:
sudo usermod -aG docker YOUR-USERNAME – then log out and back in.
Download the APBoard source code to your server. Choose a directory where APBoard will permanently reside.
# Navigate to the target directory (e.g. /opt or your home directory)
cd /opt
# Clone the repository
git clone https://gitlab.apboard.de/app/apboard3.git apboard
# Change to the APBoard directory
cd apboard After cloning you will see the following files and folders:
apboard/
├── docker-compose.yml # Docker configuration (main file)
├── docker-compose.traefik.yml # Optional Traefik extension
├── .env.example # Template for your configuration
├── Dockerfile # Builds the PHP container
├── src/ # APBoard PHP source code
│ ├── public/ # Web root (index.php, assets)
│ ├── config/ # Configuration files
│ ├── app/ # Application logic
│ └── ...
└── storage/ # Uploads, logs (created automatically) Copy the example configuration and adjust it:
cp .env.example .env
nano .env # or: vim .env | Variable | Example value | Description |
|---|---|---|
APP_URL | https://forum.my-domain.com | The full URL of your forum incl. https://. No trailing slash. |
APP_ENV | production | production for live operation, development for local testing. |
APP_DEBUG | false | Always false in production! Otherwise errors including database passwords are displayed. |
APP_KEY | generated automatically | Random security key. Set automatically on first start. |
DB_HOST | db | Database hostname. With Docker always leave as db. |
DB_PORT | 3306 | Database port. Default: 3306. |
DB_DATABASE | apboard | Database name. Can be chosen freely. |
DB_USERNAME | apboard | Database user. |
DB_PASSWORD | secure-password-here | Database password. Choose a long, random password. |
MYSQL_ROOT_PASSWORD | even-more-secure-password | Root password for MariaDB. Only used internally, but still choose a secure one. |
ADMIN_USERNAME | admin | Username of the first admin account (created on start). |
ADMIN_EMAIL | admin@my-domain.com | Email address of the admin account. |
ADMIN_PASSWORD | admin-password | Password for the first admin. Change immediately after login! |
MAIL_HOST | smtp.mailbox.org | SMTP server for outgoing emails (registration, password reset etc.). |
MAIL_PORT | 587 | SMTP port. Usually 587 (STARTTLS) or 465 (SSL). |
MAIL_USERNAME | forum@my-domain.com | SMTP username (usually the email address). |
MAIL_PASSWORD | smtp-password | SMTP password. |
MAIL_FROM_ADDRESS | forum@my-domain.com | Sender address for outgoing emails. |
MAIL_FROM_NAME | My Forum | Display name for outgoing emails. |
TRAEFIK_DOMAIN | forum.my-domain.com | Domain for Traefik (only if using option A with Traefik). |
TRAEFIK_ACME_EMAIL | admin@my-domain.com | Email for Let’s Encrypt certificates (Traefik only). |
APBoard offers two Docker setups:
Traefik is a reverse proxy that automatically fetches and manages HTTPS certificates from Let’s Encrypt. You don’t need to configure anything else – Traefik does everything.
Traefik needs ports 80 (HTTP) and 443 (HTTPS). If a web server (Apache, Nginx) is already running on your server, you must stop it first or configure Traefik on different ports.
First create a shared Docker network for Traefik:
docker network create traefik-public Create the Traefik configuration file for ACME/Let’s Encrypt:
touch acme.json
chmod 600 acme.json Start APBoard with Traefik:
docker compose -f docker-compose.yml -f docker-compose.traefik.yml up -d The standalone setup is simpler: APBoard runs on port 80 without HTTPS. You can set up HTTPS afterwards with an existing reverse proxy (Nginx, Apache).
docker compose up -d After adjusting .env and choosing the setup:
# Build and start containers
docker compose up -d --build
# Follow logs (Ctrl+C to stop)
docker compose logs -f
# Check status
docker compose ps On first start it takes 1–3 minutes until all containers are ready. This is normal.
.env)APP_KEY is automatically generated if not yet set
Open your browser and navigate to https://forum.my-domain.com (or the URL
from your .env). APBoard should show the home page.
Click Log in in the top right and log in with the admin account
you configured in .env (ADMIN_USERNAME / ADMIN_PASSWORD).
| Command | Meaning |
|---|---|
docker compose ps | Show status of all containers |
docker compose logs -f | Live logs of all containers |
docker compose stop | Stop all containers (data remains) |
docker compose start | Start stopped containers again |
docker compose restart | Restart all containers |
docker compose down | Stop and remove containers (data remains in volumes) |
docker compose exec apboard bash | Open shell in APBoard container |
docker compose exec db mysql -u apboard -p | MySQL CLI in database container |
Detailed information on the update process can be found on the Update APBoard page. Quick version:
cd /opt/apboard
git pull
docker compose up -d --build