Cómo instalar Outline e integrarlo con Authelia: La mejor alternativa a Notion

Instala la mejor solución SelfHosted a Notion con este sencillo tutorial. Intégralo además con Authelia mediante OIDC para beneficiarte del 2FA y de una mayor seguridad.

Cómo instalar Outline e integrarlo con Authelia: La mejor alternativa a Notion
Regístrate en HDS+
Es gratuito. Ten acceso a todo el contenido.
🔓
Dificultad del tutorial: Medio

En el tutorial de hoy se detallarán los pasos para poder realizar una instalación de cero del servicio Outline para aquellos que utilizan Notion o una herramienta similar, pero que quieren tener los datos controlados y en su propio servidor, es una gran alternativa SelfHosted

Pero bien, alguno se preguntará que es Outline, pues nada mejor que la definición de la propia empresa:

“¿Perdido en un lío de documentos? ¿Nunca estás seguro de quién tiene acceso? ¿Colegas que solicitan la misma información repetidamente en el chat? Es hora de organizar el conocimiento de tu equipo.”  

Antes de embarcarnos en esta aventura, os aconsejo que dejéis creado un Proxy Inverso para este servicio.

Cómo instalar y configurar Nginx Proxy Manager en tu NAS o servidor unRAID
Guía detallada sobre cómo instalar tu Proxy Inverso en un NAS - unRAID con certificado Let’s Encrypt.

Instalación mediante Docker-Compose

Aunque normalmente separo el tutorial en diferenciar el proceso para Synology y UnRAID, en este caso al ser algo complejo, utilizaremos el método de Docker-Compose para ambos sistemas. 

¡Así que vamos allá!

  1. Synology: Deberemos de crear las carpetas correspondientes. Para ello nos vamos a 'File Station ➝ docker' y creamos una carpeta "outline" y dentro de ella tres más: "storage-data", "redis" y "postgresql".
  2. UnRAID: Para estos usuarios no hace falta ya que las crea de manera automática al ejecutar el Stack por primera vez. Si recomiendo crearlas en este caso, ya que dentro se tendrá que descomprimir el archivo del siguiente paso.
  3. Antes de ejecutar el Stack, deberemos de descargarnos el siguiente archivo y descomprimirlo dentro de la carpeta "redis" creada anteriormente.
👉
¡IMPORTANTE! Se deben de cambiar ciertas variables del siguiente Stack, las cuales explico a continuación.
version: "3.2"
services:
  outline:
    container_name: outline
    image: outlinewiki/outline:latest
    ports:
      - 3000:3000 # Podeis cambiar el primer puerto si lo tenéis en uso.
    volumes:
      - /volume1/docker/outline/storage-data:/var/lib/outline/data 
    depends_on:
      - postgres
      - redis
    environment:
      NODE_ENV: production
      FORCE_HTTPS: true
      PGSSLMODE: disable
      SECRET_KEY: ${SECRET_KEY}
      UTILS_SECRET: ${UTILS_SECRET}
      DATABASE_URL: postgres://outline:outline@${SERVER_IP}:5432/outline
      REDIS_URL: redis://${SERVER_IP}:6379
      URL: ${URL}
      PORT: ${PORT}
      FILE_STORAGE: local
      WEBSOCKET: true
      FILE_STORAGE_LOCAL_ROOT_DIR: /var/lib/outline/data
      FILE_STORAGE_IMPORT_MAX_SIZE: 26214400
      SMTP_HOST: smtp.gmail.com
      SMTP_PORT: 587
      SMTP_USERNAME: ${SMTP_USERNAME}
      SMTP_PASSWORD: ${SMTP_PASSWORD}
      SMTP_FROM_EMAIL: ${SMTP_FROM_EMAIL}
      SMTP_TLS_CIPHERS: TLS_AES_256_GCM_SHA384
      SMTP_SECURE: false
    restart: unless-stopped
    
  redis:
    container_name: outlineredis
    image: redis
    ports:
      - 6379:6379
    volumes:
      - /volume1/docker/outline/redis/redis.conf:/redis.conf
    command:
      - redis-server
      - /redis.conf
    healthcheck:
      test:
        - CMD
        - redis-cli
        - ping
      interval: 10s
      timeout: 30s
      retries: 3
    restart: unless-stopped
    
  postgres:
    container_name: outlineBD
    image: postgres
    ports:
      - 5432:5432
    volumes:
      - /volume1/docker/outline/postgresql:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U outline"]
      interval: 30s
      timeout: 5s
      retries: 5
    environment:
      POSTGRES_USER: outline
      POSTGRES_PASSWORD: outline
      POSTGRES_DB: outline
    restart: unless-stopped

