Introducción
Un servicio de soporte necesita un lugar seguro para previsualizar cambios de configuración. Ejecutará el mismo código en los entornos de vista previa y producción, mantendrá separados sus identificadores públicos y secretos, y protegerá un endpoint de mantenimiento sintético mientras deja públicos los endpoints de comprobación de estado.
Utilice su propia cuenta de aprendizaje de Cloudflare y los conocimientos sobre autorización del dispositivo, implementación y registros adquiridos en laboratorios anteriores. Este laboratorio comienza de forma independiente en /home/labex/project/worker-config, con Node.js 22.22.0, Wrangler 4.131.1 instalado localmente en el proyecto y un pequeño recurso de prueba para la ruta de estado. No se reutiliza ninguna máquina virtual ni ningún recurso de nube anterior. Ambas implementaciones son desechables y la operación de mantenimiento es una simulación. Utilice únicamente tokens sintéticos generados para este laboratorio. Workers Free y workers.dev son suficientes para este ejercicio; las solicitudes cuentan para el uso de su cuenta. No necesita un dominio comprado, una base de datos ni una actualización de pago.
Eliminará ambas implementaciones en la nube y los archivos de tokens locales, y cerrará la sesión antes de finalizar la máquina virtual. Mantenga abierto el mismo terminal durante todo el laboratorio.
Separar la configuración de vista previa y producción
En este paso, utilizará el mismo controlador de estado proporcionado con dos entornos identificados por nombre. Aquí, live sigue siendo una implementación de aprendizaje desechable; ninguno de los dos entornos gestiona datos reales de producción. El nombre preview corresponde a un entorno de Wrangler, no a una URL de vista previa de versión.
Acceda al proyecto preparado e inspeccione el recurso de prueba de la ruta de estado. Node y Wrangler instalado localmente en el proyecto ya están disponibles.
cd /home/labex/project/worker-config
node --version
npx wrangler --version
cat src/index.js
Espere obtener Node v22.22.0 y Wrangler 4.131.1. El controlador lee de env los valores de visualización que no son secretos. En su propia máquina, instale Node y añada wrangler@4.131.1 como dependencia de desarrollo del proyecto; reproduzca las dependencias existentes con npm ci.
Genere un nombre base desechable. La sustitución de comandos inserta una salida hexadecimal aleatoria en la variable del shell. Mantenga este terminal abierto para los comandos posteriores.
WORKER_NAME="labex-config-$(openssl rand -hex 6)"
Escriba la configuración mediante un heredoc; como el marcador de cierre no está entre comillas, permite sustituir $WORKER_NAME. main selecciona el código compartido y compatibility_date selecciona el comportamiento del entorno de ejecución. Los objetos env sobrescriben la configuración para --env preview y --env live. Defina todos los valores de vars en cada entorno, porque estas vinculaciones no se heredan. No existe ningún recurso de base de datos ni de cola: QUEUE_LABEL es únicamente una etiqueta de visualización pública.
cat > wrangler.jsonc <<CONFIG
{
"name": "$WORKER_NAME",
"main": "src/index.js",
"compatibility_date": "2026-09-14",
"workers_dev": true,
"preview_urls": false,
"env": {
"preview": {"vars": {"ENVIRONMENT": "preview", "QUEUE_LABEL": "sandbox"}},
"live": {"vars": {"ENVIRONMENT": "live", "QUEUE_LABEL": "primary"}}
}
}
CONFIG
Inicie ambos entornos de ejecución locales. > redirige la salida, 2>&1 incluye los errores y & ejecuta el proceso en segundo plano. Los puertos HTTP y del inspector son diferentes para evitar conflictos.
npx wrangler dev --env preview --port 8080 > preview.log 2>&1 &
npx wrangler dev --env live --port 8081 --inspector-port 9230 > live.log 2>&1 &
cat preview.log
cat live.log
Espere a que ambos registros indiquen que los servidores están listos; si es necesario, vuelva a ejecutar el cat correspondiente. Después, compare las respuestas:
curl -i http://127.0.0.1:8080/health
curl -i http://127.0.0.1:8081/health
Ambos devuelven 200. Preview devuelve {"status":"ok","environment":"preview","queue":"sandbox"}; live devuelve {"status":"ok","environment":"live","queue":"primary"}. curl -i incluye el estado y las cabeceras. Utilice el botón de verificación con ambos servidores en ejecución.
La documentación sobre entornos explica la herencia de entornos y los nombres implementados predeterminados con el formato <name>-<environment>.
Proteger una ruta de mantenimiento con secretos locales
En este paso, protegerá una operación de mantenimiento sintética con un token diferente en cada entorno. Un secreto es una configuración privada disponible mediante env; no debe aparecer en vars públicas, en el JSON devuelto ni en los registros de la aplicación. Este pequeño ejemplo de token bearer enseña el límite del lado del servidor, no un sistema completo de autenticación de usuarios.
Detenga los dos procesos locales antes de añadir los archivos de secretos. Consulte los números reales de los trabajos; los ejemplos suponen que preview es el 1 y live el 2.
jobs
kill %1 %2
Genere dos tokens aleatorios de prueba sin mostrarlos. umask 077 hace que los archivos nuevos solo sean legibles por el usuario de la máquina virtual. printf escribe una asignación de dotenv en el archivo específico de cada entorno. No utilice aquí un token de API de una cuenta real.
umask 077
PREVIEW_TOKEN=$(openssl rand -hex 24)
LIVE_TOKEN=$(openssl rand -hex 24)
printf 'MAINTENANCE_TOKEN=%s\n' "$PREVIEW_TOKEN" > .dev.vars.preview
printf 'MAINTENANCE_TOKEN=%s\n' "$LIVE_TOKEN" > .dev.vars.live
cat .gitignore
Confirme que .dev.vars* y .env* están excluidos. No muestre ni confirme archivos de secretos. Wrangler carga .dev.vars.preview para --env preview y el archivo independiente de live para --env live; un archivo .dev.vars específico del entorno reemplaza al genérico. Estos archivos no cargan secretos automáticamente en Cloudflare. Consulte secretos locales e implementados.
Reemplace el controlador. El heredoc entre comillas conserva literalmente el código JavaScript. Si falta el secreto configurado, se devuelve 503; si falta la credencial de la solicitud o es incorrecta, se devuelve 401. Compare la cabecera Authorization en el servidor antes de devolver una respuesta correcta. Solo se registran un nombre de evento fijo, el entorno público y un estado numérico. La operación aceptada es una simulación sin efectos secundarios almacenados.
cat > src/index.js <<'JS'
export default {
async fetch(request, env) {
const path = new URL(request.url).pathname;
if (path === '/health' && request.method === 'GET') {
return Response.json({status: 'ok', environment: env.ENVIRONMENT, queue: env.QUEUE_LABEL});
}
if (path !== '/maintenance') return Response.json({error: 'not_found'}, {status: 404});
if (request.method !== 'POST') {
return Response.json({error: 'method_not_allowed'}, {status: 405, headers: {Allow: 'POST'}});
}
// Fail closed if this environment has no configured secret.
if (!env.MAINTENANCE_TOKEN) {
return Response.json({error: 'maintenance_unconfigured'}, {status: 503});
}
const authorized = request.headers.get('Authorization') === `Bearer ${env.MAINTENANCE_TOKEN}`;
const status = authorized ? 200 : 401;
console.log(JSON.stringify({event: 'maintenance', environment: env.ENVIRONMENT, status}));
if (!authorized) return Response.json({error: 'unauthorized'}, {status});
return Response.json({operation: 'dry-run', environment: env.ENVIRONMENT});
}
};
JS
npx wrangler dev --env preview --port 8080 > preview.log 2>&1 &
npx wrangler dev --env live --port 8081 --inspector-port 9230 > live.log 2>&1 &
cat preview.log
cat live.log
Cuando ambos servidores indiquen que están listos, pruebe el límite de autorización. -X POST selecciona el método y -H proporciona la cabecera bearer. No utilice la salida detallada de curl con credenciales reales.
curl -i -X POST http://127.0.0.1:8080/maintenance
curl -i -X POST http://127.0.0.1:8080/maintenance -H "Authorization: Bearer incorrect-token"
curl -i -X POST http://127.0.0.1:8080/maintenance -H "Authorization: Bearer $LIVE_TOKEN"
curl -i -X POST http://127.0.0.1:8080/maintenance -H "Authorization: Bearer $PREVIEW_TOKEN"
curl -i -X POST http://127.0.0.1:8081/maintenance -H "Authorization: Bearer $LIVE_TOKEN"
curl -i http://127.0.0.1:8080/health
curl -i http://127.0.0.1:8081/health
Las tres primeras solicitudes devuelven 401 unauthorized, incluida la solicitud con el token válido del otro entorno. Las dos siguientes devuelven 200 con operation: dry-run y su entorno correspondiente. La ruta de estado sigue siendo pública. Utilice la verificación para comprobar el aislamiento de los tokens en ambas direcciones, los métodos, la configuración pública y la ausencia de valores de tokens en los registros locales.
Implementar cada entorno y cargar su secreto
En este paso, autorizará esta máquina virtual nueva, implementará cada entorno identificado por nombre y cargará explícitamente su secreto. Detenga primero los procesos locales; utilice sus números reales obtenidos con jobs.
jobs
kill %1 %2
npx wrangler login --device --browser=false --scopes account:read user:read workers_scripts:write workers_tail:read
Utilice el enlace y el código actual que se muestran en su navegador con la sesión iniciada. Revise los permisos de Wrangler y el acceso en segundo plano requerido, seleccione únicamente su cuenta de aprendizaje y autorice el acceso como se explicó en el laboratorio de conexión. Espere a que el comando termine en el terminal.
npx wrangler whoami --json
Confirme loggedIn: true, así como el nombre y el ID de la cuenta. Sustituya YOUR_ACCOUNT_ID más abajo por ese ID real; conserve el nombre original del recurso.
cat > wrangler.jsonc <<CONFIG
{
"name": "$WORKER_NAME",
"main": "src/index.js",
"compatibility_date": "2026-09-14",
"account_id": "YOUR_ACCOUNT_ID",
"workers_dev": true,
"preview_urls": false,
"env": {
"preview": {"vars": {"ENVIRONMENT": "preview", "QUEUE_LABEL": "sandbox"}},
"live": {"vars": {"ENVIRONMENT": "live", "QUEUE_LABEL": "primary"}}
}
}
CONFIG
Incluya siempre --env en este proyecto. De lo contrario, Wrangler se dirige al entorno superior sin nombre, que no forma parte del plan de implementación de este laboratorio.
npx wrangler deploy --env preview
npx wrangler deploy --env live
Copie la dirección exacta de workers.dev que aparece en la salida de cada implementación. Reutilice el subdominio existente de la cuenta de aprendizaje. Los usuarios que lo utilicen por primera vez deben seguir la indicación de Wrangler sobre el subdominio disponible, sin cambiar un subdominio existente.
PREVIEW_URL="https://YOUR_BASE-preview.YOUR_SUBDOMAIN.workers.dev"
LIVE_URL="https://YOUR_BASE-live.YOUR_SUBDOMAIN.workers.dev"
curl -i -X POST "$PREVIEW_URL/maintenance"
curl -i -X POST "$LIVE_URL/maintenance"
Ambos devuelven 503 maintenance_unconfigured: los archivos de secretos locales no se cargaron mediante una implementación normal. La ruta de estado es independiente de la autorización de mantenimiento.
Utilice el comando masivo estándar para cargar el archivo dotenv en el entorno correspondiente. Aunque solo haya un secreto, puede utilizar esta operación basada en archivos; su salida identifica el nombre del secreto, no su valor. Una actualización de secreto crea e implementa una versión inmediatamente.
npx wrangler secret bulk .dev.vars.preview --env preview
npx wrangler secret bulk .dev.vars.live --env live
npx wrangler secret list --env preview
npx wrangler secret list --env live
Cada lista debe contener MAINTENANCE_TOKEN con el tipo secret_text. Compare los valores públicos y el comportamiento de autorización:
curl -i "$PREVIEW_URL/health"
curl -i "$LIVE_URL/health"
curl -i -X POST "$PREVIEW_URL/maintenance"
curl -i -X POST "$PREVIEW_URL/maintenance" -H "Authorization: Bearer $LIVE_TOKEN"
curl -i -X POST "$PREVIEW_URL/maintenance" -H "Authorization: Bearer $PREVIEW_TOKEN"
curl -i -X POST "$LIVE_URL/maintenance" -H "Authorization: Bearer $LIVE_TOKEN"
La ruta de estado conserva preview/sandbox y live/primary. Las credenciales ausentes o de otro entorno devuelven 401; los tokens correspondientes devuelven 200. Espere a que se propague inicialmente el nombre de host antes de volver a intentar las conexiones fallidas. En la misma cuenta de Dashboard, abra Compute → Workers & Pages. Localice los dos Workers que terminan en -preview y -live, y compare sus nombres completos y sus URL con la salida de la implementación. En este ejemplo, cada entorno de Wrangler identificado por nombre tiene su propio Worker implementado; no cree otra aplicación en el Dashboard.

