summaryrefslogtreecommitdiff
path: root/doc/snac.8
diff options
context:
space:
mode:
Diffstat (limited to 'doc/snac.8')
-rw-r--r--doc/snac.8326
1 files changed, 326 insertions, 0 deletions
diff --git a/doc/snac.8 b/doc/snac.8
new file mode 100644
index 0000000..94afe71
--- /dev/null
+++ b/doc/snac.8
@@ -0,0 +1,326 @@
+.Dd $Mdocdate$
+.Dt SNAC 8
+.Os
+.Sh NAME
+.Nm snac
+.Nd snac administration
+.Sh DESCRIPTION
+The
+.Nm
+daemon processes messages from other servers in the Fediverse
+using the ActivityPub protocol.
+.Pp
+This is the admin manual. For user operation, see
+.Xr snac 1 .
+For file and data formats, see
+.Xr snac 5 .
+.Ss Installation
+Install the OpenSSL and urllib3 Python3 external packages, and run as root
+.Bd -literal -offset indent
+make install
+.Ed
+.Ss Database Initialization
+Once
+.Nm
+is properly installed on the system, designate a directory where
+the server and user data are to be stored. This directory
+must not exist yet.
+.Nm
+must always be run as a regular user; you can create one for
+it or use your own. To initialize the database, execute
+.Bd -literal -offset indent
+snac init $HOME/snac-data
+.Ed
+.Pp
+A small set of questions will be asked regarding the installation,
+specially the host name it will run under, the local network address
+and port
+.Nm
+will listen to, the optional path prefix and possibly other things.
+.Pp
+You can launch the
+.Nm
+process by running
+.Bd -literal -offset indent
+snac httpd $HOME/snac-data
+.Ed
+.Pp
+Use a web browser to connect to the specified address and port. You
+should see a greeting page.
+.Pp
+Log messages are sent to the standard error stream. By default, only
+relevant information is written there. You can increase the debugging
+level by editing the 'dbglevel' field in the
+.Pa server.json
+file or by setting a numeric value between 0 and 3 to the DEBUG
+environment variable, see below.
+.Pp
+If you run
+.Nm
+in an OS controlled by
+.Xr systemd 1 ,
+you can prepare a user service to start/stop the daemon. Following the
+previous example, create the file
+.Pa ~/.config/systemd/user/snac.service
+with the following content:
+.Bd -literal -offset indent
+[Unit]
+Description=snac daemon
+
+[Service]
+Type=simple
+Restart=always
+RestartSec=5
+ExecStart=/usr/local/bin/snac httpd /path/to/snac-data
+
+[Install]
+WantedBy=default.target
+.Ed
+.Pp
+And activate it by running
+.Bd -literal -offset indent
+systemctl --user enable snac.service
+systemctl --user start snac.service
+.Ed
+.Pp
+For other operating systems, please read the appropriate documentation
+on how to install a daemon as a non-root service.
+.Ss Server Setup
+.Pp
+An http server with TLS and proxying support must already be
+installed and configured.
+.Nm
+runs as a daemon and listens on a TCP/IP socket, preferrably
+on a local interface. It can serve the full domain or only
+a directory. The http server must be configured to route to the
+.Nm
+socket all related traffic and also the webfinger standard
+address. The Host header must be propagated.
+See the examples below.
+.Ss Adding Users
+.Pp
+Users must be created from the command line.
+You can do it by running
+.Bd -literal -offset indent
+snac adduser $HOME/snac-data
+.Ed
+.Pp
+All needed data will be prompted for. There is no artificial limit
+on the number of users that can be created.
+.Ss Customization
+The
+.Pa server.json
+configuration file allows some behaviour tuning:
+.Bl -tag -width tenletters
+.It Ic host
+The host name.
+.It Ic prefix
+The URL path prefix.
+.It Ic address
+The listen network address.
+.It Ic port
+The list network port.
+.It Ic dbglevel
+The debug level. An integer value, being 0 the less verbose (the default).
+.It Ic layout
+The disk storage layout version. Never touch this.
+.It Ic queue_retry_max
+Messages sent out are stored in a queue. If the posting of a messages fails,
+it's re-enqueued for later. This integer configures the maximum count of
+times the sending will be retried.
+.It Ic queue_retry_minutes
+The number of minutes to wait before the failed posting of a message is
+retried. This is not linear, but multipled by the number of retries
+already done.
+.It Ic max_timeline_entries
+This is the maximum timeline entries shown in the web interface.
+.It Ic timeline_purge_days
+Entries in the timeline older that this number of days are purged.
+.It Ic css_urls
+This is a list of URLs to CSS files that will be inserted, in this order,
+in the HTML before the user CSS. Use these files to configure the global
+site layout.
+.El
+.Pp
+You must restart the server to make effective these changes.
+.Pp
+If a file named
+.Pa greeting.html
+is present in the server base directory, it will be returned whenever
+the base URL of the server is requested. Fill it with whatever
+information about the instance you want to supply to people
+visiting the server, like sign up requirements, site policies
+and such. The special %userlist% mark in the file will cause
+the list of users in this instance to be inserted.
+.Pp
+Users can change a bit of information about themselves from the
+web interface. See
+.Xr snac 1
+for details. Further, every user has a private CSS file in their
+.Pa static/style.css
+that can be modified to suit their needs. This file contains
+a copy of the
+.Pa style.css
+file in the server root and it's inserted into the HTML output.
+It's not easily accesible from the web interface to avoid users
+shooting themselves in the foot by destroying everything.
+.Ss Old Data Purging
+The Fediverse generates big loads of data that get old and
+stale very quickly. By default,
+.Nm
+does not delete anything; you must do it explicitly by issuing a
+.Ar purge
+command periodically. A cron entry will suffice. You can add the
+following to the
+.Nm
+user's crontab:
+.Bd -literal -offset indent
+# execute a data purge on Sundays at 4 am
+0 4 * * 0 /usr/local/bin/snac purge /path/to/snac-data
+.Ed
+.Pp
+Other directories, like
+.Pa archive/ ,
+can grow very quickly if the debug level is greater than 0. These
+files must be deleted manually.
+.Pp
+The user-generated data (the local timeline) is never deleted.
+.Ss ActivityPub Support
+These are the following activities and objects that
+.Nm
+supports:
+.Bl -tag -width tenletters
+.It Vt Follow
+Complete support, on input and output.
+.It Vt Undo
+For
+.Vt Follow ,
+.Vt Like
+and
+.Vt Announce
+objects, on input and output.
+.It Vt Create
+For
+.Vt Note
+objects, on input and output.
+.It Vt Accept
+For
+.Vt Follow
+objects, on input and output.
+.It Vt Like
+For
+.Vt Note
+objects, on input and output.
+.It Vt Announce
+For
+.Vt Note
+objects, on input and output.
+.It Vt Update
+For
+.Vt Person
+objects, on input and output. Support for updating
+.Vt Note
+objects will probably be added in the future.
+.It Vt Delete
+Supported for
+.Vt Note
+and
+.Vt Tomsbtone
+objects on input, and for
+.Vt Note
+objects on output.
+.El
+.Pp
+The rest of activities and objects are dropped on input.
+.Pp
+There is partial support for
+.Vt OrderedCollection
+objects in the
+.Pa /outbox
+(with the last 20 entries of the local timeline shown). No pagination
+is supported. Intentionally, the
+.Pa /followers
+and
+.Pa /following
+paths return empty lists.
+.Ss Other Considerations
+.Nm
+stores all the messages it receives as JSON files, which are usually
+bloated and filled with redundant information. Using a filesystem with
+file compression enabled (like btrfs or zfs) will probably be a good
+choice to store the
+.Nm
+database into.
+.Sh ENVIRONMENT
+.Bl -tag -width Ds
+.It Ev DEBUG
+Overrides the debugging level from the server 'dbglevel' configuration
+variable. Set it to an integer value. The higher, the deeper in meaningless
+verbiage you'll find yourself into.
+.El
+.Sh EXAMPLES
+You want to install the
+.Nm
+Fediverse daemon in the host example.com, that is correctly configured
+with a valid TLS certificate and running the nginx httpd server.
+The service will be installed under the
+.Pa fedi
+location. Two users, walter and jessie, will be hosted in the system.
+Their Fediverse presence addresses will be https://example.com/fedi/walter
+and https://example.com/fedi/jesse, respectively. They will be known
+in the Fediverse as @walter@example.com and @jesse@example.com. The
+.Nm
+daemon will run as the user snacusr in the system and listen to the
+localhost:8001 network socket. All data will be stored in the
+.Pa /home/snacusr/fedidata
+directory.
+.Pp
+Log into the system as snacusr and execute:
+.Bd -literal -offset indent
+snac init /home/snacusr/fedidata
+.Ed
+.Pp
+Answer "example.com" to the host name question, "/fedi" to the path
+prefix question, "localhost" to the address and "8001" to the port.
+.Pp
+Create the users
+.Bd -literal -offset indent
+snac adduser /home/snacusr/fedidata walter
+snac adduser /home/snacusr/fedidata jesse
+.Ed
+.Pp
+Answer the questions with reasonable values.
+.Pp
+Execute the server:
+.Bd -literal -offset indent
+snac httpd /home/snacusr/fedidata
+.Ed
+.Pp
+Edit the nginx configuration and add the following snippet to the
+example.com server section:
+.Bd -literal -offset indent
+location /.well-known/webfinger {
+ proxy_pass http://localhost:8001;
+ proxy_set_header Host $http_host;
+}
+
+location /fedi {
+ proxy_pass http://localhost:8001;
+ proxy_set_header Host $http_host;
+}
+.Ed
+.Pp
+Restart the nginx daemon and connect to https://example.com/fedi/walter.
+The empty, default screen will be shown. Enter the admin section with the
+credentials defined for this user. Search people, start following
+them, engage in arid discussions and generally enjoy the frustrating
+experience of Social Media.
+.Sh SEE ALSO
+.Xr snac 1 ,
+.Xr snac 5
+.Sh AUTHORS
+.An grunfink
+.Sh LICENSE
+See the LICENSE file for details.
+.Sh CAVEATS
+JSON files are fragile when modified by hand. Take care.