Start working on immich (still WIP)
This commit is contained in:
parent
782e479552
commit
acca7358f1
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
- url: ../common.git
|
|
@ -0,0 +1,146 @@
|
||||||
|
[[ $c := merge .immich . -]]
|
||||||
|
|
||||||
|
job [[ .immich.instance | toJSON ]] {
|
||||||
|
|
||||||
|
[[ template "common/job_start.tpl" . ]]
|
||||||
|
|
||||||
|
[[ $c := merge .immich.server . -]]
|
||||||
|
|
||||||
|
group "immich" {
|
||||||
|
|
||||||
|
network {
|
||||||
|
mode = "bridge"
|
||||||
|
}
|
||||||
|
|
||||||
|
volume "data" {
|
||||||
|
type = [[ .immich.volumes.data.type | toJSON ]]
|
||||||
|
source = [[ .immich.volumes.data.source | toJSON ]]
|
||||||
|
[[- if ne .immich.volumes.data.type "host" ]]
|
||||||
|
access_mode = "single-node-writer"
|
||||||
|
attachment_mode = "file-system"
|
||||||
|
[[- end ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
# volume "ml" {
|
||||||
|
# type = [[ .immich.volumes.ml.type | toJSON ]]
|
||||||
|
# source = [[ .immich.volumes.ml.source | toJSON ]]
|
||||||
|
#[[- if ne .immich.volumes.ml.type "host" ]]
|
||||||
|
# access_mode = "single-node-writer"
|
||||||
|
# attachment_mode = "file-system"
|
||||||
|
#[[- end ]]
|
||||||
|
# }
|
||||||
|
|
||||||
|
# volume "typesense" {
|
||||||
|
# type = [[ .immich.volumes.typesense.type | toJSON ]]
|
||||||
|
# source = [[ .immich.volumes.typesense.source | toJSON ]]
|
||||||
|
#[[- if ne .immich.volumes.typesense.type "host" ]]
|
||||||
|
# access_mode = "single-node-writer"
|
||||||
|
# attachment_mode = "file-system"
|
||||||
|
#[[- end ]]
|
||||||
|
# }
|
||||||
|
|
||||||
|
service {
|
||||||
|
name = "[[ .immich.instance ]][[ .consul.suffix ]]"
|
||||||
|
port = 8080
|
||||||
|
|
||||||
|
[[ template "common/connect.tpl" $c ]]
|
||||||
|
|
||||||
|
tags = [
|
||||||
|
"[[ $c.traefik.instance ]].enable=[[ $c.traefik.enabled ]]"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ $c := merge .immich.server . -]]
|
||||||
|
task "server" {
|
||||||
|
driver = [[ $c.nomad.driver | toJSON ]]
|
||||||
|
leader = true
|
||||||
|
|
||||||
|
config {
|
||||||
|
image = [[ $c.image | toJSON ]]
|
||||||
|
#readonly_rootfs = true
|
||||||
|
command = "start.sh"
|
||||||
|
args = ["immich"]
|
||||||
|
}
|
||||||
|
|
||||||
|
vault {
|
||||||
|
policies = ["[[ .immich.instance ]][[ .consul.suffix ]]"]
|
||||||
|
env = false
|
||||||
|
disable_file = true
|
||||||
|
}
|
||||||
|
|
||||||
|
env {
|
||||||
|
REDIS_HOSTNAME = "localhost"
|
||||||
|
TYPESENSE_HOST = "localhost"
|
||||||
|
IMMICH_MEDIA_LOCATION = "/data"
|
||||||
|
TYPESENSE_ENABLED = "false"
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ template "common/file_env.tpl" $c.env ]]
|
||||||
|
|
||||||
|
volume_mount {
|
||||||
|
volume = "data"
|
||||||
|
destination = "/data"
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ template "common/resources.tpl" $c.resources ]]
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ $c := merge .immich.microservices . ]]
|
||||||
|
task "microservices" {
|
||||||
|
driver = [[ $c.nomad.driver | toJSON ]]
|
||||||
|
|
||||||
|
config {
|
||||||
|
image = [[ $c.image | toJSON ]]
|
||||||
|
#readonly_rootfs = true
|
||||||
|
command = "start.sh"
|
||||||
|
args = ["microservices"]
|
||||||
|
}
|
||||||
|
|
||||||
|
vault {
|
||||||
|
policies = ["[[ .immich.instance ]][[ .consul.suffix ]]"]
|
||||||
|
env = false
|
||||||
|
disable_file = true
|
||||||
|
}
|
||||||
|
|
||||||
|
env {
|
||||||
|
REDIS_HOSTNAME = "localhost"
|
||||||
|
TYPESENSE_HOST = "localhost"
|
||||||
|
IMMICH_MEDIA_LOCATION = "/data"
|
||||||
|
TYPESENSE_ENABLED = "false"
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ template "common/file_env.tpl" $c.env ]]
|
||||||
|
|
||||||
|
volume_mount {
|
||||||
|
volume = "data"
|
||||||
|
destination = "/data"
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ template "common/resources.tpl" $c.resources ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
#[[ $c := merge .immich.machine_learning . ]]
|
||||||
|
# task "machine-learning" {
|
||||||
|
# driver = [[ $c.nomad.driver | toJSON ]]
|
||||||
|
#
|
||||||
|
# config {
|
||||||
|
# image = [[ $c.image | toJSON ]]
|
||||||
|
# readonly_rootfs = true
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# env {
|
||||||
|
# MACHINE_LEARNING_HOST = "127.0.0.1"
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# volume_mount {
|
||||||
|
# volume = "ml"
|
||||||
|
# destination = "/cache"
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# }
|
||||||
|
|
||||||
|
[[ template "common/task.redis.tpl" ]]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
[[- template "common/vault.mkpgrole.sh.tpl"
|
||||||
|
dict "ctx" .
|
||||||
|
"config" (dict "role" .immich.instance "database" "postgres")
|
||||||
|
]]
|
|
@ -0,0 +1,31 @@
|
||||||
|
map $http_upgrade $connection_upgrade {
|
||||||
|
default upgrade;
|
||||||
|
'' close;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 127.0.0.1:3005;
|
||||||
|
server_name _;
|
||||||
|
server_tokens off;
|
||||||
|
root /usr/share/html;
|
||||||
|
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection $connection_upgrade;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_socket_keepalive on;
|
||||||
|
client_max_body_size 100m;
|
||||||
|
|
||||||
|
set_real_ip_from 127.0.0.1;
|
||||||
|
real_ip_header X-Forwarded-For;
|
||||||
|
real_ip_recursive on;
|
||||||
|
|
||||||
|
# Inform endpoint
|
||||||
|
location ~ ^/(inform|dl/firmware-cached).* {
|
||||||
|
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
|
||||||
|
return 405;
|
||||||
|
}
|
||||||
|
proxy_pass http://localhost:8080;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
---
|
||||||
|
|
||||||
|
immich:
|
||||||
|
|
||||||
|
instance: immich
|
||||||
|
version: v1.88.2
|
||||||
|
|
||||||
|
server:
|
||||||
|
image: ghcr.io/immich-app/immich-server:[[ .immich.version ]]
|
||||||
|
|
||||||
|
env:
|
||||||
|
DB_URL: '{{ with secret "[[ .vault.prefix ]]database/creds/[[ .immich.instance ]]" }}postgres://{{ .Data.username }}:{{ urlquery .Data.password }}@localhost:5432/[[ .immich.instance ]]{{ end }}'
|
||||||
|
|
||||||
|
resources:
|
||||||
|
cpu: 200
|
||||||
|
memory: 256
|
||||||
|
|
||||||
|
wait_for:
|
||||||
|
- service: master.[[ .consul.suffix ]]
|
||||||
|
|
||||||
|
consul:
|
||||||
|
connect:
|
||||||
|
upstreams:
|
||||||
|
- destination_name: postgres[[ .consul.suffix ]]
|
||||||
|
local_bind_port: 5432
|
||||||
|
|
||||||
|
traefik:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
microservices:
|
||||||
|
|
||||||
|
image: ghcr.io/immich-app/immich-server:[[ .immich.version ]]
|
||||||
|
|
||||||
|
env:
|
||||||
|
DB_URL: '{{ with secret "[[ .vault.prefix ]]database/creds/[[ .immich.instance ]]" }}postgres://{{ .Data.username }}:{{ urlquery .Data.password }}@localhost:5432/[[ .immich.instance ]]{{ end }}'
|
||||||
|
|
||||||
|
resources:
|
||||||
|
cpu: 300
|
||||||
|
memory: 768
|
||||||
|
|
||||||
|
machine_learning:
|
||||||
|
|
||||||
|
image: ghcr.io/immich-app/immich-machine-learning:[[ .immich.version ]]
|
||||||
|
|
||||||
|
env: {}
|
||||||
|
|
||||||
|
resources:
|
||||||
|
cpu: 100
|
||||||
|
memory: 256
|
||||||
|
|
||||||
|
web:
|
||||||
|
|
||||||
|
image: ghcr.io/immich-app/immich-web:[[ .immich.version ]]
|
||||||
|
|
||||||
|
env: {}
|
||||||
|
|
||||||
|
resources:
|
||||||
|
cpu: 50
|
||||||
|
memory: 128
|
||||||
|
|
||||||
|
typesense:
|
||||||
|
image: typesense/typesense:latest
|
||||||
|
|
||||||
|
env: {}
|
||||||
|
|
||||||
|
resources:
|
||||||
|
cpu: 100
|
||||||
|
memory: 256
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
data:
|
||||||
|
type: csi
|
||||||
|
source: '[[ .immich.instance ]]-data'
|
||||||
|
|
||||||
|
ml:
|
||||||
|
type: csi
|
||||||
|
source: '[[ .immich.instance ]]-ml'
|
||||||
|
|
||||||
|
typesense:
|
||||||
|
type: csi
|
||||||
|
source: '[[ .immich.instance ]]-typesense'
|
|
@ -0,0 +1,3 @@
|
||||||
|
path "[[ .vault.prefix ]]database/creds/[[ .immich.instance ]]" {
|
||||||
|
capabilities = ["read"]
|
||||||
|
}
|
Loading…
Reference in New Issue