Mastodon: Difference between revisions

From NixOS Wiki
imported>Nix
m add Software/Applications subcategory
imported>Cab404
Added instructions for Caddy
Line 1: Line 1:
== Using Caddy as a server  ==
Use the following template:
<syntaxHighlight lang=nix>
services = {
  caddy = {
    enable = true;
    virtualHosts = {
   
      # Don't forget to change the host!
      "<your-server-host>" = {
        extraConfig = ''
          handle_path /system/* {
              file_server * {
                  root /var/lib/mastodon/public-system
              }
          }
          handle /api/v1/streaming/* {
              reverse_proxy  unix//run/mastodon-streaming/streaming.socket
          }
          file_server * {
              root ${pkgs.mastodon}/public
              pass_thru
          }
          reverse_proxy * unix//run/mastodon-web/web.socket
          handle_errors {
              root * ${pkgs.mastodon}/public
              rewrite 500.html
              file_server
          }
          encode gzip
          header /* {
              Strict-Transport-Security "max-age=31536000;"
          }
          header /emoji/* Cache-Control "public, max-age=31536000, immutable"
          header /packs/* Cache-Control "public, max-age=31536000, immutable"
          header /system/accounts/avatars/* Cache-Control "public, max-age=31536000, immutable"
          header /system/media_attachments/files/* Cache-Control "public, max-age=31536000, immutable"
        '';
    };
  };
};
# Caddy requires files and socket access
users.users.caddy.extraGroups = [ "mastodon" ];
</syntaxHighlight>


== Hints for running in your local network for testing ==
== Hints for running in your local network for testing ==

Revision as of 15:44, 13 November 2022

Using Caddy as a server

Use the following template:

services = {
  caddy = {
    enable = true;
    virtualHosts = {
    
      # Don't forget to change the host!
      "<your-server-host>" = {
        extraConfig = ''
          handle_path /system/* {
              file_server * {
                  root /var/lib/mastodon/public-system
              }
          }

          handle /api/v1/streaming/* {
              reverse_proxy  unix//run/mastodon-streaming/streaming.socket
          }

          file_server * {
              root ${pkgs.mastodon}/public
              pass_thru
          }
          reverse_proxy * unix//run/mastodon-web/web.socket

          handle_errors {
              root * ${pkgs.mastodon}/public
              rewrite 500.html
              file_server
          }

          encode gzip

          header /* {
              Strict-Transport-Security "max-age=31536000;"
          }
          header /emoji/* Cache-Control "public, max-age=31536000, immutable"
          header /packs/* Cache-Control "public, max-age=31536000, immutable"
          header /system/accounts/avatars/* Cache-Control "public, max-age=31536000, immutable"
          header /system/media_attachments/files/* Cache-Control "public, max-age=31536000, immutable"
        '';
    };
  };
};

# Caddy requires files and socket access
users.users.caddy.extraGroups = [ "mastodon" ];

Hints for running in your local network for testing

If you get a Mastodon::HostValidationError when trying to federate with another ActivityPub instance in your local network you need to allow Mastodon to access local ip addresses in outgoing http (federation) requests. To do this set the following environment variable: ALLOWED_PRIVATE_ADDRESSES to a comma-separated list of allowed ip addresses with the format specified in https://ruby-doc.org/stdlib-2.5.1/libdoc/ipaddr/rdoc/IPAddr.html. This is also documented in the Mastodon admin guide[1].