Version 1.0.0Web + App

Installation

Two separate, complete guides: one for a VPS with SSH and one for cPanel shared hosting. Pick yours and follow it from top to bottom.

Item: FieldOps | Multi-Vendor Service Management Platform With Flutter Mobile App  ·  Stack: Laravel 13 · PHP 8.3+ · MySQL 8 · Flutter 3.47 (Dart 3.13)

Which Guide Do I Need?

Follow one guide from top to bottom. Each one is complete: you do not need any other page to finish the installation.

VPS guidecPanel guide
You haveA VPS or cloud server with Ubuntu 24.04 and SSH accessShared hosting with cPanel
How you workCopy and paste commandsClick in cPanel, plus one or two commands
Notifications and webhooksSent at once by a background workerSent within about a minute by a cron job
Real-time live chatAvailable (optional)Chat refreshes every few seconds
Best forLive businesses and marketplacesSmall teams and trying FieldOps out

Not sure? If your provider gave you a cPanel login, use the cPanel guide. If they gave you a server IP address and a root password, use the VPS guide.

What to Prepare

Have these ready before you start, for either guide:

  • The FieldOps download from CodeCanyon (Downloads → All files & documentation).
  • Your purchase code (Downloads → License certificate & purchase code).
  • A domain or subdomain you control, for example app.example.com. A subdomain is the easiest choice.
  • An e-mail address and a password for your owner login.
  • MySQL 8. FieldOps is built and tested on MySQL 8. Hosts that offer only MariaDB should be asked for MySQL 8 first.

VPS Step 1: Connect and Set Your Values

You need a clean server with Ubuntu 24.04 (2 GB of memory or more is recommended) and its IP address and login from your provider.

You will seeReplace it with
app.example.comYour domain or subdomain
[email protected]Your e-mail address (for the HTTPS certificate notices)
ChooseAStrongPasswordA new database password. Use letters and numbers only
FieldOps.zipThe real name of your CodeCanyon download
SERVER_IPYour server’s IP address

Keep the install path /var/www/fieldops exactly as written. It is the path the ready-made server files in the package expect, so you do not have to edit them.

  1. Point your domain at the server

    At your domain provider, add an A record: name app (or @ for the main domain), value SERVER_IP. This can take from a few minutes to a few hours to take effect.

  2. Open a terminal on the server

    On Windows use PowerShell, on Mac use Terminal:

    ssh root@SERVER_IP

    If your provider gave you another user name, use it in place of root.

  3. Set your values

    Edit these three lines, then paste them into the terminal. The next commands use them, so you only type your details once:

    DOMAIN=app.example.com
    [email protected]
    DB_PASS='ChooseAStrongPassword'

    These values last until you close the terminal. If you reconnect later, paste the three lines again.

  4. Check the domain

    This should print your server’s IP address. If it prints nothing, wait and try again before you continue:

    getent hosts "$DOMAIN"

VPS Step 2: Install the Server Software

  1. Install the packages

    This installs nginx, MySQL, PHP 8.3, Supervisor and the certificate tool. It takes a few minutes. If a purple screen appears, press Enter.

    sudo apt update
    sudo apt install -y nginx mysql-server supervisor unzip curl certbot \
      php8.3-fpm php8.3-cli php8.3-mysql php8.3-mbstring php8.3-xml php8.3-curl \
      php8.3-zip php8.3-gd php8.3-intl php8.3-bcmath
    curl -sS https://getcomposer.org/installer | php && sudo mv composer.phar /usr/local/bin/composer
  2. Open the firewall

    This allows SSH and web traffic. If your provider has its own firewall panel, open ports 22, 80 and 443 there too.

    sudo ufw allow OpenSSH
    sudo ufw allow 'Nginx Full'
    sudo ufw --force enable
  3. Create the database
    sudo mysql -e "CREATE DATABASE fieldops CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
    sudo mysql -e "CREATE USER 'fieldops'@'localhost' IDENTIFIED BY '$DB_PASS';"
    sudo mysql -e "GRANT ALL PRIVILEGES ON fieldops.* TO 'fieldops'@'localhost';"

