首次提交:初始化项目代码
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
# 部署指南:在能访问外网的 Linux 服务器上执行
|
||||
# 1) 替换 yourdomain.com / yourname / your-email@example.com
|
||||
# 2) docker login && docker build -f deployments/docker/auth-service.Dockerfile -t yourname/auth-service:v1 .
|
||||
# 3) docker build -f deployments/docker/file-service.Dockerfile -t yourname/file-service:v1 .
|
||||
# 4) docker push yourname/auth-service:v1 && docker push yourname/file-service:v1
|
||||
# 5) kubectl apply -f deployments/k8s/
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: cloudnest
|
||||
@@ -0,0 +1,61 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: auth-service
|
||||
namespace: cloudnest
|
||||
labels:
|
||||
app: auth-service
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: auth-service
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: auth-service
|
||||
spec:
|
||||
containers:
|
||||
- name: auth-service
|
||||
# 替换 yourname 为你的 Docker Hub 用户名
|
||||
# 若在服务器本地构建,把 imagePullPolicy 改为 Never
|
||||
image: yourname/auth-service:v1
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- containerPort: 8081
|
||||
name: http
|
||||
env:
|
||||
- name: AUTH_PORT
|
||||
value: "8081"
|
||||
- name: JWT_SECRET
|
||||
value: "cloudnest-secret-key"
|
||||
- name: MYSQL_DSN
|
||||
value: "root:cloudnest123@tcp(mysql:3306)/cloudnest?charset=utf8mb4&parseTime=True&loc=Local"
|
||||
- name: REDIS_ADDR
|
||||
value: "redis:6379"
|
||||
resources:
|
||||
limits:
|
||||
memory: "128Mi"
|
||||
cpu: "300m"
|
||||
requests:
|
||||
memory: "64Mi"
|
||||
cpu: "50m"
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /healthz
|
||||
port: 8081
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 10
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: auth-service
|
||||
namespace: cloudnest
|
||||
spec:
|
||||
selector:
|
||||
app: auth-service
|
||||
ports:
|
||||
- port: 8081
|
||||
targetPort: 8081
|
||||
name: http
|
||||
@@ -0,0 +1,66 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: file-service
|
||||
namespace: cloudnest
|
||||
labels:
|
||||
app: file-service
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: file-service
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: file-service
|
||||
spec:
|
||||
containers:
|
||||
- name: file-service
|
||||
# 替换 yourname 为你的 Docker Hub 用户名
|
||||
image: yourname/file-service:v1
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- containerPort: 8082
|
||||
name: http
|
||||
env:
|
||||
- name: FILE_PORT
|
||||
value: "8082"
|
||||
- name: JWT_SECRET
|
||||
value: "cloudnest-secret-key"
|
||||
- name: MINIO_ENDPOINT
|
||||
value: "minio:9000"
|
||||
- name: MINIO_ACCESS_KEY
|
||||
value: "minioadmin"
|
||||
- name: MINIO_SECRET_KEY
|
||||
value: "minioadmin"
|
||||
- name: MINIO_BUCKET
|
||||
value: "cloudnest-files"
|
||||
- name: MINIO_USE_SSL
|
||||
value: "false"
|
||||
resources:
|
||||
limits:
|
||||
memory: "128Mi"
|
||||
cpu: "300m"
|
||||
requests:
|
||||
memory: "64Mi"
|
||||
cpu: "50m"
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /healthz
|
||||
port: 8082
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 10
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: file-service
|
||||
namespace: cloudnest
|
||||
spec:
|
||||
selector:
|
||||
app: file-service
|
||||
ports:
|
||||
- port: 8082
|
||||
targetPort: 8082
|
||||
name: http
|
||||
@@ -0,0 +1,56 @@
|
||||
# CloudNest Ingress 路由 + Let's Encrypt 自动证书
|
||||
# 1) 将所有 yourdomain.com 替换成你的真实域名
|
||||
# 2) 提前按部署指南 5.5 启用 certResolver: letsencrypt
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: strip-prefix
|
||||
namespace: cloudnest
|
||||
spec:
|
||||
stripPrefix:
|
||||
prefixes:
|
||||
- /auth
|
||||
- /files
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: cloudnest-ingress
|
||||
namespace: cloudnest
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`api.yourdomain.com`) && PathPrefix(`/auth`)
|
||||
kind: Rule
|
||||
middlewares:
|
||||
- name: strip-prefix
|
||||
services:
|
||||
- name: auth-service
|
||||
port: 8081
|
||||
- match: Host(`api.yourdomain.com`) && PathPrefix(`/files`)
|
||||
kind: Rule
|
||||
middlewares:
|
||||
- name: strip-prefix
|
||||
services:
|
||||
- name: file-service
|
||||
port: 8082
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: minio-console
|
||||
namespace: cloudnest
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`minio.yourdomain.com`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: minio
|
||||
port: 9001
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
@@ -0,0 +1,72 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: minio
|
||||
namespace: cloudnest
|
||||
labels:
|
||||
app: minio
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: minio
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: minio
|
||||
spec:
|
||||
containers:
|
||||
- name: minio
|
||||
image: minio/minio:latest
|
||||
args:
|
||||
- server
|
||||
- /data
|
||||
- --console-address
|
||||
- ":9001"
|
||||
env:
|
||||
- name: MINIO_ROOT_USER
|
||||
value: "minioadmin"
|
||||
- name: MINIO_ROOT_PASSWORD
|
||||
value: "minioadmin"
|
||||
ports:
|
||||
- containerPort: 9000
|
||||
name: api
|
||||
- containerPort: 9001
|
||||
name: console
|
||||
resources:
|
||||
limits:
|
||||
memory: "256Mi"
|
||||
cpu: "500m"
|
||||
requests:
|
||||
memory: "128Mi"
|
||||
cpu: "100m"
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /minio/health/live
|
||||
port: 9000
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
volumeMounts:
|
||||
- name: minio-data
|
||||
mountPath: /data
|
||||
volumes:
|
||||
- name: minio-data
|
||||
hostPath:
|
||||
path: /data/minio
|
||||
type: DirectoryOrCreate
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: minio
|
||||
namespace: cloudnest
|
||||
spec:
|
||||
selector:
|
||||
app: minio
|
||||
ports:
|
||||
- name: api
|
||||
port: 9000
|
||||
targetPort: 9000
|
||||
- name: console
|
||||
port: 9001
|
||||
targetPort: 9001
|
||||
@@ -0,0 +1,66 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: mysql
|
||||
namespace: cloudnest
|
||||
labels:
|
||||
app: mysql
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: mysql
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: mysql
|
||||
spec:
|
||||
containers:
|
||||
- name: mysql
|
||||
image: mysql:8.0
|
||||
env:
|
||||
- name: MYSQL_ROOT_PASSWORD
|
||||
value: "cloudnest123"
|
||||
- name: MYSQL_DATABASE
|
||||
value: "cloudnest"
|
||||
ports:
|
||||
- containerPort: 3306
|
||||
name: mysql
|
||||
resources:
|
||||
limits:
|
||||
memory: "256Mi"
|
||||
cpu: "500m"
|
||||
requests:
|
||||
memory: "128Mi"
|
||||
cpu: "100m"
|
||||
readinessProbe:
|
||||
exec:
|
||||
command: ["mysqladmin", "ping", "-h", "127.0.0.1", "-uroot", "-pcloudnest123"]
|
||||
initialDelaySeconds: 15
|
||||
periodSeconds: 10
|
||||
livenessProbe:
|
||||
exec:
|
||||
command: ["mysqladmin", "ping", "-h", "127.0.0.1", "-uroot", "-pcloudnest123"]
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 20
|
||||
volumeMounts:
|
||||
- name: mysql-data
|
||||
mountPath: /var/lib/mysql
|
||||
volumes:
|
||||
- name: mysql-data
|
||||
hostPath:
|
||||
path: /data/mysql
|
||||
type: DirectoryOrCreate
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: mysql
|
||||
namespace: cloudnest
|
||||
spec:
|
||||
selector:
|
||||
app: mysql
|
||||
ports:
|
||||
- port: 3306
|
||||
targetPort: 3306
|
||||
name: mysql
|
||||
@@ -0,0 +1,43 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: redis
|
||||
namespace: cloudnest
|
||||
labels:
|
||||
app: redis
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: redis
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: redis
|
||||
spec:
|
||||
containers:
|
||||
- name: redis
|
||||
image: redis:7-alpine
|
||||
ports:
|
||||
- containerPort: 6379
|
||||
name: redis
|
||||
resources:
|
||||
limits:
|
||||
memory: "64Mi"
|
||||
cpu: "200m"
|
||||
requests:
|
||||
memory: "32Mi"
|
||||
cpu: "50m"
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: redis
|
||||
namespace: cloudnest
|
||||
spec:
|
||||
selector:
|
||||
app: redis
|
||||
ports:
|
||||
- port: 6379
|
||||
targetPort: 6379
|
||||
name: redis
|
||||
Reference in New Issue
Block a user