-
Notifications
You must be signed in to change notification settings - Fork 4
Deployment Architecture
AlexZorkin edited this page May 13, 2025
·
1 revision
This document describes the deployment architecture for the LCFS system, covering local development, and production/staging environments (OpenShift).
The local development setup is defined by Docker Compose files:
-
Main Application (
./docker-compose.yml): Orchestrates the core LCFS services:-
backend: Python FastAPI application. -
frontend: React (Vite) application. -
db: PostgreSQL database for LCFS data. -
redis: Redis for caching. -
rabbitmq: RabbitMQ for message queuing. -
minio: S3-compatible object storage. -
create_bucket: MinIO utility to create the initial bucket. - All services are connected via a
shared_network.
-
-
ETL Subsystem (
./etl/docker-compose.yml): Orchestrates the services required for ETL processes:-
nifi: Apache NiFi for data flow automation. -
registry: Apache NiFi Registry for flow version control. -
zookeeper: Apache Zookeeper for NiFi configuration management. -
tfrs: PostgreSQL database (source TFRS data for ETL). - These services also connect via a
shared_network, likely the same one as the main application to allow NiFi to access the LCFSdb.
-
The LCFS application is deployed to an OpenShift Container Platform environment. Key aspects include:
-
Container Images: Custom Docker images are built for the
backendandfrontendservices.-
DockerfileandDockerfile.devare used for local development builds. -
Dockerfile.openshiftfiles exist in bothbackend/andfrontend/directories, suggesting specific image build configurations for OpenShift.
-
-
Build Configuration (
openshift/templates/):-
backend-bc.yaml: Defines an OpenShiftBuildConfigfor the backend service. This likely uses Source-to-Image (S2I) or a Docker strategy to build the backend container image within OpenShift from the source code. -
frontend-bc.yaml: Defines an OpenShiftBuildConfigfor the frontend service, similarly building the frontend container image.
-
-
Serving Frontend Assets: The
frontend/nginx.conffile indicates that Nginx is used to serve the static assets (HTML, CSS, JavaScript) built by the React/Vite application in the OpenShift environment. -
OpenShift Resources (Inferred - requires further details from
openshift/templates or cluster inspection):- Deployments/DeploymentConfigs: Manage the lifecycle of application pods (backend, frontend, potentially others like NiFi if deployed to OpenShift).
- Services: Provide stable internal IP addresses and DNS names for accessing pods.
- Routes: Expose services (particularly the frontend and backend APIs) externally with hostnames.
- ConfigMaps: Store non-sensitive configuration data.
- Secrets: Store sensitive data (database credentials, API keys, JWT secrets for Keycloak integration).
- Persistent Volumes: Used for databases (PostgreSQL for LCFS, TFRS if also on OpenShift), MinIO (if on OpenShift), RabbitMQ data, NiFi repositories.
-
Network Policies: The
openshift/templates/knps/directory might containNetworkPolicyresources, possibly for controlling traffic flow between pods, especially concerning Keycloak or other sensitive services.
-
Maintenance Page: The
openshift/templates/maintenance-page/directory suggests resources for deploying a dedicated maintenance page. -
ETL Deployment: The ETL components (NiFi, NiFi Registry, Zookeeper, TFRS DB) might also be deployed to OpenShift, or NiFi might connect to an OpenShift-hosted LCFS database from an external NiFi instance. The
data-transfer.shscript inetl/implies interaction between OpenShift and other environments for data.
- A detailed review of all YAML files within
openshift/templates/(including subdirectories likeknps/andmaintenance-page/) is needed to fully document the specific OpenShift resources and their configurations. - Clarify if the ETL subsystem (NiFi, etc.) is also deployed to OpenShift or runs externally.
- Understand the CI/CD pipeline that triggers the OpenShift builds and deployments.