VPS Step 3: Upload FieldOps

  1. Upload the download

    Use a free SFTP program such as FileZilla. Connect with host SERVER_IP, port 22 and your server login, then upload FieldOps.zip to your home folder.

  2. Put the web app in place

    This unzips the download, copies the WebSourceCode folder to /var/www/fieldops and gives it to the web server user:

    cd ~
    unzip -q FieldOps.zip -d fieldops-download
    sudo mkdir -p /var/www/fieldops
    sudo cp -a "$(find fieldops-download -type d -name WebSourceCode | head -1)/." /var/www/fieldops/
    sudo chown -R www-data:www-data /var/www/fieldops

    If the copy command reports an error, your download has another zip inside it. Unzip that inner zip into fieldops-download as well, then run the last three lines again.

  3. Install the PHP libraries

    The package does not include the vendor folder. Composer downloads it:

    cd /var/www/fieldops
    sudo -u www-data env COMPOSER_HOME=/tmp/fieldops-composer composer install --no-dev --optimize-autoloader --no-interaction

Check: ls /var/www/fieldops/vendor/autoload.php prints the file name, with no error.

VPS Step 4: Website and HTTPS

  1. Get the HTTPS certificate

    A free Let’s Encrypt certificate. It renews by itself.

    sudo certbot certonly --webroot -w /var/www/html -d "$DOMAIN" -m "$EMAIL" \
      --agree-tos --no-eff-email --non-interactive --deploy-hook "systemctl reload nginx"
  2. Apply the PHP settings
    cd /var/www/fieldops
    sudo cp deploy/php/99-fieldops.ini /etc/php/8.3/fpm/conf.d/
    sudo cp deploy/php/99-fieldops.ini /etc/php/8.3/cli/conf.d/
    sudo systemctl reload php8.3-fpm
  3. Turn on the website

    This fills in your domain in the ready-made nginx file and switches to it:

    cd /var/www/fieldops
    sudo sed "s/app.example.com/$DOMAIN/g" deploy/nginx/fieldops.conf | sudo tee /etc/nginx/sites-available/fieldops > /dev/null
    sudo ln -sf /etc/nginx/sites-available/fieldops /etc/nginx/sites-enabled/fieldops
    sudo rm -f /etc/nginx/sites-enabled/default
    sudo nginx -t && sudo systemctl reload nginx

Check: sudo nginx -t says syntax is ok and test is successful, and https://app.example.com (your domain) opens the FieldOps installer in your browser.

VPS Step 5: Run the Web Installer

Open your domain in a browser. It goes to the installer by itself.

  1. Screen 1: Requirements

    Every line should have a green tick. Press Continue. A red line tells you exactly what is missing; the fixes are at the end of this guide.

    Everything green: press Continue
    Everything green: press Continue
  2. Screen 2: License

    Paste your Envato purchase code. You find it on CodeCanyon under Downloads → License certificate & purchase code.

    The code shown is a sample; use your own
    The code shown is a sample; use your own
  3. Screen 3: Database

    Enter these values, then press Connect & install tables:

    FieldValue
    Database host127.0.0.1
    Port3306
    Database namefieldops
    Usernamefieldops
    PasswordThe password you chose in Step 1 (ChooseAStrongPassword is the placeholder)

    This creates all the tables and can take a few minutes. Do not close or refresh the page.

    Sample values; use your own
    Sample values; use your own
  4. Screen 4: Site & admin

    You can change all of this later:

    FieldWhat to enter
    Site nameYour business or platform name
    Site URLYour full address with https://, for example https://app.example.com
    Logo, FaviconOptional. You can add them later
    Multi-vendor marketplaceOn: other service companies can sign up and sell on your site. Off: you run one company only. You can switch later
    Company nameYour own service company
    Your name, Email, PasswordYour owner login. Write it down. This account is also the platform admin
    Sample values; use your own
    Sample values; use your own
  5. Screen 5: Finish

    You see “… is live!” and the installer locks itself. The page also shows a cron line; you add it in the next step of this guide, so you can ignore it here.

VPS Step 6: Background Jobs

