mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-24 07:53:19 +00:00
Merge pull request #18463 from regnat/selfoss
Selfoss : add package and module
This commit is contained in:
commit
2522504bd1
@ -342,6 +342,7 @@
|
||||
redbaron = "Maxim Ivanov <ivanov.maxim@gmail.com>";
|
||||
redvers = "Redvers Davies <red@infect.me>";
|
||||
refnil = "Martin Lavoie <broemartino@gmail.com>";
|
||||
regnat = "Théophane Hufschmitt <regnat@regnat.ovh>";
|
||||
relrod = "Ricky Elrod <ricky@elrod.me>";
|
||||
renzo = "Renzo Carbonara <renzocarbonara@gmail.com>";
|
||||
retrry = "Tadas Barzdžius <retrry@gmail.com>";
|
||||
|
@ -477,6 +477,7 @@
|
||||
./services/web-apps/mattermost.nix
|
||||
./services/web-apps/pump.io.nix
|
||||
./services/web-apps/tt-rss.nix
|
||||
./services/web-apps/selfoss.nix
|
||||
./services/web-servers/apache-httpd/default.nix
|
||||
./services/web-servers/caddy.nix
|
||||
./services/web-servers/fcgiwrap.nix
|
||||
|
166
nixos/modules/services/web-apps/selfoss.nix
Normal file
166
nixos/modules/services/web-apps/selfoss.nix
Normal file
@ -0,0 +1,166 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.selfoss;
|
||||
|
||||
poolName = "selfoss_pool";
|
||||
phpfpmSocketName = "/var/run/phpfpm/${poolName}.sock";
|
||||
|
||||
dataDir = "/var/lib/selfoss";
|
||||
|
||||
selfoss-config =
|
||||
let
|
||||
db_type = cfg.database.type;
|
||||
default_port = if (db_type == "mysql") then 3306 else 5342;
|
||||
in
|
||||
pkgs.writeText "selfoss-config.ini" ''
|
||||
[globals]
|
||||
${lib.optionalString (db_type != "sqlite") ''
|
||||
db_type=${db_type}
|
||||
db_host=${cfg.database.host}
|
||||
db_database=${cfg.database.name}
|
||||
db_username=${cfg.database.user}
|
||||
db_password=${cfg.database.password}
|
||||
db_port=${if (cfg.database.port != null) then cfg.database.port
|
||||
else default_port}
|
||||
''
|
||||
}
|
||||
${cfg.extraConfig}
|
||||
'';
|
||||
in
|
||||
{
|
||||
options = {
|
||||
services.selfoss = {
|
||||
enable = mkEnableOption "selfoss";
|
||||
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "nginx";
|
||||
example = "nginx";
|
||||
description = ''
|
||||
User account under which both the service and the web-application run.
|
||||
'';
|
||||
};
|
||||
|
||||
pool = mkOption {
|
||||
type = types.str;
|
||||
default = "${poolName}";
|
||||
description = ''
|
||||
Name of existing phpfpm pool that is used to run web-application.
|
||||
If not specified a pool will be created automatically with
|
||||
default values.
|
||||
'';
|
||||
};
|
||||
|
||||
database = {
|
||||
type = mkOption {
|
||||
type = types.enum ["pgsql" "mysql" "sqlite"];
|
||||
default = "sqlite";
|
||||
description = ''
|
||||
Database to store feeds. Supported are sqlite, pgsql and mysql.
|
||||
'';
|
||||
};
|
||||
|
||||
host = mkOption {
|
||||
type = types.str;
|
||||
default = "localhost";
|
||||
description = ''
|
||||
Host of the database (has no effect if type is "sqlite").
|
||||
'';
|
||||
};
|
||||
|
||||
name = mkOption {
|
||||
type = types.str;
|
||||
default = "tt_rss";
|
||||
description = ''
|
||||
Name of the existing database (has no effect if type is "sqlite").
|
||||
'';
|
||||
};
|
||||
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "tt_rss";
|
||||
description = ''
|
||||
The database user. The user must exist and has access to
|
||||
the specified database (has no effect if type is "sqlite").
|
||||
'';
|
||||
};
|
||||
|
||||
password = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description = ''
|
||||
The database user's password (has no effect if type is "sqlite").
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.nullOr types.int;
|
||||
default = null;
|
||||
description = ''
|
||||
The database's port. If not set, the default ports will be
|
||||
provided (5432 and 3306 for pgsql and mysql respectively)
|
||||
(has no effect if type is "sqlite").
|
||||
'';
|
||||
};
|
||||
};
|
||||
extraConfig = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = ''
|
||||
Extra configuration added to config.ini
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
services.phpfpm.poolConfigs = mkIf (cfg.pool == "${poolName}") {
|
||||
"${poolName}" = ''
|
||||
listen = "${phpfpmSocketName}";
|
||||
listen.owner = nginx
|
||||
listen.group = nginx
|
||||
listen.mode = 0600
|
||||
user = nginx
|
||||
pm = dynamic
|
||||
pm.max_children = 75
|
||||
pm.start_servers = 10
|
||||
pm.min_spare_servers = 5
|
||||
pm.max_spare_servers = 20
|
||||
pm.max_requests = 500
|
||||
catch_workers_output = 1
|
||||
'';
|
||||
};
|
||||
|
||||
systemd.services.selfoss-config = {
|
||||
serviceConfig.Type = "oneshot";
|
||||
script = ''
|
||||
mkdir -m 755 -p ${dataDir}
|
||||
cd ${dataDir}
|
||||
|
||||
# Delete all but the "data" folder
|
||||
ls | grep -v data | while read line; do rm -rf $line; done || true
|
||||
|
||||
# Create the files
|
||||
cp -r "${pkgs.selfoss}/"* "${dataDir}"
|
||||
ln -sf "${selfoss-config}" "${dataDir}/config.ini"
|
||||
chown -R "${cfg.user}" "${dataDir}"
|
||||
chmod -R 755 "${dataDir}"
|
||||
'';
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
};
|
||||
|
||||
systemd.services.selfoss-update = {
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.php}/bin/php ${dataDir}/cliupdate.php";
|
||||
User = "${cfg.user}";
|
||||
};
|
||||
startAt = "hourly";
|
||||
after = [ "selfoss-config.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
}
|
29
pkgs/servers/web-apps/selfoss/default.nix
Normal file
29
pkgs/servers/web-apps/selfoss/default.nix
Normal file
@ -0,0 +1,29 @@
|
||||
{ stdenv, fetchFromGitHub }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "selfoss-${version}";
|
||||
version = "2.15";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "SSilence";
|
||||
repo = "selfoss";
|
||||
rev = version;
|
||||
sha256 = "0ljpyd354yalpnqwj6xk9b9mq4h6p8jbqznapj7nvfybas8faq15";
|
||||
};
|
||||
|
||||
buildPhases = ["unpackPhase" "installPhase"];
|
||||
|
||||
installPhase = ''
|
||||
mkdir $out
|
||||
cp -ra * $out/
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Web-based news feed (RSS/Atom) aggregator";
|
||||
license = licenses.gpl3;
|
||||
homepage = http://http://selfoss.aditu.de/;
|
||||
platforms = platforms.all;
|
||||
maintainers = [ maintainers.regnat ];
|
||||
};
|
||||
}
|
||||
|
@ -10959,6 +10959,8 @@ in
|
||||
|
||||
tt-rss = callPackage ../servers/tt-rss { };
|
||||
|
||||
selfoss = callPackage ../servers/web-apps/selfoss { };
|
||||
|
||||
axis2 = callPackage ../servers/http/tomcat/axis2 { };
|
||||
|
||||
unifi = callPackage ../servers/unifi { };
|
||||
|
Loading…
Reference in New Issue
Block a user