PropOps Web uses Docker Compose to bring up the web server, MariaDB database, and phpMyAdmin in a single command. The first run automatically creates your environment file, generates encryption keys, sets up the database, and seeds a default admin account.Documentation Index
Fetch the complete documentation index at: https://help.propops.app/llms.txt
Use this file to discover all available pages before exploring further.
PropOps Web is distributed as a Docker image. You will receive a
docker-compose.yml file as part of your licence. Contact hello@propops.app if you have not received yours.Installation
- Plesk (Recommended)
- Command Line
If your server uses Plesk, you can install PropOps through the Plesk Docker Manager — the easiest way to get up and running.PropOps Web is now accessible at
Prerequisites
Install PropOps
Upload docker-compose.yml
Using Plesk’s File Manager (or SFTP), create a directory on your server — for example
/opt/propops/ — and upload the docker-compose.yml file provided by PropOps.Start the containers
In Plesk, open a terminal from the Docker extension or use Tools & Settings → SSH Terminal:The containers will start and appear in Plesk’s Docker Manager, where you can monitor their status, view logs, and restart them.
Set up a domain proxy in Plesk
To serve PropOps through your domain with HTTPS:Add or select a domain
In Plesk, go to Websites & Domains and select the domain you want to use for PropOps (e.g.
propops.yourcompany.com).Configure Apache & Nginx proxy
Go to Apache & nginx Settings for the domain and add the following under Additional nginx directives:
https://propops.yourcompany.com.What happens on first boot
When you rundocker compose up for the first time, the entrypoint script automatically performs the following setup:
1. Environment file created
Your.env configuration file is created from .env.example and stored in docker-data/config/.env. This file persists across container rebuilds — updating the application code does not overwrite your configuration.
2. Encryption keys generated
Two cryptographic keys are auto-generated and written into your.env:
| Key | Purpose |
|---|---|
PII_ENCRYPTION_KEY | Encryption key for personally identifiable information in the database (names, emails, phone numbers) and job files (documents, photos, videos, GDPR reports) |
PII_HMAC_KEY | HMAC key for searchable encrypted field hashes |
3. Database initialised
MariaDB applies the schema and all migrations automatically from the SQL files mounted into/docker-entrypoint-initdb.d/. This only happens on the very first boot when the database is empty.
4. Upload directories created
All required subdirectories underuploads/ are created with correct ownership (www-data) and permissions:
| Directory | Purpose |
|---|---|
avatars | User profile photos |
branches | Branch logos and assets |
cache/thumbnails | Generated image thumbnails |
case-notes | Job case note attachments |
certifications | Contractor certification documents |
dashboard-banners | Custom dashboard banner images |
gdpr | GDPR data export reports |
jobs | Job photos and documents |
notices/headers | Notice board header images |
temp/chunks | Temporary file upload chunks |
thumbnails/avatars | Resized avatar thumbnails |
thumbnails/branch-logos | Resized branch logo thumbnails |
5. Security rules applied
.htaccess files are placed into sensitive upload directories to deny direct web access. Files in these directories are only accessible through authenticated API endpoints:
uploads/case-notes/— denieduploads/certifications/— denieduploads/gdpr/— deniedextensions/— denieddocker-data/config/— denied
6. Admin account seeded
A default SysOps administrator account is created with a randomly generated 20-character password:| Field | Default value |
|---|---|
web@propops.app | |
| Password | Randomly generated (printed once in container logs) |
| Role | SysOps (full system access) |
SEED_SYSOPS=false to disable automatic user creation entirely.
Directory structure
After the first boot, your project directory will contain adocker-data/ folder with all persistent data:
The
docker-data/ directory contains your database, uploads, and secrets — all specific to your installation. Back it up regularly.Data persistence
All data indocker-data/ is stored on your host filesystem. This means:
- Container rebuilds do not affect your data — updating the PropOps image does not touch uploads, database, or configuration.
- Image updates do not overwrite your
.envor uploaded files. - Backing up is straightforward — copy the
docker-data/directory to capture everything.
Services
Docker Compose starts three services:| Service | Image | Port | Purpose |
|---|---|---|---|
web | ghcr.io/propops-technologies-ltd/propops-web | 8080 → 80 | PHP 8.5 / Apache — the PropOps application |
db | mariadb:10.11 | 3306 | MariaDB database server |
phpmyadmin | phpmyadmin/phpmyadmin | 8081 → 80 | Web-based database management |