FieldOps needs two things running all the time: a scheduler (reminders, renewals, backups) and a queue worker (notifications and webhooks). The package includes both files, ready to copy:

cd /var/www/fieldops
sudo cp deploy/cron/fieldops /etc/cron.d/fieldops
sudo chmod 644 /etc/cron.d/fieldops
sudo cp deploy/supervisor/fieldops-worker.conf /etc/supervisor/conf.d/
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl status

Check: the last command shows fieldops-worker as RUNNING.

VPS Step 7: Secure and Finish

  1. Lock down the settings file
    cd /var/www/fieldops
    sudo sed -i 's/^LOG_LEVEL=.*/LOG_LEVEL=warning/' .env
    grep -q '^SESSION_SECURE_COOKIE=' .env || echo 'SESSION_SECURE_COOKIE=true' | sudo tee -a .env > /dev/null
    sudo chown www-data:www-data .env
    sudo chmod 640 .env
    sudo -u www-data php artisan config:cache
    sudo -u www-data php artisan queue:restart
  2. Sign in

    Open https://app.example.com/login (your domain) with your owner login. The platform console is at /admin.

  3. Set up e-mail

    In the console: System → Platform settings. Enter your SMTP details, or invitations, password resets and invoices will not be sent. Details: Mail.

  4. Run the readiness report
    sudo -u www-data php artisan fieldops:check-production

    Fix every line marked CRITICAL. A warning for a service you do not use (SMS, WhatsApp, push, AI, a payment gateway) is fine.

  5. Delete the upload
    rm -rf ~/fieldops-download ~/FieldOps.zip

Done. After a few minutes, System → Platform health shows the scheduler heartbeat. Next: First Run and Mobile App.

VPS: Problems and Fixes

What you seeWhat to do
Unable to locate package php8.3-fpmThe server is not on Ubuntu 24.04. Reinstall it with Ubuntu 24.04 from your provider’s panel.
nginx will not start, Address already in useYour server came with Apache. Run sudo systemctl disable --now apache2, then sudo systemctl restart nginx.
certbot failsThe domain does not point at this server yet, or port 80 is blocked. Check getent hosts "$DOMAIN" and your provider’s firewall panel, then run the certbot command again.
502 Bad GatewayPHP is not running. Run sudo systemctl restart php8.3-fpm.
500 error or a blank pageMake sure vendor/autoload.php exists (Step 3). Then read the error: sudo tail -n 30 /var/www/fieldops/storage/logs/laravel.log.
A red writable line in the installerRun sudo chown -R www-data:www-data /var/www/fieldops and reload the page.
Database connection failedCheck the password from Step 1. Host 127.0.0.1 and localhost both work on a standard server, so you can try the other one.
Installer page timed out on the database screenOpen the page again and enter the same details. Choose Keep the existing data: only the missing tables are added.
Uploaded logos or photos do not showRun cd /var/www/fieldops && sudo -u www-data php artisan storage:link.
fieldops-worker shows FATALRead /var/www/fieldops/storage/logs/worker.log. Most often the installer has not been finished yet.

cPanel Step 1: Set the PHP Version

Log in to cPanel. Menu names differ a little between hosts. These are the placeholders used in this guide:

You will seeReplace it with
USERYour cPanel user name
app.example.comYour domain or subdomain
/home/USER/fieldopsThe folder you create in Step 2. Keep the name fieldops to match this guide
FieldOps.zipThe real name of your CodeCanyon download
  1. Choose PHP 8.3

    Open MultiPHP Manager (or Select PHP Version) and set your domain to PHP 8.3 or newer.

  2. Turn on the extensions

    In Select PHP Version → Extensions, tick: pdo_mysql, mbstring, openssl, tokenizer, xml, ctype, json, fileinfo, dom, curl, gd, zip, bcmath, intl. If your cPanel has no such page, most of these are already on, and the installer tells you if one is missing.

  3. Set the limits

    In MultiPHP INI Editor (or Select PHP Version → Options): memory_limit 256M, upload_max_filesize 64M, post_max_size 64M, max_execution_time 120.

cPanel Step 2: Upload FieldOps

