お知らせ:

当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

AppSailサービスの設定

AppSailサービスをコンソールにデプロイする前に、以下のファイルとコードをプロジェクトディレクトリに追加する必要があります:

  • プロジェクトのルートディレクトリにserverという名前のフォルダを作成し、その中に以下のファイルを作成します:
    • index.js: このファイルは、コンパイル済みのReactファイルを提供するプロキシサーバーとして機能します。
  • scriptsという名前のフォルダを作成し、以下のファイルを追加します:
    • filesHelper.js: このファイルは、serverおよびphoto-store-appディレクトリからAppSailのビルドパスにファイルをコピーするために使用されます。
  • プロジェクトのルートディレクトリにbuildという名前のフォルダを作成します。このフォルダにはクライアントのコンパイル済みReactファイルが含まれます。アプリケーションを起動するためのビルドパスとしてこのフォルダを指定する必要があります。buildディレクトリ内に以下のフォルダを作成します。
    • server
    • photo-store-app

アプリケーションのディレクトリは以下のように表示されるはずです: catalyst_tutorials_photostore_stratus_second_dir_struct

次に、PhotoStoreApp/server/ディレクトリに移動し、以下の手順を実行します:

  1. ターミナルから以下のCLIコマンドを実行します:
copy
$
npm init

catalyst_tutorials_photostore_stratus_npm_start_appsail_npm_init

  1. HTTPリクエストとレスポンスを処理するためにExpressパッケージをインストールする以下のコマンドを実行します。
copy
$
npm install express --save

catalyst_tutorials_photostore_stratus_express_install
これにより、PhotoStoreApp/serverディレクトリにnode_modulesフォルダも作成されます。

  1. PhotoStoreApp/server/ディレクトリにあるindex.jsファイルに以下のコードを追加します。
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

Note: Catalystが設定したポートをリッスンするために、環境変数「X_ZOHO_CATALYST_LISTEN_PORT」を使用する必要があります。
  1. 次に、PhotoStoreApp/scriptsディレクトリにあるscriptsフォルダに移動し、以下のコマンドを実行します:
copy
$
npm init

デフォルト値を入力してください。このコマンドによりpackage.jsonファイルが作成されます。 catalyst_tutorials_photostore_stratus_npm_start_appsail_scripts_npminit

  1. scriptsフォルダで以下のコマンドを実行して、必要なパッケージをインストールします:
copy
$
npm install path util fs

catalyst_tutorials_photostore_stratus_npm_start_appsail_scripts_npm_packs
このコマンドにより、以下のパッケージがインストールされます:

  • path: このパッケージは、ファイルおよびディレクトリパスを処理するために使用されます。
  • util: このパッケージは、promisifyinheritsなどのユーティリティを使用するために必要です。
  • fs: このパッケージは、ファイルシステム操作を実装するために必要です。
  1. 以下のコードをコピーして、PhotoStoreApp/scriptsディレクトリにあるfilesHelper.jsファイルに貼り付けます。
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

次に、プロジェクトディレクトリPhotoStoreApp/app-config.jsonにあるapp-config.jsonファイルに移動し、以下のコードを貼り付けます。

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
Note: app-config.jsonファイルに以下のキーと値のペアを含める必要があります:
  • catalyst_authキーの値をtrueに設定して、AppSailサービスでCatalyst Authenticationを有効にする必要があります。

  • 認証プロセス後の適切なリダイレクトを確保するために、login_redirectキーの値をindex.htmlに設定する必要があります。

Test and Deploy the AppSail Service

次に、プロジェクトのルートディレクトリに移動します。これまでに完了したすべての手順がエラーなしであることを確認するために、以下のCatalyst CLIコマンドを使用してCLIからアプリケーションを提供します:

copy
$
catalyst serve

catalyst_tutorials_photostore_stratus_pipelines_serve_cli_1
このコマンドにより、アプリケーションがlocalhostで提供されます。コンポーネントのローカルエンドポイントURLが表示されます。 catalyst_tutorials_photostore_stratus_catalyst_serve_init_2

アプリケーションにエラーがなければ、AppSailサービスが正常にコンパイルされ、通常localhost:3001で提供されます。

Info: クライアントまたはファンクションのホームページやサブページにアクセスするたびに、CLIがアクセスされたURLとHTTPリクエストメソッドのライブログを表示します。

アプリケーションがエラーなく動作していることを確認したら、以下のCatalyst CLIコマンドを使用してCatalystコンソールにアプリケーションをデプロイできます:

copy
$
catalyst deploy

catalyst_tutorials_photostore_stratus_catalyst_deploy

アプリケーションがCatalystコンソールにデプロイされます。

Catalyst ServerlessセクションにあるAppSailコンポーネントに移動して、コンソールでAppSailサービスにアクセスできます。 catalyst_tutorials_photostore_stratus_pipelines_icons
対象のサービスをクリックすると、AppSailサービスの詳細を確認できます。 catalyst_tutorials_photostore_stratus_catalyst_appsail_service_url_first_dep
AppSailサービスがアプリケーション用に設定されました。

Enable Bucket CORS

AppSailサービスがCatalystコンソールにデプロイされると、アプリケーションURLが利用可能になります。バケットとAppServiceのドメインが異なるため、AppSailサービスとバケット間のシームレスなやり取りを認証し許可するために、Cross-Origin Resource Sharing(CORS)ポリシーを有効にする必要があります。

Bucket CORSを有効にするには:

  1. Stratusにあるバケットに移動します。 catalyst_tutorials-photostore-app-stratus-cors-start

  2. ConfigurationsタブにあるBucket CORSセクションに移動し、Add Domainをクリックします。 catalyst_tutorials-photostore-app-stratus-cors-config-domain

  3. ドロップダウンで提供されているすべてのRequest Methodsを選択し、前のステップで生成されたAppSailサービスのURLを貼り付けます。 catalyst_tutorials-photostore-app-stratus-cors-domain-adding

  4. Addをクリックすると、AppSailサービスのCORSが有効になり、セキュアなアクセスが確保されます。 catalyst_tutorials-photostore-app-stratus-cors-domain-added

Setup GitHub

アプリケーションがCatalystコンソールにデプロイされたので、アプリケーションファイルがGitHubアカウントにプッシュされていることを確認する必要があります。 catalyst_tutorials_photostore_stratus_github_first_deploy

Note: 今後、アプリケーションをデプロイし、GitHubプロジェクトとCatalystコンソールを同期するためにPipelinesサービスを実装します。

最終更新日 2026-03-05 11:43:24 +0530 IST