mirror of
https://github.com/freedbygrace/ActiveDirectoryManager.git
synced 2026-08-19 23:07:12 +00:00
Reorganize infrastructure as code and implement versioning schema
This commit is contained in:
+257
@@ -0,0 +1,257 @@
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user