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.
Arquitectura recomendada
Internet
|
HTTPS:443
|
NGINX
|
http://localhost:8000
|
DQE One Standalone backendMedidas 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 --versionNota: 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 composeVerifique que Docker Compose esté disponible:
$ docker compose versionSi 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 nginxEjemplo 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 nginx2.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:
dqeoneredispostgres
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