c1dca9e40b
The old etcd port 4001 is no longer enabled by default in etcd 3. The new port is 2379 and is officially assigned by IANA. There were still some services left that expect etcd on port 4001 by default. This changes the default to 2379 everywhere. It should not cause problems for users as the etcd by nix does listen on the new port only by default anyway.
156 lines
4 KiB
Nix
156 lines
4 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
cfg = config.services.panamax;
|
|
|
|
panamax_api = pkgs.panamax_api.override { dataDir = cfg.dataDir + "/api"; };
|
|
panamax_ui = pkgs.panamax_ui.override { dataDir = cfg.dataDir + "/ui"; };
|
|
|
|
in {
|
|
|
|
##### Interface
|
|
options.services.panamax = {
|
|
enable = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = ''
|
|
Whether to enable Panamax service.
|
|
'';
|
|
};
|
|
|
|
UIPort = mkOption {
|
|
type = types.int;
|
|
default = 8888;
|
|
description = ''
|
|
Panamax UI listening port.
|
|
'';
|
|
};
|
|
|
|
APIPort = mkOption {
|
|
type = types.int;
|
|
default = 3000;
|
|
description = ''
|
|
Panamax UI listening port.
|
|
'';
|
|
};
|
|
|
|
dataDir = mkOption {
|
|
type = types.str;
|
|
default = "/var/lib/panamax";
|
|
description = ''
|
|
Data dir for Panamax.
|
|
'';
|
|
};
|
|
|
|
fleetctlEndpoint = mkOption {
|
|
type = types.str;
|
|
default = "http://127.0.0.1:2379";
|
|
description = ''
|
|
Panamax fleetctl endpoint.
|
|
'';
|
|
};
|
|
|
|
journalEndpoint = mkOption {
|
|
type = types.str;
|
|
default = "http://127.0.0.1:19531";
|
|
description = ''
|
|
Panamax journal endpoint.
|
|
'';
|
|
};
|
|
|
|
secretKey = mkOption {
|
|
type = types.str;
|
|
default = "SomethingVeryLong.";
|
|
description = ''
|
|
Panamax secret key (do change this).
|
|
'';
|
|
};
|
|
|
|
};
|
|
|
|
##### Implementation
|
|
config = mkIf cfg.enable {
|
|
systemd.services.panamax-api = {
|
|
description = "Panamax API";
|
|
|
|
wantedBy = [ "multi-user.target" ];
|
|
after = [ "network.target" "fleet.service" "etcd.service" "docker.service" ];
|
|
|
|
path = [ panamax_api ];
|
|
environment = {
|
|
RAILS_ENV = "production";
|
|
JOURNAL_ENDPOINT = cfg.journalEndpoint;
|
|
FLEETCTL_ENDPOINT = cfg.fleetctlEndpoint;
|
|
PANAMAX_DATABASE_PATH = "${cfg.dataDir}/api/db/mnt/db.sqlite3";
|
|
};
|
|
|
|
preStart = ''
|
|
rm -rf ${cfg.dataDir}/state/tmp
|
|
mkdir -p ${cfg.dataDir}/api/{db/mnt,state/log,state/tmp}
|
|
ln -sf ${panamax_api}/share/panamax-api/_db/{schema.rb,seeds.rb,migrate} ${cfg.dataDir}/api/db/
|
|
|
|
if [ ! -f ${cfg.dataDir}/.created ]; then
|
|
bundle exec rake db:setup
|
|
bundle exec rake db:seed
|
|
bundle exec rake panamax:templates:load || true
|
|
touch ${cfg.dataDir}/.created
|
|
else
|
|
bundle exec rake db:migrate
|
|
fi
|
|
'';
|
|
|
|
serviceConfig = {
|
|
ExecStart = "${panamax_api}/bin/bundle exec rails server --binding 127.0.0.1 --port ${toString cfg.APIPort}";
|
|
User = "panamax";
|
|
Group = "panamax";
|
|
};
|
|
};
|
|
|
|
systemd.services.panamax-ui = {
|
|
description = "Panamax UI";
|
|
|
|
wantedBy = [ "multi-user.target" ];
|
|
after = [ "network.target" "panamax_api.service" ];
|
|
|
|
path = [ panamax_ui ];
|
|
environment = {
|
|
RAILS_ENV = "production";
|
|
JOURNAL_ENDPOINT = cfg.journalEndpoint;
|
|
PMX_API_PORT_3000_TCP_ADDR = "localhost";
|
|
PMX_API_PORT_3000_TCP_PORT = toString cfg.APIPort;
|
|
SECRET_KEY_BASE = cfg.secretKey;
|
|
};
|
|
|
|
preStart = ''
|
|
mkdir -p ${cfg.dataDir}/ui/state/{log,tmp}
|
|
chown -R panamax:panamax ${cfg.dataDir}
|
|
'';
|
|
|
|
serviceConfig = {
|
|
ExecStart = "${panamax_ui}/bin/bundle exec rails server --binding 127.0.0.1 --port ${toString cfg.UIPort}";
|
|
User = "panamax";
|
|
Group = "panamax";
|
|
PermissionsStartOnly = true;
|
|
};
|
|
};
|
|
|
|
users.extraUsers.panamax =
|
|
{ uid = config.ids.uids.panamax;
|
|
description = "Panamax user";
|
|
createHome = true;
|
|
home = cfg.dataDir;
|
|
extraGroups = [ "docker" ];
|
|
};
|
|
|
|
services.journald.enableHttpGateway = mkDefault true;
|
|
services.fleet.enable = mkDefault true;
|
|
services.cadvisor.enable = mkDefault true;
|
|
services.cadvisor.port = mkDefault 3002;
|
|
virtualisation.docker.enable = mkDefault true;
|
|
|
|
environment.systemPackages = [ panamax_api panamax_ui ];
|
|
users.extraGroups.panamax.gid = config.ids.gids.panamax;
|
|
};
|
|
}
|