Installation Guide
RepairFlow v1.0.0 — Follow these steps to install the system on your server. The web installer handles everything — no SSH or command-line knowledge required.
1. Server Requirements
Software Requirements
| Component | Minimum | Recommended |
|---|---|---|
| PHP | 8.2 | 8.3+ with OPcache |
| Database | PostgreSQL 14 | PostgreSQL 15 or 16 |
| Web Server | Apache 2.4 or Nginx 1.18 | Nginx with SSL/TLS |
| Composer | 2.x | Latest 2.x |
Required PHP Extensions
| Extension | Purpose | |
|---|---|---|
pdo | Database abstraction | Required |
pdo_pgsql | PostgreSQL driver | Required |
pgsql | PostgreSQL native functions | Required |
curl | HTTP requests | Required |
gd | Image processing | Required |
json | JSON support | Required |
mbstring | Multi-byte strings | Required |
openssl | Encryption | Required |
tokenizer | PHP tokenizer | Required |
xml | XML parsing | Required |
zip | ZIP archive handling | Required |
fileinfo | File type detection | Required |
bcmath | Precision arithmetic | Required |
intl | Internationalization | Required |
The web installer will check all extensions and display which ones are missing before
you proceed. You can verify them yourself with: php -m | grep -E 'pdo|curl|gd|zip'
Optional (Production)
- Supervisor — runs the queue worker (
php artisan queue:work) to process background jobs such as push notifications and email delivery. - Redis — can replace the database cache/queue driver for better performance. The database driver is used by default and works well for most shops.
- SSL certificate — required for PWA installation prompt and push notification features. Free certificates available via Let's Encrypt / Certbot.
- Node.js 18+ / npm — only needed if you want to rebuild the frontend assets. Pre-compiled assets are included in the package.
2. Upload Files to Your Server
What to upload
Extract the purchased ZIP file. Inside you will find the application folder
(named repairflow/ or similar). Upload all contents to your server's
document root or a subdirectory. Typical locations:
- Shared hosting:
/public_html/ - VPS / Dedicated:
/var/www/repairflow/ - Subdomain: point the subdomain's document root to the
public/subdirectory
public/ folder inside the application.
For example: if you upload files to /var/www/repairflow/, set the document root to
/var/www/repairflow/public/. Never expose the root of the application directly.
Nginx configuration example
server {
listen 80;
server_name your-domain.com;
root /var/www/repairflow/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
Apache (.htaccess)
A .htaccess file is included in the public/ folder.
Ensure mod_rewrite is enabled on your Apache installation.
In your Apache VirtualHost config, set:
DocumentRoot /var/www/repairflow/public
<Directory /var/www/repairflow/public>
AllowOverride All
Require all granted
</Directory>
3. File & Directory Permissions
Before running the installer, ensure the web server user (typically www-data
on Ubuntu/Debian or nginx/apache on CentOS) has write access
to two directories:
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache
Or, if you are not sure of the web server user, use 777 (less secure but works everywhere):
chmod -R 777 storage bootstrap/cache
4. Web Installer — 7 Steps
System Requirements Check
The installer checks your PHP version and all required extensions. Each item shows a green checkmark or a red cross.
If any extension is missing, install it via your hosting control panel or with
sudo apt install php8.2-pgsql php8.2-gd php8.2-curl php8.2-zip
on Ubuntu. Then refresh the page.
Click Continue only when all checks are green.
Directory Permissions Check
Verifies that storage/ and bootstrap/cache/ are writable
by the web server.
If either shows a red error, run the chmod commands from Step 3 above,
then click Re-check.
Database Configuration
Enter your PostgreSQL connection details:
- Host — usually
127.0.0.1orlocalhost - Port — default is
5432 - Database name — e.g.
gara_manager - Username — PostgreSQL user with CREATE DATABASE privileges
- Password — the user's password
Click Test Connection. The installer will:
connect to PostgreSQL, and if the named database does not exist, attempt to create it
automatically (requires sufficient privileges). Your credentials are saved in the
session — not written to .env yet.
Site Information
Configure basic site details that will be written to .env:
- Shop / App Name — shown in the browser tab and emails
- App URL — full URL including
https://(e.g.https://gara.yourcompany.com) - Timezone — select from the dropdown (e.g. Asia/Ho_Chi_Minh)
Admin Account
Create the primary administrator account:
- Phone number — used to log in (required)
- Password — minimum 8 characters
- Email — optional, but required later if you want to use the Forgot Password feature
- Full name
This is the only account created by the installer. You can add more staff accounts from Admin → Users after installation.
Additionally, the installer creates three demo staff accounts (see the Demo Accounts section). Change their passwords after your first login.
Installing — Real-time Progress
Click "Start Installation". The installer executes the following steps in sequence and streams each result to the browser:
- 1Reconnect to the database with your credentials
- 2Generate a secure
APP_KEY(if not already set) - 3Run database migrations — creates all tables and indexes
- 4Seed roles and permissions (
RolePermissionSeeder) - 5Create your admin account and the three demo staff accounts
- 6Create the public storage symlink (
storage:link) - 7Write final
.envfile (APP_ENV=production) - 8Mark the installation as complete (lock file + database flag)
- 9Clear config and cache
Finish
Installation complete. The installer shows a success screen with a "Go to Login" button.
The /install/* routes are now permanently
locked. If you navigate to /install again you will be redirected
to the login page.
5. Demo Accounts
The installer automatically creates three demo staff accounts alongside your admin account. These accounts are useful for exploring role-based access before setting up your real team. Change their passwords immediately after first login.
6. Post-Install Checklist
Complete these steps before inviting your team
-
1Change the admin password — click your avatar in the top-right corner → My Profile → change password.
-
2Delete or update demo accounts — go to Admin → Users and remove the demo accounts (0900000002, 0900000003, 0900000004) or reset their passwords.
-
3Set shop information — go to Admin → Settings → General: enter your shop name, phone number, address, and upload your logo (displayed on invoices and the PWA splash screen).
-
4Configure SMTP email — go to Admin → Settings → Email (SMTP) to enable the Forgot Password feature. Without SMTP, password reset emails cannot be sent. See the Email & SMTP section of the User Guide for Gmail setup instructions.
-
5Add product categories — go to Admin → Settings → Product Categories and create your categories (e.g. Parts, Materials, Services).
-
6Add suppliers — go to Admin → Settings → Suppliers and enter your parts suppliers.
-
7Create warehouses and locations — go to Admin → Settings → Warehouses to set up at least one warehouse (e.g. "Main Warehouse") and storage locations (e.g. Shelf A, Shelf B).
-
8Configure payment accounts — go to Admin → Settings → Payment Accounts and add your cash register, bank accounts, or e-wallet accounts.
-
9Add products and services — go to Admin → Products and create your catalog. Import initial stock via Admin → Inventory → Purchase Orders.
-
10Create staff accounts — go to Admin → Users and invite your receptionists, technicians, and accountants. Assign the appropriate role to each.
7. Troubleshooting Common Errors
/var/log/nginx/error.log or /var/log/apache2/error.log).
Also ensure storage/ and bootstrap/cache/ are writable.
If you see "No application encryption key has been specified," the installer has not
run yet — go to /install.
sudo systemctl status postgresql to verify it is running.
On shared hosting: confirm PostgreSQL is available (not just MySQL).
ALTER USER youruser CREATEDB;) or create the database manually first,
then re-enter credentials in Step 3 of the installer.
SESSION_DRIVER is valid — the installer uses
the database driver.
pdo_pgsql missing). Install it with
sudo apt install php8.2-pgsql, restart PHP-FPM
(sudo systemctl restart php8.2-fpm), then start the installer again.
chmod -R 775 storage bootstrap/cache and
chown -R www-data:www-data storage bootstrap/cache
(replace www-data with your web server user).
Then click "Re-check Permissions" in the installer.
storage/app/installed and remove the record
with key = 'app_installed' from the settings database table
(or drop and recreate the entire database). The installer will be accessible again at
/install.
public/ subdirectory.
Also verify that URL rewriting is active:
on Nginx, confirm try_files $uri $uri/ /index.php?$query_string is in
your server block. On Apache, confirm mod_rewrite is enabled and
AllowOverride All is set for the public directory.
https:// and your SSL certificate is valid (not self-signed).
On HTTP, the browser will never show the install prompt regardless of the manifest.
php -v), the exact error message, and which step of the
installer failed.