kubectl get nodes
, bạn sẽ thấy node có trạng thái Ready.smarthire-blog
, chạy:.jar
trong build/libs/
.Dockerfile
trong thư mục gốc, nội dung:FROM eclipse-temurin:21-jre-jammyRUN groupadd --system spring && useradd --system --gid spring springUSER spring:springCOPY build/libs/*.jar app.jarENTRYPOINT ["java", "-jar", "/app.jar"]EXPOSE 8080
Lệnh | Mục đích |
---|---|
FROM eclipse-temurin | Sử dụng Java Runtime nhẹ (JRE) Ubuntu Jammy 21 |
RUN groupadd ... | Tạo user không đặc quyền để chạy ứng dụng |
USER spring:spring | Chạy ứng dụng dưới user spring để tăng bảo mật |
COPY build/libs/*.jar | Sao chép file jar vào container |
ENTRYPOINT ... | Khởi chạy ứng dụng Spring Boot |
EXPOSE 8080 | Thông báo ứng dụng lắng nghe cổng 8080 |
docker build -t smarthire-app:v1 .
docker images
k8s/postgres-k8s.yaml
với nội dung chính:apiVersion: apps/v1kind: Deploymentmetadata: name: postgresspec: replicas: 1 selector: matchLabels: app: postgres template: metadata: labels: app: postgres spec: containers: - name: postgres image: pgvector/pgvector:pg17 ports: - containerPort: 5432 env: - name: POSTGRES_DB value: "smarthire" - name: POSTGRES_USER value: "YOUR_USER" - name: POSTGRES_PASSWORD value: "YOUR_PASSWORD" # ⚠️ Dùng Secret ở môi trường production volumeMounts: - name: postgres-data mountPath: /var/lib/postgresql/data volumes: - name: postgres-data persistentVolumeClaim: claimName: postgres-pvc---apiVersion: v1kind: PersistentVolumeClaimmetadata: name: postgres-pvcspec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi---apiVersion: v1kind: Servicemetadata: name: postgresspec: type: ClusterIP ports: - port: 5432 targetPort: 5432 selector: app: postgres
k8s/app-k8s.yaml
:apiVersion: apps/v1kind: Deploymentmetadata: name: smarthire-appspec: replicas: 1 selector: matchLabels: app: smarthire-app template: metadata: labels: app: smarthire-app spec: containers: - name: smarthire-app image: smarthire-app:v1 imagePullPolicy: IfNotPresent ports: - containerPort: 8080 env: - name: SPRING_DATASOURCE_URL value: "jdbc:postgresql://postgres:5432/smarthire" - name: SPRING_DATASOURCE_USERNAME value: "YOUR_USER" - name: SPRING_DATASOURCE_PASSWORD value: "YOUR_PASSWORD" - name: GOOGLE_APPLICATION_CREDENTIALS value: /etc/gcp-auth/key.json volumeMounts: - name: gcp-sa-key-volume mountPath: /etc/gcp-auth readOnly: true volumes: - name: gcp-sa-key-volume secret: secretName: gcp-sa-key---apiVersion: v1kind: Servicemetadata: name: smarthire-appspec: type: LoadBalancer ports: - port: 8090 targetPort: 8080 selector: app: smarthire-app
Vertex AI User
trong Google Cloud.kubectl create secret generic gcp-sa-key --from-file=key.json=/path/to/your/service-account-key.json
/etc/gcp-auth/key.json
theo cấu hình manifest.kubectl apply -f k8s/postgres-k8s.yamlkubectl apply -f k8s/app-k8s.yaml
kubectl get pods
postgres
và smarthire-app
cần có trạng thái Running
.kubectl get pods | grep smarthire-app
kubectl logs <smarthire-app-pod-name>
kubectl logs -f <smarthire-app-pod-name>
kubectl get services
smarthire-app
với TYPE: LoadBalancer
và port ngoài là 8090
.http://localhost:8090
/api/candidates/upload