Por último, antes de ejecutar el Stack, se tendrán que modificar las siguientes variables:

  1. SECRET_KEY ➜ Entramos al Terminal de Mac o vía SSH a nuestro NAS y tecleamos:openssl rand -hex 32 . El resultado lo pegaremos en esta variable.
  2. UTILS_SECRET ➜ Entramos al Terminal de Mac o vía SSH a nuestro NAS y tecleamos: openssl rand -hex 32 . El resultado lo pegaremos en esta variable.
  3. ${SERVER_IP} ➜ En esta variable especificaremos la IP interna de nuestro servidor donde ejecutaremos el Stack.
  4. URL ➜ En esta variable especificaremos el Proxy Inverso mediante el cual accederemos a Outline.
  5. PORT ➜ En esta variable especificaremos el puerto del servicio, que en este tutorial es el 3000.
  6. ${SMTP_USERNAME} ➜ En esta variable especificaremos nuestra dirección de Email.
  7. ${SMTP_PASSWORD} ➜ En esta variable especificaremos la contraseña de nuestro Email. En el caso de utilizar 2FA en Gmail deberemos crear una contraseña de aplicación.
  8. ${SMTP_FROM_EMAIL} ➜ En esta variable especificaremos nuestra dirección de Email.


Configuración

Una vez hemos ejecutado el Docker-Compose correctamente, podemos acceder a Outline a través de: http://IPlocalNAS:3000 o creando un Proxy Inverso mediante de: https://outline.midominio.com

👉
Si se va a acceder directamente mediante IP local y no con Proxy Inverso, se tiene que cambiar en el Stack la siguiente variable por FORCE_HTTPS: false.

Veremos que no nos deja iniciar sesión, es totalmente normal, para solucionarlo, entraremos al Terminal del contenedor "outline" y ejecutamos lo siguiente:

node build/server/scripts/seed.js [email protected] # cambiando el correo por el vuestro.

Después ya podemos recargar la página y veremos que podemos iniciar sesión correctamente.

Ahora ya tendremos Outline funcionando, pero el "problema", es que cada vez que ingresamos con email, nos enviará un Email con el link para loguearnos. Esto puede ser algo molesto, pues bien, Outline ha implantado el OIDC y vamos a ver como integrarlo con Authelia.


Integración con Authelia y OIDC

Vamos a poder loguearnos en nuestra instancia de Outline a través de Authelia, y de esta forma añadir por ejemplo un punto más de seguridad con 2FA.

Bien, para realizar esto, primero tendremos que instalar Authelia, para ello en HDS+ os explicamos anteriormente como hacerlo.

Authelia: Configuración con 2FA, LDAP, SSO e integración con Nginx Proxy Manager
Guía completa para la instalación y configuración de Authelia en tu NAS. Añade una capa extra de seguridad a tus servicios e intégralo con NPM.

Una vez lo tenemos funcionando, nos iremos al archivo de configuration.yml de Authelia, y abajo del todo añadiremos lo siguiente:

identity_providers:
 oidc:
  hmac_secret: secret
  issuer_private_key: | ## Aqui va la key
  lifespans:
      access_token: 1h
      authorize_code: 1m
      id_token: 1h
      refresh_token: 90m
  clients:
   - client_id: outline
   client_name: Outline
   client_secret: #password generada
   public: false
   authorization_policy: two_factor
   redirect_uris:
    - https://outline.midominio.com/auth/oidc.callback
   scopes:
    - openid
    - offline_access
    - profile
    - email
   userinfo_signed_response_alg: none
   token_endpoint_auth_method: client_secret_post
   consent_mode: implicit

Hay que modificar algunos de los parámetros los cuales explico a continuación:

Para generar el hmac_secret, accederemos al Terminal del contenedor de Authelia y ejecutaremos:

authelia crypto rand --length 64 --charset alphanumeric

Para obtener la private_key, ejecutaremos lo siguiente:

authelia crypto certificate rsa generate

Esto, nos creará dos archivos, realizamos un cat private.pem , copiamos todo el contenido y lo pegamos en la variable issuer_private_key.

