Add K8s deployment for OCI (aarch64) and make deploy/deploy-oci targets
- K8s manifests: namespace, PVC (local-path 2Gi), deployment, service, ingress - Ingress: repo-vis.oci.euphon.net with Let's Encrypt TLS via traefik - Cross-compile aarch64-unknown-linux-musl for OCI ARM64 host - make deploy: local Docker (x86_64) - make deploy-oci: SCP binary + web dist to OCI, native docker build, k3s import - Dockerfile accepts MUSL_TARGET build arg for multi-arch support
This commit is contained in:
50
Makefile
50
Makefile
@@ -1,22 +1,29 @@
|
||||
.PHONY: build-server build-web build deploy clean
|
||||
.PHONY: build-server build-web build deploy deploy-oci clean
|
||||
|
||||
MUSL_TARGET := x86_64-unknown-linux-musl
|
||||
MUSL_TARGET_X86 := x86_64-unknown-linux-musl
|
||||
MUSL_TARGET_ARM := aarch64-unknown-linux-musl
|
||||
CONTAINER := repo-vis
|
||||
IMAGE := repo-vis:latest
|
||||
PORT := 9120
|
||||
OCI_HOST := oci.euphon.net
|
||||
|
||||
build-server:
|
||||
cd server && cargo build --release --target $(MUSL_TARGET)
|
||||
build-server-x86:
|
||||
cd server && cargo build --release --target $(MUSL_TARGET_X86)
|
||||
|
||||
build-server-arm:
|
||||
cd server && cargo build --release --target $(MUSL_TARGET_ARM)
|
||||
|
||||
build-web:
|
||||
cd web && npm run build
|
||||
|
||||
build: build-server build-web
|
||||
build: build-server-x86 build-web
|
||||
build-arm: build-server-arm build-web
|
||||
|
||||
# --- Local Docker deploy (x86_64) ---
|
||||
deploy: build
|
||||
-docker stop $(CONTAINER) 2>/dev/null
|
||||
-docker rm $(CONTAINER) 2>/dev/null
|
||||
docker build -t $(IMAGE) .
|
||||
docker build --build-arg MUSL_TARGET=$(MUSL_TARGET_X86) -t $(IMAGE) .
|
||||
docker run -d \
|
||||
--name $(CONTAINER) \
|
||||
-p $(PORT):8080 \
|
||||
@@ -25,6 +32,37 @@ deploy: build
|
||||
$(IMAGE)
|
||||
@echo "repo-vis running at http://localhost:$(PORT)"
|
||||
|
||||
# --- OCI K8s deploy (aarch64, native build on OCI) ---
|
||||
OCI_TMP = /tmp/repo-vis-deploy
|
||||
deploy-oci: build-arm
|
||||
@echo "==> Uploading to OCI..."
|
||||
ssh $(OCI_HOST) "rm -rf $(OCI_TMP) && mkdir -p $(OCI_TMP)"
|
||||
scp server/target/$(MUSL_TARGET_ARM)/release/repo-vis-server $(OCI_HOST):$(OCI_TMP)/
|
||||
cd web && tar czf /tmp/_rv_dist.tar.gz dist && scp /tmp/_rv_dist.tar.gz $(OCI_HOST):$(OCI_TMP)/
|
||||
@echo "==> Building image on OCI..."
|
||||
ssh $(OCI_HOST) 'cd $(OCI_TMP) && tar xzf _rv_dist.tar.gz && cat > Dockerfile <<DEOF\n\
|
||||
FROM alpine:3.21\n\
|
||||
RUN apk add --no-cache git ca-certificates\n\
|
||||
WORKDIR /app\n\
|
||||
COPY repo-vis-server ./\n\
|
||||
COPY dist ./web/dist/\n\
|
||||
ENV PORT=8080\n\
|
||||
ENV FRONTEND_DIR=./web/dist\n\
|
||||
EXPOSE 8080\n\
|
||||
CMD ["./repo-vis-server"]\n\
|
||||
DEOF\n\
|
||||
sudo docker build -t repo-vis:latest . && \
|
||||
sudo docker save repo-vis:latest -o /tmp/_rv.tar && \
|
||||
sudo k3s ctr images import /tmp/_rv.tar'
|
||||
@echo "==> Applying K8s manifests..."
|
||||
ssh $(OCI_HOST) "kubectl apply -f -" < k8s/namespace.yaml
|
||||
ssh $(OCI_HOST) "kubectl apply -f -" < k8s/pvc.yaml
|
||||
ssh $(OCI_HOST) "kubectl apply -f -" < k8s/deployment.yaml
|
||||
ssh $(OCI_HOST) "kubectl apply -f -" < k8s/service.yaml
|
||||
ssh $(OCI_HOST) "kubectl apply -f -" < k8s/ingress.yaml
|
||||
ssh $(OCI_HOST) "kubectl -n repo-vis rollout restart deployment/repo-vis"
|
||||
@echo "==> Deployed to https://repo-vis.oci.euphon.net"
|
||||
|
||||
clean:
|
||||
cd server && cargo clean
|
||||
rm -rf web/dist
|
||||
|
||||
Reference in New Issue
Block a user