Installation
Follow the steps below to install and run the project successfully.
Requirements:
- Docker, Docker Compose
- Recommended OS: Ubuntu / any Linux distribution
- On Windows: run the script using Git Bash
Installation Package
.env
This file contains environment variables used by Docker and the application. Example content:
REMOTE_HOST=app.example.com
GRAFANA_PORT=3000
BACKEND_PORT=9983
FRONTEND_PORT=8080
docker-compose.yml
This file defines the Docker services, ports, volumes, and environment variables. It will use the values defined in the .env file.
install.sh
This is a bash script that automates the installation and configuration process. It prompts for necessary values and launches the Docker containers.
Frontend HTTPS and certificates
HTTPS is terminated by Nginx inside the gf-frontend container. Certificates are
not included in the Docker image. They must be provided on the server where the
installation package is started.
1. Prepare the certificate and private key
Create a certs directory next to docker-compose.yml:
mkdir -p certs
Place two PEM-formatted files in this directory:
certs/
├── _.gifrost.com.certificate.pem # server certificate
└── _.gifrost.com.key # matching private key
re.com:1521#### What certificate is required?
Two matching PEM-formatted files are required:
_.gifrost.com.certificate.pem— the server certificate;_.gifrost.com.key— the matching, unencrypted private key.
The filenames are conventions used by the installation package and do not
determine the certificate's scope. The certificate SAN field must cover the
hostname configured as REMOTE_HOST, either directly or through a wildcard entry.
For example, with REMOTE_HOST=app.example.com, the SAN may contain
app.example.com or *.example.com.
Where can the certificate be obtained?
There are three common options:
- Corporate certificate authority (CA) — for an internal deployment, ask the PKI/IT administrator for a server certificate and the private key in PEM format.
- Public certificate authority — for a public DNS hostname, use a commercial certificate provider.
- Self-signed certificate — use this option for testing only.
Self-signed certificate for testing
The following command creates a certificate valid for app.example.com:
openssl req -x509 -nodes -newkey rsa:2048 -sha256 -days 365 -keyout certs/_.gifrost.com.key -out certs/_.gifrost.com.certificate.pem -subj "/CN=app.example.com" -addext "subjectAltName=DNS:app.example.com"
Replace app.example.com with the actual REMOTE_HOST value.
Self-signed certificates are not trusted by browsers by default. Use them for testing; use a certificate issued by a trusted public or corporate certificate authority in production.
The private key is sensitive. Do not add the certs directory to the image or
repository, and restrict access to the key file:
chmod 600 certs/_.gifrost.com.key
2. Mount the certificates into the container
The gf-frontend service in docker-compose.yml mounts both files read-only:
services:
gf-frontend:
ports:
- "${FRONTEND_PORT}:443"
volumes:
- ./certs/_.gifrost.com.certificate.pem:/etc/nginx/certs/fullchain.pem:ro
- ./certs/_.gifrost.com.key:/etc/nginx/certs/privkey.pem:ro
You may use different filenames on the host by changing the left-hand side of the
volumes entries. Keep the container paths on the right unchanged because Nginx
reads the certificate and key from those locations.
The install.sh script does not create the certs directory or download
certificates. The files must exist before running ./install.sh or
docker compose up -d.
3. How HTTPS works in the container
After startup, Nginx:
- listens on port
443and supports TLS 1.2 and TLS 1.3; - reads
/etc/nginx/certs/fullchain.pemand/etc/nginx/certs/privkey.pem; - serves the compiled frontend application;
- proxies requests under
/backend/togf-backend:9983on the Docker Compose network; - also contains a port
80HTTP-to-HTTPS redirect, although the currentdocker-compose.ymlpublishes only container port443on the host.
The application is available at:
https://<REMOTE_HOST>:<FRONTEND_PORT>
For example, with REMOTE_HOST=app.example.com and FRONTEND_PORT=8080:
https://app.example.com:8080
Installation Guide
1. Grant permission to the script file
Make sure the script file has execution permissions:
chmod +x install.sh
2. Run the script
Once permissions are set, launch the script:
./install.sh
Installation Script Walkthrough
1. Internet Connectivity Check
During the installation, the script will ask if you have an internet connection:
-
If yes:
- You will be asked to log in to Azure Registry (required to pull images).
- The script will use
docker loginand then pull the required images.
-
If no:
- You will be asked to provide a path where local Docker image
.tarfiles are stored. - The script will use
docker load -inputto load images from the provided.tarfiles.
- You will be asked to provide a path where local Docker image
2. Provide Configuration in the Terminal
The script will then prompt you to enter key configuration values. If you leave any field empty, the default values will be used.
-
Frontend Port
Enter frontend port [default: 8080]:This port is used to access the application's web-based user interface.
-
Backend Port
Enter backend port [default: 9983]:This port allows the frontend to communicate with the backend services (APIs, data processing).
-
Grafana Port
Enter Grafana port [default: 3000]:This port is used to access the Grafana dashboard for metrics and visualization.
-
Host Address (hostname/IP)
Enter hostname/IP [default: 10.100.22.27]This is the IP or hostname where your application will be accessible. It is especially important when the frontend or users need to connect from a remote location.
-
Path to Configuration Directory
Install directory [default: current]:This is the directory where configuration files and Docker volumes will be stored. Useful if you want to persist data or organize deployments.
If you leave any of these fields empty, the default values shown in brackets will be used automatically.
Once all the steps above have been completed, the setup process is fully automated. The system will configure the necessary containers, apply environment settings, and launch all services in the background.
Manual Startup
If you prefer not to use the script:
- Configure
.env. - Run Docker Compose directly:
docker compose up -d
Your application should now be available at
https://<REMOTE_HOST>:<FRONTEND_PORT>.