-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathdocker-compose.instance.yaml
More file actions
129 lines (125 loc) · 4.78 KB
/
Copy pathdocker-compose.instance.yaml
File metadata and controls
129 lines (125 loc) · 4.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#! This is a ytt template file for docker-compose.override.yaml
#! References:
#! https://carvel.dev/ytt
#! https://docs.docker.com/compose/extends/#adding-and-overriding-configuration
#! https://github.com/enigmacurry/d.rymcg.tech#overriding-docker-composeyaml-per-instance
#! ### Standard project vars:
#@ load("@ytt:data", "data")
#@ project = data.values.project
#@ instance = data.values.instance
#@ context = data.values.context
#@ traefik_host = data.values.traefik_host
#@ ip_sourcerange = data.values.ip_sourcerange
#@ enable_http_auth = len(data.values.http_auth.strip()) > 0
#@ http_auth = data.values.http_auth
#@ enable_oauth2 = data.values.oauth2 == "true"
#@ authorized_group = data.values.authorized_group
#@ enable_mtls_auth = data.values.enable_mtls_auth == "true"
#@ mtls_authorized_certs = data.values.mtls_authorized_certs
#@ enabled_middlewares = []
#! ### Project-specific vars:
#@ models_host_path = data.values.models_host_path
#@ compose_profile = data.values.compose_profile
#@ api_token = data.values.api_token
#@ server_port = data.values.server_port
#@ initial_model = data.values.initial_model
#@ n_gpu_layers = data.values.n_gpu_layers
#@ context_length = data.values.context_length
#@ image_variant = data.values.image_variant
#@ models_max = data.values.models_max
#@ models_preset_enabled = data.values.models_preset_enabled
#@ jinja = data.values.jinja
#@ tools = data.values.tools
#@ sleep_idle_seconds = data.values.sleep_idle_seconds
#@ def llama_service(profile):
#@ service = "llama-" + profile
#@ env = []
#@ if api_token.strip():
#@ env.append("LLAMA_API_KEY=${LLAMA_API_TOKEN}")
#@ end
#@ if context_length.strip():
#@ env.append("LLAMA_CONTEXT_LENGTH=${LLAMA_CONTEXT_LENGTH}")
#@ end
#@ if n_gpu_layers.strip():
#@ env.append("LLAMA_N_GPU_LAYERS=${LLAMA_N_GPU_LAYERS}")
#@ end
#@ cmd = []
#@ if image_variant != "server":
#@ cmd.append("--server")
#@ end
#@ cmd.extend(["--host", "0.0.0.0", "--port", server_port, "--models-dir", "/models"])
#@ if models_preset_enabled.strip() == "true":
#@ cmd.append("--models-preset")
#@ cmd.append("/models/models.ini")
#@ end
#@ if models_max.strip() and models_max.strip() != "0":
#@ cmd.extend(["--models-max", models_max])
#@ end
#@ if initial_model.strip():
#@ cmd.extend(["-m", initial_model])
#@ end
#@ if jinja == "true":
#@ cmd.append("--jinja")
#@ end
#@ if tools.strip():
#@ cmd.extend(["--tools", tools])
#@ end
#@ if sleep_idle_seconds.strip():
#@ cmd.extend(["--sleep-idle-seconds", sleep_idle_seconds])
#@ end
#@ router = "{}-{}-{}".format(project, instance, service)
#@ labels = []
#@ middlewares = []
#@ labels.append("backup-volume.stop-during-backup=true")
#@ labels.append("traefik.enable=true")
#@ labels.append("traefik.http.routers.{}.rule=Host(`{}`)".format(router, traefik_host))
#@ labels.append("traefik.http.routers.{}.entrypoints=websecure".format(router))
#@ middlewares.append("{}-ipallowlist".format(router))
#@ labels.append("traefik.http.middlewares.{}-ipallowlist.ipallowlist.sourcerange={}".format(router, ip_sourcerange))
#@ if enable_http_auth:
#@ middlewares.append("{}-basicauth".format(router))
#@ labels.append("traefik.http.middlewares.{}-basicauth.basicauth.users={}".format(router, http_auth))
#@ labels.append("traefik.http.middlewares.{}-basicauth.basicauth.headerField=X-Forwarded-User".format(router))
#@ end
#@ if enable_oauth2:
#@ middlewares.append("traefik-forward-auth@docker")
#@ middlewares.append("header-authorization-group-{}@file".format(authorized_group))
#@ end
#@ if enable_mtls_auth:
#@ labels.append("traefik.http.routers.{}.tls.options=step_ca_mTLS@file".format(router))
#@ if len(mtls_authorized_certs):
#@ labels.append("traefik.http.middlewares.mtlsauth-{}.plugin.certauthz.domains={}".format(router, mtls_authorized_certs))
#@ middlewares.append("mtlsauth-{}".format(router))
#@ end
#@ middlewares.append("mtls-header@file")
#@ end
#@ labels.append("traefik.http.routers.{}.middlewares={}".format(router, ",".join(middlewares)))
#@ labels.append("traefik.http.services.{}.loadbalancer.server.port={}".format(router, server_port))
#@ if models_host_path != "":
#@ volumes = ["{}:/models".format(models_host_path)]
#@ else:
#@ volumes = ["llama:/models"]
#@ end
#@ return {
#@ service: {
#@ "volumes": volumes,
#@ "labels": labels,
#@ "environment": env,
#@ "command": cmd
#@ }
#@ }
#@ end
#@yaml/text-templated-strings
services:
#@ service_def = llama_service(compose_profile)
#@ for name, config in service_def.items():
(@= name @):
#@ for key, val in config.items():
#@ if val != []:
(@= key @):
#@ for item in val:
- (@= item @)
#@ end
#@ end
#@ end
#@ end