X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=nixops%2Fmodules%2Fwebsites%2Ftools%2Fmastodon%2Fmastodon.nix;h=516cc5879ac04fba8ab901417ea120847315c54c;hb=167b81657d696e91545cedde172e7859643bba06;hp=bc4014d1bf5d432f532427862c697fadc962f344;hpb=a4993193703e14c4af10dd0ea84829594a6ee30b;p=perso%2FImmae%2FConfig%2FNix.git diff --git a/nixops/modules/websites/tools/mastodon/mastodon.nix b/nixops/modules/websites/tools/mastodon/mastodon.nix index bc4014d..516cc58 100644 --- a/nixops/modules/websites/tools/mastodon/mastodon.nix +++ b/nixops/modules/websites/tools/mastodon/mastodon.nix @@ -1,17 +1,24 @@ -{ env, ruby_2_5, bundlerEnv, defaultGemConfig, fetchedGithub, stdenv, writeText, pkgs }: +{ env, ruby_2_6, bundlerEnv, defaultGemConfig, yarn2nixPackage, fetchedGithub, stdenv, writeText, pkgs }: let varDir = "/var/lib/mastodon_immae"; socketsDir = "/run/mastodon"; gems = bundlerEnv { name = "mastodon-env"; - # https://git.immae.eu/mantisbt/view.php?id=131 - ruby = ruby_2_5.overrideAttrs(old: { - postInstall = builtins.replaceStrings [" --destdir $GEM_HOME"] [""] old.postInstall; - }); + ruby = ruby_2_6; gemset = ./gemset.nix; gemdir = (fetchedGithub ./mastodon.json).src; groups = [ "default" "production" "test" "development" ]; gemConfig = defaultGemConfig // { + redis-rack = attrs: { + preBuild = '' + sed -i 's!s\.files.*!!' redis-rack.gemspec + ''; + }; + tzinfo = attrs: { + preBuild = '' + sed -i 's!s\.files.*!!' tzinfo.gemspec + ''; + }; cld3 = attrs: { buildInputs = with pkgs; [ protobuf protobufc pkgconfig ]; }; @@ -25,35 +32,26 @@ let }; yarnModules = let info = fetchedGithub ./mastodon.json; + packagejson = pkgs.runCommand "package.json" { buildInputs = [ pkgs.jq ]; } '' + cat ${info.src}/package.json | jq -r '.version = "${info.version}"' > $out + ''; in - pkgs.yarn2nix.mkYarnModules { - name = "mastodon-yarn-modules"; - packageJSON = "${info.src}/package.json"; + yarn2nixPackage.mkYarnModules rec { + name = "mastodon-yarn"; + pname = name; + version = info.version; + packageJSON = packagejson; yarnLock = "${info.src}/yarn.lock"; yarnNix = ./yarn-packages.nix; pkgConfig = { + all = { + buildInputs = [ yarn2nixPackage.src ]; + }; uws = { postInstall = '' npx node-gyp rebuild > build_log.txt 2>&1 || true ''; }; - node-zopfli = { - postInstall = '' - npx node-pre-gyp install --fallback-to-build - ''; - }; - node-sass = { - buildInputs = with pkgs; [ libsass python ]; - postInstall = let - nodeHeaders = pkgs.fetchurl { - url = "https://nodejs.org/download/release/v${pkgs.nodejs.version}/node-v${pkgs.nodejs.version}-headers.tar.gz"; - sha256 = "16f20ya3ys6w5w6y6l4536f7jrgk4gz46bf71w1r1xxb26a54m32"; - }; - in - '' - node scripts/build.js --tarball=${nodeHeaders} - ''; - }; }; }; mastodon = stdenv.mkDerivation (fetchedGithub ./mastodon.json // rec { @@ -61,57 +59,64 @@ let cp -a . $out cp -a ${yarnModules}/node_modules $out ''; - buildInputs = [ yarnModules gems ]; + buildInputs = [ yarnModules ]; }); - config = writeText "mastodon_environment" '' - REDIS_HOST=${env.redis.host} - REDIS_PORT=${env.redis.port} - REDIS_DB=${env.redis.db} - DB_HOST=${env.postgresql.socket} - DB_USER=${env.postgresql.user} - DB_NAME=${env.postgresql.database} - DB_PASS=${env.postgresql.password} - DB_PORT=${env.postgresql.port} + keys.mastodon = { + dest = "webapps/tools-mastodon"; + user = "mastodon"; + group = "mastodon"; + permissions = "0400"; + text = '' + REDIS_HOST=${env.redis.host} + REDIS_PORT=${env.redis.port} + REDIS_DB=${env.redis.db} + DB_HOST=${env.postgresql.socket} + DB_USER=${env.postgresql.user} + DB_NAME=${env.postgresql.database} + DB_PASS=${env.postgresql.password} + DB_PORT=${env.postgresql.port} - LOCAL_DOMAIN=mastodon.immae.eu - LOCAL_HTTPS=true - ALTERNATE_DOMAINS=immae.eu + LOCAL_DOMAIN=mastodon.immae.eu + LOCAL_HTTPS=true + ALTERNATE_DOMAINS=immae.eu - PAPERCLIP_SECRET=${env.paperclip_secret} - SECRET_KEY_BASE=${env.secret_key_base} - OTP_SECRET=${env.otp_secret} + PAPERCLIP_SECRET=${env.paperclip_secret} + SECRET_KEY_BASE=${env.secret_key_base} + OTP_SECRET=${env.otp_secret} - VAPID_PRIVATE_KEY=${env.vapid.private} - VAPID_PUBLIC_KEY=${env.vapid.public} + VAPID_PRIVATE_KEY=${env.vapid.private} + VAPID_PUBLIC_KEY=${env.vapid.public} - SMTP_DELIVERY_METHOD=sendmail - SMTP_FROM_ADDRESS=notifications@mastodon.immae.eu - SENDMAIL_LOCATION="/run/wrappers/bin/sendmail" - PAPERCLIP_ROOT_PATH=${varDir} + SMTP_DELIVERY_METHOD=sendmail + SMTP_FROM_ADDRESS=mastodon@tools.immae.eu + SENDMAIL_LOCATION="/run/wrappers/bin/sendmail" + PAPERCLIP_ROOT_PATH=${varDir} - STREAMING_CLUSTER_NUM=1 + STREAMING_CLUSTER_NUM=1 - RAILS_LOG_LEVEL=warn + RAILS_LOG_LEVEL=warn - # LDAP authentication (optional) - LDAP_ENABLED=true - LDAP_HOST=ldap.immae.eu - LDAP_PORT=636 - LDAP_METHOD=simple_tls - LDAP_BASE="dc=immae,dc=eu" - LDAP_BIND_DN="cn=mastodon,ou=services,dc=immae,dc=eu" - LDAP_PASSWORD="${env.ldap.password}" - LDAP_UID="uid" - LDAP_SEARCH_FILTER="(&(%{uid}=%{email})(memberOf=cn=users,cn=mastodon,ou=services,dc=immae,dc=eu))" + # LDAP authentication (optional) + LDAP_ENABLED=true + LDAP_HOST=ldap.immae.eu + LDAP_PORT=636 + LDAP_METHOD=simple_tls + LDAP_BASE="dc=immae,dc=eu" + LDAP_BIND_DN="cn=mastodon,ou=services,dc=immae,dc=eu" + LDAP_PASSWORD="${env.ldap.password}" + LDAP_UID="uid" + LDAP_SEARCH_FILTER="(&(%{uid}=%{email})(memberOf=cn=users,cn=mastodon,ou=services,dc=immae,dc=eu))" ''; + }; + # FIXME: build machine will contain some passwords in the nix store railsRoot = stdenv.mkDerivation { name = "mastodon_immae"; - inherit config mastodon; + inherit mastodon; builder = writeText "build_mastodon_immae" '' source $stdenv/setup set -a - source $config + ${keys.mastodon.text} set +a cp -a $mastodon $out cd $out @@ -126,7 +131,8 @@ let }; in { - inherit railsRoot config varDir socketsDir gems; + inherit railsRoot varDir socketsDir gems; + keys = builtins.attrValues keys; nodeSocket = "${socketsDir}/live_immae_node.sock"; railsSocket = "${socketsDir}/live_immae_puma.sock"; }