Documize is an open-source alternative for wiki software like Confluence based on Go and EmberJS. This patch adds the sources for the community edition[1], for commercial their paid-plan[2] needs to be used. For commercial use a derivation that bundles the commercial package and contains a `$out/bin/documize` can be passed to `services.documize.enable`. The package compiles the Go sources, the build process also bundles the pre-built frontend from `gui/public` into the binary. The NixOS module generates a simple `systemd` unit which starts the service as a dynamic user, database and a reverse proxy won't be configured. [1] https://www.documize.com/get-started/ [2] https://www.documize.com/pricing/wip/yesman
parent
ef48aaff73
commit
acbb74ed18
@ -0,0 +1,67 @@ |
||||
{ pkgs, lib, config, ... }: |
||||
|
||||
with lib; |
||||
|
||||
let |
||||
|
||||
cfg = config.services.documize; |
||||
|
||||
in |
||||
|
||||
{ |
||||
options.services.documize = { |
||||
enable = mkEnableOption "Documize Wiki"; |
||||
|
||||
offline = mkEnableOption "Documize offline mode"; |
||||
|
||||
package = mkOption { |
||||
default = pkgs.documize-community; |
||||
type = types.package; |
||||
description = '' |
||||
Which package to use for documize. |
||||
''; |
||||
}; |
||||
|
||||
db = mkOption { |
||||
type = types.str; |
||||
example = "host=localhost port=5432 sslmode=disable user=admin password=secret dbname=documize"; |
||||
description = '' |
||||
The DB connection string to use for the database. |
||||
''; |
||||
}; |
||||
|
||||
dbtype = mkOption { |
||||
type = types.enum [ "postgresql" "percona" "mariadb" "mysql" ]; |
||||
description = '' |
||||
Which database to use for storage. |
||||
''; |
||||
}; |
||||
|
||||
port = mkOption { |
||||
type = types.port; |
||||
example = 3000; |
||||
description = '' |
||||
Which TCP port to serve. |
||||
''; |
||||
}; |
||||
}; |
||||
|
||||
config = mkIf cfg.enable { |
||||
systemd.services.documize-server = { |
||||
wantedBy = [ "multi-user.target" ]; |
||||
|
||||
script = '' |
||||
${cfg.package}/bin/documize \ |
||||
-db "${cfg.db}" \ |
||||
-dbtype ${cfg.dbtype} \ |
||||
-port ${toString cfg.port} \ |
||||
-offline ${if cfg.offline then "1" else "0"} |
||||
''; |
||||
|
||||
serviceConfig = { |
||||
Restart = "always"; |
||||
DynamicUser = "yes"; |
||||
}; |
||||
}; |
||||
}; |
||||
} |
@ -0,0 +1,58 @@ |
||||
import ./make-test.nix ({ pkgs, lib, ...} : { |
||||
name = "documize"; |
||||
meta = with pkgs.stdenv.lib.maintainers; { |
||||
maintainers = [ ma27 ]; |
||||
}; |
||||
|
||||
machine = { pkgs, ... }: { |
||||
environment.systemPackages = [ pkgs.jq ]; |
||||
|
||||
services.documize = { |
||||
enable = true; |
||||
port = 3000; |
||||
dbtype = "postgresql"; |
||||
db = "host=localhost port=5432 sslmode=disable user=documize password=documize dbname=documize"; |
||||
}; |
||||
|
||||
systemd.services.documize-server = { |
||||
after = [ "postgresql.service" ]; |
||||
requires = [ "postgresql.service" ]; |
||||
}; |
||||
|
||||
services.postgresql = { |
||||
enable = true; |
||||
initialScript = pkgs.writeText "psql-init" '' |
||||
CREATE ROLE documize WITH LOGIN PASSWORD 'documize'; |
||||
CREATE DATABASE documize WITH OWNER documize; |
||||
''; |
||||
}; |
||||
}; |
||||
|
||||
testScript = '' |
||||
startAll; |
||||
|
||||
$machine->waitForUnit("documize-server.service"); |
||||
$machine->waitForOpenPort(3000); |
||||
|
||||
my $dbhash = $machine->succeed("curl -f localhost:3000 " |
||||
. " | grep 'property=\"dbhash' " |
||||
. " | grep -Po 'content=\"\\K[^\"]*'" |
||||
); |
||||
|
||||
chomp($dbhash); |
||||
|
||||
$machine->succeed("curl -X POST " |
||||
. "--data 'dbname=documize' " |
||||
. "--data 'dbhash=$dbhash' " |
||||
. "--data 'title=NixOS' " |
||||
. "--data 'message=Docs' " |
||||
. "--data 'firstname=John' " |
||||
. "--data 'lastname=Doe' " |
||||
. "--data 'email=john.doe\@nixos.org' " |
||||
. "--data 'password=verysafe' " |
||||
. "-f localhost:3000/api/setup" |
||||
); |
||||
|
||||
$machine->succeed('test "$(curl -f localhost:3000/api/public/meta | jq ".title" | xargs echo)" = "NixOS"'); |
||||
''; |
||||
}) |
@ -0,0 +1,43 @@ |
||||
{ lib, buildGoPackage, fetchFromGitHub, go-bindata, go-bindata-assetfs }: |
||||
|
||||
buildGoPackage rec { |
||||
pname = "documize-community"; |
||||
version = "2.2.1"; |
||||
|
||||
src = fetchFromGitHub { |
||||
owner = "documize"; |
||||
repo = "community"; |
||||
rev = "v${version}"; |
||||
sha256 = "09s5js0zb3mh3g5qz8f3l2cqjn01kjb35kinfv932nf2rfyrmyqz"; |
||||
}; |
||||
|
||||
goPackagePath = "github.com/documize/community"; |
||||
|
||||
buildInputs = [ go-bindata-assetfs go-bindata ]; |
||||
|
||||
buildPhase = '' |
||||
runHook preBuild |
||||
|
||||
pushd go/src/github.com/documize/community |
||||
go build -gcflags="all=-trimpath=$GOPATH" -o bin/documize ./edition/community.go |
||||
popd |
||||
|
||||
runHook postBuild |
||||
''; |
||||
|
||||
installPhase = '' |
||||
runHook preInstall |
||||
|
||||
mkdir -p $bin/bin |
||||
cp go/src/github.com/documize/community/bin/documize $bin/bin |
||||
|
||||
runHook postInstall |
||||
''; |
||||
|
||||
meta = with lib; { |
||||
description = "Open source Confluence alternative for internal & external docs built with Golang + EmberJS"; |
||||
license = licenses.agpl3; |
||||
maintainers = with maintainers; [ ma27 ]; |
||||
homepage = https://www.documize.com/; |
||||
}; |
||||
} |
Loading…
Reference in new issue