Skip to content

Commit b91f141

Browse files
committed
svc-cloud01: migrate back to onlyoffice
1 parent d8db54d commit b91f141

File tree

5 files changed

+194
-163
lines changed

5 files changed

+194
-163
lines changed

.sops.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ creation_rules:
121121
- *admin_maurice
122122
age:
123123
- *svc-pg01
124-
- path_regex: secrets/management/(rfc2136/(cloud|office).dd-ix.net|cloud).yaml
124+
- path_regex: (secrets/management/(rfc2136/(cloud|office).dd-ix.net)|hosts/svc-cloud01/secrets)\.yaml
125125
key_groups:
126126
- pgp:
127127
- *admin_tassilo

hosts/svc-cloud01/default.nix

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,7 @@
2626
};
2727
};
2828

29+
sops.defaultSopsFile = ./secrets.yaml;
30+
2931
system.stateVersion = "23.11";
3032
}

hosts/svc-cloud01/nextcloud.nix

Lines changed: 66 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,27 @@
1-
{ self, config, pkgs, lib, ... }:
1+
{ config, pkgs, lib, ... }:
22

33
let
44
domain = "cloud.${config.dd-ix.domain}";
55
in
66
{
7-
sops.secrets = {
8-
"cloud_admin_pw" = {
9-
sopsFile = self + "/secrets/management/cloud.yaml";
10-
owner = config.systemd.services.nextcloud-setup.serviceConfig.User;
11-
};
12-
13-
"cloud_db_pw" = {
14-
sopsFile = self + "/secrets/management/cloud.yaml";
15-
owner = config.systemd.services.nextcloud-setup.serviceConfig.User;
7+
sops = {
8+
secrets = {
9+
"nextcloud/admin_pass" = { };
10+
"nextcloud/db_pass" = { };
11+
"onlyoffice/jwt_secret" = { };
12+
"onlyoffice/db_pass" = { };
1613
};
14+
templates."onlyoffice/env".content = ''
15+
JWT_SECRET=${config.sops.placeholder."onlyoffice/jwt_secret"}
16+
DB_TYPE=postgres
17+
DB_HOST=svc-pg01.dd-ix.net
18+
DB_NAME=onlyoffice
19+
DB_USER=onlyoffice
20+
DB_PWD=${config.sops.placeholder."onlyoffice/db_pass"}
21+
REDIS_SERVER_HOST=${config.services.redis.servers.onlyoffice.bind}
22+
REDIS_SERVER_PORT=${builtins.toString config.services.redis.servers.onlyoffice.port}
23+
AMQP_URI=amqp://${config.services.rabbitmq.listenAddress}:${builtins.toString config.services.rabbitmq.port}
24+
'';
1725
};
1826

1927
systemd.services = {
@@ -27,19 +35,21 @@ in
2735
};
2836
nextcloud = {
2937
enable = true;
38+
package = pkgs.nextcloud31;
3039
hostName = domain;
3140
https = true;
32-
package = pkgs.nextcloud31;
33-
configureRedis = true;
3441
config = {
3542
dbtype = "pgsql";
3643
dbname = "nextcloud";
3744
dbhost = "svc-pg01.dd-ix.net";
38-
dbpassFile = "${config.sops.secrets."cloud_db_pw".path}";
45+
dbuser = "nextcloud";
46+
dbpassFile = "${config.sops.secrets."nextcloud/db_pass".path}";
3947
adminuser = "admin";
40-
adminpassFile = "${config.sops.secrets."cloud_admin_pw".path}";
48+
adminpassFile = "${config.sops.secrets."nextcloud/admin_pass".path}";
4149
};
4250
settings = {
51+
default_phone_region = "DE";
52+
maintenance_window_start = "4";
4353
allow_local_remote_servers = false;
4454
hide_login_form = true;
4555
mail_domain = "cloud.dd-ix.net";
@@ -48,7 +58,6 @@ in
4858
mail_smtphost = "svc-mta01.dd-ix.net";
4959
mail_smtpport = 25;
5060
mail_smtpsecure = ""; # ssl
51-
updatechecker = false;
5261
has_internet_connection = true;
5362
defaultapp = "files";
5463
appstoreenabled = true;
@@ -66,11 +75,9 @@ in
6675
};
6776
extraApps = {
6877
inherit (config.services.nextcloud.package.packages.apps)
69-
groupfolders polls user_oidc richdocuments forms;
78+
groupfolders polls user_oidc onlyoffice forms;
7079
};
7180
extraAppsEnable = true;
72-
# NixOS Modules
73-
#configureImaginary = true;
7481
};
7582

7683
nginx.virtualHosts = {
@@ -90,7 +97,7 @@ in
9097
];
9198

9299
onlySSL = true;
93-
useACMEHost = "cloud.${config.dd-ix.domain}";
100+
useACMEHost = config.services.nextcloud.hostName;
94101
};
95102
"office.${config.dd-ix.domain}" = {
96103
listen = [
@@ -115,47 +122,54 @@ in
115122
onlySSL = true;
116123
useACMEHost = "office.${config.dd-ix.domain}";
117124
locations."/" = {
118-
proxyPass = "http://[::1]:${builtins.toString config.services.collabora-online.port}";
125+
proxyPass = "http://127.0.0.1:80";
119126
proxyWebsockets = true;
120-
extraConfig = ''
121-
proxy_set_header Host $host;
122-
proxy_read_timeout 36000s;
123-
'';
124127
};
125128
};
126129
};
127130

128-
collabora-online = {
131+
# onlyoffice dependencies
132+
rabbitmq.enable = true;
133+
redis.servers.onlyoffice = {
129134
enable = true;
130-
131-
aliasGroups = [{
132-
host = "https://office.${config.dd-ix.domain}";
133-
aliases = [ "https://${config.services.nextcloud.hostName}" ];
134-
}];
135-
136-
settings = {
137-
# Rely on reverse proxy for SSL
138-
ssl = {
139-
enable = false;
140-
termination = true;
141-
};
142-
143-
remote_font_config.url = "https://${config.services.nextcloud.hostName}/apps/richdocuments/settings/fonts.json";
144-
};
135+
port = 6379;
145136
};
146137
};
147138

148-
fonts.packages = with pkgs; [
149-
inter
150-
vistafonts
151-
comic-relief
152-
open-sans
153-
vt323
154-
dm-sans
155-
dm-mono
156-
];
139+
# nix-prefetch-docker --image-name onlyoffice/documentserver --image-tag 9.1.0.1
140+
virtualisation.oci-containers.containers.onlyoffice = {
141+
image = "onlyoffice/documentserver:9.1.0.1";
142+
imageFile = pkgs.dockerTools.pullImage {
143+
imageName = "onlyoffice/documentserver";
144+
imageDigest = "sha256:34b92f4a67bfd939bd6b75893e8217556e3b977f81e49472f7e28737b741ba1d";
145+
hash = "sha256-JtFYwrStIaHCBmHLynPGtW14rZUOp9tCMoP5HfeWl/w=";
146+
finalImageName = "onlyoffice/documentserver";
147+
finalImageTag = "9.1.0.1";
148+
};
149+
environmentFiles = [ config.sops.templates."onlyoffice/env".path ];
150+
extraOptions = [ "--network=host" ];
151+
volumes =
152+
let
153+
# https://github.com/ONLYOFFICE/Docker-DocumentServer/blob/ba4961c28f860daae38c27d40fc399f3bb59decb/run-document-server.sh
154+
entrypoint = pkgs.writeText "onlyoffice-entrypoint.sh" /* bash */ ''
155+
#!/bin/bash
156+
umask 0022
157157
158-
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
159-
"vista-fonts"
160-
];
158+
APP_DIR="/var/www/''${COMPANY_NAME}/documentserver"
159+
CONF_DIR="/etc/''${COMPANY_NAME}/documentserver"
160+
ONLYOFFICE_DEFAULT_CONFIG=''${CONF_DIR}/local.json
161+
JSON_BIN=''${APP_DIR}/npm/json
162+
JSON="''${JSON_BIN} -q -f ''${ONLYOFFICE_DEFAULT_CONFIG}"
163+
''${JSON} -I -e "this.services.CoAuthoring.sql.pgPoolExtraOptions ||= {}; this.services.CoAuthoring.sql.pgPoolExtraOptions.ssl = true"
164+
exec /app/ds/run-document-server.sh
165+
'';
166+
in
167+
[
168+
"/var/lib/onlyoffice/cache:/var/lib/onlyoffice/documentserver/App_Data/cache"
169+
"/var/lib/onlyoffice/data:/var/www/onlyoffice/Data"
170+
"${entrypoint}:/onlyoffice-entrypoint.sh"
171+
];
172+
entrypoint = "/bin/bash";
173+
cmd = [ "/onlyoffice-entrypoint.sh" ];
174+
};
161175
}

