improved readme
This commit is contained in:
parent
de848c5b31
commit
ef3056fd2b
108
README.md
108
README.md
|
@ -1,7 +1,7 @@
|
||||||
# Odoo Pos Distribution
|
# Odoo Point of Sale - PoS - Distribution
|
||||||
|
|
||||||
Dockerfiles, Docker Compose and Kubernetes configuration for running an Odoo based PoS
|
Dockerfiles, Docker Compose and Kubernetes configuration for running an Odoo based PoS
|
||||||
in container and Kubernets.
|
in containers.
|
||||||
|
|
||||||
## Quickstart
|
## Quickstart
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ Continue with "Odoo PoS configuration"
|
||||||
The provided YAML files have been developed and tested with [k3s](https://k3s.io/) on amd64 and arm64.
|
The provided YAML files have been developed and tested with [k3s](https://k3s.io/) on amd64 and arm64.
|
||||||
Installation will happen in the namespace `pos`.
|
Installation will happen in the namespace `pos`.
|
||||||
|
|
||||||
1. Install [k3s](https://k3s.io/) (any other Kubernetes should work as well)
|
1. Install [k3s](https://k3s.io/), f.e. using [k3sup](https://k3sup.dev/) (any other Kubernetes should work as well)
|
||||||
1. Install [local-path-provisioner](https://github.com/rancher/local-path-provisioner)
|
1. Install [local-path-provisioner](https://github.com/rancher/local-path-provisioner)
|
||||||
1. Apply the deployment YAMLs: `kubectl apply -f deployment/`
|
1. Apply the deployment YAMLs: `kubectl apply -f deployment/`
|
||||||
|
|
||||||
|
@ -26,17 +26,17 @@ Continue with "Odoo PoS configuration"
|
||||||
|
|
||||||
1. Connect to Odoo and create a new database
|
1. Connect to Odoo and create a new database
|
||||||
On Kubernetes the Ingress defines the hostnames `pos` and `iotbox`
|
On Kubernetes the Ingress defines the hostnames `pos` and `iotbox`
|
||||||
1. Install Odoo Apps:
|
1. Install some Odoo Addons:
|
||||||
* "Point of Sale"
|
* "Point of Sale"
|
||||||
* "POS Network Printer"
|
* "POS Network Printer"
|
||||||
1. (Enable "Developer mode" under Odoo settings)
|
1. (Enable "Developer mode" under Odoo settings)
|
||||||
1. Configure PoS for IoT Box (see docs/iotbox-config.png)
|
1. Configure PoS for IoT Box (see screenshots under `docs/`)
|
||||||
1. Configure Order Printer (see docs/orderprinter.png)
|
1. Configure Order Printer (see screenshots under `docs/`)
|
||||||
|
|
||||||
## Odoo Addons
|
## Odoo Addons
|
||||||
|
|
||||||
The default addons from Odoo core are not enough for a smooth PoS experience,
|
The default addons from Odoo core are not enough for a smooth PoS experience,
|
||||||
therefore a good amount of other PoS addons can be used. This distributions adds
|
therefore a good amount of PoS addons can be used. This distributions adds
|
||||||
the following addon sources:
|
the following addon sources:
|
||||||
|
|
||||||
* [pos-addons](https://github.com/it-projects-llc/pos-addons):
|
* [pos-addons](https://github.com/it-projects-llc/pos-addons):
|
||||||
|
@ -57,11 +57,68 @@ The following addons are delivered in this repository:
|
||||||
|
|
||||||
## Hardware and Networking
|
## Hardware and Networking
|
||||||
|
|
||||||
* Default network assumed: `192.168.233.0/24`
|
```
|
||||||
* Printers: 192.168.233.3 and 192.168.233.5
|
+
|
||||||
* Printers used in this project: [Epson TM-T20II](https://www.epson.ch/products/sd/pos-printer/epson-tm-t20ii)
|
+----------------+ |
|
||||||
|
| Raspberry Pi 4 | WLAN|
|
||||||
|
| (K3s, Pi-hole) | +-----+
|
||||||
|
| DHCP, DNS |
|
||||||
|
| 192.168.233.9 |
|
||||||
|
+-------+--------+
|
||||||
|
|
|
||||||
|
|
|
||||||
|
+---------------+-----------------+
|
||||||
|
+---------+ | Router, Switch and Access Point |
|
||||||
|
|WLAN | (Mikrotik RB2011) |
|
||||||
|
| | 102.168.233.1 |
|
||||||
|
| +-----+---------------------+-----+
|
||||||
|
+ | |
|
||||||
|
| |
|
||||||
|
+-----------+ +--------+-------+ +-------+--------+
|
||||||
|
| Cash desk | | Printer 1 | | Printer 2 |
|
||||||
|
| tablet | | (Cash desk) | | (Kitchen) |
|
||||||
|
| | | 192.168.233.3 | | 192.168.233.5 |
|
||||||
|
+-----------+ +-------+--------+ +----------------+
|
||||||
|
|
|
||||||
|
|
|
||||||
|
+-------+--------+
|
||||||
|
| Cash drawer |
|
||||||
|
+----------------+
|
||||||
|
```
|
||||||
|
|
||||||
More hardware description and a network diagram: tbd.
|
* Default network - the posnet - assumed: `192.168.233.0/24`
|
||||||
|
* IPs:
|
||||||
|
* `192.168.233.1`: Mikrotik: WLAN and Switch
|
||||||
|
* `192.168.233.3`: Cashdesk receipt printer with cash drawer
|
||||||
|
* `192.168.233.5`: Kitchen printer
|
||||||
|
* `192.168.233.9`: Raspberry Pi (pospi)
|
||||||
|
* `192.168.233.10-50`: DHCP Range
|
||||||
|
* Printers: [Epson TM-T20II](https://www.epson.ch/products/sd/pos-printer/epson-tm-t20ii)
|
||||||
|
|
||||||
|
The Raspberry Pi 4 provides DNS and DHCP to the network with [Pi-hole](https://pi-hole.net/).
|
||||||
|
Static DNS entries `pos` and `iotbox` are added to `/etc/hosts` which
|
||||||
|
then are served by the Pi-hole DNS server. The Pi-hole Lighttpd must
|
||||||
|
be configured to listen on f.e. port 8080 so it doesn't conflict with
|
||||||
|
K3s ingress. The Raspberry Pi is connected to the PoS network using an
|
||||||
|
Ethernet connection and to the internet using WLAN. This optionally allows
|
||||||
|
to use it as an internet gateway by adding some IPtables rules:
|
||||||
|
|
||||||
|
```
|
||||||
|
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
|
||||||
|
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
|
||||||
|
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
|
||||||
|
```
|
||||||
|
|
||||||
|
A good thing is to install Wireguard and use it as remote access to the
|
||||||
|
Raspberry Pi.
|
||||||
|
|
||||||
|
When using an Android tablet, a "kiosk" browsing app is the recommended way to
|
||||||
|
provide the PoS webapp to the user. F.e. [Fully Single App Kiosk](https://play.google.com/store/apps/details?id=com.fullykiosk.singleapp&hl=en).
|
||||||
|
For iPad just add the webapp to the home screen using Safari, no additional
|
||||||
|
app is needed.
|
||||||
|
|
||||||
|
An UPS is also recommended to power the setup so that short power outages don't
|
||||||
|
interrupt the ordering process.
|
||||||
|
|
||||||
## Monitoring
|
## Monitoring
|
||||||
|
|
||||||
|
@ -72,8 +129,9 @@ application.
|
||||||
|
|
||||||
Under `contrib/healthchecks-cronjob.yaml` a simple Kubernetes cronjob is
|
Under `contrib/healthchecks-cronjob.yaml` a simple Kubernetes cronjob is
|
||||||
provided which regularly pings [Healthchecks.io](https://healthchecks.io/).
|
provided which regularly pings [Healthchecks.io](https://healthchecks.io/).
|
||||||
|
This helps to see if the whole thing is up and running.
|
||||||
|
|
||||||
A secret with the ping URL needs to be added before the CronJobs does it's work:
|
A secret with the ping URL needs to be added before the CronJobs can do it's work:
|
||||||
|
|
||||||
```
|
```
|
||||||
kubectl -n posmon create secret generic healthchecks-io --from-literal=HCURL=https://hc-ping.com/MYUUID
|
kubectl -n posmon create secret generic healthchecks-io --from-literal=HCURL=https://hc-ping.com/MYUUID
|
||||||
|
@ -102,21 +160,13 @@ Backup is done using [K8up](https://k8up.io/).
|
||||||
|
|
||||||
### Restore
|
### Restore
|
||||||
|
|
||||||
tbd...
|
Restore from Restic and then do a database import:
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
createdb -T template0 restoretest
|
createdb -T template0 restoretest
|
||||||
pg_restore -d restoretest /data/odoo_data.dump
|
pg_restore -d restoretest /data/odoo_data.dump
|
||||||
```
|
```
|
||||||
|
|
||||||
## Notes
|
|
||||||
|
|
||||||
* Connection from PoS Tablet to IoT Box is a direct connection, not via Odoo server!
|
|
||||||
* Support for opening the cashbox via network printer has been patched. The IP is hardcoded
|
|
||||||
to 192.168.233.3. See [0c6ecfdd](https://github.com/tobru/posbox-docker/commit/0c6ecfdd470dad07b9f9c26ecc0fd413c6d605b1)
|
|
||||||
and [#730](https://github.com/it-projects-llc/pos-addons/issues/730).
|
|
||||||
|
|
||||||
## Docker Images
|
## Docker Images
|
||||||
|
|
||||||
Docker images are automatically built on [Docker Hub](https://cloud.docker.com/repository/docker/tobru/odoo-pos) (for amd64 arch).
|
Docker images are automatically built on [Docker Hub](https://cloud.docker.com/repository/docker/tobru/odoo-pos) (for amd64 arch).
|
||||||
|
@ -126,7 +176,7 @@ Docker images are automatically built on [Docker Hub](https://cloud.docker.com/r
|
||||||
|
|
||||||
## A word on ARM / Raspberry Pi support
|
## A word on ARM / Raspberry Pi support
|
||||||
|
|
||||||
TL;DR: It's not easy to run things out of the box on Raspberry Pi.
|
TL;DR: It's not easy to run things out of the box on Raspberry Pi / ARM.
|
||||||
|
|
||||||
Images for ARM64 (f.e. Raspberry Pi) are _not_ automatically built as this
|
Images for ARM64 (f.e. Raspberry Pi) are _not_ automatically built as this
|
||||||
is not supported by Docker Hub. They are built manually on a Raspberry Pi
|
is not supported by Docker Hub. They are built manually on a Raspberry Pi
|
||||||
|
@ -152,8 +202,20 @@ on Debian Stretch and upstream doesn't provide `armhf` packages).
|
||||||
If you're using a newer Postgres version, the DB management functionality of
|
If you're using a newer Postgres version, the DB management functionality of
|
||||||
Odoo (Backup/Restore) won't work because of version mismatch.
|
Odoo (Backup/Restore) won't work because of version mismatch.
|
||||||
|
|
||||||
|
## Random notes
|
||||||
|
|
||||||
|
* Connection from PoS tablet to IoT Box is a direct connection, not via Odoo server!
|
||||||
|
* Support for opening the cashbox via network printer has been patched. The IP is hardcoded
|
||||||
|
to 192.168.233.3. See [0c6ecfdd](https://github.com/tobru/posbox-docker/commit/0c6ecfdd470dad07b9f9c26ecc0fd413c6d605b1)
|
||||||
|
and [#730](https://github.com/it-projects-llc/pos-addons/issues/730).
|
||||||
|
* Odoo 13 will probably change a lot for PoS and will need some additional work. See f.e.
|
||||||
|
* Commit: [pos: Replace hw_escpos by PrinterDriver](https://github.com/odoo/odoo/commit/03b2f7b77dc6189bb485e0b834dba5f6d3d4da2c#diff-14c0ea7767d884151475e057ad05ec56)
|
||||||
|
* Addon: [pos_epson_printer](https://github.com/odoo/odoo/tree/master/addons/pos_epson_printer)
|
||||||
|
|
||||||
## TODOs
|
## TODOs
|
||||||
|
|
||||||
|
There are some things which could be improved:
|
||||||
|
|
||||||
### Distribution
|
### Distribution
|
||||||
|
|
||||||
* [ ] Pre-install `monitoring_status` and use for K8s probes
|
* [ ] Pre-install `monitoring_status` and use for K8s probes
|
||||||
|
@ -168,7 +230,7 @@ Odoo (Backup/Restore) won't work because of version mismatch.
|
||||||
|
|
||||||
### PoS Usage
|
### PoS Usage
|
||||||
|
|
||||||
* [ ] Configure default payment option
|
* [ ] Configure default payment option (cash)
|
||||||
* [ ] Don't open cash drawer for virtual payment (Twint, SumUp)
|
* [ ] Don't open cash drawer for virtual payment (Twint, SumUp)
|
||||||
* [ ] Possibility to print a kitchen order ticket per position (not summarized)
|
* [ ] Possibility to print a kitchen order ticket per position (not summarized)
|
||||||
|
|
||||||
|
|
Reference in New Issue