Allow configuring the listen host (#9924)

This commit is contained in:
ledlamp 2023-02-22 00:51:40 -08:00 committed by GitHub
parent f68e13d905
commit 3dfe3aa9a4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 15 additions and 9 deletions

View file

@ -30,6 +30,9 @@ url: https://example.tld/
# The port that your Misskey server should listen on. # The port that your Misskey server should listen on.
port: 3000 port: 3000
# The hostname or address to listen on (default: all)
#host: "127.0.0.1"
# ┌──────────────────────────┐ # ┌──────────────────────────┐
#───┘ PostgreSQL configuration └──────────────────────────────── #───┘ PostgreSQL configuration └────────────────────────────────

View file

@ -78,7 +78,7 @@ export async function masterMain() {
await spawnWorkers(config.clusterLimit); await spawnWorkers(config.clusterLimit);
} }
bootLogger.succ(`Now listening on port ${config.port} on ${config.url}`, null, true); bootLogger.succ(`Now listening on ${config.host ? `[${config.host}]:` : ''}${config.port} for ${config.url}`, null, true);
} }
function showEnvironment(): void { function showEnvironment(): void {

View file

@ -15,6 +15,7 @@ export type Source = {
feedback_url?: string; feedback_url?: string;
url: string; url: string;
port: number; port: number;
host: string;
disableHsts?: boolean; disableHsts?: boolean;
db: { db: {
host: string; host: string;
@ -125,6 +126,7 @@ export function loadConfig() {
config.url = url.origin; config.url = url.origin;
config.port = config.port ?? parseInt(process.env.PORT ?? '', 10); config.port = config.port ?? parseInt(process.env.PORT ?? '', 10);
config.host = config.host ?? process.env.HOST;
mixin.version = meta.version; mixin.version = meta.version;
mixin.host = url.host; mixin.host = url.host;

View file

@ -176,10 +176,10 @@ export class ServerService {
fastify.server.on('error', err => { fastify.server.on('error', err => {
switch ((err as any).code) { switch ((err as any).code) {
case 'EACCES': case 'EACCES':
this.logger.error(`You do not have permission to listen on port ${this.config.port}.`); this.logger.error(`You do not have permission to listen on port ${this.config.port}${this.config.host ? ` of host ${this.config.host}` : ''}`);
break; break;
case 'EADDRINUSE': case 'EADDRINUSE':
this.logger.error(`Port ${this.config.port} is already in use by another process.`); this.logger.error(`Port ${this.config.port}${this.config.host ? ` on ${this.config.host}` : ''} is already in use by another process.`);
break; break;
default: default:
this.logger.error(err); this.logger.error(err);
@ -194,6 +194,6 @@ export class ServerService {
} }
}); });
fastify.listen({ port: this.config.port, host: '0.0.0.0' }); fastify.listen({ port: this.config.port, host: this.config.host });
} }
} }

View file

@ -19,6 +19,7 @@ const _dirname = dirname(_filename);
const config = loadConfig(); const config = loadConfig();
export const port = config.port; export const port = config.port;
export const host = config.host || "localhost";
export const api = async (endpoint: string, params: any, me?: any) => { export const api = async (endpoint: string, params: any, me?: any) => {
endpoint = endpoint.replace(/^\//, ''); endpoint = endpoint.replace(/^\//, '');
@ -28,7 +29,7 @@ export const api = async (endpoint: string, params: any, me?: any) => {
} : {}; } : {};
try { try {
const res = await got<string>(`http://localhost:${port}/api/${endpoint}`, { const res = await got<string>(`http://${host}:${port}/api/${endpoint}`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -66,7 +67,7 @@ export const request = async (path: string, params: any, me?: any): Promise<{ bo
i: me.token, i: me.token,
} : {}; } : {};
const res = await fetch(`http://localhost:${port}/${path}`, { const res = await fetch(`http://${host}:${port}/${path}`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -123,7 +124,7 @@ export const uploadFile = async (user: any, _path?: string): Promise<any> => {
formData.append('file', fs.createReadStream(absPath)); formData.append('file', fs.createReadStream(absPath));
formData.append('force', 'true'); formData.append('force', 'true');
const res = await got<string>(`http://localhost:${port}/api/drive/files/create`, { const res = await got<string>(`http://${host}:${port}/api/drive/files/create`, {
method: 'POST', method: 'POST',
body: formData, body: formData,
retry: { retry: {
@ -160,7 +161,7 @@ export const uploadUrl = async (user: any, url: string) => {
export function connectStream(user: any, channel: string, listener: (message: Record<string, any>) => any, params?: any): Promise<WebSocket> { export function connectStream(user: any, channel: string, listener: (message: Record<string, any>) => any, params?: any): Promise<WebSocket> {
return new Promise((res, rej) => { return new Promise((res, rej) => {
const ws = new WebSocket(`ws://localhost:${port}/streaming?i=${user.token}`); const ws = new WebSocket(`ws://${host}:${port}/streaming?i=${user.token}`);
ws.on('open', () => { ws.on('open', () => {
ws.on('message', data => { ws.on('message', data => {
@ -222,7 +223,7 @@ export const waitFire = async (user: any, channel: string, trgr: () => any, cond
export const simpleGet = async (path: string, accept = '*/*'): Promise<{ status?: number, type?: string, location?: string }> => { export const simpleGet = async (path: string, accept = '*/*'): Promise<{ status?: number, type?: string, location?: string }> => {
// node-fetchだと3xxを取れない // node-fetchだと3xxを取れない
return await new Promise((resolve, reject) => { return await new Promise((resolve, reject) => {
const req = http.request(`http://localhost:${port}${path}`, { const req = http.request(`http://${host}:${port}${path}`, {
headers: { headers: {
Accept: accept, Accept: accept,
}, },