service:photoprism
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
service:photoprism [27.12.2021 14:32] – [k8s] viacheslav | service:photoprism [30.07.2024 19:21] (текущий) – внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Photoprism ====== | ||
+ | https:// | ||
+ | https:// | ||
+ | https:// | ||
+ | https:// | ||
+ | |||
+ | ===== k8s ===== | ||
+ | ==== Учётные данные (secret) ==== | ||
+ | ('' | ||
+ | ++++ photoprism-secret.yaml | | ||
+ | <file yaml photoprism-secret.yaml> | ||
+ | apiVersion: v1 | ||
+ | kind: Secret | ||
+ | metadata: | ||
+ | name: photoprism | ||
+ | type: Opaque | ||
+ | data: | ||
+ | admin-pass: YWRtaW4= | ||
+ | mysql-user: cGhvdG9wcmlzbQ== | ||
+ | mysql-pass: cGFzc3dvcmQ= | ||
+ | mysql-root-pass: | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | ==== Конфигурация ==== | ||
+ | Конфиг site-url должен быть тем же, к которому обращается пользователь, | ||
+ | ++++ photoprism-conf.yaml | | ||
+ | <file yaml photoprism-conf.yaml> | ||
+ | apiVersion: v1 | ||
+ | kind: ConfigMap | ||
+ | metadata: | ||
+ | name: photoprism | ||
+ | data: | ||
+ | site-url: " | ||
+ | site-title: "Test photo site" | ||
+ | site-caption: | ||
+ | site-description: | ||
+ | site-author: | ||
+ | home: "/ | ||
+ | uid: " | ||
+ | gid: " | ||
+ | db-driver: " | ||
+ | db-server: " | ||
+ | db-name: " | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | ==== База данных ==== | ||
+ | Под БД + сервис ClusterIP | ||
+ | ++++ photoprism-db-deploy.yaml | | ||
+ | <file yaml photoprism-db-deploy.yaml> | ||
+ | apiVersion: apps/v1 | ||
+ | kind: Deployment | ||
+ | metadata: | ||
+ | name: photoprism-db | ||
+ | labels: | ||
+ | app: photoprism-db | ||
+ | spec: | ||
+ | selector: | ||
+ | matchLabels: | ||
+ | app: photoprism-db | ||
+ | template: | ||
+ | metadata: | ||
+ | labels: | ||
+ | app: photoprism-db | ||
+ | spec: | ||
+ | containers: | ||
+ | - name: photoprism-db | ||
+ | image: mariadb | ||
+ | resources: | ||
+ | limits: | ||
+ | memory: " | ||
+ | cpu: " | ||
+ | env: | ||
+ | - name: MYSQL_ROOT_PASSWORD | ||
+ | valueFrom: | ||
+ | secretKeyRef: | ||
+ | name: photoprism | ||
+ | key: mysql-root-pass | ||
+ | - name: MYSQL_DATABASE | ||
+ | valueFrom: | ||
+ | configMapKeyRef: | ||
+ | name: photoprism | ||
+ | key: db-name | ||
+ | - name: MYSQL_USER | ||
+ | valueFrom: | ||
+ | secretKeyRef: | ||
+ | name: photoprism | ||
+ | key: mysql-user | ||
+ | - name: MYSQL_PASSWORD | ||
+ | valueFrom: | ||
+ | secretKeyRef: | ||
+ | name: photoprism | ||
+ | key: mysql-pass | ||
+ | volumeMounts: | ||
+ | - mountPath: / | ||
+ | name: photoprism-db | ||
+ | ports: | ||
+ | - containerPort: | ||
+ | volumes: | ||
+ | - name: photoprism-db | ||
+ | hostPath: | ||
+ | path: / | ||
+ | type: DirectoryOrCreate | ||
+ | --- | ||
+ | apiVersion: v1 | ||
+ | kind: Service | ||
+ | metadata: | ||
+ | name: photoprism-db | ||
+ | spec: | ||
+ | selector: | ||
+ | app: photoprism-db | ||
+ | ports: | ||
+ | - port: 3306 | ||
+ | targetPort: 3306 | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | ==== Приложение ==== | ||
+ | Под приложения + сервис NodePort | ||
+ | ++++ photoprism-deploy.yaml | | ||
+ | <file yaml photoprism-deploy.yaml> | ||
+ | apiVersion: apps/v1 | ||
+ | kind: Deployment | ||
+ | metadata: | ||
+ | name: photoprism | ||
+ | labels: | ||
+ | app: photoprism | ||
+ | spec: | ||
+ | selector: | ||
+ | matchLabels: | ||
+ | app: photoprism | ||
+ | template: | ||
+ | metadata: | ||
+ | labels: | ||
+ | app: photoprism | ||
+ | spec: | ||
+ | containers: | ||
+ | - name: photoprism | ||
+ | image: photoprism/ | ||
+ | resources: | ||
+ | limits: | ||
+ | memory: " | ||
+ | cpu: " | ||
+ | env: | ||
+ | - name: PHOTOPRISM_ADMIN_PASSWORD | ||
+ | valueFrom: | ||
+ | secretKeyRef: | ||
+ | name: photoprism | ||
+ | key: admin-pass | ||
+ | - name: PHOTOPRISM_SITE_URL | ||
+ | valueFrom: | ||
+ | configMapKeyRef: | ||
+ | name: photoprism | ||
+ | key: site-url | ||
+ | - name: PHOTOPRISM_DATABASE_DRIVER | ||
+ | valueFrom: | ||
+ | configMapKeyRef: | ||
+ | name: photoprism | ||
+ | key: db-driver | ||
+ | - name: PHOTOPRISM_DATABASE_SERVER | ||
+ | valueFrom: | ||
+ | configMapKeyRef: | ||
+ | name: photoprism | ||
+ | key: db-server | ||
+ | - name: PHOTOPRISM_DATABASE_NAME | ||
+ | valueFrom: | ||
+ | configMapKeyRef: | ||
+ | name: photoprism | ||
+ | key: db-name | ||
+ | - name: PHOTOPRISM_DATABASE_USER | ||
+ | valueFrom: | ||
+ | secretKeyRef: | ||
+ | name: photoprism | ||
+ | key: mysql-user | ||
+ | - name: PHOTOPRISM_DATABASE_PASSWORD | ||
+ | valueFrom: | ||
+ | secretKeyRef: | ||
+ | name: photoprism | ||
+ | key: mysql-pass | ||
+ | - name: PHOTOPRISM_SITE_TITLE | ||
+ | valueFrom: | ||
+ | configMapKeyRef: | ||
+ | name: photoprism | ||
+ | key: site-title | ||
+ | - name: PHOTOPRISM_SITE_CAPTION | ||
+ | valueFrom: | ||
+ | configMapKeyRef: | ||
+ | name: photoprism | ||
+ | key: site-caption | ||
+ | - name: PHOTOPRISM_SITE_DESCRIPTION | ||
+ | valueFrom: | ||
+ | configMapKeyRef: | ||
+ | name: photoprism | ||
+ | key: site-description | ||
+ | - name: PHOTOPRISM_SITE_AUTHOR | ||
+ | valueFrom: | ||
+ | configMapKeyRef: | ||
+ | name: photoprism | ||
+ | key: site-author | ||
+ | - name: HOME | ||
+ | valueFrom: | ||
+ | configMapKeyRef: | ||
+ | name: photoprism | ||
+ | key: home | ||
+ | - name: PHOTOPRISM_UID | ||
+ | valueFrom: | ||
+ | configMapKeyRef: | ||
+ | name: photoprism | ||
+ | key: uid | ||
+ | - name: PHOTOPRISM_GID | ||
+ | valueFrom: | ||
+ | configMapKeyRef: | ||
+ | name: photoprism | ||
+ | key: gid | ||
+ | workingDir: "/ | ||
+ | volumeMounts: | ||
+ | - mountPath: "/ | ||
+ | name: photoprism | ||
+ | ports: | ||
+ | - containerPort: | ||
+ | volumes: | ||
+ | - name: photoprism | ||
+ | hostPath: | ||
+ | path: / | ||
+ | type: DirectoryOrCreate | ||
+ | --- | ||
+ | apiVersion: v1 | ||
+ | kind: Service | ||
+ | metadata: | ||
+ | name: photoprism | ||
+ | spec: | ||
+ | type: NodePort | ||
+ | selector: | ||
+ | app: photoprism | ||
+ | ports: | ||
+ | - port: 2342 | ||
+ | targetPort: 2342 | ||
+ | nodePort: 32342 | ||
+ | |||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | ==== Ingress ==== | ||
+ | При использовании Ingress нужно убрать NodePort из сервиса. | ||
+ | |||
+ | Сначала нужно создать секрет с сертификатом. Если есть промежуточные сертификаты, | ||
+ | <code bash> | ||
+ | k create secret tls domain.ru-wildcard-tls --cert=tls.crt --key=tls.key | ||
+ | </ | ||
+ | Сертификат заработал только тогда, когда секрет с ним находился в том же пространстве имён, что и целевой под, а вовсе не в пространстве имён ingress, как говорится в некоторых роликах в интернете. | ||
+ | |||
+ | В объекте Ingress необходимо соответствие имён хостов в разделах tls и rules, даже если сертификат wildcard. | ||
+ | ++++ photoprism-ingress.yaml | | ||
+ | <file yaml photoprism-ingress.yaml> | ||
+ | apiVersion: networking.k8s.io/ | ||
+ | kind: Ingress | ||
+ | metadata: | ||
+ | name: ingress | ||
+ | annotations: | ||
+ | nginx.ingress.kubernetes.io/ | ||
+ | nginx.ingress.kubernetes.io/ | ||
+ | spec: | ||
+ | tls: | ||
+ | - hosts: | ||
+ | - docker.domain.ru | ||
+ | secretName: domain.ru-wildcard-tls | ||
+ | rules: | ||
+ | - host: docker.domain.ru | ||
+ | http: | ||
+ | paths: | ||
+ | - path: /photo | ||
+ | pathType: Prefix | ||
+ | backend: | ||
+ | service: | ||
+ | name: photoprism | ||
+ | port: | ||
+ | number: 2342 | ||
+ | |||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | https:// | ||
+ | https:// | ||
+ | https:// | ||
+ | |||