{"id":22364134,"url":"https://github.com/11ways/hohenheim","last_synced_at":"2025-10-08T19:34:33.905Z","repository":{"id":34061863,"uuid":"37847748","full_name":"11ways/hohenheim","owner":"11ways","description":"🌐 Alchemy server dispatcher","archived":false,"fork":false,"pushed_at":"2024-10-19T10:52:57.000Z","size":475,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-04T14:45:36.303Z","etag":null,"topics":["proxy-server"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/11ways.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-06-22T09:44:29.000Z","updated_at":"2024-10-19T10:53:00.000Z","dependencies_parsed_at":"2023-02-13T04:35:32.357Z","dependency_job_id":"eda07396-a159-43e3-8bb5-b10dada7f117","html_url":"https://github.com/11ways/hohenheim","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/11ways/hohenheim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/11ways%2Fhohenheim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/11ways%2Fhohenheim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/11ways%2Fhohenheim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/11ways%2Fhohenheim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/11ways","download_url":"https://codeload.github.com/11ways/hohenheim/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/11ways%2Fhohenheim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279000700,"owners_count":26082805,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-08T02:00:06.501Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["proxy-server"],"created_at":"2024-12-04T17:18:36.921Z","updated_at":"2025-10-08T19:34:33.889Z","avatar_url":"https://github.com/11ways.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/11ways/hohenheim/master/app/root/startup.svg\" width=30 alt=\"Hohenheim logo\"/\u003e\n  \u003cb\u003eHohenheim\u003c/b\u003e\n\u003c/h1\u003e\n\u003cdiv align=\"center\"\u003e\n  Hohenheim is a web server and reverse proxy for node.js\n\u003c/div\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003csub\u003e\n    Coded with ❤️ by \u003ca href=\"#authors\"\u003eEleven Ways\u003c/a\u003e.\n  \u003c/sub\u003e\n\u003c/div\u003e\n\n## Requirements\n\n### Node.js\n\nHohenheim requires at least node.js version 10.21.0\n\n### Mongodb\n\nYou will need a mongodb server.\n\n### n\n\nAlthough technically not required, you can configure your sites to use a specific node.js version installed through [the **n** node version manager](https://github.com/tj/n)\n\n### Capabilities\n\nHohenheim requires that your node.js binary has some extra capabilities. These are:\n\n* `cap_setuid`: for setting the uid of the instances it spawns\n* `cap_setgid`: for setting the gid of the instances it spawns\n* `cap_kill`: for killing spawned instances with another uid than its own\n* `cap_net_bind_service`: for binding to privileged ports, like port 80 \u0026 443\n\n(If you prefer to route port 80 \u0026 443 to another port, you can drop `cap_net_bind_service`)\n\nIt's best to give hohenheim its own node executable, otherwise all scripts running would have these capabilities.\n\nHere's an easy example on how to create a new node binary (your locations may differ)\n\n```bash\nsudo cp /usr/local/bin/node /usr/local/bin/hohenode\n```\n\nThat's easy. Now give it the required capabilities:\n\n```bash\nsudo setcap 'cap_kill,cap_setuid,cap_setgid,cap_net_bind_service=+ep' /usr/local/bin/hohenode\n```\n\nShould you ever want to remove all capabilities from the binary, you can do so like this:\n\n```bash\nsudo setcap -r /usr/local/bin/hohenode\n```\n\n## Configuration\n\nYou will need to configure the following files\n\n### app/config/local.js\n\n```javascript\nmodule.exports = {\n\n    // The main port to listen on\n    proxyPort: 80,\n\n    // The main port to listen on for HTTPS/http2 traffic\n    proxyPortHttps: 443,\n\n    // Your current environment. Can be dev, preview or live\n    environment: 'live',\n\n    // When no sites match, this address will be tried last\n    // (This can be your apache server, for instance)\n    fallbackAddress: 'http://localhost:8080',\n\n    // The host hohenheim will use to access the spawned node sites,\n    // this should probably remain \"localhost\"\n    redirectHost: 'localhost',\n\n    // The first port to use for child node instances\n    firstPort: 4748,\n\n    // This is the port the admin interface listens on\n    port: 2999,\n\n    // Set to true to enable letsencrypt\n    letsencrypt: true,\n\n    // The default e-mail address to use for letsencrypt registrations\n    letsencrypt_email: 'your@email.address',\n\n    // Add the ipv6 address you want to listen on\n    ipv6Address: ''\n};\n```\n\n### app/config/dev/database.js or app/config/live/database.js\n\nYou'll find the database settings here, by default these are:\n\n```javascript\nDatasource.create('mongo', 'default', {\n    host     : '127.0.0.1',\n    database : 'hohenheim-live',\n    login    : false,\n    password : false\n});\n```\n\n### Admin interface\n\nOnce you have everything configured and running, you can go to the admin interface at http://localhost:2999/chimera\n\nThe default credentials are `admin:admin`\n\n### HTTPS \u0026 HTTP/2\n\nIf you want https \u0026 http/2 support, you need to set `letsencrypt: true` in your local configuration.\n\nIf you want to use your own certificates (and not letsencrypt), the `greenlock` module we use lets you do that.\nYou just need to put your own certificate files into the correct directory.\n\nEg: if you have your own certificates for the domain `example.com`, you can put them here:\n\n```\n~/hohenheim/temp/letsencrypt/etc/acme/live/example.com/privkey.pem\n~/hohenheim/temp/letsencrypt/etc/acme/live/example.com/cert.pem\n~/hohenheim/temp/letsencrypt/etc/acme/live/example.com/chain.pem\n~/hohenheim/temp/letsencrypt/etc/acme/live/example.com/fullchain.pem\n~/hohenheim/temp/letsencrypt/etc/acme/live/example.com/bundle.pem\n```\n\n## Systemd\n\nKeep hohenheim running by setting up a Systemd service, for example:\n\n```bash\nsudo nano /etc/systemd/system/hohenheim.service\n```\n\nAnd then enter\n\n```\n[Unit]\nDescription=Hohenheim site dispatcher\nAfter=mongodb.service\n\n[Service]\nWorkingDirectory=/home/www-data/hohenheim/\nExecStart=/usr/local/bin/hohenode /path/to/your/hohenheim/server.js\nRestart=always\nStandardOutput=syslog\nStandardError=syslog\nSyslogIdentifier=hohenheim\nUser=www-data\nGroup=www-data\nEnvironment=NODE_ENV=production\n\n[Install]\nWantedBy=multi-user.target\n```\n\nYou will need to change:\n\n* `After`: Other services to wait for (in this case mongodb)\n* `WorkingDirectory`: The path to the directory where the server.js file is\n* `ExecStart`: The path to the capabilities-enabled node binary + the server.js file\n* `User` and `Group`: The user you want to run hohenheim as\n* `Environment`: Your own environment variables\n\nFinally, enable it:\n\n```bash\nsudo systemctl enable hohenheim.service\n```\n\n### Using screen\n\nAnother interesting way to run hohenheim is to add `screen`. This will give you access to hohenheim through `janeway`:\n\n```\n[Unit]\nDescription=hohenheim\n\n[Service]\nType=forking\nUser=skerit\nRestart=always\nExecStart=/usr/bin/screen -d -m -S hohenheim -d -m /usr/local/bin/hohenode server.js\nExecStop=/usr/bin/killall -w -s 2 hohenheim\nWorkingDirectory=/home/www-data/hohenheim/\n\n[Install]\nWantedBy=multi-user.target\n```\n\nNow, if you want to access the hohenheim shell, you can do:\n\n```\nscreen -r hohenheim\n```\n\n## Node versions\n\nYou can configure your websites to use a specific node.js version, these versions are available:\n\n* The system node binary (`which node` result)\n* The binary `/usr/bin/node` if available\n* The binary `/usr/local/bin/node` if available\n* All global installed versions through the `n` module\n\nIf a configured version is not found, the system node binary will be used.\n\n## Thanks\n\nMany thanks go out to [Félix \"passcod\" Saparelli](https://github.com/passcod) who allowed me to use the `hohenheim` package name on npm.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F11ways%2Fhohenheim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F11ways%2Fhohenheim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F11ways%2Fhohenheim/lists"}