Foodomaa Docs
Main site Buy — $299
Documentation menu

Server Setup

You can install Foodomaa on a managed hosting panel or on a plain Linux server. The manual route gives you more control; the panel route is faster if you do not want to manage PHP and MySQL yourself. Either way, the application needs a public HTTPS document root, a database and a scheduler.

Baseline stack

ComponentRecommendedNotes
OSUbuntu 24.04 LTS or Debian 12Use a current LTS release with security updates
Web serverNginx or LiteSpeedApache works; Nginx is the common production choice
PHP8.2 or newerMatch the version required by your package
DatabaseMySQL 8.0+ or MariaDB 10.4+Dedicated database and user
CacheRedis (optional)Useful for sessions, cache and queues at scale
SSLLet's Encrypt or CloudflareActive before the installer runs

Example: Ubuntu with Nginx

The package names below are examples. Adjust the PHP version to the one supported by your build.

sudo apt update
sudo apt install nginx mysql-server php8.2-fpm php8.2-mysql php8.2-mbstring \
  php8.2-xml php8.2-curl php8.2-zip php8.2-gd php8.2-intl php8.2-bcmath \
  unzip git certbot python3-certbot-nginx

Create the database and a user that has privileges only on that database:

sudo mysql
CREATE DATABASE foodomaa CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'foodomaa'@'localhost' IDENTIFIED BY 'use-a-long-random-password';
GRANT ALL PRIVILEGES ON foodomaa.* TO 'foodomaa'@'localhost';
FLUSH PRIVILEGES;

Nginx virtual host

Point the document root at the public directory, never at the application root. A minimal server block:

server {
  listen 80;
  server_name foodomaa.example.com;
  root /var/www/foodomaa/public;
  index index.php;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

  location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
  }

  location ~ /\.(?!well-known).* { deny all; }
}

Run sudo nginx -t before reloading. Enable SSL with Certbot or terminate TLS at Cloudflare, then force HTTPS.

PHP settings

memory_limit = 256M
upload_max_filesize = 20M
post_max_size = 24M
max_execution_time = 120
date.timezone = UTC

Reload PHP-FPM after changes. If uploads fail at 2 MB, the limit is usually PHP, Nginx (client_max_body_size) or Cloudflare, not the application.

Permissions and scheduler

Give the web user write access only to the directories that need it:

sudo chown -R www-data:www-data /var/www/foodomaa
sudo find /var/www/foodomaa -type d -exec chmod 755 {} +
sudo find /var/www/foodomaa -type f -exec chmod 644 {} +
sudo chmod -R 775 /var/www/foodomaa/storage /var/www/foodomaa/bootstrap/cache

Add the scheduler for the web user. Confirm it runs every minute:

* * * * * cd /var/www/foodomaa && php artisan schedule:run >> /dev/null 2>&1

OPcache and queue

Enable OPcache in production and set opcache.validate_timestamps=0 only if you reset OPcache after every deploy. If your build uses queues, run a worker under systemd or Supervisor and restart it after each release.

Managed panels. If you use cPanel, Plesk or a hosting panel, set the document root to public, select the supported PHP version, create the database in the panel and add the cron entry. The rest of this guide still applies.