Por último, en redirect_uris:, colocaremos el proxy que hemos creado para Outline: https://outline.midominio.com 

🚧
IMPORTANTE: Si no tenéis instalada la última versión de Authelia, tenéis que eliminar la opción token_endpoint_auth_method.

Modificación del Docker-Compose

Una vez tengamos esto configurado, deberemos volver al stack de Outline y añadir las siguientes variables:

OIDC_CLIENT_ID=outline
OIDC_CLIENT_SECRET=insecure_secret
OIDC_AUTH_URI=https://auth.example.com/api/oidc/authorization
OIDC_TOKEN_URI=https://auth.example.com/api/oidc/token
OIDC_USERINFO_URI=https://auth.example.com/api/oidc/userinfo
OIDC_USERNAME_CLAIM=preferred_username
OIDC_DISPLAY_NAME=Authelia
OIDC_SCOPES="openid offline_access profile email"

Deberemos de cambiar el valor de la variable insecure_secret por el especificado anteriormente en client_secret del archivo de configuration de Authelia. También tendremos que sustituir las URL auth.example por la de nuestro Proxy de Authelia.

Finalmente, reiniciamos ambos servicios (Authelia y Outline), y ya podremos iniciar sesión a través de Authelia.


Configuraciones básicas de Outline

Lo primero que podemos cambiar es el idioma del sistema, y para ponerlo en Español haremos clic en los tres puntitos al lado de nuestro nombre, en el margen inferior izquierdo y pulsaremos sobre "Preferences".

Si volvemos a la pantalla principal, podremos empezar a crear colecciones. Todo es bastante intuitivo y sencillo de realizar. Incluso podemos otorgar permisos, si tenemos más usuarios.

Una vez creada la colección, podemos crear nuestra primera página donde registrar lo que necesitemos. Como se ve en la imagen, se nos permite poner encabezados, además de infinidad de opciones como tablas, diagramas, etc.

Demostración

Importando desde Notion:

llegados a este punto, algunos que ya estéis usando Notion en la actualidad, querréis saber como importar toda la información a Outline. Para ello, deberemos ir a Preferencias, y hacer clic en el apartado Importar:


Problemas y soluciones

Como último punto explicaré los dos problemas que más comúnmente nos podemos encontrar a la hora de levantar e integrar ambos servicios.

Outline no puede iniciarse hasta que se complete la migración de datos. 

Para solucionar este error, tendremos que entrar en el contenedor de la BBDD PostgreSQL y ejecutar lo siguiente:

psql -d outline -U outline

Nos pedirá la contraseña, especificamos la del Stack, en nuestro ejemplo es: outline.

Seguidamente ejecutamos el siguiente comando:

insert into authentication_providers values ('00000000-0000-0000-0000-000000000001', 'fake', '1', true, (SELECT id FROM teams LIMIT 1), NOW());

No puedo incrustar imágenes

Si intentas cargar una imagen, fallará ya que no podrás escribir en la ruta donde se almacenan las imágenes. La aplicación utiliza el usuario nodejs y necesita acceso en la ruta. Para que esto funcione necesitaremos conectarnos por SSH al NAS e ir hasta la ruta del Docker de Outline donde se encuentra la carpeta storage-data  y ejecutaremos:

chown 1001 storage-data

Ya puedes disfrutar de Outline, y olvidarte de Notion. A partir de ahora podrás acceder mediante tu email o bien con Authelia.

Invítame a un café



Más artículos

Ghosler: Envío de emails y Newsletter con Ghost desde cualquier servidor SMTP

Ghosler: Envío de emails y Newsletter con Ghost desde cualquier servidor SMTP

Por defecto Ghost obliga a pagar Mailgun cuyas tarifas son excesivas. Con esta herramienta podrás utilizar otro proveedor de correo electrónico.

lock-1 Por Joan Romero
Cómo instalar Plausible CE: Estadísticas detalladas de tu sitio Web

Cómo instalar Plausible CE: Estadísticas detalladas de tu sitio Web

Plausible lanza su nueva versión enfocada al SelfHosting. Tutorial completo con envío de emails y Maxmind integrado.

lock-1 Por Joan Romero
Docker-Controller-Bot, tus contenedores en la palma de la mano

Docker-Controller-Bot, tus contenedores en la palma de la mano

Bot de Telegram para el control absoluto de todos tus contenedores Docker.

lock-1 Por Daniel González Gutiérrez