Máquina Virtual Linux — Instalación del servidor backend

Support DQE
Support DQE
  • Actualización

1. Arquitectura

Una vez que su instancia de servidor dedicado de DQE One Standalone esté en funcionamiento, podrá iniciar y exponer la aplicación backend desde su máquina virtual.

Este documento describe un ejemplo de configuración para instalar la instancia del servidor backend de Standalone en una máquina virtual Ubuntu. Este documento no cubre la capa de seguridad completa de su propio entorno.

La aplicación backend se despliega con Docker Compose y normalmente se expone a través de NGINX mediante HTTPS.

Internet
   |
HTTPS:443
   |
NGINX
   |
http://localhost:8000
   |
DQE One Standalone backend

Medidas de seguridad

  • Protocolos y puertos: exponga la aplicación públicamente mediante HTTPS en el puerto 443. La propia aplicación Docker escucha en el puerto 8000 y preferiblemente debe permanecer detrás de NGINX.
  • Filtrado de IP: según su arquitectura, restrinja el acceso entrante únicamente a direcciones IP de confianza.
  • Certificado SSL: si la VM está directamente expuesta a internet, debe tener una entrada DNS y un certificado SSL asociado.

Recomendación

  • Configuración del servidor:
    • Tipo: Unix, por ejemplo Ubuntu
    • RAM: de 3 a 5 GB
    • Espacio en disco: 10 GB como mínimo
    • CPU: 1 vCPU como mínimo

2. Instalación

2.1. Requisitos previos

Instalación de Docker

$ sudo apt update
$ sudo apt install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
$ sudo apt update
$ sudo apt install docker-ce
$ docker --version

Nota: en versiones recientes de Ubuntu, el comando apt-key puede mostrar una advertencia de obsolescencia. Esta advertencia es esperada y no impide que Docker se instale si el comando devuelve OK.

Docker Compose

Las versiones recientes de Docker incluyen Docker Compose V2 de forma predeterminada. Esta guía utiliza el comando del plugin de Compose:

$ docker compose

Verifique que Docker Compose esté disponible:

$ docker compose version

Si se devuelve un número de versión, no es necesaria ninguna instalación adicional de Docker Compose.

Instalación de NGINX

$ sudo apt update
$ sudo apt install nginx

Ejemplo de configuración:

server {
    listen 443 ssl;
    server_name myserver.example.com;

    ssl_certificate /etc/nginx/ssl/[MY_CERTIFICATE].pem;
    ssl_certificate_key /etc/nginx/ssl/[MY_PRIVATE_KEY].key;

    ssl_protocols TLSv1.2 TLSv1.3;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header Cookie $http_cookie;
        proxy_set_header Referer $http_referer;

        proxy_pass http://localhost:8000;
    }

    access_log /var/log/nginx/dqeone-standalone.log;
    error_log /var/log/nginx/dqeone-standalone-error.log error;
}

Después de actualizar la configuración de NGINX, reinicie NGINX:

$ sudo systemctl restart nginx

2.2. Archivo Docker Compose

Cree un archivo docker-compose.yml con el siguiente contenido:

