Repository navigation
Manual Installation
This guide installs fewohbee without Docker on Ubuntu 26.04 LTS, using Apache, PHP 8.5 (PHP-FPM) and MariaDB 11.8 from the Ubuntu repositories. MySQL 8.4 works as well.
For most installations the Docker setup is the better choice: it is easier to update and brings backups and scheduled tasks along.
- Install packages
- Database
- PHP settings
- Install fewohbee
- Apache
- HTTPS
- Scheduled tasks
- Updates
- Backups
sudo apt update
sudo apt install apache2 mariadb-server git unzip composer \
php-fpm php-cli php-intl php-gd php-mysql php-zip php-xml php-mbstring php-curlThe php-* packages install the default PHP version of Ubuntu 26.04, PHP 8.5. Check it with php -v. fewohbee requires PHP 8.4 or higher.
Open the MariaDB console. On Ubuntu, the database root user logs in via sudo without a password.
sudo mariadbCreate the database and a user for fewohbee. Use a password of letters and digits only, e.g. generated with openssl rand -hex 20, because it becomes part of a URL later.
CREATE DATABASE fewohbee CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'fewohbee'@'localhost' IDENTIFIED BY 'your-db-password';
GRANT ALL PRIVILEGES ON fewohbee.* TO 'fewohbee'@'localhost';
SELECT VERSION();
EXIT;Note the version shown by SELECT VERSION(); (e.g. 11.8.6-MariaDB-…). It is needed for DB_SERVER_VERSION below.
The following settings match the official Docker image. They are stored in a separate file, so PHP updates do not overwrite them, and apply to both PHP-FPM and the command line (used by the scheduled tasks). Adjust the time zone to your location.
sudo tee /etc/php/8.5/mods-available/fewohbee.ini > /dev/null <<'EOF'
; priority=99
date.timezone = Europe/Berlin
upload_max_filesize = 10M
post_max_size = 12M
expose_php = Off
session.use_strict_mode = 1
session.cookie_httponly = 1
EOF
sudo phpenmod fewohbee
sudo systemctl restart php8.5-fpmDownload the application and hand it over to the web server user:
cd /var/www
sudo git clone https://github.com/developeregrem/fewohbee.git
sudo chown -R www-data:www-data fewohbee
cd fewohbeeCreate the configuration from the template:
sudo -u www-data cp .env.dist .env
sudo -u www-data nano .envSet at least these values. Leave APP_ENV=prod unchanged.
| Variable | Value |
|---|---|
LOCALE |
de or en
|
APP_SECRET |
a random value, e.g. from openssl rand -hex 32
|
DATABASE_URL |
mysql://fewohbee:your-db-password@localhost:3306/fewohbee |
DB_SERVER_VERSION |
the version from above in the form 11.8.6-MariaDB (for MySQL just the number, e.g. 8.4.8) |
RELYING_PARTY_ID |
your domain, e.g. fewohbee.example.com (needed for passkey login) |
All other settings (emails, passkeys, single sign-on, …) are described on the Configuration page.
Install the dependencies, create the database tables and initialize the application:
sudo -u www-data composer install --no-dev --optimize-autoloader
sudo -u www-data php bin/console doctrine:migrations:migrate --no-interaction
sudo -u www-data php bin/console asset-map:compile
sudo -u www-data php bin/console app:first-runapp:first-run guides you through creating the first admin user and your accommodation, and optionally loads sample data. Composer may warn that it cannot create a cache directory; this is harmless.
Create the directories for uploaded images and fonts, so they exist for backups from the start:
sudo -u www-data mkdir -p public/resources/images/export public/resources/images/room-categories var/storage/fontsEnable PHP-FPM for Apache:
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.5-fpmCreate the site configuration:
sudo nano /etc/apache2/sites-available/fewohbee.conf<VirtualHost *:80>
ServerName fewohbee.example.com
DocumentRoot /var/www/fewohbee/public
<Directory /var/www/fewohbee/public>
AllowOverride None
Require all granted
FallbackResource /index.php
</Directory>
# Pass the Authorization header on to PHP-FPM. Required for API tokens,
# calendar subscriptions and AI assistants.
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
ErrorLog ${APACHE_LOG_DIR}/fewohbee_error.log
CustomLog ${APACHE_LOG_DIR}/fewohbee_access.log combined
</VirtualHost>Replace fewohbee.example.com with your domain, then disable the default page and enable fewohbee:
sudo a2dissite 000-default
sudo a2ensite fewohbee
sudo systemctl reload apache2The application is now reachable at http://fewohbee.example.com.
Use HTTPS for every installation that is used productively. Passkey login, single sign-on and AI assistants only work over HTTPS.
If the server is reachable from the internet on port 80 under its domain, Certbot obtains a free Let's Encrypt certificate and configures Apache:
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d fewohbee.example.comCertbot creates the HTTPS site from the configuration above, redirects HTTP to HTTPS and renews the certificate automatically.
Calendar synchronization and time-based automations only work if their commands run regularly. Open the crontab of the web server user:
sudo crontab -u www-data -eand add:
# Calendar synchronization with booking portals (both directions)
*/15 * * * * cd /var/www/fewohbee && php bin/console calendar:import:sync --force
0 * * * * cd /var/www/fewohbee && php bin/console calendars:sync
# Time-based automations (reminders, follow-ups, scheduled emails)
*/15 * * * * cd /var/www/fewohbee && php bin/console workflow:process-scheduled
# Log retention
0 3 * * * cd /var/www/fewohbee && php bin/console app:purge-logs --days=90
# Optional: monthly statistics snapshots for year-over-year comparisons
5 0 1 * * cd /var/www/fewohbee && php bin/console stats:snapshot:monthThe schedule matches the Docker setup (docker/app/crontab).
Create a backup before every update and read the release notes for version-specific steps.
cd /var/www/fewohbee
sudo -u www-data git pull
sudo -u www-data composer install --no-dev --optimize-autoloader
sudo -u www-data php bin/console doctrine:migrations:migrate --no-interaction
sudo -u www-data php bin/console asset-map:compile
sudo -u www-data php bin/console cache:clear
sudo systemctl reload php8.5-fpmIf a release introduces new variables, compare your .env with .env.dist and add them.
Back up the database, the configuration and the uploaded images and fonts:
sudo mariadb-dump --single-transaction fewohbee | gzip > fewohbee-db-$(date +%F).sql.gz
sudo tar -czf fewohbee-files-$(date +%F).tar.gz -C /var/www/fewohbee \
.env public/resources/images/export public/resources/images/room-categories var/storage/fontsCopy both files to another device; a backup on the same disk does not survive a disk failure. The file archive contains .env with all passwords, so store it securely.
To restore:
gunzip < fewohbee-db-YYYY-MM-DD.sql.gz | sudo mariadb fewohbee
sudo tar -xzf fewohbee-files-YYYY-MM-DD.tar.gz -C /var/www/fewohbeeInstallation
Configuration
Usage
Integration & development
User manual