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.
Regístrate en HDS+
Tutoriales y soporte sobre sistemas NAS, Redes, Docker y SelfHosting.
Sin SPAM. Es gratuito. Ten acceso a todo el contenido.
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.
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á!
- 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".
- 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.
- Antes de ejecutar el Stack, deberemos de descargarnos el siguiente archivo y descomprimirlo dentro de la carpeta "redis" creada anteriormente.
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:
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.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.${SERVER_IP}
➜ En esta variable especificaremos la IP interna de nuestro servidor donde ejecutaremos el Stack.URL
➜ En esta variable especificaremos el Proxy Inverso mediante el cual accederemos a Outline.PORT
➜ En esta variable especificaremos el puerto del servicio, que en este tutorial es el 3000.${SMTP_USERNAME}
➜ En esta variable especificaremos nuestra dirección de Email.${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.${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
.
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.
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
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.
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.