You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Edit `.env` if you need to customise any settings (e.g. Google Drive proxy), then start the container:
143
+
144
+
```bash
145
+
docker compose up -d
146
+
```
147
+
148
+
#### Configuration via environment variables
149
+
150
+
Instead of editing `js/config.js`, Docker deployments are configured through environment variables, either in `.env` or in the `environment:` block of your Compose file:
151
+
152
+
| Variable | Default | Description |
153
+
|---|---|---|
154
+
|`GAS_PROXY_URL`|_(empty)_| Google Apps Script proxy URL for Google Drive support |
155
+
|`AUTO_RESTORE_CONTENT`|`true`| Restore last viewed content on page load |
156
+
|`OPEN_EXTERNAL_LINKS_IN_NEW_WINDOW`|`true`| Open external links in a new tab |
157
+
|`VALIDATE_EXE_CONTENT`|`true`| Reject ZIPs that are not valid eXeLearning packages |
158
+
|`ALLOW_DOWNLOAD_BY_DEFAULT`|`true`| Show download button enabled by default in share dialog |
159
+
160
+
Variables not set in `.env` keep their default values. You only need to include the ones you want to change.
161
+
162
+
#### HTTPS
163
+
164
+
**HTTPS is required.** The Service Worker (the core mechanism that serves extracted ZIP content) will not register on non-secure origins. This is a browser security restriction, not an eXeViewer limitation. The only exception is `localhost`, which works without HTTPS for local development.
165
+
166
+
For production deployments, ensure TLS is terminated before reaching the browser. The most common approach is a reverse proxy in front of the container (Nginx, Traefik, Caddy, etc.), but cloud load balancers or any other TLS termination point work equally well.
167
+
120
168
### Running locally without a web server
121
169
122
170
If you don't have a web server installed, you can use the included `server.js`:
@@ -261,26 +309,32 @@ Firefox doesn't support PWA installation natively. Use the [PWAs for Firefox](ht
261
309
262
310
```
263
311
exeviewer/
264
-
├── index.html # Main application page
265
-
├── manifest.json # PWA manifest
266
-
├── sw.js # Service Worker
267
-
├── server.js # Development server (Bun/Node.js)
268
-
├── package.json # Project configuration
312
+
├── index.html # Main application page
313
+
├── manifest.json # PWA manifest
314
+
├── sw.js # Service Worker
315
+
├── server.js # Development server (Bun/Node.js)
316
+
├── package.json # Project configuration
317
+
├── Dockerfile # Docker image definition
318
+
├── nginx.conf # nginx configuration for the Docker image
319
+
├── docker-compose.yml # Docker Compose example
320
+
├── .env.dist # Environment variable template for Docker deployments
321
+
├── docker/
322
+
│ └── entrypoint.sh # Generates js/config.js from environment variables at startup
269
323
├── css/
270
-
│ └── styles.css # Custom styles
324
+
│ └── styles.css # Custom styles
271
325
├── js/
272
-
│ ├── app.js # Main application logic
273
-
│ ├── config.js # Deployment configuration (overrides defaults in app.js)
274
-
│ ├── i18n.js # Internationalization module
275
-
│ └── zip.worker.js # Web Worker for ZIP extraction
326
+
│ ├── app.js # Main application logic
327
+
│ ├── config.js # Deployment configuration (overrides defaults in app.js)
328
+
│ ├── i18n.js # Internationalization module
329
+
│ └── zip.worker.js # Web Worker for ZIP extraction
Edita `.env` si necesitas personalizar algún parámetro (por ejemplo, la URL del proxy de Google Drive) y arranca el contenedor:
143
+
144
+
```bash
145
+
docker compose up -d
146
+
```
147
+
148
+
#### Configuración mediante variables de entorno
149
+
150
+
En lugar de editar `js/config.js`, los despliegues con Docker se configuran mediante variables de entorno, ya sea en el fichero `.env` o en el bloque `environment:` de tu fichero Compose:
151
+
152
+
| Variable | Valor por defecto | Descripción |
153
+
|---|---|---|
154
+
|`GAS_PROXY_URL`|_(vacío)_| URL del proxy de Google Apps Script para Google Drive |
155
+
|`AUTO_RESTORE_CONTENT`|`true`| Restaurar el último contenido visto al cargar la página |
156
+
|`OPEN_EXTERNAL_LINKS_IN_NEW_WINDOW`|`true`| Abrir los enlaces externos en una pestaña nueva |
157
+
|`VALIDATE_EXE_CONTENT`|`true`| Rechazar ZIP que no sean paquetes eXeLearning válidos |
158
+
|`ALLOW_DOWNLOAD_BY_DEFAULT`|`true`| Mostrar el botón de descarga activado por defecto en el diálogo de compartir |
159
+
160
+
Las variables no definidas en `.env` conservan sus valores por defecto; solo es necesario incluir las que se quieran cambiar.
161
+
162
+
#### HTTPS
163
+
164
+
**HTTPS es obligatorio.** El Service Worker (el mecanismo central que sirve el contenido ZIP extraído) no se registra en orígenes no seguros. Es una restricción del navegador, no de eXeViewer. La única excepción es `localhost`, que funciona sin HTTPS para desarrollo local.
165
+
166
+
En despliegues en producción, asegúrate de que TLS se termina antes de que la petición llegue al navegador. Lo más habitual es un proxy inverso delante del contenedor (Nginx, Traefik, Caddy, etc.), pero también funcionan los balanceadores de carga o cualquier otro punto de terminación TLS.
167
+
120
168
### Ejecución local sin servidor web
121
169
122
170
Si no tienes un servidor web instalado, puedes usar el `server.js` incluido:
@@ -261,26 +309,32 @@ Firefox no soporta la instalación de PWA de forma nativa. Usa la extensión [PW
261
309
262
310
```
263
311
exeviewer/
264
-
├── index.html # Página principal de la aplicación
265
-
├── manifest.json # Manifiesto PWA
266
-
├── sw.js # Service Worker
267
-
├── server.js # Servidor de desarrollo (Bun/Node.js)
268
-
├── package.json # Configuración del proyecto
312
+
├── index.html # Página principal de la aplicación
313
+
├── manifest.json # Manifiesto PWA
314
+
├── sw.js # Service Worker
315
+
├── server.js # Servidor de desarrollo (Bun/Node.js)
316
+
├── package.json # Configuración del proyecto
317
+
├── Dockerfile # Definición de la imagen Docker
318
+
├── nginx.conf # Configuración de nginx para la imagen Docker
319
+
├── docker-compose.yml # Ejemplo de Docker Compose
320
+
├── .env.dist # Plantilla de variables de entorno para despliegues Docker
321
+
├── docker/
322
+
│ └── entrypoint.sh # Genera js/config.js a partir de variables de entorno al arrancar
269
323
├── css/
270
-
│ └── styles.css # Estilos personalizados
324
+
│ └── styles.css # Estilos personalizados
271
325
├── js/
272
-
│ ├── app.js # Lógica principal de la aplicación
273
-
│ ├── config.js # Configuración del despliegue (sobreescribe los valores por defecto de app.js)
274
-
│ ├── i18n.js # Módulo de internacionalización
275
-
│ └── zip.worker.js # Web Worker para extracción ZIP
326
+
│ ├── app.js # Lógica principal de la aplicación
327
+
│ ├── config.js # Configuración del despliegue (sobreescribe los valores por defecto de app.js)
328
+
│ ├── i18n.js # Módulo de internacionalización
329
+
│ └── zip.worker.js # Web Worker para extracción ZIP
276
330
├── lang/
277
-
│ ├── en.json # Traducciones en inglés
278
-
│ └── es.json # Traducciones en español
279
-
├── img/ # Iconos e imágenes
280
-
├── vendor/ # Bibliotecas de terceros
281
-
│ ├── bootstrap/ # Bootstrap 5.3.2
282
-
│ ├── bootstrap-icons/# Bootstrap Icons 1.11.1
283
-
│ └── fflate/ # fflate 0.8.2
331
+
│ ├── en.json # Traducciones en inglés
332
+
│ └── es.json # Traducciones en español
333
+
├── img/ # Iconos e imágenes
334
+
├── vendor/ # Bibliotecas de terceros
335
+
│ ├── bootstrap/ # Bootstrap 5.3.2
336
+
│ ├── bootstrap-icons/# Bootstrap Icons 1.11.1
337
+
│ └── fflate/ # fflate 0.8.2
284
338
└── scripts/
285
339
└── generate-icons.js # Script de generación de iconos (requiere Node.js + sharp)
0 commit comments