Skip to content

Commit 2155c9d

Browse files
committed
Fix docker to work with custom server
1 parent f21b843 commit 2155c9d

File tree

3 files changed

+56
-26
lines changed

3 files changed

+56
-26
lines changed

src/BenchmarksApps/TechEmpower/nextjs/Dockerfile

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,11 @@ ENV NEXT_TELEMETRY_DISABLED 1
4242
RUN addgroup --system --gid 1001 nodejs
4343
RUN adduser --system --uid 1001 nextjs
4444

45-
COPY --from=builder /app/public ./public
46-
47-
# Automatically leverage output traces to reduce image size
48-
# https://nextjs.org/docs/advanced-features/output-file-tracing
49-
COPY --from=builder --chown=nextjs:nodejs /app/dist ./dist
45+
# Copy files required to run the app
46+
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
47+
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
5048
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
49+
COPY --from=builder --chown=nextjs:nodejs /app/dist/server.js ./cluster.js
5150

5251
USER nextjs
5352

@@ -56,4 +55,4 @@ EXPOSE 3000
5655
ENV PORT 3000
5756
ENV DB_HOST postgres_te
5857

59-
CMD ["node", "dist/server.js"]
58+
CMD ["node", "cluster.js"]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/** @type {import('next').NextConfig} */
22
module.exports = {
3+
output: "standalone",
34
reactStrictMode: true,
45
}
Lines changed: 50 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,71 @@
11
import cluster from 'node:cluster';
22
import process from 'node:process';
33
import os from 'node:os';
4+
import fs from 'node:fs';
45
import { createServer } from 'http';
56
import { parse } from 'url';
6-
import path from 'path';
7-
import next from 'next';
87

9-
//console.log("Running custom server.js");
10-
11-
const numCPUs = os.cpus().length;
12-
const port = parseInt(process.env.PORT || '3000', 10)
138
const dev = process.env.NODE_ENV !== 'production'
14-
const app = next({ dev })
15-
const handle = app.getRequestHandler()
169

17-
if (!dev && cluster.isPrimary) {
18-
console.log(`Primary ${process.pid} is running`);
19-
20-
// Fork workers
21-
for (let i = 0; i < numCPUs; i++) {
22-
cluster.fork();
10+
// Make sure commands gracefully respect termination signals (e.g. from Docker)
11+
// Allow the graceful termination to be manually configurable
12+
if (!process.env.NEXT_MANUAL_SIG_HANDLE) {
13+
process.on('SIGTERM', () => process.exit(0))
14+
process.on('SIGINT', () => process.exit(0))
15+
}
16+
17+
if (!dev) {
18+
const servers = ['./.next/standalone/server.js', './server.js'];
19+
let server = '';
20+
21+
for (var i = 0; i < servers.length; i++) {
22+
if (fs.existsSync(servers[i])) {
23+
server = fs.realpathSync(servers[i]);
24+
break;
25+
}
2326
}
2427

25-
cluster.on('exit', (worker, code, signal) => {
26-
console.log(`worker ${worker.process.pid} stopped`, { code, signal });
27-
});
28+
if (server === '') {
29+
console.error('Could not find server.js');
30+
process.exit(-1);
31+
}
32+
33+
//console.log(`server.js found at: ${server}`);
34+
35+
if (cluster.isPrimary) {
36+
console.log(`Primary ${process.pid} is running`);
37+
38+
const numCPUs = os.cpus().length;
39+
40+
// Fork workers
41+
for (let i = 0; i < numCPUs; i++) {
42+
cluster.fork();
43+
}
44+
45+
cluster.on('exit', (worker, code, signal) => {
46+
console.log(`worker ${worker.process.pid} stopped`, { code, signal });
47+
});
48+
} else {
49+
require(server);
50+
}
2851
} else {
52+
console.log('Development mode');
53+
54+
const next = require('next');
55+
const app = next({ dev });
56+
const handle = app.getRequestHandler();
57+
const port = parseInt(process.env.PORT || '3000', 10);
58+
2959
app.prepare().then(() => {
3060
createServer((req, res) => {
3161
const parsedUrl = parse(req.url!, true)
3262
handle(req, res, parsedUrl)
33-
}).listen(port)
63+
}).listen(port);
3464

3565
console.log(
3666
`> Server listening at http://localhost:${port} as ${
3767
dev ? 'development' : process.env.NODE_ENV
3868
}`
39-
)
40-
})
69+
);
70+
});
4171
}

0 commit comments

Comments
 (0)