diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000..95985fc --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,65 @@ +annotated-types==0.7.0 +anyio==4.4.0 +argon2-cffi==25.1.0 +argon2-cffi-bindings==21.2.0 +boto3==1.34.150 +botocore==1.34.150 +certifi==2024.6.2 +cffi==1.16.0 +charset-normalizer==3.3.2 +click==8.1.7 +colorama==0.4.6 +cryptography==43.0.0 +Deprecated==1.2.14 +dnspython==2.6.1 +email_validator==2.2.0 +fastapi==0.111.0 +fastapi-cli==0.0.4 +gitdb==4.0.11 +GitPython==3.1.43 +h11==0.14.0 +httpcore==1.0.5 +httptools==0.6.1 +httpx==0.27.0 +idna==3.7 +Jinja2==3.1.4 +jmespath==1.0.1 +markdown-it-py==3.0.0 +MarkupSafe==2.1.5 +mdurl==0.1.2 +minio==7.2.15 +numpy==2.2.1 +orjson==3.10.5 +pandas==2.2.3 +prometheus_client==0.21.1 +pycparser==2.22 +pycryptodome==3.23.0 +pydantic==2.8.0 +pydantic_core==2.20.0 +PyGithub==2.3.0 +Pygments==2.18.0 +PyJWT==2.8.0 +pymongo==4.11.2 +PyNaCl==1.5.0 +python-dateutil==2.9.0.post0 +python-dotenv==1.0.1 +python-multipart==0.0.9 +pytz==2024.2 +PyYAML==6.0.1 +requests==2.32.3 +rich==13.7.1 +s3transfer==0.10.2 +shellingham==1.5.4 +six==1.16.0 +smmap==5.0.1 +sniffio==1.3.1 +starlette==0.37.2 +typer==0.12.3 +typing_extensions==4.12.2 +tzdata==2024.2 +ujson==5.10.0 +urllib3==2.2.2 +uvicorn==0.30.1 +watchfiles==0.22.0 +websockets==12.0 +wrapt==1.16.0 diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..a5f2b17 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,26 @@ +# Stage 1: Build +FROM node:20-alpine AS builder + +WORKDIR /app + +COPY package*.json ./ +RUN npm install --legacy-peer-deps + +COPY . . +RUN npm run build + +# Stage 2: Serve with nginx +FROM nginx:alpine + +# Remove default nginx static files +RUN rm -rf /usr/share/nginx/html/* + +# Copy built assets from the builder stage +COPY --from=builder /app/dist /usr/share/nginx/html + +# Copy custom nginx config if needed +# COPY nginx.conf /etc/nginx/conf.d/default.conf + +EXPOSE 80 + +CMD ["nginx", "-g", "daemon off;"] diff --git a/navix-helm/Chart.yaml b/navix-helm/Chart.yaml new file mode 100644 index 0000000..96570a8 --- /dev/null +++ b/navix-helm/Chart.yaml @@ -0,0 +1,4 @@ +apiVersion: v2 +name: navix +version: 0.1.0 +description: A DevOps dashboard called Navix \ No newline at end of file diff --git a/navix-helm/templates/backend-deployment.yaml b/navix-helm/templates/backend-deployment.yaml new file mode 100644 index 0000000..68fe22b --- /dev/null +++ b/navix-helm/templates/backend-deployment.yaml @@ -0,0 +1,29 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: navix-backend +spec: + replicas: 1 + selector: + matchLabels: + app: navix-backend + template: + metadata: + labels: + app: navix-backend + spec: + containers: + - name: backend + image: "{{ .Values.backend.image.repository }}:{{ .Values.backend.image.tag }}" + imagePullPolicy: {{ .Values.backend.image.pullPolicy }} + ports: + - containerPort: 8000 + env: + - name: MINIO_ACCESS_KEY + value: "{{ .Values.backend.env.MINIO_ACCESS_KEY }}" + - name: MINIO_SECRET_KEY + value: "{{ .Values.backend.env.MINIO_SECRET_KEY }}" + - name: MINIO_ENDPOINT + value: "{{ .Values.backend.env.MINIO_ENDPOINT }}" + - name: MINIO_BUCKET + value: "{{ .Values.backend.env.MINIO_BUCKET }}" \ No newline at end of file diff --git a/navix-helm/templates/backend-service.yaml b/navix-helm/templates/backend-service.yaml new file mode 100644 index 0000000..f4e033a --- /dev/null +++ b/navix-helm/templates/backend-service.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: navix-backend +spec: + type: {{ .Values.backend.service.type }} + selector: + app: navix-backend + ports: + - port: {{ .Values.backend.service.port }} + targetPort: 8000 \ No newline at end of file diff --git a/navix-helm/templates/frontend-deployment.yaml b/navix-helm/templates/frontend-deployment.yaml new file mode 100644 index 0000000..1dd733e --- /dev/null +++ b/navix-helm/templates/frontend-deployment.yaml @@ -0,0 +1,20 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: navix-frontend +spec: + replicas: 1 + selector: + matchLabels: + app: navix-frontend + template: + metadata: + labels: + app: navix-frontend + spec: + containers: + - name: frontend + image: "{{ .Values.frontend.image.repository }}:{{ .Values.frontend.image.tag }}" + imagePullPolicy: {{ .Values.frontend.image.pullPolicy }} + ports: + - containerPort: 80 \ No newline at end of file diff --git a/navix-helm/templates/frontend-ingress.yaml b/navix-helm/templates/frontend-ingress.yaml new file mode 100644 index 0000000..55977e5 --- /dev/null +++ b/navix-helm/templates/frontend-ingress.yaml @@ -0,0 +1,23 @@ +{{- if .Values.frontend.ingress.enabled }} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: navix-frontend + annotations: + {{- range $key, $value := .Values.frontend.ingress.annotations }} + {{ $key }}: {{ $value | quote }} + {{- end }} +spec: + ingressClassName: {{ .Values.frontend.ingress.className }} + rules: + - host: {{ .Values.frontend.ingress.hosts[0].host }} + http: + paths: + - path: {{ .Values.frontend.ingress.hosts[0].paths[0].path }} + pathType: {{ .Values.frontend.ingress.hosts[0].paths[0].pathType }} + backend: + service: + name: navix-frontend + port: + number: {{ .Values.frontend.service.port }} +{{- end }} \ No newline at end of file diff --git a/navix-helm/templates/frontend-service.yaml b/navix-helm/templates/frontend-service.yaml new file mode 100644 index 0000000..89f997d --- /dev/null +++ b/navix-helm/templates/frontend-service.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: navix-frontend +spec: + type: {{ .Values.frontend.service.type }} + selector: + app: navix-frontend + ports: + - port: {{ .Values.frontend.service.port }} + targetPort: 80 \ No newline at end of file diff --git a/navix-helm/values.yaml b/navix-helm/values.yaml new file mode 100644 index 0000000..252cf8d --- /dev/null +++ b/navix-helm/values.yaml @@ -0,0 +1,35 @@ +frontend: + image: + repository: harbor.dvirlabs.com/my-apps/navix-frontend + tag: latest + pullPolicy: IfNotPresent + service: + type: ClusterIP + port: 80 + ingress: + enabled: true + className: traefik + annotations: + traefik.ingress.kubernetes.io/router.entrypoints: websecure + traefik.ingress.kubernetes.io/router.tls: "true" + hosts: + - host: navix.dvirlabs.com + paths: + - path: / + pathType: Prefix + +backend: + image: + repository: harbor.dvirlabs.com/my-apps/navix-backend + tag: latest + pullPolicy: IfNotPresent + service: + type: ClusterIP + port: 8000 + env: + MINIO_ACCESS_KEY: "your-access-key" + MINIO_SECRET_KEY: "your-secret-key" + MINIO_ENDPOINT: "s3.dvirlabs.com" + MINIO_BUCKET: "navix-icons" + ingress: + enabled: false \ No newline at end of file