Abra su Worker -preview y seleccione Settings. En Runtime variables and secrets (la sección Variables and secrets), compare las columnas Type, Name y Value. ENVIRONMENT debe ser preview y QUEUE_LABEL debe ser sandbox. MAINTENANCE_TOKEN debe tener el tipo Secret, con Value encrypted en lugar de un valor legible.

Vuelva a Workers & Pages, abra su Worker -live e inspeccione la misma sección. Sus valores públicos deben ser live y primary, mientras que su secreto cargado de forma independiente utiliza el mismo nombre de vinculación. Compruebe el nombre del Worker en la ruta de navegación superior antes de comparar la tabla.

El sufijo del nombre aleatorio y el subdominio de estas imágenes son valores de ejemplo. La visualización cifrada confirma la presencia y el tipo de la vinculación del secreto, pero no que los dos entornos tengan valores de secreto diferentes; las comprobaciones HTTP de coincidencia y de cruce de entornos anteriores demuestran ese comportamiento. Mantenga este punto de control en modo de solo lectura: no edite variables ni revele, sustituya o copie credenciales en el Dashboard. Utilice la verificación: comprueba la propiedad real, los tipos de vinculación implementados y el comportamiento público de ambos entornos.
Inspeccionar los registros de la aplicación sin exponer secretos
En este paso, inspeccionará una solicitud rechazada y otra aceptada en el entorno preview implementado. Los registros de la aplicación deben explicar el resultado sin copiar credenciales ni cabeceras de solicitud.
Inicie un flujo de registros con el comando tail enseñado anteriormente. La salida con formato legible muestra los mensajes de la aplicación; guárdela para inspeccionar la prueba acotada después de detener el flujo.
npx wrangler tail --env preview --format pretty > preview-tail.log 2>&1 &
cat preview-tail.log
Espere a que el flujo indique que está conectado; vuelva a ejecutar cat mientras se conecta. Después, envíe solicitudes sintéticas nuevas:
curl -i -X POST "$PREVIEW_URL/maintenance" -H "Authorization: Bearer incorrect-token"
curl -i -X POST "$PREVIEW_URL/maintenance" -H "Authorization: Bearer $PREVIEW_TOKEN"
Utilice grep para mostrar únicamente las líneas que contienen el nombre fijo del evento de la aplicación:
grep 'maintenance' preview-tail.log
Espere eventos con los estados 401 y 200. Su entorno público es preview. Ningún mensaje debe contener el valor de un token. La entrega de eventos puede retrasarse con respecto a la respuesta HTTP; vuelva a ejecutar grep durante un máximo de un minuto. Si falta un evento, inspeccione el console.log correspondiente en el código fuente.
jobs
kill %1
Detenga el trabajo real de tail cuando estén presentes ambos eventos; el ejemplo supone que es el trabajo 1. Utilice la verificación para comprobar el registro capturado y volver a comprobar de forma independiente los contratos de autorización remotos. Esto solo prueba solicitudes sintéticas y no demuestra la seguridad de futuros cambios arbitrarios en los registros.
Eliminar las implementaciones de ambos entornos
En este paso, eliminará ambos Workers de entorno desechables mientras aún está autorizado. Confirme el nombre base y la cuenta de aprendizaje en la configuración:
cat wrangler.jsonc
Elimine únicamente las implementaciones preview y live de este laboratorio. En cada solicitud de confirmación, compruebe el nombre exacto <base>-preview o <base>-live y pulse la única tecla y.
npx wrangler delete --env preview
npx wrangler delete --env live
Al eliminar estos Workers también se eliminan sus vinculaciones de secretos asociadas. A continuación, Wrangler 4.131.1 puede mostrar el error de autenticación de Workers Sites KV heredado documentado anteriormente. No amplíe los permisos ni interprete ese error como una prueba de eliminación. Actualice Workers & Pages y utilice la verificación: un inventario autorizado correcto debe mostrar que ambos nombres están ausentes. Un error de autenticación o de red no permite sacar conclusiones. Conserve los Workers no relacionados, su cuenta de aprendizaje y su subdominio existente.
Eliminar los secretos locales y desconectarse
En este paso, eliminará las copias locales de los secretos de este laboratorio después de verificar la limpieza en la nube y, a continuación, desconectará la máquina virtual. rm elimina únicamente los dos archivos indicados a continuación, y unset elimina las dos variables temporales del shell.
rm .dev.vars.preview .dev.vars.live
unset PREVIEW_TOKEN LIVE_TOKEN
npx wrangler logout
npx wrangler whoami --json
Espere ver explícitamente "loggedIn": false; el código de salida distinto de cero del comando sin autenticar es esperado cuando aparece ese resultado estructurado. Utilice la verificación y, después, finalice la máquina virtual. La sesión iniciada en el navegador es independiente y puede permanecer disponible para el laboratorio siguiente. Ni cerrar la sesión ni finalizar la máquina virtual sustituye la eliminación previa de los recursos en la nube.
Resumen
Separó la configuración pública mediante entornos de Wrangler, cargó secretos locales específicos de cada entorno, implementó vinculaciones de secretos cifradas y comprobó credenciales coincidentes, ausentes y de otros entornos. La ruta pública de estado conservó la identidad de su entorno, mientras que el servidor protegió una ruta de mantenimiento en modo de simulación. Inspeccionó registros de aplicación acotados sin imprimir tokens y, después, verificó la eliminación antes de borrar las credenciales locales y cerrar la sesión.
La misma disciplina de configuración le ayudará más adelante en este curso a diagnosticar desviaciones de configuración entre entornos de vista previa.

