Front End Hosting - Advanced provisions a Node.js application with the following environments:
Development (Dev)
Staging (Stage)
Production (Prod)
Click View <application name>.
New environments are provisioned with the default content page.
Configure the package.json file.
The package.json file must be located in the root folder of your project that contains the following commands. These are required to host a NodeJS site.
Build command configuration.
Set npm install && npm run build as the build command in the NodeJS Hosting build system to ensure a robust and efficient deployment process.
"scripts": {
...
"build": "npm install && next build",
"start": "next start",
},
Configure the start script in your package.json file in order to initiate the production server. Use the command that corresponds to your specific framework.
To serve production builds of frameworks like Angular, React, and Vue, Acquia recommends you to use either serve or http-server. These Node.js packages provide simple and efficient ways to host static files.
Install your preferred package using npm:
$ npm install serveor
$ npm install http-serverAfter you build the project (typically into a dist directory), start the production server with the following commands:
serve -s dist
http-server distYou can also include these commands in the start script of your package.json for easy deployment.
Autoscaling is vital to enhance the performance of your application and enable it to handle variable workloads. This feature dynamically adjusts the number of active instances of your environment based on its real-time performance metrics. The enablement process revolves around integrating the acquia-autoscaling javascript into your project that collects the necessary metrics.
To implement autoscaling in your application:
Add the acquia-autoscaling.js script to the root directory of your project.
The following code snippets show the content of the scripts:
// ES5/CommonJS syntax
// acquia-autoscaling.js
const { collectDefaultMetrics, Registry } = require("prom-client");
const http = require("http");
const net = require("net");
function startMetricsSvr() {
// Create a new registry to track default metrics
const register = new Registry();
// Enable the collection of default metrics
collectDefaultMetrics({ register });
// Set up an HTTP server to expose the metrics
const server = http.createServer(async (req, res) => {
if (req.url === "/metrics") {
try {
// Respond with metrics in Prometheus format
res.setHeader("Content-Type", register.contentType);
const metrics = await register.metrics();
res.end(metrics);
} catch (err) {
res.writeHead(500);
res.end(err.message);
}
} else {
res.writeHead(404);
res.end("Not Found");
}
});
const monitoringPort = 9100;
server.listen(monitoringPort, () => {
console.log(
`Acquia Node.js Monitoring server listening on port ${monitoringPort}`
);
});
// Prevent the Node.js process from exiting
process.stdin.resume();
}
const originalListen = net.Server.prototype.listen;
let injected = false;
net.Server.prototype.listen = function (...args) {
try {
const port =
typeof args[0] === "number"
? args[0]
: typeof args[0] === "string" && !isNaN(parseInt(args[0]))
? parseInt(args[0])
: args[0] && typeof args[0].port === "number"
? args[0].port
: args[0] &&
typeof args[0].port === "string" &&
!isNaN(parseInt(args[0].port))
? parseInt(args[0].port)
: null;
if (port === 3000 && !injected) {
injected = true;
setTimeout(startMetricsSvr, 1000);
}
} catch (err) {
console.error(err);
}
return originalListen.apply(this, args);
};For information about how to configure environment variables, visit Creating custom environment variables.
To use the latest environment variable values in your Node.js code, incorporate them during the Node.js build process. Build-time environment variables are injected during the build and remain fixed until redeployment. Runtime environment variables are read by the application at execution and update without redeployment.
When you trigger deployment, build is triggered implicitly.
Set the post deployment cloud actions to clear Varnish cache after you deploy the branch through the Cloud Platform user interface.
After the code deployment task for the deployed branch completes, the latest code changes are visible in the environment.
For information about how to access your subscription details, visit Viewing subscriptions.
To monitor instructions, visit Using Stack Metrics to monitor activity on your environments.
As part of the code build/deployment process, multiple commands run in the backend to produce a build artifact and deploy it to an environment. These include:
git commands to clone code from an application repository.npm run-build commands to produce the deployable bundle of an environment branch.The total build time is tracked as build minutes.
In Frontend Hosting – Advanced environments, the Kubernetes readiness probe uses the root path (/) to check application health. This probe periodically sends HTTP requests to the / endpoint to verify readiness.
If your site requires authentication, configure your authentication middleware to bypass checks for requests from kube-probe/1.31+ and curl on the / endpoint. Review the following information about these checks:
curl to the application / endpoint are part of the pre-deployment check. If this check fails, the deployment is marked as failed.Requests from kube-probe/1.31+ to the application / endpoint are part of the post-deployment check. If this check fails, Kubernetes readiness checks fail and the request traffic is not forwarded to the application.
Follow this guidance to ensure reliable health checks and stable application operation within the Acquia environment.
{
"scripts": {
"build": "npm install",
"start": "node index.js"
},
}
Edit the package.json file to add the NODE_OPTIONS='-r ./acquia-autoscaling.js' string before the original start command of your application:
{
"scripts": {
"start": "NODE_OPTIONS='-r ./acquia-autoscaling.js' node app.js",
"build": "npm install"
},
}
Run the following NPM command in your Node.js code repository on your local machine to install the prom-client dependency:
npm install prom-clientThis command adds the prom-client package to the dependencies of your application.
Verify the functionality of your application to ensure that metrics are being correctly exposed and autoscaling is operational.
After successful implementation and verification, your application can scale automatically to adapt to usage patterns and sustain optimal performance.
If this content did not answer your questions, try searching or contacting our support team for further assistance.
{
"scripts": {
"build": "npm install",
"start": "node index.js"
},
}
Edit the package.json file to add the NODE_OPTIONS='-r ./acquia-autoscaling.js' string before the original start command of your application:
{
"scripts": {
"start": "NODE_OPTIONS='-r ./acquia-autoscaling.js' node app.js",
"build": "npm install"
},
}
Run the following NPM command in your Node.js code repository on your local machine to install the prom-client dependency:
npm install prom-clientThis command adds the prom-client package to the dependencies of your application.
Verify the functionality of your application to ensure that metrics are being correctly exposed and autoscaling is operational.
After successful implementation and verification, your application can scale automatically to adapt to usage patterns and sustain optimal performance.
If this content did not answer your questions, try searching or contacting our support team for further assistance.