X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=nixops%2Fmodules%2Fwebsites%2Ftools%2Fmastodon.nix;h=38b21074ac02cdbfc39050ed5c202fb89f3077a0;hb=daf64e3f7de98e4267823d14fa34891b27b5f657;hp=3279cf8d61425f49556fc58be8fbd1f43ca1b778;hpb=79d2de8b83d765721b2cb720b2bc59673df54a4a;p=perso%2FImmae%2FConfig%2FNix.git diff --git a/nixops/modules/websites/tools/mastodon.nix b/nixops/modules/websites/tools/mastodon.nix index 3279cf8..38b2107 100644 --- a/nixops/modules/websites/tools/mastodon.nix +++ b/nixops/modules/websites/tools/mastodon.nix @@ -1,22 +1,16 @@ -{ lib, pkgs, config, myconfig, mylibs, ... }: +{ lib, pkgs, config, myconfig, ... }: let - varDir = "/var/lib/mastodon_immae"; - socketsDir = "/run/mastodon"; - nodeSocket = "${socketsDir}/live_immae_node.sock"; - railsSocket = "${socketsDir}/live_immae_puma.sock"; - - mastodon = pkgs.webapps.mastodon.override { inherit varDir; }; - env = myconfig.env.tools.mastodon; root = "/run/current-system/webapps/tools_mastodon"; cfg = config.services.myWebsites.tools.mastodon; + mcfg = config.services.mastodon; in { options.services.myWebsites.tools.mastodon = { enable = lib.mkEnableOption "enable mastodon's website"; }; config = lib.mkIf cfg.enable { - mySecrets.keys = [{ + secrets.keys = [{ dest = "webapps/tools-mastodon"; user = "mastodon"; group = "mastodon"; @@ -45,7 +39,7 @@ in { SMTP_DELIVERY_METHOD=sendmail SMTP_FROM_ADDRESS=mastodon@tools.immae.eu SENDMAIL_LOCATION="/run/wrappers/bin/sendmail" - PAPERCLIP_ROOT_PATH=${varDir} + PAPERCLIP_ROOT_PATH=${mcfg.dataDir} STREAMING_CLUSTER_NUM=1 @@ -63,137 +57,22 @@ in { LDAP_SEARCH_FILTER="(&(%{uid}=%{email})(memberOf=cn=users,cn=mastodon,ou=services,dc=immae,dc=eu))" ''; }]; - ids.uids.mastodon = env.user.uid; - ids.gids.mastodon = env.user.gid; - - users.users.mastodon = { - name = "mastodon"; - uid = config.ids.uids.mastodon; - group = "mastodon"; - description = "Mastodon user"; - home = varDir; - useDefaultShell = true; - }; - - users.groups.mastodon.gid = config.ids.gids.mastodon; - - systemd.services.mastodon-streaming = { - description = "Mastodon Streaming"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" "mastodon-web.service" ]; - - environment.NODE_ENV = "production"; - environment.SOCKET = nodeSocket; - - path = [ pkgs.nodejs pkgs.bashInteractive ]; - - script = '' - exec npm run start - ''; - - postStart = '' - while [ ! -S $SOCKET ]; do - sleep 0.5 - done - chmod a+w $SOCKET - ''; - - postStop = '' - rm $SOCKET - ''; - - serviceConfig = { - User = "mastodon"; - EnvironmentFile = "/var/secrets/webapps/tools-mastodon"; - PrivateTmp = true; - Restart = "always"; - TimeoutSec = 15; - Type = "simple"; - WorkingDirectory = mastodon; - }; - - unitConfig.RequiresMountsFor = varDir; - }; - - systemd.services.mastodon-web = { - description = "Mastodon Web app"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - - environment.RAILS_ENV = "production"; - environment.BUNDLE_PATH = "${mastodon.gems}/${mastodon.gems.ruby.gemPath}"; - environment.BUNDLE_GEMFILE = "${mastodon.gems.confFiles}/Gemfile"; - environment.SOCKET = railsSocket; - - path = [ mastodon.gems mastodon.gems.ruby pkgs.file ]; - - preStart = '' - ./bin/bundle exec rails db:migrate - ''; - - script = '' - exec ./bin/bundle exec puma -C config/puma.rb - ''; - - serviceConfig = { - User = "mastodon"; - EnvironmentFile = "/var/secrets/webapps/tools-mastodon"; - PrivateTmp = true; - Restart = "always"; - TimeoutSec = 60; - Type = "simple"; - WorkingDirectory = mastodon; - }; - - unitConfig.RequiresMountsFor = varDir; - }; - - systemd.services.mastodon-sidekiq = { - description = "Mastodon Sidekiq"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" "mastodon-web.service" ]; - - environment.RAILS_ENV="production"; - environment.BUNDLE_PATH = "${mastodon.gems}/${mastodon.gems.ruby.gemPath}"; - environment.BUNDLE_GEMFILE = "${mastodon.gems.confFiles}/Gemfile"; - environment.DB_POOL="5"; - - path = [ mastodon.gems mastodon.gems.ruby pkgs.imagemagick pkgs.ffmpeg pkgs.file ]; - - script = '' - exec ./bin/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push - ''; - - serviceConfig = { - User = "mastodon"; - EnvironmentFile = "/var/secrets/webapps/tools-mastodon"; - PrivateTmp = true; - Restart = "always"; - TimeoutSec = 15; - Type = "simple"; - WorkingDirectory = mastodon; - }; - - unitConfig.RequiresMountsFor = varDir; - }; - - system.activationScripts.mastodon = { - deps = [ "users" ]; - text = '' - install -m 0755 -o mastodon -g mastodon -d ${socketsDir} - install -m 0755 -o mastodon -g mastodon -d ${varDir} ${varDir}/tmp/cache - ''; + services.mastodon = { + enable = true; + configFile = "/var/secrets/webapps/tools-mastodon"; + socketsPrefix = "live_immae"; + dataDir = "/var/lib/mastodon_immae"; }; - services.myWebsites.tools.modules = [ + services.websites.tools.modules = [ "headers" "proxy" "proxy_wstunnel" "proxy_http" ]; security.acme.certs."eldiron".extraDomains."mastodon.immae.eu" = null; system.extraSystemBuilderCmds = '' mkdir -p $out/webapps - ln -s ${mastodon}/public/ $out/webapps/tools_mastodon + ln -s ${mcfg.workdir}/public/ $out/webapps/tools_mastodon ''; - services.myWebsites.tools.vhostConfs.mastodon = { + services.websites.tools.vhostConfs.mastodon = { certName = "eldiron"; hosts = ["mastodon.immae.eu" ]; root = root; @@ -221,14 +100,14 @@ in { ProxyPassMatch ^(/.*\.(png|ico|gif)$) ! ProxyPassMatch ^/(assets|avatars|emoji|headers|packs|sounds|system|.well-known/acme-challenge) ! - RewriteRule ^/api/v1/streaming/(.+)$ unix://${nodeSocket}|http://mastodon.immae.eu/api/v1/streaming/$1 [P,NE,QSA,L] - RewriteRule ^/api/v1/streaming/$ unix://${nodeSocket}|ws://mastodon.immae.eu/ [P,NE,QSA,L] - ProxyPass / unix://${railsSocket}|http://mastodon.immae.eu/ - ProxyPassReverse / unix://${railsSocket}|http://mastodon.immae.eu/ + RewriteRule ^/api/v1/streaming/(.+)$ unix://${mcfg.sockets.node}|http://mastodon.immae.eu/api/v1/streaming/$1 [P,NE,QSA,L] + RewriteRule ^/api/v1/streaming/$ unix://${mcfg.sockets.node}|ws://mastodon.immae.eu/ [P,NE,QSA,L] + ProxyPass / unix://${mcfg.sockets.rails}|http://mastodon.immae.eu/ + ProxyPassReverse / unix://${mcfg.sockets.rails}|http://mastodon.immae.eu/ - Alias /system ${varDir} + Alias /system ${mcfg.dataDir} - + Require all granted Options -MultiViews