blob: dcb8036b962188ba890651503796df3f444990d5 [file] [log] [blame]
Serge Bazanski06b61d42020-09-15 18:21:35 +00001// ONLYOFFICE document server.
2// JWT secret needs to be generated as follows per environment:
3// kubectl -n onlyoffice-prod create secret generic documentserver-jwt --from-literal=jwt=$(pwgen 32 1)
4
Radek Pietruszewskif5844312023-10-27 22:41:18 +02005local kube = import "../../kube/hscloud.libsonnet";
Serge Bazanski06b61d42020-09-15 18:21:35 +00006local policies = import "../../kube/policies.libsonnet";
7
8{
9 onlyoffice:: {
10 local oo = self,
11 local cfg = oo.cfg,
12 cfg:: {
13 namespace: error "cfg.namespace must be set",
Piotr Dobrowolski49787062022-02-09 21:30:16 +010014 image: "onlyoffice/documentserver:7.0.0.132",
Serge Bazanski06b61d42020-09-15 18:21:35 +000015 storageClassName: "waw-hdd-redundant-3",
16 domain: error "cfg.domain must be set",
17 },
18
19 ns: kube.Namespace(cfg.namespace),
20
21 pvc: oo.ns.Contain(kube.PersistentVolumeClaim("documentserver")) {
radex36964dc2023-11-24 11:19:46 +010022 storage:: "10Gi",
23 storageClass:: cfg.storageClassName,
Serge Bazanski06b61d42020-09-15 18:21:35 +000024 },
25
26 deploy: oo.ns.Contain(kube.Deployment("documentserver")) {
27 spec+: {
28 template+: {
29 spec+: {
30 containers_: {
31 documentserver: kube.Container("default") {
32 image: cfg.image,
33 resources: {
34 requests: { memory: "4G", cpu: "100m" },
35 limits: { memory: "8G", cpu: "2" },
36 },
37 env_: {
38 JWT_ENABLED: "true",
39 JWT_SECRET: { secretKeyRef: { name: "documentserver-jwt", key: "jwt", }},
40 },
41 ports_: {
42 http: { containerPort: 80 },
43 },
44 local make(sp, p) = { name: "data", mountPath: p, subPath: sp },
45 volumeMounts: [
46 // Per upstream Dockerfile:
Radek Pietruszewskif5844312023-10-27 22:41:18 +020047 // VOLUME /var/log/$COMPANY_NAME /var/lib/$COMPANY_NAME
Serge Bazanski06b61d42020-09-15 18:21:35 +000048 // /var/www/$COMPANY_NAME/Data /var/lib/postgresql
49 // /var/lib/rabbitmq /var/lib/redis
50 // /usr/share/fonts/truetype/custom
51 make("log", "/var/log/onlyoffice"),
52 make("www-data", "/var/www/onlyoffice/Data"),
53 make("postgres", "/var/lib/postgresql"),
54 make("rabbit", "/var/lib/rabbitmq"),
55 make("redis", "/var/lib/redis"),
56 make("fonts", "/usr/share/fonts/truetype/custom"),
57 ],
58 },
59 },
60 volumes_: {
61 data: kube.PersistentVolumeClaimVolume(oo.pvc),
62 },
63 },
64 },
65 },
66 },
67
68 svc: oo.ns.Contain(kube.Service("documentserver")) {
radex8b8f3872023-11-24 11:09:46 +010069 target:: oo.deploy,
Serge Bazanski06b61d42020-09-15 18:21:35 +000070 },
Radek Pietruszewskif5844312023-10-27 22:41:18 +020071
72 ingress: oo.ns.Contain(kube.SimpleIngress("office")) {
73 hosts:: [cfg.domain],
74 target_service:: oo.svc,
Serge Bazanski06b61d42020-09-15 18:21:35 +000075 },
76
77 // Needed because the documentserver runs its own supervisor, and:
78 // - rabbitmq wants to mkdir in /run, which starts out with the wrong permissions
79 // - nginx wants to bind to port 80
80 insecure: policies.AllowNamespaceInsecure(cfg.namespace),
81 },
82
83 prod: self.onlyoffice {
84 cfg+: {
85 namespace: "onlyoffice-prod",
86 domain: "office.hackerspace.pl",
87 },
88 },
89}