diff --git a/QNAP/Outline/.env b/QNAP/Outline/.env new file mode 100644 index 0000000..d0c573f --- /dev/null +++ b/QNAP/Outline/.env @@ -0,0 +1,256 @@ +NODE_ENV=production + +# This URL should point to the fully qualified, publicly accessible, URL. If using a +# proxy this will be the proxy's URL. +URL=https://notes.kaspers.us + +# The port to expose the Outline server on, this should match what is configured +# in your docker-compose.yml +PORT=3000 + +# See [documentation](docs/SERVICES.md) on running a separate collaboration +# server, for normal operation this does not need to be set. +COLLABORATION_URL= + +# If using a Cloudfront/Cloudflare distribution or similar it can be set below. +# This will cause paths to javascript, stylesheets, and images to be updated to +# the hostname defined in CDN_URL. In your CDN configuration the origin server +# should be set to the same as URL. +CDN_URL= + +# How many processes should be spawned. As a reasonable rule divide your servers +# available memory by 512 for a rough estimate +WEB_CONCURRENCY=1 + +# Generate a hex-encoded 32-byte random key. Use `openssl rand -hex 32` in your +# terminal to generate a random value. +SECRET_KEY=a1450171e29543a85d28a5788c7a79a06de30634bfa5f89dbf2b1db6e32d0a79 + +# Generate a unique random key. The format is not important but you could still use +# `openssl rand -hex 32` in your terminal to generate a random value. +UTILS_SECRET=e6b5377568746c06d7f293d3c15916afe505a860d8a7323f4b787bed0f364a6c + +# The default interface language. See translate.getoutline.com for a list of +# available language codes and their rough percentage translated. +DEFAULT_LANGUAGE=en_US + + +# –––––––––––––––––––––––––––––––––––––– +# ––––––––––––– DATABASE ––––––––––––– +# –––––––––––––––––––––––––––––––––––––– + +# The database URL for your production database, including username, password, and database name. +DATABASE_URL=postgres://user:pass@postgres:5432/outline + +# The in-memory database pool per-process settings. Ensure that the pool size that will not exceed +# the maximum number of connections allowed by your database. Defaults to 0 and 5. +DATABASE_CONNECTION_POOL_MIN= +DATABASE_CONNECTION_POOL_MAX= + +# Uncomment this line if you will not use SSL for connecting to Postgres. This is acceptable +# if the database and the application are on the same machine. +# PGSSLMODE=disable + + +# –––––––––––––––––––––––––––––––––––––– +# –––––––––––––– REDIS ––––––––––––––– +# –––––––––––––––––––––––––––––––––––––– + +# The Redis URL for your environment you can either specify an ioredis compatible url or a Base64 +# encoded configuration object. +# DOCS: https://docs.getoutline.com/s/hosting/doc/redis-LGM4BFXYp4 +REDIS_URL=redis://redis:6379 + + +# –––––––––––––––––––––––––––––––––––––– +# ––––––––––– FILE STORAGE ––––––––––– +# –––––––––––––––––––––––––––––––––––––– + +# Specify what storage system to use. Possible value is one of "s3" or "local". +# For "local" images and document attachments will be saved on local disk, for "s3" they +# will be stored in an S3-compatible network store. +# DOCS: https://docs.getoutline.com/s/hosting/doc/file-storage-N4M0T6Ypu7 +FILE_STORAGE=local + +# If "local" is configured for FILE_STORAGE above, then this sets the parent directory under +# which all attachments/images are stored. Make sure that the process has permissions to +# create this path and also to write files to it. +FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data + +# Maximum allowed size for the uploaded attachment. +FILE_STORAGE_UPLOAD_MAX_SIZE=262144000 + +# Override the maximum size of document imports, generally this should be lower +# than the document attachment maximum size. +FILE_STORAGE_IMPORT_MAX_SIZE= + +# Override the maximum size of workspace imports, these can be especially large +# and the files are temporary being automatically deleted after a period of time. +FILE_STORAGE_WORKSPACE_IMPORT_MAX_SIZE= + +# To support uploading of images for avatars and document attachments in a distributed +# architecture, an s3-compatible storage can be configured if FILE_STORAGE=s3 above. +AWS_ACCESS_KEY_ID=get_a_key_from_aws +AWS_SECRET_ACCESS_KEY=get_the_secret_of_above_key +AWS_REGION=xx-xxxx-x +AWS_S3_ACCELERATE_URL= +AWS_S3_UPLOAD_BUCKET_URL=http://s3:4569 +AWS_S3_UPLOAD_BUCKET_NAME=bucket_name_here +AWS_S3_FORCE_PATH_STYLE=true +AWS_S3_ACL=private + + +# –––––––––––––––––––––––––––––––––––––– +# –––––––––––––––– SSL ––––––––––––––– +# –––––––––––––––––––––––––––––––––––––– + +# Base64 encoded private key and certificate for HTTPS termination. This is one +# of three ways to configure SSL and can be left empty. +# DOCS: https://docs.getoutline.com/s/hosting/doc/ssl-pzk7WO8d1n +SSL_KEY= +SSL_CERT= + +# Auto-redirect to https in production. The default is true but you may set to +# false if you can be sure that SSL is terminated at an external loadbalancer. +FORCE_HTTPS=true + + +# –––––––––––––––––––––––––––––––––––––– +# –––––––––– AUTHENTICATION –––––––––– +# –––––––––––––––––––––––––––––––––––––– + +# Third party signin credentials, at least ONE OF EITHER Google, Slack, +# Discord, or Microsoft is required for a working installation or you'll +# have no sign-in options. + +# Slack sign-in provider +# DOCS: https://docs.getoutline.com/s/hosting/doc/slack-sgMujR8J9J +SLACK_CLIENT_ID=get_a_key_from_slack +SLACK_CLIENT_SECRET=get_the_secret_of_above_key + +# Google sign-in provider +# DOCS: https://docs.getoutline.com/s/hosting/doc/google-hOuvtCmTqQ +GOOGLE_CLIENT_ID= +GOOGLE_CLIENT_SECRET= + +# Microsoft Entra / Azure AD sign-in provider +# DOCS: https://docs.getoutline.com/s/hosting/doc/microsoft-entra-UVz6jsIOcv +AZURE_CLIENT_ID= +AZURE_CLIENT_SECRET= +AZURE_RESOURCE_APP_ID= + +# Discord sign-in provider +# DOCS: https://docs.getoutline.com/s/hosting/doc/discord-g4JdWFFub6 +DISCORD_CLIENT_ID= +DISCORD_CLIENT_SECRET= +DISCORD_SERVER_ID= +DISCORD_SERVER_ROLES= + +# Generic OIDC provider +# DOCS: https://docs.getoutline.com/s/hosting/doc/oidc-8CPBm6uC0I +OIDC_CLIENT_ID=ouBfIr6IvVMC57n5YbtINmi3HaBbfMYxVSPxR2Gn +OIDC_CLIENT_SECRET=vThBY0m7aHHLFVFVSIxI602vMBdFMNuMPFj5GpMQINVM6Xc9LozpFY4cwNIKNCHq02LuAGmYaHFsKihFck4FPKHAqLFgmSF7pnEbDmC7esnt5Y6PvvbsaYhEgYS52SwN +OIDC_AUTH_URI=https://auth.kaspers.us/application/o/authorize/ +OIDC_TOKEN_URI=https://auth.kaspers.us/application/o/token/ +OIDC_USERINFO_URI=https://auth.kaspers.us/application/o/userinfo/ +OIDC_LOGOUT_URI=https://auth.kaspers.us/application/o/outline/end-session/ + +# Specify which claims to derive user information from +# Supports any valid JSON path with the JWT payload +OIDC_USERNAME_CLAIM=preferred_username + +# Display name for OIDC authentication +OIDC_DISPLAY_NAME=Authentik + +# Space separated auth scopes. +OIDC_SCOPES=openid profile email + + +# –––––––––––––––––––––––––––––––––––––– +# –––––––––––––– EMAIL ––––––––––––––– +# –––––––––––––––––––––––––––––––––––––– + +# To support sending outgoing transactional emails such as "document updated" or +# email sign-in you'll need to connect an SMTP server. Service can be configured +# with any service from this list: https://community.nodemailer.com/2-0-0-beta/setup-smtp/well-known-services/ +# DOCS: https://docs.getoutline.com/s/hosting/doc/smtp-cqCJyZGMIB +SMTP_SERVICE=Gmail +SMTP_USERNAME=jake@kaspers.us +SMTP_PASSWORD=oqozrafdhnjcihsc +SMTP_FROM_EMAIL=notes@kaspers.us + + +# –––––––––––––––––––––––––––––––––––––– +# –––––––––– RATE LIMITER –––––––––––– +# –––––––––––––––––––––––––––––––––––––– + +# Whether the rate limiter is enabled or not +RATE_LIMITER_ENABLED=true + +# Individual endpoints have hardcoded rate limits that are enabled +# with the above setting, however this is a global rate limiter +# across all requests +RATE_LIMITER_REQUESTS=1000 +RATE_LIMITER_DURATION_WINDOW=60 + + +# –––––––––––––––––––––––––––––––––––––– +# ––––––––––– INTEGRATIONS ––––––––––– +# –––––––––––––––––––––––––––––––––––––– + +# The GitHub integration allows previewing issue and pull request links +# DOCS: https://docs.getoutline.com/s/hosting/doc/github-GchT3NNxI9 +GITHUB_CLIENT_ID= +GITHUB_CLIENT_SECRET= +GITHUB_WEBHOOK_SECRET= +GITHUB_APP_NAME= +GITHUB_APP_ID= +GITHUB_APP_PRIVATE_KEY= + +# The Linear integration allows previewing issue links as rich mentions +LINEAR_CLIENT_ID= +LINEAR_CLIENT_SECRET= + +# For a complete Slack integration with search and posting to channels the +# following configs are also needed in addition to Slack authentication: +# DOCS: https://docs.getoutline.com/s/hosting/doc/slack-G2mc8DOJHk +SLACK_VERIFICATION_TOKEN=your_token +SLACK_APP_ID=A0XXXXXXX +SLACK_MESSAGE_ACTIONS=true + +# For Dropbox integration, follow these instructions to get the key https://www.dropbox.com/developers/embedder#setup +# and do not forget to whitelist your domain name in the app settings +DROPBOX_APP_KEY= + +# Optionally enable Sentry (sentry.io) to track errors and performance, +# DOCS: https://docs.getoutline.com/s/hosting/doc/sentry-jxcFttcDl5 +SENTRY_DSN= +SENTRY_TUNNEL= + +# Enable importing pages from a Notion workspace +# DOCS: https://docs.getoutline.com/s/hosting/doc/notion-2v6g7WY3l3 +NOTION_CLIENT_ID= +NOTION_CLIENT_SECRET= + +# The Iframely integration allows previews of third-party content within Outline. +# For example, hovering over an external link will show a preview. +# DOCS: https://docs.getoutline.com/s/hosting/doc/iframely-HwLF1EZ9mo +IFRAMELY_URL= +IFRAMELY_API_KEY= + + +# –––––––––––––––––––––––––––––––––––––– +# ––––––––––––– DEBUGGING –––––––––––– +# –––––––––––––––––––––––––––––––––––––– + +# Have the installation check for updates by sending anonymized statistics to +# the maintainers +ENABLE_UPDATES=true + +# Debugging categories to enable – you can remove the default "http" value if +# your proxy already logs incoming http requests and this ends up being duplicative +DEBUG=http + +# Configure lowest severity level for server logs. Should be one of +# error, warn, info, http, verbose, debug, or silly +LOG_LEVEL=info \ No newline at end of file diff --git a/QNAP/Outline/docker-compose.yaml b/QNAP/Outline/docker-compose.yaml new file mode 100644 index 0000000..83cbf98 --- /dev/null +++ b/QNAP/Outline/docker-compose.yaml @@ -0,0 +1,63 @@ +services: + outline: + image: docker.getoutline.com/outlinewiki/outline:latest + ports: + - '3333:2283' + volumes: + - /share/Media/container-station-data/outline/data:/var/lib/outline/data + depends_on: + - postgres + - redis + labels: + traefik.docker.network: proxy + traefik.enable: 'true' + traefik.http.routers.outline.rule: Host(`notes.kaspers.us`) + traefik.http.services.outline.loadbalancer.server.port: '3000' + traefik.http.routers.outline.tls: 'true' + #traefik.constraint: proxy-public + traefik.http.routers.outline.entrypoints: 'websecure' + traefik.http.routers.outline.tls.certresolver: 'letsencrypt' + restart: always + networks: + proxy: {} + outline-internal: {} + + redis: + image: redis + expose: + - "6379" + volumes: + - /share/Media/container-station-data/outline/redis/redis.conf:/redis.conf + command: ["redis-server", "/redis.conf"] + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 30s + retries: 3 + restart: always + networks: + outline-internal: {} + + postgres: + image: postgres + expose: + - "5432" + volumes: + - /share/Media/container-station-data/outline/db:/var/lib/postgresql/data + healthcheck: + test: ["CMD", "pg_isready", "-d", "outline", "-U", "user"] + interval: 30s + timeout: 20s + retries: 3 + environment: + POSTGRES_USER: 'user' + POSTGRES_PASSWORD: 'pass' + POSTGRES_DB: 'outline' + restart: always + networks: + outline-internal: {} +networks: + proxy: + external: true + outline-internal: + driver: bridge \ No newline at end of file