services:

  redis:
    container_name: redis
    image: dqeone.azurecr.io/dqe-one-redis:v1.0
    hostname: redis
    logging:
      driver: none
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data

  dqeone:
    container_name: dqeone
    image: dqeone.azurecr.io/standalone:v1.4.0
    hostname: dqeone
    expose:
      - "8000"
    ports:
      - "8000:8000"
    depends_on:
      - redis
      - postgres
    environment:
      - SFAPIVERSION=v65.0
      - CREATE_SUPERUSER=true
      - RUN_COLLECTSTATIC=false
      - DQE_ONE_SERVER_ADMIN_USER=<admin_user>
      - DQE_ONE_SERVER_ADMIN_PASSWORD=<admin_password>
      - DQE_CLIENT_LICENCE=<client_licence>
      - WEBSITE_HOSTNAME=https://<your-domain>
      - SECRET_ENCRYPTION_KEY=<secret_encryption_key>
      - WAIT_HOSTS=redis:6379
      - WAIT_HOSTS_TIMEOUT=300
      - WAIT_SLEEP_INTERVAL=5
      - WAIT_HOST_CONNECT_TIMEOUT=30
      - REDIS_URL=redis://redis:6379
      - PORT=8000
      - DEBUG=false
      - DB_USER=dqeone
      - DB_PASSWORD=<database_password>
      - DB_NAME=dqeone
      - DB_HOST=postgres
      - DB_VOLUME_PATH=./db/
      - DB_MAX_CAPACITY=8000000000
      - AUTHORIZED_SFTP_HOSTS=<authorized_sftp_hosts>
    command:
      - "bash"
      - "./entrypoint.sh"

  postgres:
    container_name: postgres
    image: dqeone.azurecr.io/dqe-one-postgres:v1.0
    logging:
      driver: none
    environment:
      POSTGRES_USER: dqeone
      POSTGRES_PASSWORD: <database_password>
      POSTGRES_DB: dqeone
    expose:
      - "5432"
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  redis_data:
  postgres_data:
  

Importante: reemplace todos los valores de marcador de posición entre <...> con los valores proporcionados o generados para la instalación del cliente.

Importante: utilice las versiones de imagen proporcionadas por DQE. No las reemplace con la etiqueta latest, ya que algunas imágenes pueden no publicarse con esta etiqueta.

Nota de seguridad: no publique credenciales reales de clientes, claves de licencia, claves de cifrado, contraseñas de registro ni contraseñas de bases de datos en la documentación.

Variables de entorno

El servicio dqeone requiere varias variables de entorno para configurar el backend de Standalone.

Variable Valor de ejemplo Descripción
SFAPIVERSION v65.0 Versión de la API de Salesforce utilizada por la aplicación al comunicarse con Salesforce.
CREATE_SUPERUSER true Crea la cuenta de administrador inicial durante el primer inicio.
RUN_COLLECTSTATIC false Ejecuta el comando collectstatic de Django durante el inicio. Configúrelo en false a menos que sea explícitamente necesario.
DQE_ONE_SERVER_ADMIN_USER <admin_user> Nombre de usuario de la cuenta de administrador inicial.
DQE_ONE_SERVER_ADMIN_PASSWORD <admin_password> Contraseña de la cuenta de administrador inicial. Elija una contraseña segura y manténgala confidencial.
DQE_CLIENT_LICENCE <client_licence> Clave de licencia del cliente proporcionada por DQE.
WEBSITE_HOSTNAME https://standalone.example.com URL HTTPS pública de la instancia de Standalone. Este valor debe coincidir con el nombre DNS y la configuración de NGINX.
SECRET_ENCRYPTION_KEY <secret_encryption_key> Clave secreta utilizada para cifrar la información sensible almacenada por la aplicación. Genere una clave única para cada instalación y nunca la cambie después del despliegue.
WAIT_HOSTS redis:6379 Lista de servicios dependientes que deben ser accesibles antes de que se inicie la aplicación.
WAIT_HOSTS_TIMEOUT 300 Tiempo máximo de espera, en segundos, para que los servicios dependientes estén disponibles.
WAIT_SLEEP_INTERVAL 5 Retraso, en segundos, entre dos comprobaciones de disponibilidad.
WAIT_HOST_CONNECT_TIMEOUT 30 Tiempo de espera, en segundos, para cada intento de conexión a un servicio dependiente.
REDIS_URL redis://redis:6379 URL de conexión de Redis utilizada por la aplicación.
PORT 8000 Puerto de escucha interno de la aplicación.
DEBUG false Activa o desactiva el modo de depuración. Este valor debe establecerse en false en producción.
DB_USER dqeone Nombre de usuario de la base de datos PostgreSQL utilizado por la aplicación.
DB_PASSWORD <database_password> Contraseña de la base de datos PostgreSQL utilizada por la aplicación. Debe coincidir con POSTGRES_PASSWORD en el servicio postgres.
DB_NAME dqeone Nombre de la base de datos PostgreSQL utilizado por la aplicación. Debe coincidir con POSTGRES_DB en el servicio postgres.
DB_HOST postgres Nombre de host del servicio PostgreSQL definido en el archivo Docker Compose.
DB_VOLUME_PATH ./db/ Ruta utilizada por la aplicación para el almacenamiento relacionado con la base de datos.
DB_MAX_CAPACITY 8000000000 Capacidad máxima de la base de datos, expresada en bytes.
AUTHORIZED_SFTP_HOSTS depot-1.dqe-software.net Lista separada por comas de hosts SFTP autorizados por la aplicación para intercambios de archivos seguros.

