Home›Fixora›Quickstart
Fixora · Quickstart

Fixora Quickstart, as shipped in the download

The QUICKSTART.txt in the download — the same steps your delivery email carries.

FIXORA — QUICKSTART
===================
CMMS / Preventive-Maintenance & Work-Order Manager — self-hosted PHP + MySQL/SQLite.

REQUIREMENTS
------------
  - PHP 8.0+ with extensions: pdo, pdo_sqlite (or pdo_mysql), fileinfo
  - MySQL 5.7+ OR SQLite 3 (SQLite requires no extra setup)
  - A web server (Apache with mod_rewrite, or Nginx with try_files)


SHARED HOSTING / CPANEL (RECOMMENDED FOR MOST BUYERS)
------------------------------------------------------
1. Upload the CONTENTS of the `app/` folder to your web root (e.g. public_html/)
   or a subdirectory (e.g. public_html/fixora/).

2. Make sure this directory is writable by PHP:
     data/            (database + asset photos live here)
   Via cPanel File Manager: right-click -> Permissions -> 755 or 775.

3. Visit https://yourdomain.com/install/ in your browser.

4. Fill in the installer:
     - Database: choose MySQL (host/name/user/pass) or SQLite (no setup)
     - Company name + currency symbol
     - Labor rate per hour (prices work-order labor minutes in reports)
     - Due-soon window (PM due within this many days is flagged — default 7)
     - Timezone ("today" for PM due math is computed in this zone)
     - Admin name, email, and password

5. The installer writes config.php and sends you to the login page.

6. Sign in, then add locations + assets — or click "Load demo data" on the
   dashboard to explore a realistic facilities operation first.


VPS / SELF-HOSTED (APACHE)
--------------------------
  <VirtualHost *:80>
    DocumentRoot /var/www/fixora/app
    <Directory /var/www/fixora/app>
      AllowOverride All
      Require all granted
    </Directory>
  </VirtualHost>

Run the web installer as above, or use the CLI seeder:
  php bin/demo.php     # loads demo data (login: admin@fixora.app with the one-time password it prints)


NGINX
-----
  root /var/www/fixora/app;
  index index.php;
  location ~ ^/(src|data|bin|tests|controllers|deploy|cron)/ { deny all; }
  location ~ ^/views/.+\.php$ { deny all; }
  location ~ (^|/)(config\.php|\.demo-mode)$|\.sqlite$ { deny all; }
  location = /install/ { rewrite ^ /install/index.php last; }
  location / { try_files $uri /index.php?$query_string; }
  location ~ \.php$ { try_files $uri =404; include fastcgi_params; fastcgi_pass unix:/run/php/php8.3-fpm.sock;
                      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }


DOCKER (QUICK TEST)
-------------------
  docker run --rm -p 8080:8080 -v "$(pwd)/app:/var/www/html" -w /var/www/html \
    php:8.3-cli php -S 0.0.0.0:8080 router.php
  Then visit http://localhost:8080/install/


RUN THE TESTS
-------------
  php app/tests/run.php
  # or:
  docker run --rm -v "$PWD/app:/app" -w /app php:8.3-cli php tests/run.php


DAILY USE
---------
  * Dashboard      — assets operational/down, open work orders, overdue PM,
                     this month's downtime and maintenance cost.
  * Assets         — every machine with its history, open WOs, PM schedules,
                     downtime log, photo, and lifetime cost.
  * Work orders    — open -> in-progress -> done/cancelled, enforced. Done
                     requires a resolution note; canceled cannot be reopened.
  * PM schedules   — next due = last done + interval, computed live (no cron).
                     "Log completion" creates a completed preventive WO and
                     advances the schedule in one click.
  * Cost report    — month-over-month and per-asset downtime + cost. Labor is
                     minutes x your Settings hourly rate; money is integer cents.
  * Print tags     — Assets -> Print tags: a print-CSS sheet of QR asset tags.
                     Scanning opens the asset page after sign-in.

  PM DUE MATH (deterministic, no cron):
    next due  = last done + interval days
    overdue   = next due before today (business timezone)
    due soon  = due within the due-soon window (Settings, default 7 days)


POST-INSTALL SECURITY CHECKLIST
--------------------------------
  [ ] config.php is protected (the .htaccess does this automatically)
  [ ] data/ is not web-accessible (.htaccess blocks it automatically)
  [ ] Use HTTPS in production
  [ ] Keep PHP updated

Full docs in README.md.

LOOKING AFTER IT (from 4.0)
---------------------------
  * Updates: open Updates in the menu, save your license key once, press Check for updates.
    Reaching 4.0 from 3.x is the last update by hand: replace the files; config.php and data/ stay.
  * Sample data: the installer offers to start with a sample; remove it later with one click.
  * Backups: "Back up once a day by itself" is on by default (/restore); add an S3-compatible bucket there for
    a copy somewhere else. The Health page (/health) says whether all of this is working.
  * On Nginx: use the NGINX lines above; they open the installer and keep data/ private.
  * One-line install for technical owners:
    curl -fsSL https://ownware.io/install.sh | sh -s -- fixora <your license key>

← Back to Fixora · Manual · API · Test run