Cómo instalar el Servidor de Notas Estándar en Ubuntu 22.04
Standard Notes es una aplicación de notas de código abierto y completamente encriptada. Ofrece planes gratuitos y de pago y ofrece tanto el alojamiento en la nube como la opción de alojarlo en tu servidor. Puedes utilizar tu servidor para sincronizar las notas almacenadas entre diferentes dispositivos. Standard Notes ofrece aplicaciones para todos los sistemas operativos de escritorio y plataformas móviles.
En este tutorial, aprenderás a autoalojar tu servidor de Standard Notes en una máquina Ubuntu 22.04. También aprenderás a activar las funciones del plan de pago y la carga de archivos en tu instancia autoalojada.
Requisitos previos
-
Un servidor con Ubuntu 22.04 con un mínimo de 2 GB de RAM.
-
Un usuario no root con privilegios sudo.
-
El cortafuegos sin complicaciones (UFW) está activado y en funcionamiento.
-
Un nombre de dominio totalmente cualificado que apunte al servidor. Para nuestro tutorial, utilizaremos el dominio
standardnotes.example.com
. Necesitarás otro nombre de dominio para tu servidor de archivos. Nosotros utilizaremos el dominiosnotes-files.example.com
. -
Todo está actualizado.
$ sudo apt update && sudo apt upgrade
Paso 1 – Configurar el cortafuegos
El primer paso antes de instalar cualquier paquete es configurar el cortafuegos para que permita las conexiones HTTP y HTTPS.
Comprueba el estado del cortafuegos.
$ sudo ufw status
Deberías ver algo como lo siguiente
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)
Permitir puertos HTTP y HTTPs.
$ sudo ufw allow http $ sudo ufw allow https
Vuelve a comprobar el estado para confirmarlo.
$ sudo ufw status Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443/tcp ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443/tcp (v6) ALLOW Anywhere (v6)
Paso 2 – Instala Docker y Docker Compose
Añade la clave GPG oficial de Docker.
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
Ejecuta el siguiente comando para añadir el repositorio de Docker.
$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Actualiza el sistema para incluir el repositorio de Docker.
$ sudo apt update
Instala Docker.
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Este tutorial utilizará el plugin Docker Compose v2 en lugar del antiguo binario heredado. Por lo tanto, el comando para ejecutarlo ha cambiado de docker-compose
a docker compose
y esto se refleja aquí.
Docker se ejecuta con privilegios elevados, por lo que tendrás que utilizar frecuentemente sudo
para ejecutar los comandos. La mejor opción es añadir tu cuenta de usuario de Linux al grupo de usuarios docker
.
$ sudo usermod -aG docker ${USER}
La variable ${USER}
recoge la cuenta del sistema con la que se ha iniciado la sesión. Si no estás conectado con el usuario al que quieres dar privilegios, sustituye ${USER}
por el nombre de usuario.
Para solicitar la pertenencia al nuevo grupo, sal del servidor y vuelve a entrar, o utiliza el siguiente comando. Se te pedirá la contraseña del usuario.
$ su - $(USER)
Paso 3 – Instalar Nginx
Ubuntu 22.04 viene con una versión antigua de Nginx. Para instalar la última versión, necesitas descargar el repositorio oficial de Nginx.
Importa la clave de firma de Nginx.
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Añadir el repositorio de la versión estable de Nginx.
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \ http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Actualiza los repositorios del sistema.
$ sudo apt update
Instalar Nginx.
$ sudo apt install nginx
Verificar la instalación.
$ nginx -v nginx version: nginx/1.22.0
Paso 4 – Instalar SSL
Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot utilizando el repositorio de Ubuntu o coger la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd.
Ubuntu 22.04 viene con Snapd instalado por defecto. Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd está actualizada.
$ sudo snap install core
Instala Certbot.
$ sudo snap install --classic certbot
Utiliza el siguiente comando para asegurarte de que el comando Certbot se puede ejecutar creando un enlace simbólico al directorio /usr/bin
.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Ejecuta el siguiente comando para generar un certificado SSL.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d standardnotes.example.com
El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/standardnotes.example.com
de tu servidor.
Tenemos que hacer lo mismo para el subdominio Archivos.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d snotes-files.example.com
Genera un certificado de grupo Diffie-Hellman.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Abre el archivo /etc/letsencrypt/renewal/standardnotes.example.com.conf
para editarlo.
$ sudo nano /etc/letsencrypt/renewal/standardnotes.example.com.conf
Pega el siguiente código en la parte inferior.
pre_hook = systemctl stop nginx post_hook = systemctl start nginx
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Repite el mismo paso para el subdominio de archivos editando el archivo /etc/letsencrypt/renewal/snotes-files.example.com.conf
.
Hemos generado el certificado SSL utilizando la opción autónoma de Certbot. Este ejecuta su servidor web para crear el certificado, lo que significa que Nginx debe estar apagado durante la renovación. Los comandos pre_hook y post_hook se ejecutan antes y después de la renovación para cerrar y reiniciar automáticamente el servidor Nginx, por lo que no es necesaria la intervención manual.
Para comprobar si la renovación de SSL funciona bien, haz una ejecución en seco del proceso.
$ sudo certbot renew --dry-run
Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.
Paso 5 – Descargar y configurar las notas estándar
Asegúrate de que estás en el directorio principal de tu sistema.
$ cd ~
Clona el repositorio de Standard Notes Standalone.
$ git clone --single-branch --branch main https://github.com/standardnotes/standalone.git
Cambia al directorio descargado.
$ cd standalone
Crea los archivos de configuración por defecto para el servidor.
$ ./server.sh setup
Esto creará los archivos de entorno por defecto que tenemos que configurar. Necesitas generar seis claves secretas diferentes. Utiliza los siguientes comandos para generarlas.
$ openssl rand -hex 32
Primero, tenemos que editar el archivo .env
en la carpeta principal. Ábrelo para editarlo.
$ nano .env
Cambia los valores de las siguientes variables.
NODE_ENV=production .. AUTH_JWT_SECRET=c0f5bcf6f0f0dcca5b9078c3095e4255a055dfd6376b376733af0e50483cc629 .. DB_USERNAME=std_notes_user DB_PASSWORD=changeme123 .. VALET_TOKEN_SECRET=977c978ca1d5ea22fe2fda65058905b191f724e33db6e47d0a41e034a082cb3b .. FILES_SERVER_URL=https://snotes-files.example.com
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
A continuación, abre el archivo docker/auth.env
.
$ nano docker/auth.env
Cambia los valores de las siguientes variables.
JWT_SECRET=54deb1b0b2499e8d875b0d5266dabef9003e13c1787a959a94e339363c10e56e LEGACY_JWT_SECRET=c36aae01803a616213f22422b6d3f998a2beb2cb53af8b95bf578a8a3d046cec .. PSEUDO_KEY_PARAMS_KEY=ea09d3f9122b49c653524cd2285a45fee88beb94f9b76d4d25420b521b080fcd .. ENCRYPTION_SERVER_KEY=04decf379fbe3bb48cf95dbb5997031418b308e724a25d88cb0b2ed6da725efe
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Paso 6 – Iniciar el servidor de Standard Notes
Ejecuta el siguiente comando para iniciar el servidor.
$ ./server.sh start
Este comando tardará unos minutos en completarse. Durante este tiempo, el proceso extraerá todas las imágenes Docker pertinentes y creará contenedores para todos los servicios. También rellenará la base de datos y realizará las migraciones pertinentes.
Puedes comprobar los registros del proceso con el siguiente comando.
$ ./server.sh logs
Pulsa Ctrl + C para salir de los registros. Puedes comprobar el estado de los contenedores en ejecución utilizando el siguiente comando.
$ ./server.sh status
Recibirás una salida similar.
Services State: NAME COMMAND SERVICE STATUS PORTS api-gateway-standalone "./wait-for.sh auth …" api-gateway running 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp auth-standalone "./wait-for.sh db 33…" auth running auth-worker-standalone "./wait-for.sh db 33…" auth-worker running cache-standalone "docker-entrypoint.s…" cache running 6379/tcp db-standalone "docker-entrypoint.s…" db running 3306/tcp files-standalone "./wait-for.sh db 33…" files running 0.0.0.0:3125->3000/tcp, :::3125->3000/tcp syncing-server-js-standalone "./wait-for.sh db 33…" syncing-server-js running syncing-server-js-worker-standalone "./wait-for.sh db 33…" syncing-server-js-worker running
Puedes comprobar la salud del servidor utilizando el siguiente comando.
$ curl http://localhost:3000/healthcheck OK
Standard Notes utiliza el puerto 3000 por defecto. Si has configurado un puerto diferente en el archivo .env
, debes actualizarlo en el comando anterior.
Paso 7 – Configurar Nginx
Abre el archivo /etc/nginx/nginx.conf
para editarlo.
$ sudo nano /etc/nginx/nginx.conf
Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;
.
server_names_hash_bucket_size 64;
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.
Crea y abre el archivo /etc/nginx/conf.d/standardnotes.conf
para editarlo.
$ sudo nano /etc/nginx/conf.d/standardnotes.conf
Pega en él el siguiente código. Sustituye standardnotes.example.com
por el nombre de tu dominio. Hemos fijado el valor de client_max_body_size
en 50MB. Puedes cambiarlo según tus necesidades.
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name standardnotes.example.com; client_max_body_size 50M; access_log /var/log/nginx/standardnotes.access.log; error_log /var/log/nginx/standardnotes.error.log; ssl_certificate /etc/letsencrypt/live/standardnotes.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/standardnotes.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/standardnotes.example.com/chain.pem; ssl_session_timeout 5m; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; location / { proxy_pass http://127.0.0.1:3000; proxy_cache off; } } # enforce HTTPS server { listen 80; listen [::]:80; server_name standardnotes.example.com; return 301 https://$host$request_uri; }
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
El archivo anterior es para la aplicación principal de Standard Notes. A continuación, tenemos que configurar otro archivo para el subdominio Archivos.
$ sudo nano /etc/nginx/conf.d/files-standardnotes.conf
Pega en él el siguiente código. Sustituye snotes-files.example.com
por el nombre de tu dominio. Hemos establecido el valor de la variable client_max_body_size
en 50MB. Puedes cambiarlo según tus necesidades.
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name snotes-files.example.com; client_max_body_size 50M; access_log /var/log/nginx/files-standardnotes.access.log; error_log /var/log/nginx/files-standardnotes.error.log; ssl_certificate /etc/letsencrypt/live/snotes-files.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/snotes-files.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/snotes-files.example.com/chain.pem; ssl_session_timeout 5m; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; location / { proxy_pass http://127.0.0.1:3125; proxy_cache off; } } # enforce HTTPS server { listen 80; listen [::]:80; server_name snotes-files.example.com; return 301 https://$host$request_uri; }
Comprueba la configuración de Nginx.
$ sudo nginx -t
Reinicia el servidor Nginx para habilitar los archivos de configuración.
$ sudo systemctl restart nginx
Paso 8 – Utilizar notas estándar
Si abres la URL https://standardnotes.example.com
en tu navegador, deberías ver la siguiente salida.
Esto significa que tu servidor está en funcionamiento. Para utilizar Standard Notes, tendrás que usar las aplicaciones oficiales. Para nuestro tutorial, utilizaremos su aplicación web, pero el método será el mismo para las aplicaciones de escritorio y móvil.
Abre la URL https://app.standardnotes.com
para acceder a la aplicación web. Haz clic en el enlace Crear cuenta gratuita en la parte inferior izquierda de la página e introduce tu dirección de correo electrónico y tu contraseña. Haz clic en el botón Funciones avanzadas y desmarca la opción Servidor de sincronización personalizado e introduce la URL https://standardnotes.example.com
en la casilla.
Una vez iniciada la sesión, puedes empezar a crear notas y a utilizar la aplicación.
Paso 9 – Habilitar las funciones de pago
Hasta ahora, hemos habilitado la funcionalidad básica de la aplicación Notas Estándar. La aplicación ofrece algunas funciones avanzadas como múltiples formatos de notas, almacenamiento encriptado en la nube, un historial de revisiones más largo y mucho más.
Para la aplicación alojada en la nube, puedes pagar directamente para habilitar las funciones avanzadas. Pero para la aplicación autoalojada, no puedes pagar por las funciones avanzadas ya que la aplicación de pago no funciona. Sin embargo, puedes donarlas. Pero para habilitar las funciones de pago en una aplicación autoalojada, tienes que ejecutar el siguiente comando desde el directorio de Notas Estándar.
$ cd ~/standardnotes $ bash ./server.sh create-subscription [email protected]
Recarga la aplicación web y las funciones de pago deberían estar activadas para tu cuenta.
Paso 10 – Configurar el servidor para la subida de archivos
La subida de archivos es una función de pago de Standard Notes. Hemos activado la URL de la API personalizada para la subida de archivos. Pero todavía no funcionan. Para que funcionen, tenemos que dar los permisos adecuados al directorio de subidas. Las subidas se almacenan en el directorio ~/standardnotes/data/uploads
. Ejecuta los siguientes comandos para cambiar los permisos.
$ chmod -R 775 data $ mkdir -p data/uploads $ sudo chmod -R 755 data/uploads $ sudo chown -R 1001.1001 data/uploads
Ahora, Standard Notes establece el cero como límite de subida para cada usuario. Esto significa que ningún usuario puede subir archivos a menos que se le asigne una cuota manualmente. Por lo tanto, el último paso para hacer que la subida de archivos funcione es habilitar la cuota de archivos para la cuenta de usuario de pago. Podemos hacerlo realizando una consulta SQL dentro del contenedor de la base de datos.
Accede al shell de MySQL dentro del contenedor de la base de datos.
$ docker exec -it db-standalone mysql -u std_notes_user -p Enter password:
Una vez dentro del shell de MySQL, vamos a comprobar la lista de bases de datos.
mysql > show databases; +--------------------+ | Database | +--------------------+ | information_schema | | standard_notes_db | +--------------------+ 2 rows in set (0.00 sec)
Cambia a la base de datos Standard Notes.
mysql > use standard_notes_db;
Ejecuta el siguiente comando SQL para añadir una cuota de archivo de 10 GB al usuario de pago activado anteriormente.
mysql> INSERT INTO subscription_settings(uuid, name, value, created_at, updated_at, user_subscription_uuid) VALUES (UUID(), "FILE_UPLOAD_BYTES_LIMIT", 10737418240, FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), (SELECT us.uuid FROM user_subscriptions us INNER JOIN users u ON us.user_uuid=u.uuid WHERE u.email="[email protected]"));
Aquí 10737418240 se refiere al total de bytes que se traduce en 10GB. Puedes modificar este número a lo que necesites.
Sal del shell de MySQL y del contenedor de la base de datos.
mysql > exit
Paso 11 – Probar la carga de archivos
Accede a la aplicación web de Standard Notes y haz clic en el icono de archivos adjuntos de la fila superior.
Haz clic en el botón Subir archivos y selecciona el archivo que quieres subir. El archivo se subirá con éxito y podrás verlo en la lista haciendo clic de nuevo en el icono.
Haz clic en los tres puntos que aparecen junto al nombre del archivo para que aparezcan opciones adicionales relacionadas con el archivo.
Haz clic en el enlace Adjuntar a la nota para añadir la imagen a la nota. El resto de las opciones se explican por sí mismas.
Conclusión
Con esto concluye nuestro tutorial sobre la instalación y configuración del servidor Standard Notes en una máquina Ubuntu 22.04. Si tienes alguna pregunta, publícala en los comentarios de abajo.