diff --git a/.docker/selfhost/schema.json b/.docker/selfhost/schema.json index 7c25d6184..a4e9b718b 100644 --- a/.docker/selfhost/schema.json +++ b/.docker/selfhost/schema.json @@ -595,6 +595,11 @@ "description": "Multiple hosts the server will accept requests from.\n@default []", "default": [] }, + "listenAddr": { + "type": "string", + "description": "The address to listen on (e.g., 0.0.0.0 for IPv4, :: for IPv6).\n@default \"0.0.0.0\"\n@environment `LISTEN_ADDR`", + "default": "0.0.0.0" + }, "port": { "type": "number", "description": "Which port the server will listen on.\n@default 3010\n@environment `AFFINE_SERVER_PORT`", diff --git a/packages/backend/server/src/core/config/config.ts b/packages/backend/server/src/core/config/config.ts index 166e408d7..6dd8ade8e 100644 --- a/packages/backend/server/src/core/config/config.ts +++ b/packages/backend/server/src/core/config/config.ts @@ -13,6 +13,7 @@ declare global { https: boolean; host: string; hosts: ConfigItem; + listenAddr: string; port: number; path: string; name?: string; @@ -58,6 +59,11 @@ Default to be \`[server.protocol]://[server.host][:server.port]\` if not specifi default: [], shape: z.array(z.string()), }, + listenAddr: { + desc: 'The address to listen on (e.g., 0.0.0.0 for IPv4, :: for IPv6).', + default: '0.0.0.0', + env: 'LISTEN_ADDR', + }, port: { desc: 'Which port the server will listen on.', default: 3010, diff --git a/packages/backend/server/src/server.ts b/packages/backend/server/src/server.ts index a130dd9f8..558be7881 100644 --- a/packages/backend/server/src/server.ts +++ b/packages/backend/server/src/server.ts @@ -75,11 +75,14 @@ export async function run() { } const url = app.get(URLHelper); - const listeningHost = '0.0.0.0'; - await app.listen(config.server.port, listeningHost); + await app.listen(config.server.port, config.server.listenAddr); + + const formattedAddr = config.server.listenAddr.includes(':') + ? `[${config.server.listenAddr}]` + : config.server.listenAddr; logger.log(`AFFiNE Server is running in [${env.DEPLOYMENT_TYPE}] mode`); - logger.log(`Listening on http://${listeningHost}:${config.server.port}`); + logger.log(`Listening on http://${formattedAddr}:${config.server.port}`); logger.log(`And the public server should be recognized as ${url.baseUrl}`); } diff --git a/packages/frontend/admin/src/config.json b/packages/frontend/admin/src/config.json index 4288088c6..9496db797 100644 --- a/packages/frontend/admin/src/config.json +++ b/packages/frontend/admin/src/config.json @@ -216,6 +216,11 @@ "type": "Array", "desc": "Multiple hosts the server will accept requests from." }, + "listenAddr": { + "type": "String", + "desc": "The address to listen on (e.g., 0.0.0.0 for IPv4, :: for IPv6).", + "env": "LISTEN_ADDR" + }, "port": { "type": "Number", "desc": "Which port the server will listen on.",