95 lines
3 KiB
Nix
95 lines
3 KiB
Nix
# NOTE: Imperative part:
|
|
# 1. You need to change PSQL tables owner from root to onlyoffice, too. They don't do that automatically for some reason.
|
|
# 2. TODO: Generate JWT secret at /var/lib/onlyoffice/jwt, i.e. 9wLfMGha1YrfvWpb5hyYjZf8pvJQ3swS
|
|
# See https://git.voronind.com/voronind/nixos/issues/74
|
|
{ container, pkgs, util, lib, config, ... }: with lib; let
|
|
cfg = config.container.module.office;
|
|
in {
|
|
options = {
|
|
container.module.office = {
|
|
enable = mkEnableOption "Office web suite.";
|
|
address = mkOption {
|
|
default = "10.1.0.21";
|
|
type = types.str;
|
|
};
|
|
port = mkOption {
|
|
default = 8000;
|
|
type = types.int;
|
|
};
|
|
domain = mkOption {
|
|
default = "office.${config.container.domain}";
|
|
type = types.str;
|
|
};
|
|
storage = mkOption {
|
|
default = "${config.container.storage}/office";
|
|
type = types.str;
|
|
};
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
systemd.tmpfiles.rules = container.mkContainerDir cfg [
|
|
"data"
|
|
];
|
|
|
|
containers.office = container.mkContainer cfg {
|
|
bindMounts = {
|
|
"/var/lib/onlyoffice" = {
|
|
hostPath = "${cfg.storage}/data";
|
|
isReadOnly = false;
|
|
};
|
|
};
|
|
|
|
|
|
# HACK: Temporarely run in docker due to https://github.com/ONLYOFFICE/onlyoffice-nextcloud/issues/931
|
|
config = { pkgs, ... }: container.mkContainerConfig cfg {
|
|
virtualisation.oci-containers.backend = "docker";
|
|
virtualisation.oci-containers.containers.office = {
|
|
autoStart = true;
|
|
image = "dockerhub.timeweb.cloud/onlyoffice/documentserver:latest";
|
|
# ports = [ "${toString cfg.port}:8000" ];
|
|
extraOptions = [ "--network=host" "--privileged" ];
|
|
environment = {
|
|
JWT_ENABLED = "true";
|
|
JWT_SECRET = "8wLfKGha8YRfvwpB5hYYjZf8vtUQs3wS";
|
|
AMQP_URI = "amqp://guest:guest@${config.container.module.rabbitmq.address}:${toString config.container.module.rabbitmq.port}";
|
|
DB_HOST = config.container.module.postgres.address;
|
|
DB_PORT = toString config.container.module.postgres.port;
|
|
DB_NAME = "onlyoffice";
|
|
DB_USER = "onlyoffice";
|
|
DB_PWD = "onlyoffice";
|
|
};
|
|
};
|
|
};
|
|
|
|
# config = { pkgs, ... }: container.mkContainerConfig cfg {
|
|
# # HACK: For whatever reason it does not detect my global allowUnfree (I pass pkgs from host system in mkContainerConfig).
|
|
# nixpkgs.overlays = [ (final: prev: {
|
|
# corefonts = prev.corefonts.overrideAttrs (old: {
|
|
# meta.license = mkForce licenses.mit;
|
|
# });
|
|
# })];
|
|
|
|
# services.onlyoffice = let
|
|
# dbName = "onlyoffice";
|
|
# in {
|
|
# enable = true;
|
|
# hostname = cfg.domain;
|
|
|
|
# postgresName = dbName;
|
|
# postgresHost = config.container.module.postgres.address;
|
|
# postgresUser = dbName;
|
|
# postgresPasswordFile = "${pkgs.writeText "OfficeDbPassword" dbName}";
|
|
|
|
# jwtSecretFile = "/var/lib/onlyoffice/jwt";
|
|
|
|
# rabbitmqUrl = "amqp://guest:guest@${config.container.module.rabbitmq.address}:${toString config.container.module.rabbitmq.port}";
|
|
|
|
# examplePort = cfg.port;
|
|
# enableExampleServer = true;
|
|
# };
|
|
# };
|
|
};
|
|
};
|
|
}
|