Reading the repo
Reading the repo
How to install on Windows
Open Source Point of Sale is a web based point of sale application written in PHP using CodeIgniter framework. It uses MySQL as the data back end and has a Bootstrap 3 based user interface. If you like this project, please give it a star! Doing so helps maintain Popular OSS status for the project.
Saved setup from 6 h ago
Will it work on Windows?
Heads-upBuilding it yourself? It also needs 3 settings in .env (1 secret).
docs/INSTALL.md8.2 (>= 8.2.35), 8.3 (>= 8.3.36), 8.4 (>= 8.4.27), and 8.5 (>= 8.5.12) are supported. PHP version ≤ 8.1 is NOT supported. Please note that PHP needs to have the extensions php-json, php-gd, php-bcmath, php-intl, php-openssl, php-mbstring, php-curl and php-xml installed and enabled. An unstable master build can be downloaded in the releases section.5.7 is supported, also MariaDB replacement 10.x is supported and might offer better performance.2.4 is supported. Nginx should work fine too, see wiki page here.⚠️ CRITICAL: OpenSourcePOS validates the Host header to prevent Host Header Injection attacks. You MUST configure app.allowedHostnames for production deployments. If not configured, the application will fail to start.
Add to your .env file:
# Comma-separated list of allowed hostnames (no protocols or ports)
app.allowedHostnames = 'yourdomain.com,www.yourdomain.com'
For local development:
app.allowedHostnames = 'localhost'
If you see this error at startup:
RuntimeException: Security: allowedHostnames is not configured.
Solution: Add app.allowedHostnames to your .env file with your domain(s).
Why this matters:
If your installation is behind a proxy with SSL offloading, set:
FORCE_HTTPS = true
First of all, if you're seeing the message system folder missing after launching your browser, that most likely means you have cloned the repository and have not built the project. To build the project from a source commit point instead of from an official release check out Building OSPOS. Otherwise, continue with the following steps.
.env does not exist, copy .env.example to .env..env and modify credentials to connect to your database if needed.public dir via the browser.CI_ENVIRONMENT variable to production in the .env filedisplay_errors is disabled by default. Create an app/Config/.env file from the .env.example to enable it in a development environment.OSPOS can be deployed using Docker on Linux, Mac, and Windows. Locally or on a host (server). This setup dramatically reduces the number of possible issues as all setup is now done in a Dockerfile. Docker runs natively on Mac and Linux. Windows requires WSL2 to be installed. Please refer to the Docker documentation for instructions on how to set it up on your platform.
Be aware that this setup is not suited for production usage! Change the default passwords in the compose file before exposing the containers publicly.
[!NOTE] All commands in this guide must be run from the repository root directory, not from
docs/.
First create a regular .env file in the project root (a missing one is not
auto-created as a file — see the compose create_host_path: false setting). Copy
the shipped example:
cp .env.example .env
Then start the containers:
docker-compose up
Since OSPOS version 3.3.0 the Docker installation offers a reverse proxy based on Nginx with a Let's Encrypt TLS certificate termination (aka HTTPS connection).
Let's Encrypt is a free certificate issuer, requiring a special installation that this Docker installation would take care of for you.
Any Let's Encrypt TLS certificate renewal will be managed automatically, therefore there is no need to worry about those details.
Before starting your installation, you should edit the docker/.env file and configure it to contain the correct MySQL/MariaDB and phpMyAdmin passwords (don't use the defaults!).
You will also need to register to Let's Encrypt. Configure your host domain name and Let's Encrypt email address in the docker/.env file.
The variable STAGING needs to be set to 0 when you are confident your configuration is correct so that Let's Encrypt will issue a final proper TLS certificate.
Follow local install steps, but instead use
docker/install-nginx.sh
Do not use below command on live deployments unless you want to tear everything down. All your disk content will be wiped!
docker/uninstall.sh
Sign up through our referral link to get a $100, 60-day credit.
Create an Ubuntu 20.04+ or 22.04+ droplet
SSH into your server: ssh root@<your-droplet-ip>
Run the one-line installer:
curl -sSL https://raw.githubusercontent.com/opensourcepos/opensourcepos/master/tools/scripts/install-ubuntu.sh | sudo bash
A shorter URL (
curl -sSL https://opensourcepos.org/install | sudo bash) is also provided once theopensourcepos.org/installredirect is configured.
The installer will:
Interactive Mode (Recommended for first-time users):
When run without environment variables, the installer will prompt you:
pos.example.com)The prompts require a real terminal (standard input attached to a tty), so download the script first and run it directly — do not pipe it, or the installer detects a non-interactive session and skips the prompts:
# 1. Download the installer
curl -sSL https://raw.githubusercontent.com/opensourcepos/opensourcepos/master/tools/scripts/install-ubuntu.sh -o install-ospos.sh
# 2. Run it interactively (standard input stays attached to your terminal)
sudo bash install-ospos.sh
# Script will ask:
# - Configure SSL? (y/n)
# - Domain name: pos.example.com
# - Email for Let's Encrypt: admin@example.com
Non-Interactive Mode (for automation):
# Development (no SSL)
curl -sSL https://raw.githubusercontent.com/opensourcepos/opensourcepos/master/tools/scripts/install-ubuntu.sh | APACHE_SERVER_NAME=localhost sudo -E bash
# Production with Let's Encrypt SSL
curl -sSL https://raw.githubusercontent.com/opensourcepos/opensourcepos/master/tools/scripts/install-ubuntu.sh | APACHE_SERVER_NAME=pos.example.com SSL_EMAIL=admin@example.com sudo -E bash
# Custom database password
curl -sSL https://raw.githubusercontent.com/opensourcepos/opensourcepos/master/tools/scripts/install-ubuntu.sh | DB_PASS=securepassword APACHE_SERVER_NAME=pos.example.com SSL_EMAIL=admin@example.com sudo -E bash
Environment variables:
DB_HOST - Database host (default: localhost)DB_NAME - Database name (default: ospos)DB_USER - Database user (default: ospos)DB_PASS - Database password (default: auto-generated)MYSQL_ROOT_PASS - MariaDB root password (default: empty/no password)OSPOS_DIR - Installation directory (default: /var/www/ospos)OSPOS_VERSION - OSPOS version to install (default: latest stable release)PHP_VERSION - PHP version (default: 8.2)APACHE_SERVER_NAME - Server hostname (default: localhost, or set interactively)SSL_EMAIL - Email for Let's Encrypt. Enables production SSL with auto-renewal only when a public hostname is also provided (via SSL_DOMAIN or a non-local APACHE_SERVER_NAME); SSL_EMAIL alone has no effect and the installer falls back to plain HTTP.SSL_DOMAIN - Domain for the SSL certificate. With SSL_EMAIL it uses Let's Encrypt; on its own it generates a self-signed certificate. Also serves as the installer's hostname when APACHE_SERVER_NAME is not set.Testing: This installer is tested with each commit via our CI workflow. A fresh Ubuntu container is spawned, the script runs to completion, and basic sanity checks verify the installation. For production deployments, we recommend testing on a staging server first. If you encounter issues, please open an issue with your server version and error output.
For other cloud providers or manual installation, see the detailed installation guide in the wiki.
Important: Change the default password after first login!
Then run powershell -ExecutionPolicy Bypass -File .\setup.ps1. It stops at the first error and is safe to run again. Servers and tests aren't started; it lists them at the end. Read it first.
Needs Git: winget install Git.Git
git clone https://github.com/opensourcepos/opensourcepos.git cd opensourcepos
Node.js >=22, PHP >=8.2.35 <8.3 || >=8.3.36 <8.4 || >=8.4.27 <8.5 || >=8.5.12 <8.6
winget install CoreyButler.NVMforWindows nvm install lts nvm use lts scoop install php composer # needs scoop: https://scoop.sh
Fill in secrets: DISALLOW_PASSWORD_CHANGE
Copy-Item .env.example .env
npm ci composer install
No reports for Windows yet.
Opens a chat with this manual already filled in, for Windows. It uses your own account; gitmanual sends nothing.