npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@drumee/setup-infra

v1.0.40

Published

Drumee Infrastructure Setup Utilities

Readme

Drumee Infrastructure Setup Utilities

@drumee/setup-infra generates the system configuration for a self-hosted Drumee instance. It takes environment variables and a handful of CLI flags and renders production-ready config files for nginx, BIND (DNS), Postfix + DKIM (mail), MariaDB, the PM2 process ecosystem, and — optionally — Jitsi Meet, Prosody, and Coturn.

The Node scripts here only generate files. The shell helpers in bin/ apply them to a running system. In production this whole repo ships inside the drumee-infra Debian package (see the debian repo), whose post-install runs bin/install.

For how this repo fits with setup-schemas, debian, and the docs site, see DOCUMENTATION.md.

Quick start

# Generate the full infra config (+ Jitsi) onto the live system
DRUMEE_DOMAIN_NAME=example.com ./infra.js
DRUMEE_DOMAIN_NAME=example.com ./jitsi.js

# Dry run — print what would be written, touch nothing
DRUMEE_DOMAIN_NAME=example.com ./infra.js --readonly 1

# Render the whole tree under a sandbox prefix instead of /
DRUMEE_DOMAIN_NAME=example.com ./infra.js --chroot /tmp/drumee-config

# Full orchestration (helpers + both configurators), as the package runs it
./bin/install

npm run configure is an alias for ./infra.js.

Entry points

| Script | Purpose | |---|---| | infra.js | Core configurator — writes drumee.json, nginx, BIND, Postfix/DKIM, MariaDB, PM2 ecosystem, and credential files. Optionally invokes Jitsi. | | jitsi.js | Jitsi-only — Jicofo, JVB, Prosody, Coturn, and nginx-jitsi configs. Seeds from the existing drumee.json; never modifies it. | | template.js | Legacy entry point with hardcoded paths (no --chroot). | | bin/install | Shell orchestrator the Debian package runs: helper scripts + node infra.js && node jitsi.js, then applies configs, crontab, certs, and Prosody. |

bin/ also holds the helpers install invokes: init-mail, init-named, init-acme, init-private, create-local-certs, preset-jitsi, prosody, set-jitsi-conf, and env.

How infra.js works

  1. Assemble datagetSysConfigs() merges sysEnv() (the existing drumee.json, if any), environment variables, and CLI args via makeData(). If a Drumee instance already exists and --reconfigure 1 was not passed, hasExistingSettings() aborts to avoid clobbering it.
  2. Detect addressesgetAddresses() walks the host's network interfaces and fills in public/private IPv4/IPv6, the private subnet mask, broadcast address, and reverse-zone fragments (overridable via flags/env).
  3. Write drumee.json — the resolved config is written to /etc/drumee/drumee.json (or the --chroot equivalent). This is the file every other component reads.
  4. Render configswriteInfraConf() renders the .tpl files for whichever sides are configured (public domain → nginx/BIND/Postfix/DKIM/SSL; private domain → private nginx/BIND/certs) and writes the PM2 ecosystem via writeEcoSystem().
  5. Generate credentials — fresh random secrets are written under /etc/drumee/credential/ (db.json, postfix.json, email.json) on every run.

writeEcoSystem() scales the main/service cluster to available RAM: under 2 GB → 2 instances, under 6 GB → 3, otherwise 4 (plus the main and factory processes).

jitsi.js follows the same seed-and-render shape but writes only Jitsi/Prosody/Coturn configs and mints its own TURN/XMPP/Jicofo/JVB/app secrets.

Templates

  • Engine: lodash _.template() with <%= … %> interpolation (templates/index.js).
  • Template files are .tpl files under templates/, whose directory tree mirrors the target filesystem (templates/etc/nginx/…, templates/etc/bind/…, templates/var/lib/bind/…, templates/server/…, etc.).
  • Output paths are prefixed by --outdir / --chroot / $DRUMEE_CONF_BASE, or /.
  • Public/private variants exist where relevant (e.g. meet.public.conf.tpl, meet.private.conf.tpl).
  • Static (non-templated) files in configs/etc/ (postfix/master.cf, cron.d/drumee) are copied verbatim by copyConfigs().

CLI arguments

These are the flags actually defined in templates/utils.js. Anything not listed here (domain, admin email, ports, root directories) is taken from environment variables and sysEnv().

| Argument | Default | Description | |---|---|---| | --public-domain | null | Public-facing domain. Triggers nginx/BIND/Postfix/DKIM/SSL generation. | | --private-domain | <public>.local (else local.drumee) | Private/LAN domain. | | --public-ip4 / --public-ip6 | auto-detected | Override detected public IPs. | | --private-ip4 / --private-ip6 | auto-detected | Override detected private IPs. | | --chroot / --outdir | / | Output root prefix; --outdir wins if both set. | | --readonly | 0 | Print targets instead of writing (>1 also dumps data). | | --debug | 0 | Verbose output; prints the merged data. | | --localhost | 0 | Localhost-only mode (no BIND, no public domain). | | --reconfigure | 0 | Regenerate over an existing install — destroys existing data. | | --force-install | 0 | Override the existing-installation guard. | | --own-certs-dir | $OWN_CERTS_DIR | Use pre-existing TLS certs; disables private-domain cert generation. | | --acme-dir | /usr/share/acme | ACME / Let's Encrypt working dir. | | --data-dir | /data | User data directory. | | --db-dir | /srv/db | MariaDB data directory. | | --watch | 0 | Configure PM2 to watch endpoint dirs for changes. | | --only-infra / --no-jitsi | 1 | Skip Jitsi config generation. | | --envfile | null | Load values from an env file before building data. |

Key environment variables include DRUMEE_DOMAIN_NAME (the public domain), PRIVATE_DOMAIN, ADMIN_EMAIL, ACME_EMAIL_ACCOUNT, DRUMEE_HTTP_PORT / DRUMEE_HTTPS_PORT / DRUMEE_LOCAL_PORT, USE_JITSI, INSTANCE_TYPE (a dev* value relaxes symlink restrictions and raises log verbosity), and FORCE_INSTALL.

Public vs. private domain

  • --public-domain set: public nginx, BIND zone + reverse zone, Postfix, DKIM, and SSL configs are generated, and use_email is enabled.
  • --private-domain set (auto-derived as <public>.local when omitted): private nginx, BIND, and certificate configs are generated.
  • --own-certs-dir set: the private domain is suppressed and the provided cert directory is used instead.

Output

Configuration files land under /etc/ (or the --chroot prefix), notably:

  • /etc/drumee/drumee.json — the master config every component reads
  • /etc/drumee/credential/{db,postfix,email}.json — generated secrets
  • /etc/drumee/infrastructure/ecosystem.json — the PM2 process definitions
  • /etc/nginx/, /etc/bind/ + /var/lib/bind/, /etc/postfix/, /etc/mysql/mariadb.conf.d/, /etc/opendkim/
  • Jitsi: /etc/jitsi/, /etc/prosody/, /etc/turnserver.*.conf

Release

npm run release   # git push + npm publish --access public + npm version patch

License

AGPL V3.

setup-infra – Auto-configuration for Drumee

npm i @drumee/setup-infra

This package depends on @drumee/setup-infra

This module is used internally by the Drumee Docker container or Drumee Bare Metall installer on first boot.
You don’t need to run it manually unless you are developing Drumee.

For end users: just use our Quickstart