{ self }: final: prev: { uniworxDemoDocker = prev.dockerTools.buildImage { name = "uniworx-demo"; tag = self.rev or null; created = let fromDate = builtins.readFile (prev.runCommand "date" { nativeBuildInputs = with final; [ coreutils ]; } '' printf '%s' $(date -Is -d '@${toString self.lastModified}') > $out ''); in if self ? lastModified then fromDate else "1970-01-01T00:00:01Z"; contents = with final; [ uniworx.uniworx.components.exes.uniworx prev.dockerTools.binSh postgresql_12 memcached ]; runAsRoot = '' #!${final.stdenv.shell} ${prev.dockerTools.shadowSetup} mkdir -p /var/lib groupadd -r postgres useradd -r -g postgres -d /var/lib/postgres -M postgres install -d -g postgres -o postgres -m 0750 /var/lib/postgres groupadd -r memcached useradd -r -g memcached -d /var/lib/memcached -M memcached install -d -g memcached -o memcached -m 0750 /var/lib/memcached groupadd -r uniworx useradd -r -g uniworx -d /var/lib/uniworx -M uniworx install -d -g uniworx -o uniworx -m 0750 /var/lib/uniworx gpasswd -a uniworx postgres mkdir -p /var/log install -d -g postgres -o postgres -m 0755 /var/log/postgres install -d -g memcached -o memcached -m 0755 /var/log/memcached install -d -g uniworx -o uniworx -m 0755 /var/log/uniworx mkdir -p /run install -d -g postgres -o postgres -m 0755 /run/postgres ''; config = let entrypoint = prev.writeScriptBin "uniworx-entrypoint" '' #!${final.zsh}/bin/zsh -xe export PATH=${final.su}/bin:${final.findutils}/bin:${final.coreutils}/bin:/bin cTime=$(date -Is) pgDir=/var/lib/postgres pgSockDir=/run/postgres pgLogFile=/var/log/postgres/''${cTime}.log export PGHOST=''${pgSockDir} export PGLOG=''${pgLogFile} pgNew= if [[ -n "$(find ''${pgDir} -maxdepth 0 -type d -empty 2>/dev/null)" ]]; then pgNew=1 fi [[ -z "''${pgNew}" ]] || su postgres -c "initdb --no-locale --encoding=UTF8 -D ''${pgDir}" su postgres -c "pg_ctl start -D ''${pgDir} -l ''${pgLogFile} -w -o '-k ''${pgSockDir} -c listen_addresses= -c hba_file=${postgresHba} -c unix_socket_permissions=0777 -c max_connections=9990 -c shared_preload_libraries=pg_stat_statements -c auto_explain.log_min_duration=100ms'" [[ -z "''${pgNew}" ]] || psql -f ${postgresSchema} postgres postgres su memcached -c "cd /var/lib/memcached; memcached -p 11212" &>/var/log/memcached/''${cTime}.log & export SESSION_MEMCACHED_HOST=localhost export SESSION_MEMCACHED_PORT=11212 export LOGDEST=/var/log/uniworx/''${cTime}.log exec -- su uniworx -c "cd /var/lib/uniworx; uniworx ${uniworxConfig}" ''; postgresSchema = prev.writeText "schema.sql" '' CREATE USER uniworx WITH SUPERUSER; CREATE DATABASE uniworx; GRANT ALL ON DATABASE uniworx TO uniworx; ''; postgresHba = prev.writeText "hba_file" '' local all all trust ''; uniworxConfig = prev.writeText "uni2work.yml" '' port: 8080 approot: "_env:APPROOT:http://localhost:8080" ''; in { Cmd = [ "${entrypoint}/bin/uniworx-entrypoint" ]; ExposedPorts = { "8080/tcp" = {}; }; Volumes = { "/var/lib/postgres" = {}; "/var/lib/uniworx" = {}; "/var/log" = {}; }; }; }; }