image-manage 圖像管理應用
圖像管理應用提供了一個方便管理圖片的平臺,支持單機和Kubernetes集群部署。請確保您至少擁有一個MySQL數據庫和一個Redis數據庫,以及一個至少為Kubernetes 1.29版本的集群(如果選擇集群部署)。
文檔及更多信息
注意??
- 需要至少一個MySQL數據庫
- 需要至少一個Redis數據庫
- 如果采用集群部署,需要一個版本至少為Kubernetes 1.29的集群
單機部署(Docker)
使用Docker拉取并運行image-manage:
docker run -p 8080:8080 \-v 你的數據目錄:/app\-e CONFIG_ISCLUSTERMODEENABLED=false \-e SPRING_DATASOURCE_URL=jdbc:mysql://192.168.0.254:3306/image_manage?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai \-e SPRING_DATASOURCE_USERNAME=root \-e SPRING_DATASOURCE_PASSWORD=123456 \-e SPRING_REDIS_HOST=192.168.0.254 \-e SPRING_REDIS_PASSWORD=123456 \wnzzer/image-manage:latest
倉庫地址: https://github.com/wnzzer/image-manage
提示
- 由于Spring Boot的配置替換策略,可以根據需要替換更多的Spring Boot參數配置。
集群部署部署(k8s)‘
前置要求
- 安裝metrics server,以支持應用監控資源。如果沒有該組件,Kubernetes metrics API將無法工作,image-manage也將無法收集Pod資源信息。
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
部署image-manage
wget https://github.com/wnzzer/image-manage/releases/latest/download/image-manage-yaml
apiVersion: v1
kind: Namespace
metadata:name: image-manage---
# storeclass 聲明,非常關鍵,用于動態分配卷
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-store-class
provisioner: image-manage-pv-provisioner # 替換為實際的卷插件,我這里使用的是nfs的自動供應器,可以采用公用云或者其他pv自動供應器
reclaimPolicy: Delete
parameters:volumeSize: "1Gi" # 應用存儲圖片的空間nfsServer: 192.168.0.254nfsPath: /volume1/nfs---
# configMap k8s權限配置到英雄
apiVersion: v1
kind: ConfigMap
metadata:namespace: image-managename: k8s-role-config
data:key1: ./admin.config---# 應用
apiVersion: apps/v1
kind: StatefulSet
metadata:namespace: image-managename: image-manage
spec:serviceName: "image-manage-headless-service"replicas: 2selector:matchLabels:app: image-managetemplate:metadata:labels:app: image-managespec:containers:- name: image-manageimage: wnzzer/image-manage:latestports: - containerPort: 8080env:- name: SPRING_PROFILES_ACTIVEvalue: "prod"- name: CONFIG_ISCLUSTERMODEENABLEDvalue: "false"- name: SPRING_DATASOURCE_URLvalue: "jdbc:mysql://192.168.0.254:3306/image_manage?userUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai"- name: SPRING_DATASOURCE_USERNAMEvalue: "root"- name: SPRING_DATASOURCE_PASSWORDvalue: "123456"- name: SPRING_REDIS_HOSTvalue: "192.168.0.254"- name: SPRING_REDIS_PASSWORDvalue: "123456"volumeMounts:- name: local-volmountPath: "/app"- name: config-volume # 掛載ConfigMap作為卷mountPath: "/etc/image-manage/config" # 指定掛載ConfigMap的路徑volumes:- name: config-volume # 定義卷使用的ConfigMapconfigMap:name: k8s-admin-role-config # 指定ConfigMap的名稱volumeClaimTemplates:- metadata:name: local-volspec:accessModes: [ "ReadWriteOnce" ]storageClassName: "nfs-store-class"resources:requests:storage: 1Gi---
# 無頭服務,用于應用的同步通信
apiVersion: v1
kind: Service
metadata:name: image-manage-headless-servicenamespace: image-manage
spec:clusterIP: Noneselector:app: image-manageports:- protocol: TCPport: 8080targetPort: 8080---
# cluster service 用于輸出api
apiVersion: v1
kind: Service
metadata:name: image-manage-cluster-servicenamespace: image-manage
spec:type: ClusterIPports:- port: 8080targetPort: 8080selector:app: image-manage
kubectl apply -f image-manage.yaml
- 這里同樣需要把redis,mysql修改成自己的配置
- 這里需要有自己的pv供應器,由于是pv動態創建,所以需要搭配自動供應器給statusfulSet創建pv,示例中使用的是nfs
- image-manage 需要搭配 k8s 配置進行對k8s api的訪問,這里實例使用的是admin.conf,使用configmap掛載到容器里,如果想要更細致的權限劃分,請將權限配置至少給予 image-manage級別的權限。
- 創建的k8s用戶文件請將命名為admin.conf,因為應用里指定了k8s配置文件為admin.conf,其他名稱會無法讀取。
訪問
我們可以直接在k8s中部署nginx,反代 image-manage cluster ip,進行訪問,
運行web ui
cd font-userui
npm i
npm run dev