Adding New Services¶
Add to Core Server¶
-
Create config directory:
-
Add config files (use
.j2
for templates): -
Add Terraform resources in
terraform/coreams01.tf
:resource "docker_image" "service_name" { name = "image:tag" provider = docker.coreams01 } resource "docker_container" "service_name" { image = docker_image.service_name.image_id name = "service-name" provider = docker.coreams01 restart = "unless-stopped" log_driver = "json-file" log_opts = { tag = "{{.ImageName}}|{{.Name}}|{{.ImageFullID}}|{{.FullID}}" } dns = ["2a00:1098:2c::1", "2a00:1098:2b::1"] network_mode = "bridge" networks_advanced { name = docker_network.backend.name ipv6_address = "2a06:de00:50:cafe:10::XX" # Choose unused IP } volumes { container_path = "/etc/service/config" host_path = "/home/nxthdr/service/config" } }
-
Deploy:
make apply
Add to IXP/VLT Servers¶
-
Create shared config:
-
Update Terraform template in
templates/terraform/ixp.tf.j2
:resource "docker_image" "service_name" { name = "image:tag" provider = docker.{{ inventory_hostname }} } resource "docker_container" "service_name" { image = docker_image.service_name.image_id name = "service-name" provider = docker.{{ inventory_hostname }} restart = "unless-stopped" # ... rest of config }
-
Deploy:
make apply
(deploys to all IXP servers)
Expose via HTTPS¶
-
Add DMZ network in Terraform:
-
Update
templates/config/core/coreams01/proxy/config/Caddyfile.j2
: -
Deploy:
make apply
Add Secrets¶
- Run:
make edit-secrets
- Add secrets:
- Use in templates:
{{ secrets.service.api_key }}
Service Dependencies¶
Services on same network communicate by container name:
Optional Terraform dependency:
Persistent Data¶
Mount volume in Terraform:
Health Checks¶
healthcheck {
test = ["CMD", "curl", "-f", "http://localhost:port/health"]
interval = "30s"
timeout = "3s"
retries = 3
}
Resource Limits¶
Add to Prometheus¶
Edit templates/config/core/coreams01/prometheus/config/prometheus.yml.j2
:
Next Steps¶
- Common Tasks - Day-to-day operations
- Network Configuration - BIRD and WireGuard
- Architecture - Technical details