.github | ||
.vscode | ||
client | ||
server | ||
.gitignore | ||
CONTRIBUTING.md | ||
docker-compose.yml | ||
LICENSE | ||
README.md | ||
renovate.json |
Drift
Drift is a self-hostable Gist clone. It's also a major work-in-progress, but is completely functional.
You can try a demo at https://drift.maxleiter.com. The demo is built on master but has no database, so files and accounts can be wiped at any time.
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. If you don't have an IRC client yet, you can use a webclient here.
Contents:
Setup
Development
In both server
and client
, run yarn
(if you need yarn, you can download it here.)
You can run yarn dev
in either / both folders to start the server and client with file watching / live reloading.
To migrate the sqlite database in development, you can use yarn migrate
to see a list of options.
Production
yarn build
in both client/
and server/
will produce production code for the client and server respectively.
If you're deploying the front-end to something like Vercel, you'll need to set the root folder to client/
.
In production the sqlite database will be automatically migrated to the latest version.
Environment Variables
You can change these to your liking.
client/.env
:
API_URL
: defaults to localhost:3001, but allows you to host the front-end separately from the backend on a service like Vercel or NetlifySECRET_KEY
: a secret key used for validating API requests that is never exposed to the browser
server/.env
:
PORT
: the default port to start the server on (3000 by default)NODE_ENV
: defaults to development, can beproduction
JWT_SECRET
: a secure token for JWT tokens. You can generate one here.MEMORY_DB
: iftrue
, a sqlite database will not be created and changes will only exist in memory. Mainly for the demo.REGISTRATION_PASSWORD
: iftrue
, the user will be required to provide this password to sign-up, in addition to their username and account password. If it's not set, no additional password will be required.SECRET_KEY
: the same secret key as the clientWELCOME_CONTENT
: a markdown string that's rendered on the home pageWELCOME_TITLE
: the file title for the post on the homepage.ENABLE_ADMIN
: the first account created is an administrator accountDRIFT_HOME
: defaults to ~/.drift, the directory for storing the database and eventually images
Running with pm2
It's easy to start Drift using pm2.
First, add .env
files to client/
and server/
with the values you want (see the above section for possible values).
Then, use the following commands to start the client and server:
cd server && yarn build && pm2 start yarn --name drift-server --interpreter bash -- start
cd ..
cd client && yarn build && pm2 start yarn --name drift-client --interpreter bash -- start
You now use pm2 ls
to see their statuses. Refer to pm2's docs or pm2 help
for more information.
Running with Docker
The client and server each have Dockerfiles (client, server) you can use with a docker-compose; an example compose is provided in the repository. It's recommended you pair running them with nginx or another reverse proxy. Also review the environment variables above and configure them to your liking.
Current status
Drift is a major 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.
- creating and sharing private, public, unlisted posts
- syntax highlighting (detected by file extension)
- multiple files per post
- uploading files via drag-and-drop
- responsive UI
- user auth
- SSO via HTTP header (Issue: #11)
- downloading files (individually and entire posts)
- password protected posts
- sqlite database
- administrator account / settings
- docker-compose (PRs: #13, #75)
- publish docker builds
- user settings
- works enough with JavaScript disabled
- documentation
- 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?