Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

📝 Self-hosting manual docs #260

Merged
merged 2 commits into from
Jan 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions apps/docs/docs/self-hosting/get-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,4 @@ I've written guides on how to deploy Typebot using:

- [Docker](/self-hosting/docker)
- [Vercel](/self-hosting/vercel)
- [Manual](/self-hosting/manual)
132 changes: 132 additions & 0 deletions apps/docs/docs/self-hosting/manual.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
---
sidebar_position: 3
---

# Manual

:::note
The easiest way to get started with Typebot is with [the official managed service in the Cloud](https://app.typebot.io). It takes 1 minute to try out the tool for free. You'll have high availability, backups, security, and maintenance all managed for you by me, Baptiste, Typebot's founder.

That's also the best way to support my work, open-source software, and you'll get great service!
:::

## Requirements

- A PostgresDB database hosted somewhere. [Supabase](https://supabase.com/) offer great free options. But you can also setup your own database on your server.
- A server with Node.js 14+, Nginx, and PM2 installed.
- Experience deploying Next.js applications with PM2. Check out [this guide](https://www.coderrocketfuel.com/article/how-to-deploy-a-next-js-website-to-a-digital-ocean-server/) for more information.

## Getting Started

1. Fork/clone the repository

```sh
git clone git@github.com:<username>/typebot.io.git
```

2. Setup environment variables by copying the example files and following the [configuration guide](/self-hosting/configuration) to fill in the missing values.

```sh
cd typebot.io
# check out the latest stable version or the one you want to use
git checkout v2.9.1
# copy the example env file
cp packages/db/.env.example packages/db/.env
cp apps/builder/.env.local.example apps/builder/.env.local
cp apps/viewer/.env.local.example apps/viewer/.env.local
```

:::note
The database user should have the `SUPERUSER` role. You can setup and migrate the database with the `pnpm prisma generate && pnpm db:migrate` command.
:::

3. Install dependencies

```sh
pnpm install
```

4. Build the builder and viewer

```sh
pnpm run build:apps
# or build them separately
pnpm run build:builder
pnpm run build:viewer
```

:::note
If you face the issue `Node ran out of memory`, then you should increase the memory limit for Node.js. For example,`NODE_OPTIONS=--max-old-space-size=4096` will increase the memory limit to 4GB. Check [this stackoverflow answer](https://stackoverflow.com/questions/53230823/fatal-error-ineffective-mark-compacts-near-heap-limit-allocation-failed-javas) for more information.
:::

## Deployments

### Deploy the builder

1. Cd into the builder directory and make sure it can be started with `pnpm start`

```sh
cd apps/builder
pnpm start
# You may have to set the port if it's already in use
pnpm next start -p 3001
```

2. Deploy the builder with PM2

```sh
pm2 start --name=typebot pnpm -- start
# or select a different port
pm2 start --name=typebot pnpm -- next start -p 3001
```

### Deploy the viewer

1. Cd into the viewer directory and make sure it can be started with `pnpm start`

```sh
cd apps/viewer
pnpm start
# You may have to set the port if it's already in use
pnpm next start -p 3002
```

2. Deploy the viewer with PM2

```sh
pm2 start --name=typebot pnpm -- start
# or select a different port
pm2 start --name=typebot pnpm -- next start -p 3002
```

## Nginx configuration

You can use the following configuration to serve the builder and viewer with Nginx. Make sure to replace the `server_name` with the respective domain name for your Typebot instance. Check out [this guide](https://www.coderrocketfuel.com/article/how-to-deploy-a-next-js-website-to-a-digital-ocean-server/) for a step-by-step guide on how to setup Nginx and PM2.

```nginx
server {
listen 80;
server_name typebot.example.com www.typebot.example.com;
return 301 https://typebot.example.com$request_uri;
}

server {
listen 443 ssl;
server_name typebot.example.com www.typebot.example.com;

# managed by Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # ma>
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # >
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

location ^~ / {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
```