Add Outline (#2651)

* Add Outline

* Format config.json

* Coderabbitai

* Fix description.md

* Make proposed changes

* Make proposed changes

* Make proposed changes

* Update docker-compose.yml

Forgot to persist storage

* fix: use right service names

* fix: use right service names everywhere

* Attempt to fix authentication errors

* Update docker-compose.yml

* Update nginx conf

* Fix authentication

* No need for extra config

---------

Co-authored-by: Nicolas Meienberger <47644445+meienberger@users.noreply.github.com>
Co-authored-by: Stavros <steveiliop56@gmail.com>
This commit is contained in:
hex-developer 2024-03-04 19:48:29 +02:00 committed by GitHub
parent 12f1a3dad6
commit 63b7f29c41
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 248 additions and 0 deletions

75
apps/outline/config.json Normal file
View File

@ -0,0 +1,75 @@
{
"name": "Outline",
"id": "outline",
"available": true,
"short_desc": "A home for all your docs",
"author": "outline",
"port": 8404,
"categories": [
"utilities"
],
"description": "Outline is a knowledge base designed for teams. It's goals are to be fast, intuitive and support many integrations.",
"tipi_version": 1,
"version": "0.75.2",
"source": "https://github.com/outline/outline",
"website": "https://getoutline.com",
"exposable": true,
"force_expose": true,
"form_fields": [
{
"type": "random",
"label": "Outline secret key",
"min": 64,
"env_variable": "OUTLINE_SECRET_KEY"
},
{
"type": "random",
"label": "Outline utils secret",
"min": 32,
"env_variable": "OUTLINE_UTILS_SECRET"
},
{
"type": "random",
"label": "OIDC client ID",
"min": 32,
"env_variable": "OUTLINE_OIDC_CLID"
},
{
"type": "random",
"label": "OIDC client secret",
"min": 32,
"env_variable": "OUTLINE_OIDC_CLKEY"
},
{
"type": "random",
"label": "Database password",
"min": 32,
"env_variable": "OUTLINE_PG_PASSWORD"
},
{
"type": "random",
"label": "OIDC secret",
"min": 32,
"env_variable": "OUTLINE_OIDC_SECRET"
},
{
"type": "text",
"label": "Username",
"max": 50,
"min": 3,
"required": true,
"env_variable": "OUTLINE_USER"
},
{
"type": "password",
"label": "Password",
"min": 12,
"required": true,
"env_variable": "OUTLINE_PASSWORD"
}
],
"supported_architectures": [
"arm64",
"amd64"
]
}

View File

@ -0,0 +1,31 @@
server {
listen 80;
client_max_body_size 100m;
# Outline Wiki
location / {
proxy_pass http://outline:3000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
# Static file FOR OIDC Server
location /uc/static {
alias /uc/static_root;
}
# OIDC Server
location /uc {
proxy_set_header SCRIPT_NAME /uc;
proxy_pass http://outline-oidc:8000;
}
}

View File

@ -0,0 +1,32 @@
[
{
"model": "oidc_provider.client",
"pk": 1,
"fields": {
"name": "outline",
"owner": null,
"client_type": "confidential",
"client_id": "{{OUTLINE_OIDC_CLID}}",
"client_secret": "{{OUTLINE_OIDC_CLKEY}}",
"jwt_alg": "RS256",
"date_created": "2024-03-02",
"website_url": "",
"terms_url": "",
"contact_email": "",
"logo": "",
"reuse_consent": true,
"require_consent": true,
"_redirect_uris": "https://{{APP_DOMAIN}}/auth/oidc.callback",
"_post_logout_redirect_uris": "",
"_scope": "",
"response_types": [
1,
2,
3,
4,
5,
6
]
}
}
]

View File

@ -0,0 +1,97 @@
version: "3.8"
services:
outline:
container_name: outline
image: docker.getoutline.com/outlinewiki/outline:0.75.2
restart: unless-stopped
environment:
- DATABASE_URL=postgres://outline:${OUTLINE_PG_PASSWORD}@outline-postgres:5432/outline
- REDIS_URL=redis://outline-redis:6379
- SECRET_KEY=${OUTLINE_SECRET_KEY}
- UTILS_SECRET=${OUTLINE_UTILS_SECRET}
- URL=https://${APP_DOMAIN}
- FORCE_HTTPS=false
- FILE_STORAGE=local
- FILE_STORAGE_UPLOAD_MAX_SIZE=26214400
- PGSSLMODE=disable
- OIDC_CLIENT_ID=${OUTLINE_OIDC_CLID}
- OIDC_CLIENT_SECRET=${OUTLINE_OIDC_CLKEY}
- OIDC_AUTH_URI=https://${APP_DOMAIN}/uc/oauth/authorize/
- OIDC_TOKEN_URI=http://outline-oidc:8000/oauth/token/
- OIDC_USERINFO_URI=http://outline-oidc:8000/oauth/userinfo/
- OIDC_USERNAME_CLAIM=preferred_username
- OIDC_DISPLAY_NAME=OpenID
- OIDC_SCOPES=openid profile email
volumes:
- ${APP_DATA_DIR}/data/outline:/var/lib/outline/data
depends_on:
- outline-postgres
- outline-redis
networks:
- tipi_main_network
outline-postgres:
container_name: outline-postgres
image: postgres:16-alpine
restart: unless-stopped
environment:
- POSTGRES_USER=outline
- POSTGRES_PASSWORD=${OUTLINE_PG_PASSWORD}
- POSTGRES_DB=outline
volumes:
- ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data
networks:
- tipi_main_network
outline-redis:
container_name: outline-redis
image: redis:7-alpine
restart: unless-stopped
networks:
- tipi_main_network
outline-oidc:
container_name: outline-oidc
image: ghcr.io/hex-developer/oidc-provider:v0.2.0
restart: unless-stopped
environment:
- LANGUAGE_CODE=en-us
- TIME_ZONE=UTC
- FORCE_SCRIPT_NAME=/uc
- SECRET_KEY=${OUTLINE_OIDC_SECRET}
- DJANGO_SUPERUSER_PASSWORD=${OUTLINE_PASSWORD}
- DJANGO_SUPERUSER_USERNAME=${OUTLINE_USER}
- DJANGO_SUPERUSER_EMAIL=user@outline.localhost
- INITIAL_DATA=oidc-config.json
- DOMAIN=https://${APP_DOMAIN}
volumes:
- ${APP_DATA_DIR}/data/oidc-config.json:/app/oidc-config.json:ro
- ${APP_DATA_DIR}/data/uc/db:/app/db:z
- ${APP_DATA_DIR}/data/uc/static_root:/app/static_root:z
networks:
- tipi_main_network
outline-nginx:
container_name: outline-reverse-proxy
image: nginx:alpine
restart: unless-stopped
ports:
- ${APP_PORT}:80
volumes:
- ${APP_DATA_DIR}/data/nginx/:/etc/nginx/conf.d/:ro
- ${APP_DATA_DIR}/data/uc/static_root:/uc/static_root:ro
depends_on:
- outline
- outline-oidc
networks:
- tipi_main_network
labels:
# Main
traefik.enable: true
traefik.http.middlewares.outline-web-redirect.redirectscheme.scheme: https
traefik.http.services.outline.loadbalancer.server.port: 80
traefik.http.routers.outline.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.outline.entrypoints: websecure
traefik.http.routers.outline.service: outline
traefik.http.routers.outline.tls.certresolver: myresolver

View File

@ -0,0 +1,13 @@
## Outline
_A fast, collaborative, knowledge base for your team built using React and Node.js._
<img width="1640" alt="screenshot" src="https://user-images.githubusercontent.com/380914/110356468-26374600-7fef-11eb-9f6a-f2cc2c8c6590.png">
Outline is a full-featured knowledge base and is a great alternative to Notion, Obsidian and other similar apps.
### Features
- Easily host your documents
- Modern UI
- API & Integration support
- Multiple components to choose from when editing documents
- Markdown syntax
Learn more at the official [website](https://getoutline.com)

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB