# n8n-hosting This is a fork of the bare-bones [n8n-hosting](https://github.com/n8n-io/n8n-hosting) GitHub project, and is a skeleton for building a Docker Compose environment for self-hosting an [n8n](https://n8n.io/) instance in your environment to support the editor UI and worker nodes that run your jobs. The configuration has been specialized to expose internal Node modules, external NPM modules, and our custom code, to a running n8n environment. Our requirement for external modules and custom code in our workflows is what requires us (and you) to self-host n8n, and run it within your own environment. Their cloud hosting does not permit external modules or custom modules. We provide both. A DTP Newsroom environment makes use of the [withPostgres](docker-compose/withPostgres) root environment, and has specialized it in-place in this repo. We ignore every other directory for now. We will specialize [withPostgresAndWorker](docker-compose/withPostgresAndWorker) ## Our Changes 1. Use [pnpm]() to manage Node packages 1. Alter runtime environment for n8n to specify DTP webhook URL 1. Alter runtime environment to allow external Node modules ## Getting Started ### Configuration 1. Clone [dtp-n8n-hosting](https://git.digitaltelepresence.com/digital-telepresence/dtp-n8n-hosting) to a directory on your host/server. And feel free to fork it. We are pulling updates from our upstream, and you can pull updates directly from them, or from us. 2. Run `pnpm install` from the root of the project. This will create your `node_modules` directory to receive external modules needed by DTP Newsroom. 3. Customize [.env](./docker-compose/withPostgres/.env) ```bash cd docker-compose/withPostgres cp .env.example .env ``` You'll want to customize the values specified to match your requirements in your environment. This setup will run a PostgreSQL instance in a container, link it with n8n, and n8n will directly access it using these credentials. You define the credentials. And you don't save them in `.env.sample` and check them into git. That's a security antipattern. You save your credentials in `.env`, and git ignores that file. ```yml POSTGRES_USER= POSTGRES_PASSWORD= POSTGRES_DB=n8n POSTGRES_NON_ROOT_USER= POSTGRES_NON_ROOT_PASSWORD= ``` 4. Customize [docker-compose.yml](./docker-compose/withPostgres/docker-compose.yml) ```yml environment: - WEBHOOK_URL=https://n8n.digitaltelepresence.com/ - NODE_FUNCTION_ALLOW_BUILTIN=* - NODE_FUNCTION_ALLOW_EXTERNAL=dayjs,numeral ``` ```yml volumes: - /home/dtp/live/dtp-n8n-hosting/node_modules/dayjs:/usr/local/lib/node_modules/dayjs - /home/dtp/live/dtp-n8n-hosting/node_modules/numeral:/usr/local/lib/node_modules/numeral ``` ### Process Management `pnpm start` start the n8n environment `pnpm stop` stop the n8n environment `pnpm restart` restart the n8n environment `pnpm stats` display streaming stats for the n8n environment Docker containers