Aviso:

Para brindarle información de soporte completa de manera más rápida, el contenido de esta página ha sido traducido al español mediante traducción automática. Para consultar la información de soporte más precisa, consulte la versión en inglés de este contenido.

Configurar el servicio AppSail

Antes de desplegar su servicio AppSail en la consola, necesita agregar los siguientes archivos y código al directorio de su proyecto:

  • Cree una carpeta llamada server en el directorio raíz de su proyecto y cree los siguientes archivos en ella:
    • index.js: Este archivo actuará como el servidor proxy para servir sus archivos React compilados.
  • Cree una carpeta llamada scripts y agregue los siguientes archivos:
    • filesHelper.js: Este archivo se usará para copiar los archivos de los directorios server y photo-store-app a la ruta de compilación de AppSail.
  • Cree una carpeta llamada build en el directorio raíz de su proyecto. Esta carpeta contendrá los archivos React compilados de su cliente. Debe apuntar esta carpeta como su ruta de compilación para iniciar su aplicación. Cree las siguientes carpetas en el directorio build.
    • server
    • photo-store-app

El directorio de la aplicación debería verse ahora de la siguiente manera: catalyst_tutorials_photostore_stratus_second_dir_struct

A continuación, navegue al directorio PhotoStoreApp/server/ y realice los siguientes pasos:

  1. Ejecute el siguiente comando de la CLI desde su terminal:
copy
$
npm init

catalyst_tutorials_photostore_stratus_npm_start_appsail_npm_init

  1. Ejecute el siguiente comando para instalar el paquete Express para manejar solicitudes y respuestas HTTP.
copy
$
npm install express --save

catalyst_tutorials_photostore_stratus_express_install
Esto también creará una carpeta node_modules en el directorio PhotoStoreApp/server.

  1. Agregue el siguiente código a su archivo index.js presente en el directorio PhotoStoreApp/server/.
index.js
copy
'use strict';
const express = require('express');
const path = require('path');
const app = express();
const appDir = path.join(__dirname, '../photo-store-app');
const port = process.env.X_ZOHO_CATALYST_LISTEN_PORT || 9000;
app.get('/', function (req, res) {
	res.sendFile(path.join(appDir));
});
app.use(express.static(appDir));
app.listen(port, () => {
	console.log(`Example app listening on port ${port}`);
});

View more

catalyst_tutorials_photostore_stratus_express_install

Nota: Necesita usar la variable de entorno 'X_ZOHO_CATALYST_LISTEN_PORT' para escuchar en el puerto configurado por Catalyst.
  1. A continuación, navegue a la carpeta scripts presente en el directorio PhotoStoreApp/scripts y ejecute el siguiente comando:
copy
$
npm init

Asegúrese de ingresar los valores predeterminados, y este comando creará un archivo package.json. catalyst_tutorials_photostore_stratus_npm_start_appsail_scripts_npminit

  1. Ejecute el siguiente comando en su carpeta scripts para instalar los paquetes requeridos:
copy
$
npm install path util fs

catalyst_tutorials_photostore_stratus_npm_start_appsail_scripts_npm_packs
Este comando instalará los siguientes paquetes:

  • path: Este paquete se usará para manejar rutas de archivos y directorios.
  • util: Este paquete es necesario para usar utilidades como promisify, inherits, etc.
  • fs: Este paquete es necesario para implementar operaciones del sistema de archivos.
  1. Copie el siguiente código y péguelo en el archivo filesHelper.js presente en el directorio PhotoStoreApp/scripts.
filesHelper.js
copy
const Path = require('path');
const { promisify } = require('util');
const Fs = require('fs');
const readdir = promisify(Fs.readdir);
const stat = promisify(Fs.stat);
const copyFile = promisify(Fs.copyFile);
const mkdir = promisify(Fs.mkdir);
const unlink = promisify(Fs.unlink);
const rmdir = promisify(Fs.rmdir);
if (process.argv.length < 4) {
	console.error('Usage: node copyAndDelete.js [-c|-d] <sourcePath> <destinationPath>');
	process.exit(1);
}
const operation = process.argv[2];
if (operation !== '-c' && operation !== '-d') {
	console.error('Invalid operation. Use -c for copy or -d for delete.');
	process.exit(1);
}
if (operation === '-c') {
	const sourcePath = Path.resolve(process.argv[3]);
	const destinationPath = Path.resolve(process.argv[4]);
	copyFolders(sourcePath, destinationPath)
		.then(() => {
			console.log('Copy completed successfully.');
		})
		.catch((err) => {
			console.error(`Error: ${err}`);
		});
} else if (operation === '-d') {
	const sourcePath = Path.resolve(process.argv[3]);
	deleteFolder(sourcePath)
		.then(() => {
			console.log('Delete completed successfully.');
		})
		.catch((err) => {
			console.error(`Error: ${err}`);
		});
}
async function copyFolders(source, destination) {
	try {
		await mkdir(destination, { recursive: true });
		const files = await readdir(source);
		for (const file of files) {
			const sourceFilePath = Path.join(source, file);
			const destFilePath = Path.join(destination, file);
			const fileStat = await stat(sourceFilePath);
			if (fileStat.isDirectory()) {
				await copyFolders(sourceFilePath, destFilePath);
			} else {
				await copyFile(sourceFilePath, destFilePath);
			}
		}
	} catch (err) {
		throw err;
	}
}
async function deleteFolder(destinationPath) {
	try {
		const files = await readdir(destinationPath);
		for (const file of files) {
			const filePath = Path.join(destinationPath, file);
			const fileStat = await stat(filePath);
			if (fileStat.isDirectory()) {
				await deleteFolder(filePath);
			} else {
				await unlink(filePath);
			}
		}
		await rmdir(destinationPath);
	} catch (err) {
		throw err;
	}
}