Do not upload FieldOps into public_html. It goes one level above, so your private settings can never be opened from the web.

  1. Upload the zip

    Open File Manager and go to your home folder (/home/USER, the top level). Press Upload and choose FieldOps.zip.

  2. Extract it

    Back in File Manager, right-click the zip and choose Extract. If you now see another zip inside, extract that one too.

  3. Move the web app

    Open the extracted folders until you see WebSourceCode. Right-click it, choose Rename and call it fieldops. Right-click it again, choose Move, enter / and confirm. It is now at /home/USER/fieldops.

  4. Check the hidden files

    Press Settings (top right), tick Show Hidden Files and open fieldops. You should see artisan, .env.example and the folders app and public.

  5. Clean up

    Delete the zip and the leftover extracted folder from your home folder.

cPanel Step 3: Install the PHP Libraries

The package does not include the vendor folder, and FieldOps cannot start without it. Use the first option your hosting allows.

Option A: cPanel Terminal (easiest)

Open Terminal (under Advanced) and paste:

cd ~/fieldops
/opt/cpanel/ea-php83/root/usr/bin/php /opt/cpanel/composer/bin/composer install --no-dev --optimize-autoloader --no-interaction

If it says No such file or directory, your server uses CloudLinux. Try this instead:

cd ~/fieldops
/opt/alt/php83/usr/bin/php /opt/cpanel/composer/bin/composer install --no-dev --optimize-autoloader --no-interaction
Option B: Ask your host (no Terminal)

Open a support ticket and send this message:

Please run this for my account, using PHP 8.3:
cd /home/USER/fieldops && composer install --no-dev --optimize-autoloader --no-interaction
Option C: A one-time cron job (no Terminal)
  1. Add the job

    Open Cron Jobs, choose Once Per Minute and paste this as the command:

    cd /home/USER/fieldops && HOME=/home/USER /opt/cpanel/ea-php83/root/usr/bin/php /opt/cpanel/composer/bin/composer install --no-dev --optimize-autoloader --no-interaction >> storage/logs/composer.log 2>&1
  2. Wait, then delete it

    After a few minutes, check that vendor/autoload.php exists in File Manager. Then delete this cron job. If nothing appears, read storage/logs/composer.log.

Check: in File Manager, /home/USER/fieldops/vendor/autoload.php exists.

cPanel Step 4: Point the Domain and Turn On HTTPS

Your domain must open the public folder inside fieldops. A subdomain is the easiest way, and it leaves any site you already have untouched.

  1. Using a subdomain (recommended)

    Open Domains → Create A New Domain. Enter app.example.com, untick Share document root, set the document root to fieldops/public and press Submit.

  2. Or: a domain you already added

    Open Domains → Manage next to the domain and set the new document root to fieldops/public. If cPanel does not allow this for your main domain, use a subdomain or ask your host to change it.

  3. Turn on HTTPS

    Open SSL/TLS Status and press Run AutoSSL. Wait until your domain shows a valid certificate.

Check: https://app.example.com (your domain) opens the FieldOps installer. If you see a 500 error or a file list, see Problems and Fixes.

cPanel Step 5: Create the Database

  1. Run the wizard

    Open MySQL Database Wizard. Enter a database name such as fieldops and press Next.

  2. Create the user

    Enter a user name such as fieldops and a strong password. Write the password down. Press Create User.

  3. Give it access

    Tick ALL PRIVILEGES and press Next Step.

  4. Write down the full names

    cPanel adds your user name in front of both names, so they become USER_fieldops. You need these full names in the next step.

cPanel Step 6: Run the Web Installer

