lib (bind-mounted into the container at /var/lib/onlyoffice) was 0711 so nginx inside the container could reach App_Data/cache, and the module root above it stayed 0711 too, so any account on the machine could walk through the root into lib's 0755 directories and 0644 files to read converted documents. The container never passes through the root — only the converter process does, to read jwt.secret and broker-converter.secret — so the root is now 0710, owned by the converter account: only that account and root pass through it. lib stays 0711 (1837/AC3).
284 lines
6.0 KiB
JSON
284 lines
6.0 KiB
JSON
{
|
|
"module": "only-office",
|
|
"version": "1",
|
|
"slug": "office",
|
|
"provides": [
|
|
{
|
|
"name": "document-server",
|
|
"scope": "mesh",
|
|
"credential": {
|
|
"own": "jwt"
|
|
}
|
|
}
|
|
],
|
|
"serves": {
|
|
"document-server": {
|
|
"scheme": "http",
|
|
"port": 9070,
|
|
"public-root": "https://${bound:route:name}/"
|
|
}
|
|
},
|
|
"capabilities": [
|
|
"container-runtime"
|
|
],
|
|
"requires": [
|
|
"route"
|
|
],
|
|
"contributes": {
|
|
"route": {
|
|
"label": "office",
|
|
"endpoint": "web"
|
|
}
|
|
},
|
|
"seats": [
|
|
{
|
|
"name": "document-converter",
|
|
"scope": "mesh",
|
|
"serves": [
|
|
"convert"
|
|
]
|
|
}
|
|
],
|
|
"claims": [
|
|
{
|
|
"name": "document-converter",
|
|
"scope": "mesh",
|
|
"serves": [
|
|
"convert"
|
|
]
|
|
}
|
|
],
|
|
"streams": [
|
|
{
|
|
"name": "convert-asks",
|
|
"events": [
|
|
"convert.asked"
|
|
],
|
|
"max-age-days": 1,
|
|
"max-mib": 8,
|
|
"retention": "work-queue",
|
|
"max-deliveries": 3,
|
|
"duplicates": 24
|
|
}
|
|
],
|
|
"state": [
|
|
{
|
|
"name": "convert-answers",
|
|
"ttl-seconds": 600
|
|
}
|
|
],
|
|
"binds": {
|
|
"route": "${dir:state}/route.json"
|
|
},
|
|
"own-secrets": {
|
|
"jwt": {
|
|
"path": "${dir:state}/jwt.secret",
|
|
"owner": "only-office-converter",
|
|
"taken": "at-start"
|
|
},
|
|
"secure-link": {
|
|
"path": "${dir:state}/secure-link.secret",
|
|
"taken": "at-start"
|
|
},
|
|
"broker-converter": {
|
|
"path": "${dir:state}/broker-converter.secret",
|
|
"owner": "only-office-converter"
|
|
}
|
|
},
|
|
"listens": [
|
|
{
|
|
"name": "web",
|
|
"port": 9070,
|
|
"protocol": "tcp",
|
|
"from": "mesh",
|
|
"why": "the document server over http; its public name is a route grant, and route-proxy reaches it on this published port"
|
|
}
|
|
],
|
|
"data": {
|
|
"own": [
|
|
{
|
|
"id": "data",
|
|
"path": "${dir:data}",
|
|
"class": "rebuildable",
|
|
"why": "documents being edited; the documents themselves are the file store's"
|
|
},
|
|
{
|
|
"id": "lib",
|
|
"path": "${dir:lib}",
|
|
"class": "rebuildable",
|
|
"why": "the document server's working files"
|
|
},
|
|
{
|
|
"id": "db",
|
|
"path": "${dir:db}",
|
|
"class": "rebuildable",
|
|
"why": "the document server's own database of editing sessions"
|
|
},
|
|
{
|
|
"id": "fonts",
|
|
"path": "${dir:fonts}",
|
|
"class": "rebuildable",
|
|
"why": "fonts, installed again"
|
|
},
|
|
{
|
|
"id": "logs",
|
|
"path": "${dir:logs}",
|
|
"class": "cache",
|
|
"why": "logs"
|
|
},
|
|
{
|
|
"id": "rabbitmq",
|
|
"path": "${dir:rabbitmq}",
|
|
"class": "cache",
|
|
"why": "its queue's working set"
|
|
},
|
|
{
|
|
"id": "redis",
|
|
"path": "${dir:redis}",
|
|
"class": "cache",
|
|
"why": "its cache"
|
|
}
|
|
]
|
|
},
|
|
"resources": [
|
|
{
|
|
"id": "state",
|
|
"type": "directory",
|
|
"mode": "0710",
|
|
"owner": "only-office-converter",
|
|
"place": ".",
|
|
"unknown": "program"
|
|
},
|
|
{
|
|
"id": "converter-account",
|
|
"type": "user",
|
|
"name": "only-office-converter",
|
|
"shell": "/usr/bin/nologin"
|
|
},
|
|
{
|
|
"id": "server-env",
|
|
"type": "file",
|
|
"path": "${dir:state}/server.env",
|
|
"mode": "0600",
|
|
"template": "files/server.env"
|
|
},
|
|
{
|
|
"id": "logs",
|
|
"type": "directory",
|
|
"mode": "0700",
|
|
"unknown": "program"
|
|
},
|
|
{
|
|
"id": "data",
|
|
"type": "directory",
|
|
"mode": "0700",
|
|
"unknown": "program"
|
|
},
|
|
{
|
|
"id": "lib",
|
|
"type": "directory",
|
|
"mode": "0711",
|
|
"unknown": "program"
|
|
},
|
|
{
|
|
"id": "db",
|
|
"type": "directory",
|
|
"mode": "0700",
|
|
"unknown": "program"
|
|
},
|
|
{
|
|
"id": "rabbitmq",
|
|
"type": "directory",
|
|
"mode": "0700",
|
|
"unknown": "program"
|
|
},
|
|
{
|
|
"id": "redis",
|
|
"type": "directory",
|
|
"mode": "0700",
|
|
"unknown": "program"
|
|
},
|
|
{
|
|
"id": "fonts",
|
|
"type": "directory",
|
|
"mode": "0700",
|
|
"unknown": "program"
|
|
},
|
|
{
|
|
"id": "net",
|
|
"type": "network",
|
|
"name": "only-office"
|
|
},
|
|
{
|
|
"id": "server",
|
|
"type": "container",
|
|
"name": "only-office",
|
|
"image": "onlyoffice/documentserver@sha256:3ab6ebc7c605e5a32b7ae3ff19daed4925090245acc8100ce2230bd766c88212",
|
|
"network": "only-office",
|
|
"env-file": [
|
|
"${dir:state}/server.env"
|
|
],
|
|
"ports": [
|
|
"9070:80"
|
|
],
|
|
"volumes": [
|
|
"${dir:logs}:/var/log/onlyoffice",
|
|
"${dir:data}:/var/www/onlyoffice/Data",
|
|
"${dir:lib}:/var/lib/onlyoffice",
|
|
"${dir:db}:/var/lib/postgresql",
|
|
"${dir:rabbitmq}:/var/lib/rabbitmq",
|
|
"${dir:redis}:/var/lib/redis",
|
|
"${dir:fonts}:/usr/share/fonts/truetype/custom"
|
|
],
|
|
"secrets-in-environment": "run-document-server.sh regenerates JWT_SECRET and SECURE_LINK_SECRET from the environment on every start and overwrites local.json and nginx's ds.conf; not convertible"
|
|
},
|
|
{
|
|
"id": "converter",
|
|
"type": "process",
|
|
"name": "only-office-converter",
|
|
"artifact": "tools",
|
|
"run": [
|
|
"./only-office",
|
|
"converter"
|
|
],
|
|
"user": "only-office-converter",
|
|
"env": {
|
|
"ONLY_OFFICE_BROKER": "${dir:state}/broker-converter.secret",
|
|
"ONLY_OFFICE_JWT": "${dir:state}/jwt.secret",
|
|
"ONLY_OFFICE_SERVER": "http://127.0.0.1:9070"
|
|
},
|
|
"bus": {
|
|
"queues": [
|
|
"convert-asks"
|
|
],
|
|
"state": [
|
|
"convert-answers"
|
|
]
|
|
},
|
|
"health": {
|
|
"kind": "unit"
|
|
}
|
|
}
|
|
],
|
|
"build": {
|
|
"artifacts": [
|
|
{
|
|
"name": "tools",
|
|
"kind": "bundle",
|
|
"language": "go",
|
|
"system": "arch",
|
|
"from": "cmd/only-office",
|
|
"binary": "only-office",
|
|
"loads": [
|
|
"only-office"
|
|
]
|
|
},
|
|
{
|
|
"name": "files",
|
|
"kind": "archive",
|
|
"from": "files"
|
|
}
|
|
]
|
|
}
|
|
}
|