View more

Ahora, navegue al archivo app-config.json presente en el directorio del proyecto PhotoStoreApp/app-config.json y pegue el siguiente código.

app-config.json
copy
{
  "command": "node ./server/index.js",
  "build_path": "./build",
  "stack": "node20",
  "env_variables": {},
  "memory": 256,
  "scripts": {
    "preserve": "cd photo-store-app && npm run build && cd .. && cd server && npm install && cd .. && cd scripts && npm install && cd .. && node ./scripts/filesHelper.js -c ./server/ ./build/server/ && node ./scripts/filesHelper.js -c ./photo-store-app/build/ ./build/photo-store-app/",
    "postserve": "node ./scripts/filesHelper.js -d ./build/server && node ./scripts/filesHelper.js -d ./build/photo-store-app",
    "predeploy": "cd photo-store-app && npm run build && cd .. && node ./scripts/filesHelper.js -c ./server/ ./build/server/ && node ./scripts/filesHelper.js -c ./photo-store-app/build/ ./build/photo-store-app/",
    "postdeploy": "node ./scripts/filesHelper.js -d ./build/server && node ./scripts/filesHelper.js -d ./build/photo-store-app"
  },
  "raw": {},
  "catalyst_auth": true,
  "login_redirect": "/index.html"
}
View more
Nota: Necesita incluir los siguientes pares clave-valor en el archivo app-config.json:
  • El valor de la clave catalyst_auth debe establecerse como true, para habilitar Catalyst Authentication para el servicio AppSail.

  • Necesita establecer el valor de la clave login_redirect como index.html para asegurar la redirección correcta después del proceso de autenticación.

Probar y desplegar el servicio AppSail

A continuación, navegue al directorio raíz de su proyecto. Para verificar que todos los pasos completados hasta ahora estén libres de errores, vamos a servir la aplicación desde la CLI usando el siguiente comando de la CLI de Catalyst:

copy
$
catalyst serve

catalyst_tutorials_photostore_stratus_pipelines_serve_cli_1
Este comando servirá la aplicación en su localhost. Se mostrarán las URLs de los endpoints locales de los componentes. catalyst_tutorials_photostore_stratus_catalyst_serve_init_2

Si la aplicación está libre de errores, el servicio AppSail se compilará y servirá exitosamente, típicamente en localhost:3001.

Info: Cada vez que acceda a la página principal o a cualquiera de las subpáginas de su cliente o función, la CLI mostrará un registro en vivo de la URL accedida, junto con el método de solicitud HTTP.

Una vez que se asegure de que la aplicación se ejecuta sin errores, puede desplegar la aplicación en la consola de Catalyst usando el siguiente comando de la CLI de Catalyst:

copy
$
catalyst deploy

catalyst_tutorials_photostore_stratus_catalyst_deploy

La aplicación ahora estará desplegada en la consola de Catalyst.

Puede acceder al servicio AppSail en la consola navegando al componente AppSail presente en la sección de Catalyst Serverless. catalyst_tutorials_photostore_stratus_pipelines_icons
Puede encontrar más detalles sobre el servicio AppSail haciendo clic en el servicio requerido. catalyst_tutorials_photostore_stratus_catalyst_appsail_service_url_first_dep
El servicio AppSail ha sido configurado para su aplicación.

Habilitar Bucket CORS

Una vez que el servicio AppSail esté desplegado en la consola de Catalyst, tendremos la URL de la aplicación. Dado que los dominios del bucket y del AppService son diferentes, necesitamos habilitar la política de Cross-Origin Resource Sharing (CORS) para autenticar y permitir una interacción fluida entre el servicio AppSail y el Bucket.

Para habilitar Bucket CORS:

  1. Navegue a su Bucket presente en Stratus. catalyst_tutorials-photostore-app-stratus-cors-start

  2. Navegue a la sección Bucket CORS presente en la pestaña Configurations y haga clic en Add Domain. catalyst_tutorials-photostore-app-stratus-cors-config-domain

  3. Seleccione todos los Request Methods proporcionados en el menú desplegable y pegue la URL del servicio AppSail generada en el paso anterior. catalyst_tutorials-photostore-app-stratus-cors-domain-adding

  4. Haga clic en Add, y CORS estará habilitado para el servicio AppSail, asegurando un acceso seguro. catalyst_tutorials-photostore-app-stratus-cors-domain-added

Configurar GitHub

Con la aplicación desplegada en la consola de Catalyst, necesita asegurarse de haber subido los archivos de la aplicación a su cuenta de GitHub. catalyst_tutorials_photostore_stratus_github_first_deploy

Nota: En adelante, vamos a implementar el servicio Pipelines para desplegar la aplicación y sincronizar el proyecto de GitHub con la consola de Catalyst.

Última actualización 2026-03-20 21:51:56 +0530 IST