5.7 KiB
Infrastructure as Code (IaC)
This directory contains all the infrastructure as code configurations for deploying the Active Directory Management application.
Directory Structure
-
docker/: Docker-related files
Dockerfile: Multi-stage Docker build filedocker-compose.yml: Docker Compose configurationbuild.sh: Bash script for building and pushing Docker images (Linux/macOS)build.ps1: PowerShell script for building and pushing Docker images (Windows).env: Environment variables for Docker deployment.env.example: Example environment variables.env.production: Production environment variables
-
version.txt: Central version file in yyyy.MM.dd.HHmm format
-
update-version.sh: Bash script to update version.txt (Linux/macOS)
-
update-version.ps1: PowerShell script to update version.txt (Windows)
-
update-all.sh: Comprehensive script to update all version references (Linux/macOS)
-
update-all.ps1: Comprehensive script to update all version references (Windows)
-
kubernetes/: Kubernetes manifests
namespace.yaml: Namespace definitionconfigmap.yaml: ConfigMap for non-sensitive configurationsecrets.yaml: Secrets for sensitive configurationpostgres.yaml: PostgreSQL StatefulSet and Serviceredis.yaml: Redis StatefulSet and Servicedeployment.yaml: Application Deployment and Serviceingress.yaml: Ingress for external accesskustomization.yaml: Kustomize configuration
Docker
Versioning
The application uses a versioning scheme in the format yyyy.MM.dd.HHmm (year, month, day, hour, minute).
Comprehensive Version Update
To update the version and apply it to all components (recommended):
On Linux/macOS:
# Navigate to the iac directory
cd iac
# Make the script executable
chmod +x update-all.sh
# Update all version references
./update-all.sh
On Windows:
# Navigate to the iac directory
cd iac
# Update all version references
.\update-all.ps1
Manual Version Update
To update only the version.txt file:
On Linux/macOS:
# Navigate to the iac directory
cd iac
# Make the script executable
chmod +x update-version.sh
# Update the version
./update-version.sh
On Windows:
# Navigate to the iac directory
cd iac
# Update the version
.\update-version.ps1
Building Docker Images
Using the build scripts
On Linux/macOS:
# Navigate to the iac/docker directory
cd iac/docker
# Make the script executable
chmod +x build.sh
# Build the image with version from version.txt
./build.sh
# Build with custom tag
./build.sh --tag 2025.05.21.1430
# Build and push to a registry
./build.sh --registry your-registry.com --push
On Windows:
# Navigate to the iac/docker directory
cd iac\docker
# Build the image with version from version.txt
.\build.ps1
# Build with custom tag
.\build.ps1 -tag 2025.05.21.1430
# Build and push to a registry
.\build.ps1 -registry your-registry.com -push
Manually
# Navigate to the project root
cd /path/to/project
# Get the version from version.txt
VERSION=$(cat iac/version.txt)
# Build the image
docker build -t ActiveDirectoryManager:$VERSION -f iac/docker/Dockerfile .
# Tag the image for a registry
docker tag ActiveDirectoryManager:$VERSION your-registry.com/ActiveDirectoryManager:$VERSION
# Push to registry
docker push your-registry.com/ActiveDirectoryManager:$VERSION
Running with Docker Compose
# Navigate to the iac/docker directory
cd iac/docker
# Create a .env file from the example if you haven't already
cp .env.example .env
# Edit the .env file with your configuration
# Load the version from version.txt
source .env.version
# Start the application stack
docker-compose up -d
# View logs
docker-compose logs -f
# Stop the application stack
docker-compose down
Kubernetes
Prerequisites
- Kubernetes cluster (v1.19+)
- kubectl configured to communicate with your cluster
- Kustomize (v4.0+) or kubectl v1.14+ which includes kustomize
Updating Deployment Version
Before deploying, you should update the Kubernetes deployment to use the current version:
On Linux/macOS:
# Navigate to the iac/kubernetes directory
cd iac/kubernetes
# Make the script executable
chmod +x update-deployment-version.sh
# Update the deployment version
./update-deployment-version.sh
On Windows:
# Navigate to the iac/kubernetes directory
cd iac\kubernetes
# Update the deployment version
.\update-deployment-version.ps1
Deployment
# Navigate to the iac/kubernetes directory
cd iac/kubernetes
# Apply all resources
kubectl apply -k .
# Or from anywhere in the project
kubectl apply -k iac/kubernetes
Customization
To customize the deployment for different environments:
-
Create a new directory for your environment:
mkdir -p iac/kubernetes/environments/production -
Create a kustomization.yaml file that references the base configuration:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: ad-management-production resources: - ../../ # Reference the base configuration patches: # Add your patches here -
Apply the environment-specific configuration:
kubectl apply -k iac/kubernetes/environments/production
CI/CD Integration
The Docker build scripts are designed to be used in CI/CD pipelines. Example integration with GitHub Actions:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build and push Docker image
run: |
cd iac/docker
chmod +x build.sh
./build.sh --registry ghcr.io --tag ${{ github.sha }} --push