Via Docker Compose
Run UXWizz, its database, and scheduled tasks with Docker Compose.
You need:
A server with Docker and the Compose plugin, using Linux containers.
Terminal access with permission to create containers and volumes. These commands use Bash and OpenSSL.
A hostname and an HTTPS reverse proxy for public access.
Video walkthrough
Watch the Docker Compose installation video. English captions are also available.
Running UXWizz via docker compose
Create a private working directory outside your web root:
umask 077 mkdir uxwizz cd uxwizzCopy and run this command to create
.envwith random passwords and an application key:( umask 077 set -euC db_password=$(openssl rand -hex 32) root_password=$(openssl rand -hex 32) app_key=$(openssl rand -base64 32) printf 'UXWIZZ_DB_PASSWORD=%s\nUXWIZZ_DB_ROOT_PASSWORD=%s\nUXWIZZ_APP_KEY=%s\n' \ "$db_password" "$root_password" "$app_key" > .env )The command keeps the values private and stops if
.envalready exists. Do not share this file in support messages.Save this as
compose.ymlin the same directory:
Validate the configuration, then start the services:
All three services should be running. The database should show healthy.
Accessing UXWizz
Connect your hostname
Configure your HTTPS reverse proxy. Replace
stats.example.comwith your hostname.SettingValuePublic address
https://stats.example.comForward to
http://127.0.0.1:8000Keep port 8000 private. All public traffic must pass through your proxy. Configure it to:
Replace forwarded client-IP and protocol headers with values it determines.
Preserve the
Hostheader and forwardAuthorization.
Add these lines to
.env, using your hostname:Apply the changes:
Use
up -dafter editing.env;restartdoes not load new values.
Complete setup
Check that HTTPS works before entering passwords on a public server.
Open the setup page, using your hostname:
Create an administrator password of at least 12 characters, then sign in as admin. The database is already configured.
Add the tracking code to your website.
Visit your website and check that the visit appears in Visitors.
Check scheduled tasks
Open Settings → Scheduled Tasks. Check Next run for active tasks, then check Runs after a task is due.
An empty history is normal until an enabled task is due. The scheduler starts checking after browser setup is complete.
Troubleshooting and updates
Run these commands on the server:
Database connection error: check the shared application credentials. Changing
.envdoes not change passwords inside an existing MariaDB volume. Restore the correct settings or have the database administrator rotate them deliberately.No task history: complete setup and check Next run in Settings → Scheduled Tasks. If an active task is overdue, inspect scheduler logs. A stopped container needs server access.
Permission error: check the affected volume and PHP ownership. Do not use world-writable permissions.
Address already in use: choose an unused
UXWIZZ_HTTP_PORTand update the reverse-proxy target.
Tip: Using Bind Volumes
To use host folders with the Compose setup above, follow the steps below. Run the commands beside compose.yml, in a dedicated directory outside your web root. This needs server access.
Prepare the application folder for a new installation
Create an empty application folder:
Then add the mounts in the next section. On first startup, the webserver image copies the application into the empty ./html bind mount. Manual copying is optional for this new application folder. Separate PHP/Apache configuration mounts need the preparation described below.
For an existing named volume, use the migration steps below. Use a new empty folder for a new installation; do not delete files from an existing folder.
Use the folder in Compose
Replace html:/var/www/html with ./html:/var/www/html in both services. Keep the other service settings:
This is a fragment to merge into your existing file, not a complete Compose file. The scheduler must see the same application files as the web server.
Check browser setup and Settings → Scheduled Tasks as described above. The image sets application ownership to www-data and directory/file modes to 0750/0640 on startup. This also changes the host folder's ownership and permissions on Linux.
Move an existing installation from a named volume
Bind-mount PHP, Apache, or database files
Last updated
Was this helpful?
