feat: CI/CD pipeline + Learning/Medicine/Travel services
- Add Gitea Actions workflow for automated build & deploy - Add K8s manifests: webui, travel-svc, medicine-svc, sandbox-svc - Update kustomization for localhost:5000 registry - Add ingress for gooseek.ru and api.gooseek.ru - Learning cabinet with onboarding, courses, sandbox integration - Medicine service with symptom analysis and doctor matching - Travel service with itinerary planning - Server setup scripts (NVIDIA/CUDA, K3s, Gitea runner) Made-with: Cursor
This commit is contained in:
@@ -3,9 +3,24 @@ set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
BACKEND_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
ROOT_DIR="$(cd "$BACKEND_DIR/.." && pwd)"
|
||||
ENV_FILE="$ROOT_DIR/.env"
|
||||
|
||||
echo "=== GooSeek Go Backend K8s Deployment ==="
|
||||
REGISTRY="localhost:5000"
|
||||
IMAGE_TAG="${IMAGE_TAG:-latest}"
|
||||
|
||||
echo "=== GooSeek K8s Deployment ==="
|
||||
echo "Backend dir: $BACKEND_DIR"
|
||||
echo "Registry: $REGISTRY"
|
||||
echo "Tag: $IMAGE_TAG"
|
||||
|
||||
# Load .env
|
||||
if [ -f "$ENV_FILE" ]; then
|
||||
echo "Loading env from $ENV_FILE"
|
||||
set -a
|
||||
source "$ENV_FILE"
|
||||
set +a
|
||||
fi
|
||||
|
||||
# Check kubectl
|
||||
if ! command -v kubectl &> /dev/null; then
|
||||
@@ -13,17 +28,40 @@ if ! command -v kubectl &> /dev/null; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Build Docker image
|
||||
# Build and push backend image
|
||||
echo ""
|
||||
echo "=== Building Docker image ==="
|
||||
echo "=== Building Go backend image ==="
|
||||
cd "$BACKEND_DIR"
|
||||
docker build -f deploy/docker/Dockerfile.all -t gooseek/backend:latest .
|
||||
docker build -f deploy/docker/Dockerfile.all \
|
||||
-t "$REGISTRY/gooseek/backend:$IMAGE_TAG" \
|
||||
-t "$REGISTRY/gooseek/backend:latest" \
|
||||
.
|
||||
|
||||
# Load to k3s (if using k3s)
|
||||
if command -v k3s &> /dev/null; then
|
||||
echo ""
|
||||
echo "=== Loading image to k3s ==="
|
||||
docker save gooseek/backend:latest | sudo k3s ctr images import -
|
||||
echo "=== Pushing backend to registry ==="
|
||||
docker push "$REGISTRY/gooseek/backend:$IMAGE_TAG"
|
||||
docker push "$REGISTRY/gooseek/backend:latest"
|
||||
|
||||
# Build and push webui image
|
||||
echo ""
|
||||
echo "=== Building webui image ==="
|
||||
docker build \
|
||||
-f "$BACKEND_DIR/webui/Dockerfile" \
|
||||
--build-arg "NEXT_PUBLIC_ENABLED_ROUTES=${NEXT_PUBLIC_ENABLED_ROUTES:-}" \
|
||||
--build-arg "NEXT_PUBLIC_TWOGIS_API_KEY=${NEXT_PUBLIC_TWOGIS_API_KEY:-}" \
|
||||
-t "$REGISTRY/gooseek/webui:$IMAGE_TAG" \
|
||||
-t "$REGISTRY/gooseek/webui:latest" \
|
||||
"$BACKEND_DIR/webui"
|
||||
|
||||
echo "=== Pushing webui to registry ==="
|
||||
docker push "$REGISTRY/gooseek/webui:$IMAGE_TAG"
|
||||
docker push "$REGISTRY/gooseek/webui:latest"
|
||||
|
||||
# Generate configmap/secrets from .env via envsubst
|
||||
echo ""
|
||||
echo "=== Generating K8s manifests from .env ==="
|
||||
if command -v envsubst &> /dev/null && [ -f "$ENV_FILE" ]; then
|
||||
envsubst < "$SCRIPT_DIR/configmap.yaml" > "$SCRIPT_DIR/_generated_configmap.yaml"
|
||||
kubectl apply -f "$SCRIPT_DIR/_generated_configmap.yaml" -n gooseek
|
||||
fi
|
||||
|
||||
# Apply kustomization
|
||||
@@ -32,20 +70,31 @@ echo "=== Applying K8s manifests ==="
|
||||
cd "$SCRIPT_DIR"
|
||||
kubectl apply -k .
|
||||
|
||||
# Rolling restart to pull new images
|
||||
echo ""
|
||||
echo "=== Rolling restart deployments ==="
|
||||
kubectl -n gooseek rollout restart deployment/api-gateway
|
||||
kubectl -n gooseek rollout restart deployment/webui
|
||||
kubectl -n gooseek rollout restart deployment/chat-svc
|
||||
kubectl -n gooseek rollout restart deployment/agent-svc
|
||||
kubectl -n gooseek rollout restart deployment/discover-svc
|
||||
kubectl -n gooseek rollout restart deployment/search-svc
|
||||
kubectl -n gooseek rollout restart deployment/learning-svc
|
||||
kubectl -n gooseek rollout restart deployment/medicine-svc
|
||||
kubectl -n gooseek rollout restart deployment/travel-svc
|
||||
kubectl -n gooseek rollout restart deployment/sandbox-svc
|
||||
|
||||
# Wait for rollout
|
||||
echo ""
|
||||
echo "=== Waiting for deployments ==="
|
||||
kubectl -n gooseek rollout status deployment/api-gateway --timeout=120s || true
|
||||
echo "=== Waiting for rollouts ==="
|
||||
kubectl -n gooseek rollout status deployment/api-gateway --timeout=180s || true
|
||||
kubectl -n gooseek rollout status deployment/chat-svc --timeout=120s || true
|
||||
kubectl -n gooseek rollout status deployment/agent-svc --timeout=120s || true
|
||||
kubectl -n gooseek rollout status deployment/discover-svc --timeout=120s || true
|
||||
kubectl -n gooseek rollout status deployment/search-svc --timeout=120s || true
|
||||
kubectl -n gooseek rollout status deployment/redis --timeout=60s || true
|
||||
|
||||
# Show status
|
||||
echo ""
|
||||
echo "=== Deployment Status ==="
|
||||
kubectl -n gooseek get pods
|
||||
kubectl -n gooseek get pods -o wide
|
||||
echo ""
|
||||
kubectl -n gooseek get svc
|
||||
echo ""
|
||||
@@ -53,4 +102,5 @@ kubectl -n gooseek get ingress
|
||||
|
||||
echo ""
|
||||
echo "=== Done ==="
|
||||
echo "API Gateway: http://localhost:3015 (NodePort) or via Ingress"
|
||||
echo "API: https://api.gooseek.ru"
|
||||
echo "Web: https://gooseek.ru"
|
||||
|
||||
Reference in New Issue
Block a user