nephthys/docs/deployment.md
End c8bbe72f51
stale tickets config (#175)
* stale tickets config

* Update nephthys/tasks/close_stale.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/deployment.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* feedback

* Improve logging (use logfmt and avoid logging noops every hour)

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: MMK21Hub <50421330+MMK21Hub@users.noreply.github.com>
2026-04-14 19:43:56 +00:00

6.1 KiB

Deploying Nephthys on Hack Club Coolify

Here's a mostly-complete guide to deploying a new instance of Nephthys on the Hack Club Coolify.

You can also follow it to deploy Nephthys elsewhere, but you'll have to replace the Coolify-specific steps with writing docker compose files, or whatever else floats your boat.

Deploying the database to Coolify

  1. Navigate to the amber/nephthys project on the Hack Club HQ Coolify
  2. Navigate to the Production environment and add a new resource
  3. To add the database, select PostgreSQL
  4. Select the coolify-app-server-b server (as it's currently recommended)
  5. Select standard PostgreSQL
  6. Update the database name to something useful like "Flavorbase" or "Construct Data". Perhaps add a description too.
  7. You'll need the Postgres URL (internal) later, so write it down or idk, keep the tab open or something
  8. You can start the database now, or later. Just don't forget to do it

Deploying Nephthys to Coolify

  1. In the same Production environment, add a new application

  2. Select Private Repository (with GitHub App) (this ensures auto-deploys work)

  3. Select the coolify-app-server-b server (to match the database)

  4. Use the coolify-hackclub GitHub app (because everyone else uses it, I guess)

  5. Select the nephthys repository

  6. Select Dockerfile as the Build Pack

    Screenshot of the Coolify UI

  7. Update the name and description to be descriptive

  8. Update the domain to be a custom one you've set up on hackclub/dns (it should be [something].nephthys.hackclub.com) (or leave the ugly default domain)

  9. Environment variables! We'll set them later

Creating the Slack app

Note: These steps have to be done by a Workspace Admin (otherwise it will be unable to fully delete threads in the tickets channel).

  1. Go to https://api.slack.com/apps
  2. Create New App > From a manifest
  3. Select YAML. Paste the manifest.yml file (but don't submit it yet)
  4. Update the https://nephthys.hackclub.com/ URLs in the manifest to match the bot's domain (see above), and update the name, description, and bot user's display_name.
  5. Important: Change the name of the /dm-magic-link command! Or remove it entirely if it's not relevant
  6. Review the app's permissions and authorise it
  7. Click OAuth & Permissions in the sidebar, and hit Install to Hack Club

Setting environment variables

  1. Go back to the Nephthys resource you created in Coolify, and click on Configuration > Environment Variables. Click Developer view (production environment variables) to make it easier to add all the variables.

  2. Add the required environment variables (see .env.sample for an up-to-date list of environment variables):

    # Keep these as they are
    ENVIRONMENT="production"
    PORT=3000
    # Copy these from the Slack bot OAuth & Permissions screen
    SLACK_USER_TOKEN="xoxp-..."
    SLACK_BOT_TOKEN="xoxb-..."
    # Slack bot basic information screen
    SLACK_SIGNING_SECRET="..."
    # This should probably be your Slack ID
    SLACK_MAINTAINER_ID="U..."
    # Channels that will be used by the bot
    SLACK_HEARTBEAT_CHANNEL="C..."
    SLACK_TICKET_CHANNEL="C..."
    SLACK_BTS_CHANNEL="C..."
    SLACK_HELP_CHANNEL="C..."
    # Slack user group for the support team
    SLACK_USER_GROUP="S..."
    # Copy this from the PostgreSQL resource you created earlier
    DATABASE_URL="postgres://postgres:blahblah@somewhere:5432/postgres"
    # Pick a transcript from the transcripts/ folder (your event will probably have its own)
    PROGRAM="flavortown"
    # Choose a title to be shown to helpers at the top of the App Home
    APP_TITLE="Heidi the Assistant"
    # Hack Club AI API key for generating ticket titles (highly recommended)
    HACK_CLUB_AI_API_KEY="sk-hc-v1-..."
    # Set this to the URL where the site will be hosted
    BASE_URL="https://summer.nephthys.hackclub.com"
    
    • SITE_API_KEY (and SITE_URL) are only used for generating magic links for Summer of Making, so they don't have to be included
  3. There's more optional environment variables that you can set, which I shall document here:

    # Export logs to an OpenTelemetry endpoint (optional)
    # example using Loki:
    OTEL_EXPORTER_OTLP_LOGS_ENDPOINT="https://loki.example.com/otlp/v1/logs"
    # If HTTP Basic Authentication is required for the OTLP endpoint, specify it here
    # If your password has special characters, switch to normal view to add it, and check the "Is Literal?" checkbox
    OTEL_EXPORTER_OTLP_LOGS_BASIC_AUTH="username:password"
    # You can change the OTel service name if you want, but you don't have to
    OTEL_SERVICE_NAME="nephthys"
    # Setting this to any value disables daily summary messages (yes, this is counter-intuitive and will be changed soon)
    DAILY_SUMMARY=""
    # Set the log level (defaults to "WARNING" in production)
    LOG_LEVEL="WARNING"
    # Override the log level for console output
    LOG_LEVEL_STDERR="WARNING"
    # Override the log level for OpenTelemetry output
    LOG_LEVEL_OTEL="WARNING"
    
    # Optional: Enable stale ticket auto-close
    # Tickets inactive for this many days will be automatically closed
    # Leave unset to disable
    STALE_TICKET_DAYS="7"
    
  4. Don't forget to click Save All Environment Variables

Some final pre-requisites

  1. Add the bot to the BTS channel, help channel, tickets channel, and heartbeat channel
  2. Add the user who authorised the bot (probably you!) to (at least) the tickets channel
  3. Ensure your DNS PR has been made and merged (if applicable)
  4. You can also set a profile picture for the Slack bot in the Slack app settings at this point
  5. The database should be started by this point

Deploying

  1. Press Deploy on the new Nephthys resource in Coolify
  2. It will take some time to build, deploy, and start
  3. You should see a message in the heartbeats channel and the bot should respond to messages in the help channel
    • If it isn't responding to anything, check the logs in Coolify for errors, and double-check all the URLs in the Slack app settings are valid