Importante: la SECRET_ENCRYPTION_KEY debe generarse una vez y conservarse durante toda la vida del despliegue. Cambiar este valor después de que la aplicación se haya inicializado puede impedir que los datos cifrados previamente puedan descifrarse.

Para generar una clave de cifrado compatible, ejecute:

python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"

Si el módulo cryptography no está instalado, instálelo primero:

sudo apt install python3-cryptography

2.3. Validar el archivo Docker Compose

$ docker compose config

Si Docker Compose devuelve un error como:

yaml: found character that cannot start any token

verifique la indentación del archivo. YAML solo admite espacios. Las tabulaciones o caracteres invisibles pueden generar este error. El problema también puede estar ubicado en la línea anterior a la indicada en el mensaje de error.

3. Lanzador

3.1. Conexión al Azure Container Registry de DQE

$ docker login dqeone.azurecr.io
Username: <Login provided by DQE>
Password: <Password provided by DQE>

3.2. Descargar las imágenes

$ docker compose pull

Si Docker devuelve un error unauthorized al descargar una imagen, verifique que todas las imágenes utilicen el Azure Container Registry proporcionado por DQE. Las instalaciones de clientes no deben hacer referencia a registros de desarrollo como dqeonedev.azurecr.io.

3.3. Iniciar los servicios

$ docker compose up -d

Verifique que todos los contenedores estén en ejecución:

$ docker compose ps

Servicios esperados:

  • dqeone
  • redis
  • postgres

3.4. Verificar la instalación

$ curl -I http://localhost:8000

Una respuesta similar a la siguiente confirma que la aplicación está en ejecución:

HTTP/1.1 301 Moved Permanently

Una vez configurado NGINX, la aplicación debería ser accesible a través del endpoint público HTTPS:

https://<your-domain>

4. Solución de problemas

Error de análisis YAML

yaml: found character that cannot start any token

Posibles causas:

  • Carácter de tabulación
  • Indentación no válida
  • Carácter invisible

Solución:

  • Reemplace las tabulaciones por espacios.
  • Valide el archivo utilizando docker compose config.
  • Revise la línea anterior a la indicada por el mensaje de error.

No autorizado al descargar imágenes

unauthorized: authentication required

Verifique que:

  • se haya autenticado correctamente utilizando docker login dqeone.azurecr.io;
  • todas las imágenes hagan referencia al registro de producción de DQE dqeone.azurecr.io;
  • las versiones de imagen coincidan con las proporcionadas por DQE.

No se puede acceder a la aplicación de forma remota

Verifique que:

  • los contenedores Docker estén en ejecución;
  • NGINX esté en ejecución;
  • el puerto 443 esté permitido por el firewall del servidor;
  • el certificado SSL esté correctamente configurado;
  • la entrada DNS apunte a la VM o gateway que expone el servicio.

Relacionada con

¿Fue útil este artículo?

Usuarios a los que les pareció útil: 0 de 0