APBoard v3 · Documentation

Documentation

Everything you need to install, configure and run APBoard – explained in full, even for complete beginners.

APBoard Documentation Installation with Docker

Install APBoard with Docker

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.

Prerequisites

You need a Linux server with SSH access and a domain. If you don’t have that yet, read What you need first.

1. What is Docker?

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:

  • apboard – the PHP application container (Apache + PHP 8.5)
  • db – the database (MariaDB)
  • traefik (optional) – reverse proxy with automatic HTTPS

The advantage: you do not need to install PHP, Apache and MariaDB on your server. Docker handles that for you.

2. Install Docker

If Docker is not yet installed on your server, follow these steps. First connect to your server via SSH.

Ubuntu / Debian (recommended)

bash
# 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
Docker as root or normal user?

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.

3. Clone the APBoard repository

Download the APBoard source code to your server. Choose a directory where APBoard will permanently reside.

bash
# 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

Directory structure

After cloning you will see the following files and folders:

text
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)

4. Configure .env

Copy the example configuration and adjust it:

bash
cp .env.example .env
nano .env   # or: vim .env

All .env variables at a glance

VariableExample valueDescription
APP_URLhttps://forum.my-domain.comThe full URL of your forum incl. https://. No trailing slash.
APP_ENVproductionproduction for live operation, development for local testing.
APP_DEBUGfalseAlways false in production! Otherwise errors including database passwords are displayed.
APP_KEYgenerated automaticallyRandom security key. Set automatically on first start.
DB_HOSTdbDatabase hostname. With Docker always leave as db.
DB_PORT3306Database port. Default: 3306.
DB_DATABASEapboardDatabase name. Can be chosen freely.
DB_USERNAMEapboardDatabase user.
DB_PASSWORDsecure-password-hereDatabase password. Choose a long, random password.
MYSQL_ROOT_PASSWORDeven-more-secure-passwordRoot password for MariaDB. Only used internally, but still choose a secure one.
ADMIN_USERNAMEadminUsername of the first admin account (created on start).
ADMIN_EMAILadmin@my-domain.comEmail address of the admin account.
ADMIN_PASSWORDadmin-passwordPassword for the first admin. Change immediately after login!
MAIL_HOSTsmtp.mailbox.orgSMTP server for outgoing emails (registration, password reset etc.).
MAIL_PORT587SMTP port. Usually 587 (STARTTLS) or 465 (SSL).
MAIL_USERNAMEforum@my-domain.comSMTP username (usually the email address).
MAIL_PASSWORDsmtp-passwordSMTP password.
MAIL_FROM_ADDRESSforum@my-domain.comSender address for outgoing emails.
MAIL_FROM_NAMEMy ForumDisplay name for outgoing emails.
TRAEFIK_DOMAINforum.my-domain.comDomain for Traefik (only if using option A with Traefik).
TRAEFIK_ACME_EMAILadmin@my-domain.comEmail for Let’s Encrypt certificates (Traefik only).

5. Choose setup: Traefik or Standalone

APBoard offers two Docker setups:

Option A: With Traefik (recommended for new servers)

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.

Ports 80 and 443 must be free

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.

Traefik minimal setup

First create a shared Docker network for Traefik:

bash
docker network create traefik-public

Create the Traefik configuration file for ACME/Let’s Encrypt:

bash
touch acme.json
chmod 600 acme.json

Start APBoard with Traefik:

bash
docker compose -f docker-compose.yml -f docker-compose.traefik.yml up -d

Option B: Standalone (without Traefik)

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).

bash
docker compose up -d

6. Start APBoard

After adjusting .env and choosing the setup:

bash
# 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.

7. What happens automatically on first start

  • Database tables are created (migrations)
  • An admin account is created (with data from .env)
  • Default configuration is stored in the database
  • An example board and category are created
  • The APP_KEY is automatically generated if not yet set
Done!

Open your browser and navigate to https://forum.my-domain.com (or the URL from your .env). APBoard should show the home page.

8. First login

Click Log in in the top right and log in with the admin account you configured in .env (ADMIN_USERNAME / ADMIN_PASSWORD).

9. Useful Docker commands

CommandMeaning
docker compose psShow status of all containers
docker compose logs -fLive logs of all containers
docker compose stopStop all containers (data remains)
docker compose startStart stopped containers again
docker compose restartRestart all containers
docker compose downStop and remove containers (data remains in volumes)
docker compose exec apboard bashOpen shell in APBoard container
docker compose exec db mysql -u apboard -pMySQL CLI in database container

10. Update APBoard

Detailed information on the update process can be found on the Update APBoard page. Quick version:

bash
cd /opt/apboard
git pull
docker compose up -d --build