enigmatick 0.3.4

Enigmatick is a social media platform that integrates with servers that implement the ActivityPub protocol (e.g., Mastodon)
docs.rs failed to build enigmatick-0.3.4
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: enigmatick-0.2.7

Enigmatick Core

This is the core component of the Enigmatick social networking platform. Enigmatick implements functionality consistent with ActivityPub services; when everything is working properly, users may follow and interact with people hosted on services like Mastodon, Pleroma, Pixelfed, and others.

Installation

Distribution Dependencies

Enigmatick relies on a number of libraries provided by the host system. For Debian, you can install everything required using:

sudo apt-get install -y --no-install-recommends \
    libpq-dev libsqlite3-dev ssl-cert ca-certificates \
    curl apt-transport-https lsb-release file git-core \
    build-essential libssl-dev libssl3 libgexiv2-dev \
    cmake clang ffmpeg nasm pkg-config postgresql

Rust Environment

Enigmatick is written primarily in Rust. The backend service is 100% Rust, and the frontend application is written in Svelte. The frontend application is compiled statically and bundled with the Rust application, so you don't need to worry about running that service separately.

Visit https://rustup.rs/ to install Rust on your server.

Enigmatick Installation

The simplest way to install Enigmatick is to use cargo:

cargo install enigmatick

Currently the sqlite server is non-functional, but I'll hopefully have time to integrate it again (with JSONB functionality) in the near future.

The cargo install command above will install a postgres server. To install the SQLite-based server, you'll need to use cargo install enigmatick --no-default-features -F sqlite. The sqlite and pg features are mutually exclusive. If both are enabled, the pg components will take precedence.

Setup and Configuration

Database Setup (PostgreSQL)

Set up the database and user. These commands may need to be tweaked to set up the user and password properly. You may also need to adjust pg_hba.conf in the /etc/postgresql subdirectory for your database version to allow local TCP connections.

sudo su - postgres
createrole -l dbuser
psql postgres
  > ALTER USER dbuser WITH PASSWORD 'dbpassword';
  > \q
createdb -O dbuser enigmatick

Application Setup

To configure the server in the current directory, use these commands:

enigmatick init

This will create the directory structure for the Enigmatick server in the current folder.

enigmatick template

This will copy the bundled .env.template file into the current directory. Copy this to .env and modify it according to your needs.

Configuration

The .env file contains all the necessary configuration for your Enigmatick instance. Below are some of the key variables you will need to set.

Server and Network

  • SERVER_NAME: Your public-facing domain name (e.g., enigmatick.example.com). This is crucial for federation to work correctly.
  • ACME_PROXY: Set to true to enable the built-in TLS proxy, which automatically obtains and renews a Let's Encrypt certificate. If enabled, your server must be reachable from the public internet on port 443.
  • ACME_PORT: The port the ACME TLS proxy will listen on. Defaults to 443.
  • ACME_EMAILS: The email addresses to use for Let's Encrypt registration.
  • ROCKET_ADDRESS: The local IP address for the backend server to listen on. Defaults to 127.0.0.1 for use with the built-in proxy.
  • ROCKET_PORT: The local port for the backend server. Defaults to 8000.

Database

  • DATABASE_URL: The connection string for the PostgreSQL database, used by the enigmatick CLI tool (e.g., for migrations).
  • ROCKET_DATABASES: The database connection string used by the web server. This should generally match DATABASE_URL using the Rocket variable JSON format.

Instance Metadata

These variables control how your instance is presented to the fediverse and to users.

  • INSTANCE_TITLE: The name of your instance.
  • INSTANCE_DESCRIPTION: A short description of your instance.
  • INSTANCE_CONTACT: An email address for the instance administrator.
  • SYSTEM_USER: A dedicated user for server-to-server activities. Defaults to system.
  • MEDIA_DIR: The directory for storing uploaded media, avatars, and other assets.

Registration

  • REGISTRATION_ENABLED: Set to true to allow new user sign-ups.
  • REGISTRATION_APPROVAL_REQUIRED: If true, new user accounts must be approved by an administrator.
  • REGISTRATION_MESSAGE: A message to display on the registration page.

Operation

Database Migrations

Before starting the server for the first time, and after any updates, you must run database migrations. This sets up and maintains the database schema.

enigmatick migrate

If using SQLite, this will also create the database file.

Running the Server

enigmatick server will start the Enigmatick server from the current folder using the configuration you've set in .env.

Enigmatick includes a built-in reverse proxy that can automatically handle TLS using Let's Encrypt. To enable this, set ACME_PROXY=true in your .env file. Your server must be accessible from the public internet on the ACME_PORT (usually 443) for certificate validation to succeed.

If you prefer to use your own reverse proxy (like nginx or Caddy), set ACME_PROXY=false and configure your proxy to forward requests to the backend service on ROCKET_ADDRESS:ROCKET_PORT.

Full Example

This assumes that a PostgreSQL server is running and available at 192.168.1.100

> enigmatick
A federated communication platform server

Usage: enigmatick <COMMAND>

Commands:
  init         Initialize folder structure for media files
  template     Generate .env.template file
  migrate      Run database migrations
  cache        Manage cached media files
  system-user  Create or ensure system user exists
  server       Start the web server and background tasks
  instances    Manage federated instances
  send         Send various activities
  muted-terms  Manage user muted terms
  help         Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help
  -V, --version  Print version
  
> mkdir server
> cd server
> enigmatick init
creating folder structure...
complete.

> enigmatick template
> cp .env.template .env
> vi .env
-- Edit as needed. See the Configuration section above for details on key variables.
-- For this example, you would at least set the following (ensure 'dbpassword'
-- matches the password you set when running `createuser`):
SERVER_NAME=your.domain.name
ACME_EMAILS='["your@email.com"]'
ROCKET_DATABASES='{enigmatick={url="postgres://dbuser:dbpassword@192.168.1.100/enigmatick"}}'
DATABASE_URL=postgres://dbuser:dbpassword@192.168.1.100/enigmatick

createuser -h 192.168.1.100 -U yourpsqluser -W -lP dbuser
> Password: dbpassword

createdb -h 192.168.1.100 -U yourpsqluser -W -O dbuser enigmatick
enigmatick migrate
RUST_LOG=debug enigmatick server