167 lines
4.9 KiB
Markdown
167 lines
4.9 KiB
Markdown
# DevOps Infrastructure
|
|
|
|
This directory contains operational tooling, deployment configurations, and CI/CD support for StellaOps.
|
|
|
|
## Directory Structure
|
|
|
|
```
|
|
devops/
|
|
├── ansible/ # Ansible playbooks for deployment automation
|
|
├── compose/ # Docker Compose configurations
|
|
├── database/ # Database schemas and migrations
|
|
│ ├── mongo/ # MongoDB (deprecated)
|
|
│ └── postgres/ # PostgreSQL schemas
|
|
├── docker/ # Dockerfiles and container build scripts
|
|
│ ├── Dockerfile.ci # CI runner environment
|
|
│ └── base/ # Base images
|
|
├── docs/ # This documentation
|
|
├── gitlab/ # GitLab CI templates (legacy)
|
|
├── helm/ # Helm charts for Kubernetes deployment
|
|
├── logging/ # Logging configuration templates
|
|
│ ├── serilog.json.template # Serilog config for .NET services
|
|
│ ├── filebeat.yml # Filebeat for log shipping
|
|
│ └── logrotate.conf # Log rotation configuration
|
|
├── observability/ # Monitoring, metrics, and tracing
|
|
├── offline/ # Air-gap deployment support
|
|
│ ├── airgap/ # Air-gap bundle scripts
|
|
│ └── kit/ # Offline installation kit
|
|
├── releases/ # Release artifacts and manifests
|
|
├── scripts/ # Operational scripts
|
|
├── services/ # Per-service operational configs
|
|
├── telemetry/ # OpenTelemetry and metrics configs
|
|
└── tools/ # DevOps tooling
|
|
```
|
|
|
|
## Quick Start
|
|
|
|
### Local CI Environment
|
|
|
|
Build and run the CI Docker environment locally:
|
|
|
|
```bash
|
|
# Build the CI image
|
|
docker build -f devops/docker/Dockerfile.ci -t stellaops-ci:local .
|
|
|
|
# Run tests in CI environment
|
|
docker run --rm -v $(pwd):/workspace stellaops-ci:local \
|
|
dotnet test --filter "Category=Unit"
|
|
```
|
|
|
|
### Local Testing
|
|
|
|
```bash
|
|
# Run all PR-gating tests
|
|
./devops/scripts/test-local.sh
|
|
|
|
# Validate compose configurations
|
|
./devops/scripts/validate-compose.sh
|
|
|
|
# Validate Helm charts
|
|
./.gitea/scripts/validate/validate-helm.sh
|
|
```
|
|
|
|
### Logging Configuration
|
|
|
|
The `logging/` directory contains templates for centralized logging:
|
|
|
|
1. **Serilog** (`serilog.json.template`) - Structured logging for .NET services
|
|
- Console and file sinks
|
|
- Rolling files with 14-day retention
|
|
- 100MB file size limit with roll-over
|
|
- Environment-variable templating
|
|
|
|
2. **Filebeat** (`filebeat.yml`) - Log shipping to Elasticsearch/Logstash
|
|
- JSON log parsing from Serilog output
|
|
- Container log support
|
|
- Kubernetes metadata enrichment
|
|
- Air-gap fallback to file output
|
|
|
|
3. **Logrotate** (`logrotate.conf`) - System-level log rotation
|
|
- Daily rotation with 14-day retention
|
|
- Compression with delay
|
|
- Service-specific overrides for high-volume services
|
|
|
|
To use:
|
|
|
|
```bash
|
|
# Copy template and customize
|
|
cp devops/logging/serilog.json.template /etc/stellaops/serilog.json
|
|
|
|
# Set service name
|
|
export STELLAOPS_SERVICE_NAME=scanner
|
|
|
|
# Install filebeat config (requires root)
|
|
sudo cp devops/logging/filebeat.yml /etc/filebeat/filebeat.yml
|
|
|
|
# Install logrotate config (requires root)
|
|
sudo cp devops/logging/logrotate.conf /etc/logrotate.d/stellaops
|
|
```
|
|
|
|
## Compose Profiles
|
|
|
|
The `compose/` directory contains Docker Compose configurations with profiles:
|
|
|
|
| Profile | Description |
|
|
|---------|-------------|
|
|
| `core` | Essential services (PostgreSQL, Router, Authority) |
|
|
| `scanner` | Vulnerability scanning services |
|
|
| `full` | All services for complete deployment |
|
|
| `dev` | Development profile with hot-reload |
|
|
| `test` | Testing profile with test containers |
|
|
|
|
```bash
|
|
# Start core services
|
|
docker compose --profile core up -d
|
|
|
|
# Start full stack
|
|
docker compose --profile full up -d
|
|
```
|
|
|
|
## Helm Charts
|
|
|
|
The `helm/` directory contains Helm charts for Kubernetes:
|
|
|
|
```bash
|
|
# Lint charts
|
|
helm lint devops/helm/stellaops
|
|
|
|
# Template with values
|
|
helm template stellaops devops/helm/stellaops -f values.yaml
|
|
|
|
# Install
|
|
helm install stellaops devops/helm/stellaops -n stellaops --create-namespace
|
|
```
|
|
|
|
## Release Process
|
|
|
|
See [RELEASE_PROCESS.md](../../docs/releases/RELEASE_PROCESS.md) for the complete release workflow.
|
|
|
|
Quick release commands:
|
|
|
|
```bash
|
|
# Dry-run release build
|
|
python devops/release/build_release.py --version 2026.04.0 --dry-run
|
|
|
|
# Verify release artifacts
|
|
python devops/release/verify_release.py --release-dir out/release
|
|
```
|
|
|
|
## Air-Gap / Offline Deployment
|
|
|
|
The `offline/` directory contains tools for air-gapped environments:
|
|
|
|
```bash
|
|
# Create offline bundle
|
|
./devops/offline/airgap/create-bundle.sh --version 2026.04
|
|
|
|
# Import on air-gapped system
|
|
./devops/offline/kit/import-bundle.sh stellaops-2026.04-bundle.tar.gz
|
|
```
|
|
|
|
## Related Documentation
|
|
|
|
- [Release Engineering Playbook](../../docs/13_RELEASE_ENGINEERING_PLAYBOOK.md)
|
|
- [Versioning Strategy](../../docs/releases/VERSIONING.md)
|
|
- [Offline Kit Guide](../../docs/24_OFFLINE_KIT.md)
|
|
- [CI/CD Workflows](../../.gitea/workflows/README.md)
|