[WIFI-7221] Add: support for owsub service

Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
This commit is contained in:
Dmitry Dunaev
2022-03-08 14:42:30 +03:00
parent 65d516091b
commit 0a13612351
17 changed files with 169 additions and 4 deletions

View File

@@ -21,3 +21,6 @@ repositories:
# - name: owanalytics
# url: https://github.com/Telecominfraproject/wlan-cloud-analytics.git
# docker_compose_name: OWANALYTICS_TAG
# - name: owsub
# url: https://github.com/Telecominfraproject/wlan-cloud-userportal.git
# docker_compose_name: OWSUB_TAG

View File

@@ -25,6 +25,10 @@ dependencies:
- name: owprovui
repository: "git+https://github.com/Telecominfraproject/wlan-cloud-owprov-ui@helm?ref=main"
version: 0.1.0
- name: owsub
repository: "git+https://github.com/Telecominfraproject/wlan-cloud-userportal@helm?ref=main"
version: 0.1.0
condition: owsub.enabled
- name: kafka
repository: https://charts.bitnami.com/bitnami
version: 13.0.2

View File

@@ -46,6 +46,16 @@ owgwui:
owprovui:
fullnameOverride: owprovui
# OpenWIFI Subscription (https://github.com/Telecominfraproject/wlan-cloud-userportal/)
owsub:
enabled: false
fullnameOverride: owsub
configProperties:
openwifi.kafka.enable: "true"
openwifi.kafka.brokerlist: kafka:9092
# kafka (https://github.com/bitnami/charts/blob/master/bitnami/kafka/)
kafka:
enabled: true

View File

@@ -7,7 +7,7 @@ OWFMS_TAG=main
OWPROV_TAG=main
OWPROVUI_TAG=main
OWANALYTICS_TAG=main
RTTYS_TAG=3.5.0
OWSUB_TAG=main
KAFKA_TAG=latest
ZOOKEEPER_TAG=latest
POSTGRESQL_TAG=latest
@@ -23,6 +23,8 @@ OWPROV_ROOT=/owprov-data
OWPROV_CONFIG=/owprov-data
OWANALYTICS_ROOT=/owanalytics-data
OWANALYTICS_CONFIG=/owanalytics-data
OWSUB_ROOT=/owsub-data
OWSUB_CONFIG=/owsub-data
# Microservice hostnames
INTERNAL_OWGW_HOSTNAME=owgw.wlan.local
@@ -30,3 +32,4 @@ INTERNAL_OWSEC_HOSTNAME=owsec.wlan.local
INTERNAL_OWFMS_HOSTNAME=owfms.wlan.local
INTERNAL_OWPROV_HOSTNAME=owprov.wlan.local
INTERNAL_OWANALYTICS_HOSTNAME=owanalytics.wlan.local
INTERNAL_OWSUB_HOSTNAME=owsub.wlan.local

View File

@@ -7,6 +7,7 @@ OWFMS_TAG=main
OWPROV_TAG=main
OWPROVUI_TAG=main
OWANALYTICS_TAG=main
OWSUB_TAG=main
KAFKA_TAG=latest
ZOOKEEPER_TAG=latest
ACMESH_TAG=latest
@@ -23,6 +24,8 @@ OWPROV_ROOT=/owprov-data
OWPROV_CONFIG=/owprov-data
OWANALYTICS_ROOT=/owanalytics-data
OWANALYTICS_CONFIG=/owanalytics-data
OWSUB_ROOT=/owsub-data
OWSUB_CONFIG=/owsub-data
# Microservice hostnames
INTERNAL_OWGW_HOSTNAME=owgw.wlan.local
@@ -32,6 +35,8 @@ INTERNAL_OWFMS_HOSTNAME=owfms.wlan.local
INTERNAL_OWPROV_HOSTNAME=owprov.wlan.local
INTERNAL_OWPROVUI_HOSTNAME=owprov-ui.wlan.local
INTERNAL_OWANALYTICS_HOSTNAME=owanalytics.wlan.local
INTERNAL_RTTYS_HOSTNAME=rttys.wlan.local
INTERNAL_OWSUB_HOSTNAME=owsub.wlan.local
OWGW_HOSTNAME=
OWGWUI_HOSTNAME=
OWGWFILEUPLOAD_HOSTNAME=
@@ -40,3 +45,4 @@ OWFMS_HOSTNAME=
OWPROV_HOSTNAME=
OWPROVUI_HOSTNAME=
OWANALYTICS_HOSTNAME=
OWSUB_HOSTNAME=

View File

