I have successfully set up a local dev environment using docker compose, and here are the step to recreate what I did from scratch. These instructions are strictly for linux and may need to be changed depending on your distribution (Arch uses 'http' user and group instead of 'www-data' like Debian).
Install php, composer, docker, and docker compose on the host machine. Make sure your user is part of www-data group.
Create the flarum project in a new directory and change permissions to allow flarum to read/write:
composer create-project flarum/flarum:^1.8.0 flarum
sudo chmod -R 775 flarum
sudo chown -R www-data:www-data flarum
cd flarum
Inside the flarum directory, write the following files:
./docker/nginx/Dockerfile
FROM nginx:1.29
COPY nginx.conf /etc/nginx/nginx.conf
./docker/nginx/nginx.conf
user www-data;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log warn;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
server {
listen 80;
server_name localhost;
root /var/www/flarum/public;
index index.php;
include /var/www/flarum/.nginx.conf;
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass php:9000;
}
}
}
./docker/php/Dockerfile
FROM php:8.5-fpm
RUN apt update && apt install -y \
bash \
git \
unzip \
# intl extension
libicu-dev \
# mbstring extension
libonig-dev \
# zip extension
libzip-dev \
# PNG support in GD
libpng-dev \
# JPEG support in GD
libjpeg62-turbo-dev \
# FreeType support in GD
libfreetype-dev \
# OpenSSL and SSL/TLS support
libssl-dev \
&& rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install \
gd \
intl \
pdo_mysql \
zip
COPY php.ini /usr/local/etc/php/conf.d/dev.ini
WORKDIR /var/www/flarum
USER www-data
CMD ["php-fpm"]
./docker/php/php.ini
display_errors=Off
error_reporting=E_ALL
memory_limit=1024M
upload_max_filesize=50M
post_max_size=50M
./docker-compose.yml
services:
nginx:
build:
context: ./docker/nginx
dockerfile: Dockerfile
ports:
- "127.0.0.1:8080:80"
volumes:
- ./:/var/www/flarum
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- php
networks: [flarum]
php:
build:
context: ./docker/php
dockerfile: Dockerfile
volumes:
- ./:/var/www/flarum
depends_on:
- mariadb
networks: [flarum]
mariadb:
image: mariadb:12
environment:
MARIADB_USER: flarum
MARIADB_PASSWORD: flarum
MARIADB_DATABASE: flarum
MARIADB_ROOT_PASSWORD: root
volumes:
- mariadb:/var/lib/mysql
networks: [flarum]
adminer:
image: adminer:5
ports:
- "8081:8080"
networks: [flarum]
networks:
flarum:
volumes:
mariadb:
Run docker compose up -d --build and visit http://localhost:8080 to finish the installation.
This should provide a good base to start, obviously nothing here is fit for production!