From 63b7f29c41f5c78d14a97af62d454cbb859db0b5 Mon Sep 17 00:00:00 2001 From: hex-developer <77530549+hex-developer@users.noreply.github.com> Date: Mon, 4 Mar 2024 19:48:29 +0200 Subject: [PATCH] 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 --- apps/outline/config.json | 75 +++++++++++++++ apps/outline/data/nginx/default.conf | 31 +++++++ apps/outline/data/oidc-config.json.template | 32 +++++++ apps/outline/docker-compose.yml | 97 ++++++++++++++++++++ apps/outline/metadata/description.md | 13 +++ apps/outline/metadata/logo.jpg | Bin 0 -> 33250 bytes 6 files changed, 248 insertions(+) create mode 100644 apps/outline/config.json create mode 100644 apps/outline/data/nginx/default.conf create mode 100644 apps/outline/data/oidc-config.json.template create mode 100644 apps/outline/docker-compose.yml create mode 100644 apps/outline/metadata/description.md create mode 100644 apps/outline/metadata/logo.jpg diff --git a/apps/outline/config.json b/apps/outline/config.json new file mode 100644 index 00000000..f51604a0 --- /dev/null +++ b/apps/outline/config.json @@ -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" + ] +} \ No newline at end of file diff --git a/apps/outline/data/nginx/default.conf b/apps/outline/data/nginx/default.conf new file mode 100644 index 00000000..f8d5a324 --- /dev/null +++ b/apps/outline/data/nginx/default.conf @@ -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; + } +} diff --git a/apps/outline/data/oidc-config.json.template b/apps/outline/data/oidc-config.json.template new file mode 100644 index 00000000..acc5d72c --- /dev/null +++ b/apps/outline/data/oidc-config.json.template @@ -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 + ] + } + } +] \ No newline at end of file diff --git a/apps/outline/docker-compose.yml b/apps/outline/docker-compose.yml new file mode 100644 index 00000000..9f9379dd --- /dev/null +++ b/apps/outline/docker-compose.yml @@ -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 \ No newline at end of file diff --git a/apps/outline/metadata/description.md b/apps/outline/metadata/description.md new file mode 100644 index 00000000..fae95f57 --- /dev/null +++ b/apps/outline/metadata/description.md @@ -0,0 +1,13 @@ +## Outline +_A fast, collaborative, knowledge base for your team built using React and Node.js._ +screenshot + +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) \ No newline at end of file diff --git a/apps/outline/metadata/logo.jpg b/apps/outline/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea393815ef18c76aa90e5c892b892e76a0f8c0f1 GIT binary patch literal 33250 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