@@ -7,6 +7,7 @@ OWFMS_TAG=main
OWPROV_TAG=main
OWPROVUI_TAG=main
OWANALYTICS_TAG=main
OWSUB_TAG=main
KAFKA_TAG=latest
ZOOKEEPER_TAG=latest
ACMESH_TAG=latest
@@ -23,6 +24,8 @@ OWPROV_ROOT=/owprov-data
OWPROV_CONFIG=/owprov-data
OWANALYTICS_ROOT=/owanalytics-data
OWANALYTICS_CONFIG=/owanalytics-data
OWSUB_ROOT=/owsub-data
OWSUB_CONFIG=/owsub-data
# Microservice hostnames
INTERNAL_OWGW_HOSTNAME=owgw.wlan.local
@@ -32,3 +35,4 @@ INTERNAL_OWFMS_HOSTNAME=owfms.wlan.local
INTERNAL_OWPROV_HOSTNAME=owprov.wlan.local
INTERNAL_OWPROVUI_HOSTNAME=owprov-ui.wlan.local
INTERNAL_OWANALYTICS_HOSTNAME=owanalytics.wlan.local
INTERNAL_OWSUB_HOSTNAME=owsub.wlan.local

View File

@@ -1,6 +1,6 @@
# OpenWifi SDK Docker Compose
### Overview
With the provided Docker Compose files you can instantiate a deployment of the OpenWifi microservices and related components. The repository contains a self-signed certificate and a TIP-signed gateway certificate which are valid for the `*.wlan.local` domain. You also have the possibility to either generate and use Letsencrypt certs or provide your own certificates. Furthermore the deployments are split by whether Traefik is used as a reverse proxy/load balancer in front of the microservices or if they are exposed directly on the host. The advantage of using the deployments with Traefik is that you can use Letsencrypt certs (automatic certificate generation and renewal) and you have the ability to scale specific containers to multiple replicas.
With the provided Docker Compose files you can instantiate a deployment of the OpenWifi microservices and related components. The repository contains a self-signed certificate and a TIP-signed gateway certificate which are valid for the `*.wlan.local` domain. You also have the possibility to either generate and use Letsencrypt certs or provide your own certificates. Furthermore the deployments are split by whether Traefik is used as a reverse proxy/load balancer in front of the microservices or if they are exposed directly on the host. The advantage of using the deployments with Traefik is that you can use Letsencrypt certs (automatic certificate generation and renewal) and you have the ability to scale specific containers to multiple replicas.
The repository also contains a separate Docker Compose deployment to set up the [OWLS microservice](https://github.com/Telecominfraproject/wlan-cloud-owls) and related components for running a load simulation test against an existing controller.
- [Non-LB deployment with self-signed certificates](#non-lb-deployment-with-self-signed-certificates)
- [Non-LB deployment with own certificates](#non-lb-deployment-with-own-certificates)
@@ -9,12 +9,12 @@ The repository also contains a separate Docker Compose deployment to set up the
- [LB deployment with Letsencrypt certificates](#lb-deployment-with-letsencrypt-certificates)
- [OWLS deployment with self-signed certificates](owls/README.md)
### Configuration
If you don't bind mount your own config files they are generated on every startup based on the environment variables in the microservice specific env files. For an overview of the supported configuration properties have a look into the microservice specific env files. For an explanation of the configuration properties please see the README in the respective microservice repository.
If you don't bind mount your own config files they are generated on every startup based on the environment variables in the microservice specific env files. For an overview of the supported configuration properties have a look into the microservice specific env files. For an explanation of the configuration properties please see the README in the respective microservice repository.
Be aware that the non-LB deployment exposes the generated config files on the host. So if you want to make configuration changes afterwards, please do them directly in the config files located in the microservice data directories.
#### Required password changing on the first startup
One important action that must be done before using the deployment is changing password for the default user in owsec as described in [owsec docs](https://github.com/Telecominfraproject/wlan-cloud-ucentralsec/tree/main#changing-default-password). Please use these docs to find the actions that must be done **after** the deployment in order to start using your deployment.
### Ports
Every OpenWifi service is exposed via a separate port either directly on the host or through Traefik. For an overview of the exposed ports have a look into the deployment specific Docker Compose file. If you use your own certificates or make use of the [Letsencrypt LB deployment](#lb-deployment-with-letsencrypt-certificates), you can also configure different hostnames for the microservices.
Every OpenWifi service is exposed via a separate port either directly on the host or through Traefik. For an overview of the exposed ports have a look into the deployment specific Docker Compose file. If you use your own certificates or make use of the [Letsencrypt LB deployment](#lb-deployment-with-letsencrypt-certificates), you can also configure different hostnames for the microservices.
Please note that the OWProv-UI is exposed on port `8080(HTTP)/8443(HTTPS)` by default except for the Letsencrypt LB deployment, where the service listens on the default `80/443` HTTP(S) ports.
### owsec templates and wwwassets
On the startup of owsec directories for wwwassets and mailer templates are created from the base files included in Docker image. After the initial startup you may edit those files as you wish in the [owsec-data/persist](./owsec-data/persist) directory.
@@ -43,6 +43,7 @@ export FLAGS="-s --cacert <your-wlan-cloud-ucentral-deploy-location>/docker-comp
| `INTERNAL_OWFMS_HOSTNAME` | Set this to your OWFms hostname, for example `owfms.example.com`. |
| `INTERNAL_OWPROV_HOSTNAME` | Set this to your OWProv hostname, for example `owprov.example.com`. |
| `INTERNAL_OWANALYTICS_HOSTNAME` | Set this to your OWAnalytics hostname, for example `owanalytics.example.com`. |
| `INTERNAL_OWSUB_HOSTNAME` | Set this to your OWSub hostname, for example `owsub.example.com`. |
### owgw.env
| Variable | Description |
| ---------------------------------------- | ----------------------------------------------------------------------------------- |
@@ -145,6 +146,9 @@ export FLAGS="-s --cacert <your-wlan-cloud-ucentral-deploy-location>/docker-comp
| `OWANALYTICS_DB` | `owanalytics` |
| `OWANALYTICS_DB_USER` | `owanalytics` |
| `OWANALYTICS_DB_PASSWORD` | `owanalytics` |
| `OWSUB_DB` | `owsub` |
| `OWSUB_DB_USER` | `owsub` |
| `OWSUB_DB_PASSWORD` | `owsub` |
3. Depending on whether you want to use [self-signed certificates](#non-lb-deployment-with-self-signed-certificates) or [provide your own](#non-lb-deployment-with-own-certificates), follow the instructions of the according deployment model. Spin up the deployment with `docker-compose -f docker-compose.yml -f docker-compose.postgresql.yml up -d`. It is recommended to create an alias for this deployment model with `alias docker-compose-postgresql="docker-compose -f docker-compose.yml -f docker-compose.postgresql.yml"`.
## LB deployment with self-signed certificates
Follow the same instructions as for the self-signed deployment without Traefik. The only difference is that you have to spin up the deployment with `docker-compose -f docker-compose.lb.selfsigned.yml --env-file .env.selfsigned up -d`. Make sure to specify the Compose and the according .env file every time you're working with the deployment or create an alias, for example `alias docker-compose-lb-selfsigned="docker-compose -f docker-compose.lb.selfsigned.yml --env-file .env.selfsigned"`. You also have the possibility to scale specific services to a specified number of instances with `docker-compose-lb-selfsigned up -d --scale SERVICE=NUM`, where `SERVICE` is the service name as defined in the Compose file.
@@ -163,6 +167,7 @@ For the Letsencrypt challenge to work you need a public IP address. The hostname
| `OWPROV_HOSTNAME` | Set this to your OWProv hostname, for example `owprov.example.com`. |
| `OWPROVUI_HOSTNAME` | Set this to your OWProv-UI hostname, for example `owprov-ui.example.com`. |
| `OWANALYTICS_HOSTNAME` | Set this to your OWAnalytics hostname, for example `owanalytics.example.com`. |
| `OWSUB_HOSTNAME` | Set this to your OWSub hostname, for example `owsub.example.com`. |
### owgw.env
| Variable | Description |
@@ -203,6 +208,11 @@ For the Letsencrypt challenge to work you need a public IP address. The hostname
| -------------------- | -------------------------------------------------------------------------------------- |
| `SYSTEM_URI_PUBLIC` | Set this to your OWAnalytics URL, for example `https://owanalytics.example.com:16009`. |
| `SYSTEM_URI_UI` | Set this to your OWProv-UI URL, for example `https://owprov-ui.example.com`. |
### owsub.env
| Variable | Description |
| -------------------- | ---------------------------------------------------------------------------- |
| `SYSTEM_URI_PUBLIC` | Set this to your OWSub URL, for example `https://owsub.example.com:16006`. |
| `SYSTEM_URI_UI` | Set this to your OWGW-UI URL, for example `https://owgw-ui.example.com`. |
### traefik.env
| Variable | Description |
| --------------------------------------------------- | ----------------------------------------- |

View File

@@ -11,6 +11,8 @@ volumes:
driver: local
owanalytics_data:
driver: local
owsub_data:
driver: local
zookeeper_data:
driver: local
zookeeper_datalog:
@@ -138,6 +140,22 @@ services:
- owanalytics_data:${OWANALYTICS_ROOT}
- ./certs:/${OWANALYTICS_ROOT}/certs
owsub:
image: "tip-tip-wlan-cloud-ucentral.jfrog.io/owsub:${OWSUB_TAG}"
networks:
openwifi:
aliases:
- ${INTERNAL_OWSUB_HOSTNAME}
env_file:
- .env.letsencrypt
- owsub.env
depends_on:
- kafka
restart: unless-stopped
volumes:
- owsub_data:${OWSUB_ROOT}
- ./certs:/${OWSUB_ROOT}/certs
zookeeper:
image: "zookeeper:${ZOOKEEPER_TAG}"
networks:
@@ -188,5 +206,6 @@ services:
- "16004:16004"
- "16005:16005"
- "16009:16009"
- "16006:16006"
- "5912:5912"
- "5913:5913"

View File

@@ -11,6 +11,8 @@ volumes:
driver: local
owanalytics_data:
driver: local
owsub_data:
driver: local
zookeeper_data:
driver: local
zookeeper_datalog:
@@ -138,6 +140,22 @@ services:
- owanalytics_data:${OWANALYTICS_ROOT}
- ./certs:/${OWANALYTICS_ROOT}/certs
owsub:
image: "tip-tip-wlan-cloud-ucentral.jfrog.io/owsub:${OWSUB_TAG}"
networks:
openwifi:
aliases:
- ${INTERNAL_OWSUB_HOSTNAME}
env_file:
- .env.selfsigned
- owsub.env
depends_on:
- kafka
restart: unless-stopped
volumes:
- owsub_data:${OWSUB_ROOT}
- ./certs:/${OWSUB_ROOT}/certs
zookeeper:
image: "zookeeper:${ZOOKEEPER_TAG}"
networks:

View File

@@ -30,6 +30,11 @@ services:
- postgresql
command: ["./wait-for-postgres.sh", "postgresql", "/openwifi/owanalytics"]
owsub:
depends_on:
- postgresql
command: ["./wait-for-postgres.sh", "postgresql", "/openwifi/owsub"]
postgresql:
image: "postgres:${POSTGRESQL_TAG}"
networks:

View File

@@ -150,6 +150,24 @@ services:
- "16009:16009"
- "16109:16109"
owsub:
image: "tip-tip-wlan-cloud-ucentral.jfrog.io/owsub:${OWSUB_TAG}"
networks:
openwifi:
aliases:
- ${INTERNAL_OWSUB_HOSTNAME}
env_file:
- owsub.env
depends_on:
- kafka
restart: unless-stopped
volumes:
- "./owsub_data:${OWSUB_ROOT}"
- "./certs:/${OWSUB_ROOT}/certs"
ports:
- "16006:16006"
- "16106:16106"
zookeeper:
image: "zookeeper:${ZOOKEEPER_TAG}"
networks:

38
docker-compose/owsub.env Normal file
View File

@@ -0,0 +1,38 @@
RUN_CHOWN=true
TEMPLATE_CONFIG=true
SELFSIGNED_CERTS=true
OWSUB_ROOT=/owsub-data
OWSUB_CONFIG=/owsub-data
#RESTAPI_HOST_ROOTCA=$OWSUB_ROOT/certs/restapi-ca.pem
#RESTAPI_HOST_PORT=16006
#RESTAPI_HOST_CERT=$OWSUB_ROOT/certs/restapi-cert.pem
#RESTAPI_HOST_KEY=$OWSUB_ROOT/certs/restapi-key.pem
#RESTAPI_HOST_KEY_PASSWORD=mypassword
#INTERNAL_RESTAPI_HOST_ROOTCA=$OWSUB_ROOT/certs/restapi-ca.pem
#INTERNAL_RESTAPI_HOST_PORT=17006
#INTERNAL_RESTAPI_HOST_CERT=$OWSUB_ROOT/certs/restapi-cert.pem
#INTERNAL_RESTAPI_HOST_KEY=$OWSUB_ROOT/certs/restapi-key.pem
#INTERNAL_RESTAPI_HOST_KEY_PASSWORD=mypassword
#FIRMWARE_UPDATER_UPGRADE=yes
#FIRMWARE_UPDATER_RCONLY=no
#SERVICE_KEY=$OWSUB_ROOT/certs/restapi-key.pem
#SERVICE_KEY_PASSWORD=mypassword
SYSTEM_DATA=$OWSUB_ROOT/persist
SYSTEM_URI_PRIVATE=https://owsub.wlan.local:17006
SYSTEM_URI_PUBLIC=https://openwifi.wlan.local:16006
SYSTEM_URI_UI=https://openwifi.wlan.local
#KAFKA_ENABLE=true
KAFKA_BROKERLIST=kafka:9092
#STORAGE_TYPE=sqlite
#STORAGE_TYPE_POSTGRESQL_HOST=localhost
#STORAGE_TYPE_POSTGRESQL_USERNAME=owsub
#STORAGE_TYPE_POSTGRESQL_PASSWORD=owsub
#STORAGE_TYPE_POSTGRESQL_DATABASE=owsub
#STORAGE_TYPE_POSTGRESQL_PORT=5432
#STORAGE_TYPE_MYSQL_HOST=localhost
#STORAGE_TYPE_MYSQL_USERNAME=owsub
#STORAGE_TYPE_MYSQL_PASSWORD=owsub
#STORAGE_TYPE_MYSQL_DATABASE=owsub
#STORAGE_TYPE_MYSQL_PORT=3306

View File

@@ -15,3 +15,6 @@ OWPROV_DB_PASSWORD=owprov
OWANALYTICS_DB=owanalytics
OWANALYTICS_DB_USER=owanalytics
OWANALYTICS_DB_PASSWORD=owanalytics
OWUSB_DB=owsub
OWUSB_DB_USER=owsub
OWUSB_DB_PASSWORD=owsub

View File

@@ -17,4 +17,7 @@ psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
CREATE USER $OWANALYTICS_DB_USER WITH ENCRYPTED PASSWORD '$OWANALYTICS_DB_PASSWORD';
CREATE DATABASE $OWANALYTICS_DB;
GRANT ALL PRIVILEGES ON DATABASE $OWANALYTICS_DB TO $OWANALYTICS_DB_USER;
CREATE USER $OWSUB_DB_USER WITH ENCRYPTED PASSWORD '$OWSUB_DB_PASSWORD';
CREATE DATABASE $OWSUB_DB;
GRANT ALL PRIVILEGES ON DATABASE $OWSUB_DB TO $OWSUB_DB_USER;
EOSQL

View File

@@ -13,6 +13,7 @@ TRAEFIK_ENTRYPOINTS_OWSECRESTAPI_ADDRESS=:16001
TRAEFIK_ENTRYPOINTS_OWFMSRESTAPI_ADDRESS=:16004
TRAEFIK_ENTRYPOINTS_OWPROVRESTAPI_ADDRESS=:16005
TRAEFIK_ENTRYPOINTS_OWANALYTICSRESTAPI_ADDRESS=:16009
TRAEFIK_ENTRYPOINTS_OWSUBRESTAPI_ADDRESS=:16006
TRAEFIK_PROVIDERS_FILE_FILENAME=/etc/traefik/openwifi.yaml
TRAEFIK_CERTIFICATESRESOLVERS_OPENWIFI_ACME_EMAIL=
TRAEFIK_CERTIFICATESRESOLVERS_OPENWIFI_ACME_HTTPCHALLENGE=true

View File

@@ -32,6 +32,10 @@ http:
loadBalancer:
servers:
- url: "https://owanalytics.wlan.local:16009/"
owsub-restapi:
loadBalancer:
servers:
- url: "https://owsub.wlan.local:16006/"
owgw-rttys-view:
loadBalancer:
servers:
@@ -100,6 +104,12 @@ http:
rule: "Host(`{{env "OWANALYTICS_HOSTNAME"}}`)"
tls:
certResolver: "openwifi"
owsub-restapi:
entryPoints: "owsubrestapi"
service: "owsub-restapi"
rule: "Host(`{{env "OWSUB_HOSTNAME"}}`)"
tls:
certResolver: "openwifi"
tcp:
services:

View File

@@ -76,6 +76,10 @@ tcp:
loadBalancer:
servers:
- address: "owanalytics.wlan.local:16009"
owsub-restapi:
loadBalancer:
servers:
- address: "owsub.wlan.local:16006"
routers:
owgw-websocket:
@@ -132,3 +136,9 @@ tcp:
rule: "HostSNI(`*`)"
tls:
passthrough: true
owsub-restapi:
entryPoints: "owpsubestapi"
service: "owsub-restapi"
rule: "HostSNI(`*`)"
tls:
passthrough: true