Open your domain in a browser. It goes to the installer by itself. You never create the settings file (.env) by hand; the installer does it.

  1. Screen 1: Requirements

    Every line should have a green tick. Press Continue. A red line tells you exactly what is missing; the fixes are at the end of this guide.

    Everything green: press Continue
    Everything green: press Continue
  2. Screen 2: License

    Paste your Envato purchase code. You find it on CodeCanyon under Downloads → License certificate & purchase code.

    The code shown is a sample; use your own
    The code shown is a sample; use your own
  3. Screen 3: Database

    Enter these values, then press Connect & install tables:

    FieldValue
    Database hostlocalhost
    Port3306
    Database nameUSER_fieldops, the full name from Step 5
    UsernameUSER_fieldops, the full name from Step 5
    PasswordThe password from Step 5

    This creates all the tables and can take a few minutes. Do not close or refresh the page.

    Sample values; use your own
    Sample values; use your own
  4. Screen 4: Site & admin

    You can change all of this later:

    FieldWhat to enter
    Site nameYour business or platform name
    Site URLYour full address with https://, for example https://app.example.com
    Logo, FaviconOptional. You can add them later
    Multi-vendor marketplaceOn: other service companies can sign up and sell on your site. Off: you run one company only. You can switch later
    Company nameYour own service company
    Your name, Email, PasswordYour owner login. Write it down. This account is also the platform admin
    Sample values; use your own
    Sample values; use your own
  5. Screen 5: Finish

    You see “… is live!” and the installer locks itself. The page also shows a cron line; you add it in the next step of this guide, so you can ignore it here.

cPanel Step 7: Add the Cron Jobs

Shared hosting cannot keep a program running all the time, so two cron jobs do the background work. Open Cron Jobs and add both with Once Per Minute.

Job 1, the scheduler (reminders, renewals, backups):

cd /home/USER/fieldops && /opt/cpanel/ea-php83/root/usr/bin/php artisan schedule:run >> /dev/null 2>&1

Job 2, the queue (notifications and webhooks):

cd /home/USER/fieldops && /opt/cpanel/ea-php83/root/usr/bin/php artisan queue:work --queue=notifications,webhooks,default --stop-when-empty --tries=3 --max-time=55 >> /dev/null 2>&1

On CloudLinux servers (Option A in Step 3 told you), use /opt/alt/php83/usr/bin/php instead. If you chose another PHP version, change 83 to match it.

cPanel Step 8: Secure and Finish

  1. Adjust the settings file

    In File Manager, right-click /home/USER/fieldops/.env and choose Edit. Change LOG_LEVEL=debug to LOG_LEVEL=warning, add this line at the end and save:

    SESSION_SECURE_COOKIE=true
  2. Sign in

    Open https://app.example.com/login (your domain) with your owner login. The platform console is at /admin.

  3. Set up e-mail

    In the console: System → Platform settings. Enter your SMTP details, or invitations, password resets and invoices will not be sent. cPanel’s Email Accounts page gives you an address and its SMTP settings. Details: Mail.

  4. Check the background jobs

    After a few minutes, System → Platform health shows the scheduler heartbeat.

Done. Next: First Run and Mobile App.

cPanel: Problems and Fixes

What you seeWhat to do
500 error or a blank pageUsually the vendor folder is missing: repeat Step 3. Also check the PHP version from Step 1. The error details are in fieldops/storage/logs/laravel.log.
A file list, or 403 ForbiddenThe domain does not point at fieldops/public: repeat Step 4. Also check that public/.htaccess exists (with Show Hidden Files on).
A red writable line in the installerIn File Manager, select the folder, press Permissions and set 755 (storage and bootstrap/cache, including their subfolders). Use 775 only if it still fails. Never use 777.
A red PHP extension lineTurn it on in Step 1, or ask your host to enable it, then reload the page.
Database connection failedUse the full names with your user prefix (USER_fieldops) and host localhost. Check that the user has ALL PRIVILEGES.
Installer page timed out on the database screenOpen the page again and enter the same details. Choose Keep the existing data: only the missing tables are added. If it keeps timing out, ask your host to raise the time limit.
Composer says composer.json needs a higher PHPThe command used an older PHP. Use the full PHP path from Step 3.
Uploaded logos or photos do not showThe public/storage link is missing, or the host blocks links. In Terminal run cd ~/fieldops && /opt/cpanel/ea-php83/root/usr/bin/php artisan storage:link, or ask your host to allow it.
Reminders or notifications are not sentCheck both cron jobs from Step 7 and their PHP path. To see the error, replace /dev/null in the job with storage/logs/cron.log for a few minutes.