2023-01-06 15:06:40 -05:00
# <img src="src/public/assets/logo.png" height="32px" alt="" /> Drift
2022-03-11 18:46:49 -05:00
2022-12-18 16:53:05 -05:00
> **Note:** This branch is where all work is being done to refactor to the Next.js 13 app directory and React Server Components.
2022-12-04 05:07:12 -05:00
2022-11-14 21:46:24 -05:00
Drift is a self-hostable Gist clone. It's in beta, but is completely functional.
2022-03-08 16:29:08 -05:00
2022-11-14 21:46:24 -05:00
You can try a demo at https://drift.lol. The demo is built on main but has no database, so files and accounts can be wiped at any time.
2022-03-09 19:11:45 -05:00
2022-12-18 16:53:05 -05:00
If you want to contribute, need support, or want to stay updated, you can join the IRC channel at #drift on irc.libera.chat or [reach me on twitter ](https://twitter.com/Max_Leiter ). If you don't have an IRC client yet, you can use a webclient [here ](https://demo.thelounge.chat/#/connect?join=%23drift&nick=drift-user&realname=Drift%20User ).
2022-04-13 20:11:40 -04:00
< hr / >
**Contents:**
2022-12-18 16:53:05 -05:00
2022-04-13 20:11:40 -04:00
- [Setup ](#setup )
- [Development ](#development )
- [Production ](#production )
- [Environment variables ](#environment-variables )
- [Running with pm2 ](#running-with-pm2 )
- [Running with Docker ](#running-with-docker )
- [Current status ](#current-status )
2022-03-09 19:11:45 -05:00
2022-03-12 18:08:20 -05:00
## Setup
### Development
2022-12-18 16:53:05 -05:00
In the `src/` directory, run `pnpm i` . If you need `pnpm` , you can download it [here ](https://pnpm.io/installation ).
2022-11-14 22:00:21 -05:00
You can run `pnpm dev` in `client` for file watching and live reloading.
2022-03-12 18:08:20 -05:00
2022-12-18 16:53:05 -05:00
To work with [prisma ](prisma.io/ ), you can use `pnpm prisma` or `pnpm exec prisma` to interact with the database.
2022-04-01 19:26:42 -04:00
2022-03-12 18:08:20 -05:00
### Production
2022-12-18 16:53:05 -05:00
`pnpm build` in `src/` will produce production code. `pnpm start` will run the Next.js server.
2022-04-01 19:26:42 -04:00
2022-03-21 02:09:38 -04:00
### Environment Variables
You can change these to your liking.
2022-12-18 16:53:05 -05:00
`src/.env` :
2022-03-21 02:09:38 -04:00
2022-12-18 16:53:05 -05:00
- `DRIFT_URL` : the URL of the drift instance.
- `DATABASE_URL` : the URL to connect to your postgres instance. For example, `postgresql://user:password@localhost:5432/drift` .
2022-04-20 04:52:07 -04:00
- `WELCOME_CONTENT` : a markdown string that's rendered on the home page
- `WELCOME_TITLE` : the file title for the post on the homepage.
2022-03-28 15:13:22 -04:00
- `ENABLE_ADMIN` : the first account created is an administrator account
2022-11-14 22:00:21 -05:00
- `REGISTRATION_PASSWORD` : the password required to register an account. If not set, no password is required.
- `NODE_ENV` : defaults to development, can be `production`
2022-12-18 16:53:05 -05:00
#### Auth environment variables
**Note:** Only credential auth currently supports the registration password, so if you want to secure registration, you must use only credential auth.
- `GITHUB_CLIENT_ID` : the client ID for GitHub OAuth.
- `GITHUB_CLIENT_SECRET` : the client secret for GitHub OAuth.
- `NEXTAUTH_URL` : the URL of the drift instance. Not required if hosting on Vercel.
- `CREDENTIAL_AUTH` : whether to allow username/password authentication. Defaults to `true` .
2022-03-21 02:09:38 -04:00
2022-03-28 23:57:13 -04:00
## Running with pm2
It's easy to start Drift using [pm2 ](https://pm2.keymetrics.io/ ).
2022-12-18 16:53:05 -05:00
First, add the `.env` file to `src/` with your values (see the above section for the required options).
2022-03-28 23:57:13 -04:00
2022-12-18 16:53:05 -05:00
Then, use the following command to start the server:
2022-03-28 23:57:13 -04:00
2022-12-18 16:53:05 -05:00
- `cd src && pnpm build && pm2 start pnpm --name drift --interpreter bash -- start`
2022-03-28 23:57:13 -04:00
2022-12-18 16:53:05 -05:00
Refer to pm2's docs or `pm2 help` for more information.
2022-04-13 20:11:40 -04:00
2022-11-14 22:00:21 -05:00
## Running with Docker
2022-04-13 20:11:40 -04:00
2022-03-09 19:11:45 -05:00
## Current status
2022-03-11 21:48:40 -05:00
2022-11-14 22:00:21 -05:00
Drift is a work in progress. Below is a (rough) list of completed and envisioned features. If you want to help address any of them, please let me know regardless of your experience and I'll be happy to assist.
2022-03-09 19:11:45 -05:00
2022-12-18 16:53:05 -05:00
- [x] Next.js 13 `app` directory
- [x] creating and sharing private, public, password-protected, and unlisted posts
- [x] syntax highlighting
2022-11-14 22:00:21 -05:00
- [x] expiring posts
2022-03-09 19:11:45 -05:00
- [x] responsive UI
- [x] user auth
- [ ] SSO via HTTP header (Issue: [#11 ](https://github.com/MaxLeiter/Drift/issues/11 ))
2022-12-18 16:53:05 -05:00
- [x] SSO via GitHub OAuth
2022-03-11 21:48:40 -05:00
- [x] downloading files (individually and entire posts)
2022-03-24 18:37:15 -04:00
- [x] password protected posts
2022-11-14 22:00:21 -05:00
- [x] postgres database
- [x] administrator account / settings
2022-04-13 20:11:40 -04:00
- [x] docker-compose (PRs: [#13 ](https://github.com/MaxLeiter/Drift/pull/13 ), [#75 ](https://github.com/MaxLeiter/Drift/pull/75 ))
2022-03-09 19:11:45 -05:00
- [ ] publish docker builds
- [ ] user settings
- [ ] works enough with JavaScript disabled
2022-11-14 22:00:21 -05:00
- [ ] in-depth documentation
2022-03-12 18:51:31 -05:00
- [x] customizable homepage, so the demo can exist as-is but other instances can be built from the same source. Environment variable for the file contents?
2022-11-14 22:00:21 -05:00
- [ ] fleshed out API
- [ ] Swappable database backends
- [ ] More OAuth providers