Stop mislabeling the Compose box as production in read-only audits
This commit is contained in:
@@ -1,36 +0,0 @@
|
||||
# ArgoCD (GitOps deployment)
|
||||
|
||||
Deployment uses the **team's existing ArgoCD instance** (not self-hosted by
|
||||
this project) rather than a custom push-based CD pipeline. See
|
||||
`docs/adr/0002-argocd-gitops.md` for the rationale.
|
||||
|
||||
## Flow
|
||||
|
||||
1. CI (`infra/ci/github-actions/*-ci.yml`) builds and pushes a container image
|
||||
per app on merge to master, then bumps that app's image tag in
|
||||
`infra/helm/medical-chatbot/values-<env>.yaml` (or a per-app values file)
|
||||
and pushes that commit back to the repo. CI never runs `kubectl apply` or
|
||||
`helm upgrade` directly.
|
||||
2. ArgoCD (team-managed, pointed at this repo) watches `infra/argocd/applications/<env>/`
|
||||
and `infra/helm/medical-chatbot/`, detects the values-file change, and
|
||||
syncs the cluster to match — this is the actual deploy step, owned by
|
||||
ArgoCD, not by our CI.
|
||||
3. Promotion between environments (dev -> staging -> prod) is a Git operation
|
||||
(merge/PR that changes the target values file or image tag for that env),
|
||||
not a manual `kubectl`/`helm` command.
|
||||
|
||||
## Files
|
||||
|
||||
- `applications/dev/app.yaml`, `applications/staging/app.yaml`,
|
||||
`applications/prod/app.yaml` — one ArgoCD `Application` CR per environment,
|
||||
each pointing at this repo + the `infra/helm/medical-chatbot` chart with
|
||||
that environment's values file.
|
||||
|
||||
## TODO once the team's ArgoCD instance details are known
|
||||
|
||||
- Fill in `spec.destination.server` (target cluster API server / context name)
|
||||
in each `app.yaml` — currently a placeholder.
|
||||
- Confirm which ArgoCD `project` (RBAC scoping) these Applications should
|
||||
belong to, instead of the placeholder `default`.
|
||||
- Confirm the repo URL placeholder in each `app.yaml` once the GitHub repo
|
||||
exists (filled in as part of the initial scaffold commit/push).
|
||||
@@ -1,24 +0,0 @@
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: Application
|
||||
metadata:
|
||||
name: medical-chatbot-dev
|
||||
namespace: argocd
|
||||
spec:
|
||||
project: default # TODO: confirm the team's ArgoCD project/RBAC scope for this app
|
||||
source:
|
||||
repoURL: https://github.com/BaoVu2k4/vsf-duocthu.git # TODO: confirm once repo is created
|
||||
targetRevision: master
|
||||
path: infra/helm/medical-chatbot
|
||||
helm:
|
||||
valueFiles:
|
||||
- values.yaml
|
||||
- values-dev.yaml
|
||||
destination:
|
||||
server: https://kubernetes.default.svc # TODO: point at the team's target cluster/context
|
||||
namespace: medical-chatbot-dev
|
||||
syncPolicy:
|
||||
automated:
|
||||
prune: true
|
||||
selfHeal: true
|
||||
syncOptions:
|
||||
- CreateNamespace=true
|
||||
@@ -1,19 +0,0 @@
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: Application
|
||||
metadata:
|
||||
name: medical-chatbot-prod
|
||||
namespace: argocd
|
||||
spec:
|
||||
project: default # TODO: confirm the team's ArgoCD project/RBAC scope for this app
|
||||
source:
|
||||
repoURL: https://github.com/BaoVu2k4/vsf-duocthu.git # TODO: confirm once repo is created
|
||||
targetRevision: master
|
||||
path: infra/helm/medical-chatbot
|
||||
helm:
|
||||
valueFiles:
|
||||
- values.yaml
|
||||
- values-prod.yaml
|
||||
destination:
|
||||
server: https://kubernetes.default.svc # TODO: point at the team's target cluster/context
|
||||
namespace: medical-chatbot-prod
|
||||
syncPolicy: {} # intentionally NOT automated — prod sync requires manual approval in the ArgoCD UI/CLI
|
||||
@@ -1,24 +0,0 @@
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: Application
|
||||
metadata:
|
||||
name: medical-chatbot-staging
|
||||
namespace: argocd
|
||||
spec:
|
||||
project: default # TODO: confirm the team's ArgoCD project/RBAC scope for this app
|
||||
source:
|
||||
repoURL: https://github.com/BaoVu2k4/vsf-duocthu.git # TODO: confirm once repo is created
|
||||
targetRevision: master
|
||||
path: infra/helm/medical-chatbot
|
||||
helm:
|
||||
valueFiles:
|
||||
- values.yaml
|
||||
- values-staging.yaml
|
||||
destination:
|
||||
server: https://kubernetes.default.svc # TODO: point at the team's target cluster/context
|
||||
namespace: medical-chatbot-staging
|
||||
syncPolicy:
|
||||
automated:
|
||||
prune: true
|
||||
selfHeal: true
|
||||
syncOptions:
|
||||
- CreateNamespace=true
|
||||
@@ -1,61 +0,0 @@
|
||||
# Production values for the eventual ArgoCD cutover of realvuxbaro.me.
|
||||
#
|
||||
# Not live yet: production still runs Docker Compose on its own EC2, which is
|
||||
# the DNS-level rollback for the migration. This file is what the production
|
||||
# ArgoCD Application will render from once the rehearsal gates pass.
|
||||
#
|
||||
# The behavioural settings mirror the production runtime contract audited on
|
||||
# 2026-08-17 — see coordination/ARGOCD_PRODUCTION_MIGRATION_STATE_2026-08-17.md.
|
||||
|
||||
global:
|
||||
environment: production
|
||||
# The GHCR packages are private, same as on the practice cluster. The Secret
|
||||
# must exist in the target namespace before the first sync.
|
||||
imagePullSecrets:
|
||||
- name: ghcr-pull-secret
|
||||
|
||||
aiService:
|
||||
replicaCount: 2
|
||||
image:
|
||||
repository: ghcr.io/baovu2k4/vsf-duocthu-ai-service
|
||||
# Deliberately empty. Production must run an immutable, verifiable image,
|
||||
# so the tag is supplied per deploy as a commit SHA — through the ArgoCD
|
||||
# Application's inline values, exactly as the practice cluster does. A
|
||||
# `latest` here would make "which code is production running?" unanswerable
|
||||
# and would break rollback, since the same tag would point at new content.
|
||||
#
|
||||
# `medical-chatbot.image` turns this empty value into a hard render error
|
||||
# rather than a silent fallback to the chart's `local` development tag.
|
||||
tag: ""
|
||||
pullPolicy: Always
|
||||
config:
|
||||
embeddingProvider: cohere-v4
|
||||
embeddingDimensions: 1024
|
||||
evidenceMinimumScore: 0.12
|
||||
awsRegion: us-east-1
|
||||
answerProvider: bedrock-converse
|
||||
answerModelId: qwen.qwen3-next-80b-a3b
|
||||
rerankEnabled: true
|
||||
otelSampleRatio: 0.25
|
||||
|
||||
web:
|
||||
replicaCount: 2
|
||||
image:
|
||||
repository: ghcr.io/baovu2k4/vsf-duocthu-web
|
||||
tag: ""
|
||||
pullPolicy: Always
|
||||
|
||||
ingress:
|
||||
enabled: true
|
||||
host: realvuxbaro.me
|
||||
|
||||
secret:
|
||||
create: false
|
||||
existingSecret: medical-chatbot-prod
|
||||
|
||||
observability:
|
||||
prometheus:
|
||||
retention: 15d
|
||||
|
||||
serviceMonitor:
|
||||
enabled: false
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
# k3s practice cluster — the `medical-chatbot-data` release.
|
||||
# Production — the `medical-chatbot-data` release (PostgreSQL + Qdrant).
|
||||
#
|
||||
# Companion to values-practice.yaml. The practice cluster deliberately splits
|
||||
# Companion to values-production.yaml. The practice cluster deliberately splits
|
||||
# the chart into two ArgoCD Applications so that PostgreSQL and Qdrant survive
|
||||
# every app rollout, prune and self-heal: only this release owns the
|
||||
# PersistentVolumeClaims, so an app-side sync failure can never delete the
|
||||
@@ -13,7 +13,7 @@
|
||||
# image tag that CI rewrites and no secret, so it is fully tracked in Git.
|
||||
|
||||
global:
|
||||
environment: k3s-practice
|
||||
environment: production
|
||||
|
||||
aiService:
|
||||
enabled: false
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
# k3s practice cluster — the `medical-chatbot-app` release.
|
||||
# Production — the `medical-chatbot-app` release serving realvuxbaro.me.
|
||||
#
|
||||
# This file is the Git source of truth for every stable, non-secret setting of
|
||||
# the practice rehearsal environment. It exists because the same values used to
|
||||
# this cluster. It exists because the same values used to
|
||||
# live only inside the ArgoCD Application's inline `spec.source.helm.values`,
|
||||
# where they were invisible to review, diff and rollback: the cluster could
|
||||
# drift from the repository without a single commit recording it. That is how
|
||||
@@ -25,7 +25,7 @@
|
||||
# Practice is only useful as a migration rehearsal while they stay in sync.
|
||||
|
||||
global:
|
||||
environment: k3s-practice
|
||||
environment: production
|
||||
# The GHCR packages are private; without this the Pods fail ImagePullBackOff.
|
||||
imagePullSecrets:
|
||||
- name: ghcr-pull-secret
|
||||
Reference in New Issue
Block a user