2020-04-06 00:00:30 +00:00
2017-12-27 12:23:41 +00:00
< p align = "center" >
< img src = "https://user-images.githubusercontent.com/31465/34380645-bd67f474-eb0b-11e7-8d03-0151c1730654.png" height = "29" / >
< / p >
< p align = "center" >
2018-01-01 20:19:09 +00:00
< i > An open, extensible, wiki for your team built using React and Node.js.< br / > Try out Outline using our hosted version at < a href = "https://www.getoutline.com" > www.getoutline.com< / a > .< / i >
2017-12-27 12:23:41 +00:00
< br / >
2020-04-06 00:01:54 +00:00
< img src = "https://user-images.githubusercontent.com/380914/78513257-153ae080-775f-11ea-9b49-1e1939451a3e.png" alt = "Outline" width = "800" / >
2017-12-27 12:23:41 +00:00
< / p >
< p align = "center" >
2018-09-30 05:28:28 +00:00
< a href = "https://circleci.com/gh/outline/outline" rel = "nofollow" > < img src = "https://circleci.com/gh/outline/outline.svg?style=shield&circle-token=c0c4c2f39990e277385d5c1ae96169c409eb887a" > < / a >
2017-12-27 12:23:41 +00:00
< a href = "https://github.com/prettier/prettier" > < img src = "https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat" > < / a >
2018-06-10 01:59:49 +00:00
< a href = "https://github.com/styled-components/styled-components" > < img src = "https://img.shields.io/badge/style-%F0%9F%92%85%20styled--components-orange.svg" > < / a >
2020-12-04 16:22:43 +00:00
< a href = "https://translate.getoutline.com/project/outline" > < img src = "https://badges.crowdin.net/outline/localized.svg" > < / a >
2017-12-27 12:23:41 +00:00
< / p >
2018-01-01 20:19:09 +00:00
This is the source code that runs [**Outline** ](https://www.getoutline.com ) and all the associated services. If you want to use Outline then you don't need to run this code, we offer a hosted version of the app at [getoutline.com ](https://www.getoutline.com ).
2017-12-27 12:23:41 +00:00
If you'd like to run your own copy of Outline or contribute to development then this is the place for you.
2017-10-30 07:13:05 +00:00
2017-04-24 03:12:53 +00:00
## Installation
2017-12-11 01:38:56 +00:00
Outline requires the following dependencies:
2017-10-30 07:13:05 +00:00
2020-09-15 02:29:55 +00:00
- [Node.js ](https://nodejs.org/ ) >= 12
- [Yarn ](https://yarnpkg.com )
- [Postgres ](https://www.postgresql.org/download/ ) >=9.5
- [Redis ](https://redis.io/ ) >= 4
- AWS S3 bucket or compatible API for file storage
2019-07-07 16:29:56 +00:00
- Slack or Google developer application for authentication
2020-09-15 02:29:55 +00:00
### Production
For a manual self-hosted production installation these are the suggested steps:
1. Clone this repo and install dependencies with `yarn install`
1. Build the source code with `yarn build`
1. Using the `.env.sample` as a reference, set the required variables in your production environment. The following are required as a minimum:
1. `SECRET_KEY` (follow instructions in the comments at the top of `.env` )
1. `SLACK_KEY` (this is called "Client ID" in Slack admin)
1. `SLACK_SECRET` (this is called "Client Secret" in Slack admin)
1. `DATABASE_URL` (run your own local copy of Postgres, or use a cloud service)
1. `REDIS_URL` (run your own local copy of Redis, or use a cloud service)
1. `URL` (the public facing URL of your installation)
1. `AWS_` (all of the keys beginning with AWS)
2020-09-27 17:32:08 +00:00
1. Migrate database schema with `yarn sequelize:migrate` . Production assumes an SSL connection, if
Postgres is on the same machine and is not SSL you can migrate with `yarn sequelize:migrate --env=production-ssl-disabled` .
2020-09-15 02:29:55 +00:00
1. Start the service with any daemon tools you prefer. Take PM2 for example, `NODE_ENV=production pm2 start ./build/server/index.js --name outline `
1. Visit http://you_server_ip:3000 and you should be able to see Outline page
> Port number can be changed using the `PORT` environment variable
1. (Optional) You can add an `nginx` reverse proxy to serve your instance of Outline for a clean URL without the port number, support SSL, etc.
2019-07-07 16:29:56 +00:00
### Development
2017-10-30 07:13:05 +00:00
2017-12-30 17:25:48 +00:00
In development you can quickly get an environment running using Docker by following these steps:
2017-10-30 07:13:05 +00:00
2020-05-18 01:12:48 +00:00
1. Install these dependencies if you don't already have them
1. [Docker for Desktop ](https://www.docker.com )
1. [Node.js ](https://nodejs.org/ ) (v12 LTS preferred)
1. [Yarn ](https://yarnpkg.com )
2019-07-07 16:29:56 +00:00
1. Clone this repo
2017-12-11 01:38:56 +00:00
1. Register a Slack app at https://api.slack.com/apps
2019-07-07 16:14:27 +00:00
1. Copy the file `.env.sample` to `.env`
1. Fill out the following fields:
2020-03-30 15:57:21 +00:00
1. `SECRET_KEY` (follow instructions in the comments at the top of `.env` )
2019-07-07 16:14:27 +00:00
1. `SLACK_KEY` (this is called "Client ID" in Slack admin)
2020-03-30 15:26:37 +00:00
1. `SLACK_SECRET` (this is called "Client Secret" in Slack admin)
2020-03-30 15:57:21 +00:00
1. Configure your Slack app's Oauth & Permissions settings
1. Add `http://localhost:3000/auth/slack.callback` as an Oauth redirect URL
1. Ensure that the bot token scope contains at least `users:read`
2019-07-07 16:29:56 +00:00
1. Run `make up` . This will download dependencies, build and launch a development version of Outline
2019-05-31 03:26:26 +00:00
2020-12-25 23:23:55 +00:00
### Upgrade
#### Docker
If you're running Outline with Docker you'll need to run migrations within the docker container after updating the image. The command will be something like:
```
docker run --rm outlinewiki/outline:latest yarn sequelize:migrate
```
#### Yarn
If you're running Outline by cloning this repository, run the following command to upgrade:
```
2021-01-21 06:19:44 +00:00
yarn run upgrade
2020-12-25 23:23:55 +00:00
```
2019-05-31 03:26:26 +00:00
2017-11-10 23:24:29 +00:00
## Development
2021-02-07 01:46:54 +00:00
If you're interested in contributing or learning more about the Outline codebase
please refer to the [architecture document ](ARCHITECTURE.md ) first for a high level overview of how the application is put together.
## Debugging
2017-11-10 23:24:29 +00:00
2019-07-07 16:29:56 +00:00
Outline uses [debug ](https://www.npmjs.com/package/debug ). To enable debugging output, the following categories are available:
2017-11-10 23:24:29 +00:00
```
2019-07-07 16:29:56 +00:00
DEBUG=sql,cache,presenters,events,logistics,emails,mailer
2017-11-10 23:24:29 +00:00
```
2017-04-24 03:12:53 +00:00
2017-12-30 18:07:38 +00:00
## Tests
2019-07-07 16:29:56 +00:00
We aim to have sufficient test coverage for critical parts of the application and aren't aiming for 100% unit test coverage. All API endpoints and anything authentication related should be thoroughly tested.
2017-12-30 18:07:38 +00:00
2018-01-01 20:26:04 +00:00
To add new tests, write your tests with [Jest ](https://facebook.github.io/jest/ ) and add a file with `.test.js` extension next to the tested code.
2017-12-30 18:07:38 +00:00
```shell
# To run all tests
2020-11-12 00:58:45 +00:00
make test
2017-12-30 18:07:38 +00:00
2020-11-12 00:58:45 +00:00
# To run backend tests in watch mode
make watch
```
Once the test database is created with `make test` you may individually run
frontend and backend tests directly.
```shell
2017-12-30 18:07:38 +00:00
# To run backend tests
yarn test:server
# To run frontend tests
yarn test:app
```
2021-02-07 01:46:54 +00:00
## Migrations
Sequelize is used to create and run migrations, for example:
```
yarn sequelize migration:generate --name my-migration
yarn sequelize db:migrate
```
Or to run migrations on test database:
```
yarn sequelize db:migrate --env test
```
2017-12-27 12:23:41 +00:00
## Contributing
2019-07-07 16:29:56 +00:00
Outline is built and maintained by a small team – we'd love your help to fix bugs and add features!
2017-12-27 12:23:41 +00:00
2021-02-07 01:46:54 +00:00
Before submitting a pull request please let the core team know by creating or commenting in an issue on [GitHub ](https://www.github.com/outline/outline/issues ), and we'd also love to hear from you in the [Discussions ](https://www.github.com/outline/outline/discussions ). This way we can ensure that an approach is agreed on before code is written. This will result in a much higher
liklihood of your code being accepted.
2017-12-27 12:23:41 +00:00
2018-05-26 19:22:14 +00:00
If you’ re looking for ways to get started, here's a list of ways to help us improve Outline:
2017-12-27 12:23:41 +00:00
2020-11-30 04:04:58 +00:00
* [Translation ](TRANSLATION.md ) into other languages
2018-03-26 15:54:03 +00:00
* Issues with [`good first issue` ](https://github.com/outline/outline/labels/good%20first%20issue ) label
2017-12-27 12:23:41 +00:00
* Performance improvements, both on server and frontend
* Developer happiness and documentation
* Bugs and other issues listed on GitHub
2017-10-30 07:13:05 +00:00
## License
2021-02-07 01:46:54 +00:00
Outline is [BSL 1.1 licensed ](LICENSE ).