mirror of
https://github.com/freedbygrace/ActiveDirectoryManager.git
synced 2026-07-26 11:59:14 +00:00
258 lines
5.7 KiB
Markdown
258 lines
5.7 KiB
Markdown
# 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 file
|
|
- `docker-compose.yml`: Docker Compose configuration
|
|
- `build.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 definition
|
|
- `configmap.yaml`: ConfigMap for non-sensitive configuration
|
|
- `secrets.yaml`: Secrets for sensitive configuration
|
|
- `postgres.yaml`: PostgreSQL StatefulSet and Service
|
|
- `redis.yaml`: Redis StatefulSet and Service
|
|
- `deployment.yaml`: Application Deployment and Service
|
|
- `ingress.yaml`: Ingress for external access
|
|
- `kustomization.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:
|
|
```bash
|
|
# 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:
|
|
```powershell
|
|
# 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:
|
|
```bash
|
|
# Navigate to the iac directory
|
|
cd iac
|
|
|
|
# Make the script executable
|
|
chmod +x update-version.sh
|
|
|
|
# Update the version
|
|
./update-version.sh
|
|
```
|
|
|
|
On Windows:
|
|
```powershell
|
|
# Navigate to the iac directory
|
|
cd iac
|
|
|
|
# Update the version
|
|
.\update-version.ps1
|
|
```
|
|
|
|
### Building Docker Images
|
|
|
|
#### Using the build scripts
|
|
|
|
On Linux/macOS:
|
|
```bash
|
|
# 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:
|
|
```powershell
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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:
|
|
```bash
|
|
# 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:
|
|
```powershell
|
|
# Navigate to the iac/kubernetes directory
|
|
cd iac\kubernetes
|
|
|
|
# Update the deployment version
|
|
.\update-deployment-version.ps1
|
|
```
|
|
|
|
### Deployment
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
1. Create a new directory for your environment:
|
|
```bash
|
|
mkdir -p iac/kubernetes/environments/production
|
|
```
|
|
|
|
2. Create a kustomization.yaml file that references the base configuration:
|
|
```yaml
|
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
kind: Kustomization
|
|
|
|
namespace: ad-management-production
|
|
|
|
resources:
|
|
- ../../ # Reference the base configuration
|
|
|
|
patches:
|
|
# Add your patches here
|
|
```
|
|
|
|
3. Apply the environment-specific configuration:
|
|
```bash
|
|
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:
|
|
|
|
```yaml
|
|
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
|
|
```
|