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
1
Install the Docker extension
In Plesk, go to Extensions → Extensions Catalog and search for Docker. Click Install (or Open if already installed).
The Docker extension requires Plesk Obsidian 18.0+ and a server with KVM or bare-metal virtualisation. It is not available on shared hosting plans.
Install PropOps
1
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.2
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.
3
Get your admin credentials
View the web container logs in Plesk’s Docker interface, or run:You will see output like:
Set up a domain proxy in Plesk
To serve PropOps through your domain with HTTPS:1
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).2
Configure Apache & Nginx proxy
Go to Apache & nginx Settings for the domain and add the following under Additional nginx directives:
3
Enable SSL/TLS
Go to SSL/TLS Certificates for the domain and issue a free Let’s Encrypt certificate. Plesk handles renewal automatically.
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:
Both are 64-character hex strings (32 random bytes). They are generated once and must not be changed after data has been encrypted.
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:
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:
The seeder grants all API and page permissions to the SysOps role. If a SysOps user already exists, seeding is skipped.
You can customise the default credentials by setting environment variables before the first boot:
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.