hosts/svc-cloud01/secrets.yaml

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
nextcloud:
2+
admin_pass: ENC[AES256_GCM,data:P1W6PFnF0hZn2EWTG9T9xJZ0U6x41OsWsCc6D4R8EKELoCWEU1UJWuJWanQvgRqdNxKKhOLPQptsu8AYRxASEw==,iv:uXyaNy3I3CiIGRKSq4ZT/fk+42W3ePYvoEmyOvym1mc=,tag:n1uWEAFN5y4sOgKViMoXxg==,type:str]
3+
db_pass: ENC[AES256_GCM,data:5eesUnjzej0rxJzbpC7S5anwSgkUwLjVqsxk9gPqLKIP6ylgo+45m9ffqFYMCuqUcfpA6BM+e7CDcuTd2F89FQ==,iv:6lSkUomK76q4DUyUzf8f0Dxdd29gEnlacQlN6sLzqN0=,tag:gJ3Tx0a0WglG6g5u3DpyHg==,type:str]
4+
onlyoffice:
5+
jwt_secret: ENC[AES256_GCM,data:FGfolk7Aaw6LIO1LdPmAjhWb7XMMgNIFEclhWK6g03T+nIOKLD3zqcKjxhRvzY8e8w+fjekpVqhfPQJU3uWM0Q==,iv:EZGme5L5PpWWbumacffIuhrp3Zh9NjJHCDtrUbbsCL4=,tag:lOfW+1wCa07ZeKq6UkxskQ==,type:str]
6+
db_pass: ENC[AES256_GCM,data:48AKEYlI1HJP8Tf67AM7hTq4bsPaMv1dcNa7mw0wBBk2klznPlCbns5kCLDOuWfW2CDGEAi32hLNM1yYif6PNw==,iv:wy1PajeVGGHyB2QN3oTqJSS/jMJ9KsOiJiTC2T/CLzY=,tag:aVsYcf//D2DIqY1/QefxoQ==,type:str]
7+
sops:
8+
age:
9+
- recipient: age1swpyhunuhrmz0z6vpvhhk6asseggcmu696qr05hhmq02njjcna6s4dp4am
10+
enc: |
11+
-----BEGIN AGE ENCRYPTED FILE-----
12+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQVHdFS0wxNDZRL0U5TGRl
13+
M2s3V3pPSTgxbnZiUlh4akd6ZysxYit2c3prCisxckE1eklQYnpxeHJtdGFuYVlX
14+
ckJiS3JSWTRNZDducUxNOW5ESnNqTDgKLS0tIEFUTVYxbmhhZEVnYiswYzgyZ2xE
15+
cWVPTkJFS3ozekFrZ3B5ZDVGUkpkN2MKipCsweYHA7DU7UkjZ2zV/Fmhi69iF3oB
16+
qXdJezUgcJANzGWPB5fn6ZmNdiaC8h1ipHWAS6B1y6mSsDJl0wxEdg==
17+
-----END AGE ENCRYPTED FILE-----
18+
lastmodified: "2025-10-25T23:06:33Z"
19+
mac: ENC[AES256_GCM,data:Wr/76SuILur8kS9jiJLTcps99pHxRoliQE6JgcnbT3uleP4pmffzFjmoEd7yXXsQk2BoKoBsGEWOfw3YK3h4gpG2c9AbKAJzAU9Jjpv9AKEVNPsUW5Z/aLd/kRtUIwtCh1XW+WrXegkODIigYvhRGgbALNsDnvcG10Y8ee2F0v4=,iv:4crYJTj/1nuiyALW2b+Ofv28lAPSooFb9BjkUGWnCgs=,tag:tEQlxPsgkGhc36OTz5hOqQ==,type:str]
20+
pgp:
21+
- created_at: "2024-04-08T09:28:06Z"
22+
enc: |-
23+
-----BEGIN PGP MESSAGE-----
24+
25+
hQIMA/YLzOYaRIJJAQ/9G7vS6cxMLeV8aB/mJcL4N6NLBidqXazGcicC9Juy+t57
26+
T+48os+YU0IJYsWwb9Wzh0LTs5pUiLrmc/QlHfTpaowaolzNmFkEBkxeSspgt0ca
27+
XSbcL1xPvUUoqWPoNogQqT1Fb6IjEcyOgK1KFJq8eagmHh378ZBp+VCJ+E51fAH+
28+
ECMxEhzLjyQ9jAe/kSVa4YOyWg0ph507fzdd97m6uTovKI3qZSY0ROXIsoj2lZZt
29+
bIupahFBPVYlu0ltqWyan18+Wchzzz0T2CGpnMOk01nxGMahIwae1cN+3l8X1Hkk
30+
FLX8diSEdtK5wEEvdVUOYaIeM1EpAM1Adi2LKdBI+Vo1hikq7BWCSzT7dGIAxSwf
31+
VYl1iAFE2OVqu1iy5flvnvPVW03ewBaQ7WosgEc9lrfopE9NzBAD5UvdIRkgxrdT
32+
v7Z8W84Z/rCS83/XyVnJHtAeaOBXZld3FrqZvojGHrBtujGjWhHlnuPyvVDezS3N
33+
CT6Xx/LcFQ+dcdqOVlAZPHSTH4MpF6n7Ek3eh+1kuaX0OEJPp/d36Q4hOGJrmUOL
34+
L2qEOFCui8cun3Bsepg0fg5mUlrorDNXcjlAr7pikOQRQUB/M9BsZuOSdd3fdOzE
35+
5Et1LIlLkyU0c8kLGNOAsuaDh2o+xaHiuECKvndP42Fvd88AfMduaHo1sfdskWbS
36+
XgFhZNLjQNbbHty2kFl8WGngQKUfWQUsMLqdxsNPr1te5J6OrZ9Vmnpz8BiV5/MW
37+
BYcDNpuUwt3ehz6WXnZUv6ViWDh6cklSISw//+nBqyB+pZQwabIRpwgy36tAWLU=
38+
=QJwh
39+
-----END PGP MESSAGE-----
40+
fp: 91EBE87016391323642A6803B966009D57E69CC6
41+
- created_at: "2024-04-08T09:28:06Z"
42+
enc: |-
43+
-----BEGIN PGP MESSAGE-----
44+
45+
hF4DscBX0xwMSCMSAQdAmzSxErH1w7/RAjMqGdrWcDGWpIYuc494Nj84pqJEHBMw
46+
6TrI+O0N73c7vdeLuyRkWSGJWpWq+e89T23loLIseafqMJbsYwmSM3ncvzV1wlmv
47+
1GgBCQIQheYchMK1BRBw3ahmFXtj9KRm/VOS9QcpXecFr3mr229DoYjHWivHWAnL
48+
rC62fwEebprM8MxfBcBYJTx6SJDBeqI/uOnWc6DsLk3oXs/GY6NU5sFoe6ZrUCD9
49+
UMMRvk9r1Q3ydw==
50+
=1KB5
51+
-----END PGP MESSAGE-----
52+
fp: 778755C4893709525F6E62BCC2A819CA37DE8B61
53+
- created_at: "2024-04-08T09:28:06Z"
54+
enc: |-
55+
-----BEGIN PGP MESSAGE-----
56+
57+
hQIMA+0g9G1sLfsXARAAlj78fKjLpuTlmbnomdypHdTBE/zPVFf9dl1KFUh9BarL
58+
sQL3k8/2uQ63UUoY4lhS4vpOMXrujTMdHUUFBVN/2zle3F1fqqb85BLp6bX/nR/h
59+
IVbtd7GA6LihbpsDeOZR13sMxQ4GEMmgXm9Q2vj6eR4wvbfeT3LxbGntZ/52ZHt+
60+
GCqgckcCu35rYdokGKBndC4p8FjtJ/VyYdexAn8f8MNzunVPFCCB7aVU5Rj3u+xT
61+
JFYAXEUtaTLyUFRdOaCbPVLDRVVEUG8ZEQJFzVlVLRrbNs3R4dIBW3e+Z5UNvhvi
62+
gwcLwPIu5lXC+29R8pEfOzzyHha5ho6K7HtUAmE63G9EM+ySqV39qi4wPAVhXPcK
63+
iHWbpZorSJQkZakUKj7FqRQarME3jdb7AkqX/WjHCQGF7h3hQv+UrveHjIot0jl8
64+
GRpRVG9tn1RuS0AU82X8xkEdREEAR+eQIQZKm1iqSjMNp7vDHn+ZLjR+1Ta8fbtI
65+
7riHJfheo7cYtH80AX+pT2ajOURmXHIECZlPqPLdCpD/RgJhiIGs9q4PIn+t5XNf
66+
TlLWl0o1+FqHyNqVyozzfVW2VdzV5QJ83lckO7gJVx2EHeiVtVM4UGkwGjVfK7cd
67+
o6OhNFhD3cAfXShQPBaraZU0s3NTVZAE5sWXag60n0l6aswuoyAyttWEQ1zR5OTS
68+
XgFsVc+zHBVCJKEZ1fyZGDihhyzZ1akiq5qQAYCEYWdFVL+pCxti2T12y8SOt2gx
69+
qXUT+lUthLWwB1g2fe5rd4hxU/w6GmxajJ9CgDXs0Uvbuf4zVzRtK7FCdYVn4XU=
70+
=iKVk
71+
-----END PGP MESSAGE-----
72+
fp: BCD42664340540E058422472AF9E0821C4A08B44
73+
- created_at: "2024-04-08T09:28:06Z"
74+
enc: |-
75+
-----BEGIN PGP MESSAGE-----
76+
77+
hQIMA0jS2B1+GdbtARAAmI9bDlArwcyeXLduTK10NXoNEzAQ3F9t2qVY2rkzTjQQ
78+
GQovGN6dyQC3l0zb9rt2rsflqK9x3bpoxNEaC7dwQX3AC6YpFcXERwc4zA3Oi5Aq
79+
CZpnnZtmBXuV0Iu7duMpdM8vIwi2oIJ8/6xoqk/M+0VhhQrCHFmaI7zESILOx4Jk
80+
qV8XJJOE8c60v1oPkGG9QKzu7KD0uziXRnNuEZ8f/VOWp4Sw4dtRYeDqgm19hcuQ
81+
Kk+d5E9puuyFddiXORPwrh7bO7aevaGKstFZkJgRw2Ug3E1oLlgSFCFyQCCyfaqJ
82+
q+Fg9gucrvi2ozYT8R+MWtOLcxA8U6zaKs3xdFnFhDlzQwhiXjK1SnExvu7Jd8Az
83+
E3d45zbZxdpBCTupf5pivjTk88/VeHC/6bAs14Lhwx0nviQaxQ6z+vjJ5Ql0Q4LJ
84+
xrKQA+T+WxI/a+Yntt5/2H/0yqbtbpVYZgwakdSp4u9qlgJ2Li6eRecL/dP2ELpy
85+
aIJQLJxGH7M8wkdGwAqB6iijqBa/Ueu748/Iiypqupx4zHXt4Mn60kicLh4m4GQ5
86+
OGTI4P04FEfO20CC1gC5H5OxmZ+E1cQ50EGdUXcqSW0CuoNUmgufmXTyZ2Mcoyon
87+
IOEj928NzGZqy0BaJeThe9oyGIk2DsUifA9esJvREhSfcJkueE5KUicJ4oQhE47U
88+
aAEJAhDK3sWgmvll2vR+6JWLA5N6XQGpXYP2c3actXXZ+YwS1xjAzx/fzF1FFAFZ
89+
h27JM0Ql9vrEIdfA0EBf+sxSi2jQAc13hxHT3Q217euSLXdqWqDPK/JGJf0cNvcq
90+
kaXXC41gEs/q
91+
=+y9e
92+
-----END PGP MESSAGE-----
93+
fp: 6F9E5DCB111D958035A7B0084653A66E940BBA1A
94+
- created_at: "2024-04-08T09:28:06Z"
95+
enc: |-
96+
-----BEGIN PGP MESSAGE-----
97+
98+
hF4DQm4jkAzjp7YSAQdAhFlfBZg0FGLyzr+5n//JaAtWPv5ba9461+3m0WkKdWcw
99+
dzrQjZP+t3KgYcL77oSiWND1bTkdFMfvA23Q0mDaBkVtX5jBGkkFKRaITC9IZ6Tu
100+
1GgBCQIQXmRe2GLkE5a7SJCpZibvUwZPSH2m17EW8ow2JB9E88AcaH0pEW/gRbzL
101+
08d5Rnt72OiGaxi2TtE4eKk/tvkm31h60XZcpmDD/jLS8wYUYwvdC//Eb4sht9GP
102+
Ht+5mjBF+Sf8+Q==
103+
=J3bt
104+
-----END PGP MESSAGE-----
105+
fp: 46D4682470DBE26790DF9433446F3B093DF81C6A
106+
- created_at: "2024-04-08T09:28:06Z"
107+
enc: |-
108+
-----BEGIN PGP MESSAGE-----
109+
110+
hQGMA1aqDRDy/NQVAQv9Gzk2gUFHJADYHwISI+iVN4TcygXFPMhyHUAEks7yDPqz
111+
yVQ2e+TNunLtzSWo89RllXwVjXigoqOQXp00m55aD51C3ut1IixOgPoCF4G7lXKf
112+
MxwHOJteGmRfySkvljvTGZ1xdbtTseHNObVeGole1FtCUSg90MWpVOF+C3HWRpY8
113+
Ds6CTpdvuqftBiN1hX9kxudgdifQxItbKATNzWl3huBrLDN0q1OjhYJK7Q9aS5H4
114+
+wZw++4SUDvnqBLlu1X4VxV5gI1+hZJRNhYOjzUVEx4BGtNskPOiUvKJ3IjDuThN
115+
XECC2LMkueoCki14l7gtSSNciw8PanzpwKxA3UdPkEO5cYhmVoPKGWP0hWYACbGg
116+
FEMcrbarxGHFn6c1oZ1O197WnRgRFMw7kY49pWBLwavuiSHAm8D+53+mNffYz4gJ
117+
H0OifuzIi3gFwU9uf0g0o2++kiJm1NGfmivAMDciWMfXmAT4J14T2sbZB9/Fvysm
118+
mr1ZRnlSFshNiF1pNj960l4BdUIHcGgV0Hd0CNMCQmeO5bz8MqPyVXmsg7Afm9JH
119+
WqnitCIsgpVI1KdQdL2roYzv3vJF7wbCQYm77d9hj0A1wynCJZfp+/dxPu1Dx5fx
120+
WKGLCT0w0rUVmi72wjEl
121+
=NU4v
122+
-----END PGP MESSAGE-----
123+
fp: 5CEA328E2A000F3834ECED462DC4542D86651C1E
124+
unencrypted_suffix: _unencrypted
125+
version: 3.11.0

0 commit comments

Comments
 (0)