github.com/imeyer/tdiscuss

Discussion board for your tailnet


License
BSD-3-Clause
Install
go get github.com/imeyer/tdiscuss

Documentation

tdiscuss

Discussion board for your tailnet

Building

  1. Install bazelisk
  2. make will run tests and build

Running for development

  1. Be a tailscale user
  2. Have an auth key created for the last step in this list.
  3. Set up a PostgreSQL database version 17+ (see README.database-setup.md)
  4. psql < sqlc/schema.sql
  5. DATABASE_URL=<valid dsn> TS_AUTHKEY=<key from step 2> make run-binary

Running for production

Prerequisites

Linux (systemd)
# Create service account
getent group tdiscuss >/dev/null || groupadd -r tdiscuss
getent passwd tdiscuss >/dev/null || useradd -r -g tdiscuss -d /var/lib/tdiscuss -s /sbin/nologin -c "tdiscuss service account" tdiscuss

# Create directories
install -d -m 0750 -o tdiscuss -g tdiscuss /var/lib/tdiscuss

# Install binary
install -D -m 0755 tdiscuss /usr/bin/tdiscuss

# Install config and service
install -D -m 0640 -o root -g tdiscuss contrib/rpm/tdiscuss.sysconfig /etc/sysconfig/tdiscuss
install -D -m 0644 contrib/tdiscuss.service /usr/lib/systemd/system/tdiscuss.service

Edit /etc/sysconfig/tdiscuss:

TS_AUTHKEY=tskey-auth-xxx                 # Your Tailscale auth key
TSNET_HOSTNAME=discuss                    # Your tailnet hostname
DATABASE_URL=postgres://tdiscuss@localhost/tdiscuss?sslmode=disable
OPTIONS="-data-location=/var/lib/tdiscuss"

Set up .pgpass for the tdiscuss user per README.database-setup.md.

Start the service:

systemctl daemon-reload
systemctl enable --now tdiscuss
macOS (launchd)
# Create directories
sudo mkdir -p /usr/local/var/lib/tdiscuss /usr/local/var/log
sudo chown $(whoami) /usr/local/var/lib/tdiscuss

# Install binary
sudo cp tdiscuss /usr/local/bin/tdiscuss

# Create launchd plist
cat > ~/Library/LaunchAgents/com.tdiscuss.plist << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.tdiscuss</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/tdiscuss</string>
        <string>-data-location=/usr/local/var/lib/tdiscuss</string>
        <!-- Add -otlp to enable OpenTelemetry export -->
    </array>
    <key>EnvironmentVariables</key>
    <dict>
        <key>TS_AUTHKEY</key>
        <string>tskey-auth-xxx</string>
        <key>TSNET_HOSTNAME</key>
        <string>discuss</string>
        <key>DATABASE_URL</key>
        <string>postgres://tdiscuss@localhost/tdiscuss?sslmode=disable</string>
        <!-- OpenTelemetry Configuration (requires -otlp flag above) -->
        <!-- <key>OTEL_EXPORTER_OTLP_ENDPOINT</key> -->
        <!-- <string>http://localhost:4318</string> -->
    </dict>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>StandardOutPath</key>
    <string>/usr/local/var/log/tdiscuss.log</string>
    <key>StandardErrorPath</key>
    <string>/usr/local/var/log/tdiscuss.log</string>
</dict>
</plist>
EOF

Edit the plist to set your TS_AUTHKEY and DATABASE_URL. Set up ~/.pgpass per README.database-setup.md.

For OpenTelemetry export, add -otlp to ProgramArguments and uncomment the OTEL environment variables. See contrib/rpm/tdiscuss.sysconfig for all available OTLP options.

Start the service:

launchctl load ~/Library/LaunchAgents/com.tdiscuss.plist

To stop: launchctl unload ~/Library/LaunchAgents/com.tdiscuss.plist

Issues

Issues building or running? General questions? File an issue!