Failed to start signaling.service - Nextcloud Talk signaling server

Support intro

Sorry to hear you’re facing problems :slightly_frowning_face:

help.nextcloud.com is for home/non-enterprise users. If you’re running a business, paid support can be accessed via portal.nextcloud.com where we can ensure your business keeps running smoothly.

In order to help you as quickly as possible, before clicking Create Topic please provide as much of the below as you can. Feel free to use a pastebin service for logs, otherwise either indent short log examples with four spaces:

example

Or for longer, use three backticks above and below the code snippet:

longer
example
here

Some or all of the below information will be requested if it isn’t supplied; for fastest response please provide as much as you can :heart:

Some useful links to gather information about your Nextcloud Talk installation:
Information about Signaling server: /index.php/index.php/settings/admin/talk#signaling_server
Information about TURN server: /index.php/settings/admin/talk#turn_server
Information about STUN server: /index.php/settings/admin/talk#stun_server

Nextcloud version (eg, 24.0.1): 32.0.3
Talk Server version (eg, 14.0.2): 22.0.7
Custom Signaling server configured: yes
Custom TURN server configured: yes
Custom STUN server configured: yes

In case the web version of Nextcloud Talk is involved:
Operating system (eg, Windows/Ubuntu/…): Ubuntu
Browser name and version (eg, Chrome v101): Waterfox 6.6.7

The issue you are facing: signaling.service does not start and I don’t understand how to troubleshoot the error.

Is this the first time you’ve seen this error? (Y/N): Y

Steps to replicate it:

  1. Followed this guide to install Nextcloud How to Install and Configure Nextcloud on Ubuntu 24.04 - Linux Genie

  2. Followed this guide to enable SSL Installation on Linux — Nextcloud latest Administration Manual latest documentation and Certbot Instructions and Certificates for localhost - Let's Encrypt

  3. Then this guide to install High Performance Backend stuff: https://najigram.com/2024/01/setup-signaling-server-high-performance-backend-for-nextcloud-talk/

    1. Set up Go (2.0.4)
    2. Set up NATS server from instructions
    3. Set up Janus from instructions
    4. Set up coTURN from instructions
    5. Set up Signaling server from instructions
      1. cURL returns a 404 error (I use the below example trying to access the URL from a local network computer connecting to the servers local ip address, but the exact same error message shows up when I use my DDNS domain, which looks something like myname.tplinkdns.com.
        1. curl -vvv https://local-ip-address/standalone-signaling/api/v2/welcome
          *   Trying local-ip-address:443...
          * Connected to local-ip-address (local-ip-address) port 443
          * ALPN: curl offers h2,http/1.1
          * TLSv1.3 (OUT), TLS handshake, Client hello (1):
          *  CAfile: /etc/ssl/certs/localcons.crt
          *  CApath: /etc/ssl/certs
          * TLSv1.3 (IN), TLS handshake, Server hello (2):
          * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
          * TLSv1.3 (IN), TLS handshake, Certificate (11):
          * TLSv1.3 (IN), TLS handshake, CERT verify (15):
          * TLSv1.3 (IN), TLS handshake, Finished (20):
          * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
          * TLSv1.3 (OUT), TLS handshake, Finished (20):
          * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / X25519 / RSASSA-PSS
          * ALPN: server accepted http/1.1
          * Server certificate:
          *  subject: CN=local-ip-address
          *  start date: Jan  3 10:26:31 2026 GMT
          *  expire date: Feb  2 10:26:31 2026 GMT
          *  subjectAltName: host "local-ip-address" matched cert's IP address!
          *  issuer: CN=local-ip-address
          *  SSL certificate verify ok.
          *   Certificate level 0: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
          * using HTTP/1.x
          > GET /standalone-signaling/api/v2/welcome HTTP/1.1
          > Host: local-ip-address
          > User-Agent: curl/8.5.0
          > Accept: */*
          > 
          * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
          * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
          * old SSL session ID is stale, removing
          < HTTP/1.1 404 Not Found
          < Date: Sun, 11 Jan 2026 08:26:08 GMT
          < Server: Apache/2.4.58 (Ubuntu)
          < X-Content-Type-Options: nosniff
          < X-Frame-Options: SAMEORIGIN
          < X-Permitted-Cross-Domain-Policies: none
          < X-Robots-Tag: noindex, nofollow
          < Referrer-Policy: no-referrer
          < Upgrade: h2,h2c
          < Connection: Upgrade
          < Set-Cookie: ocsyf3dow3gi=84g19gcmpisnmfvi3vjb9jev51; path=/; secure; HttpOnly; SameSite=Lax
          < Set-Cookie: oc_sessionPassphrase=unWeNG6I%2Bw5yI8Tn1Y7hbwVe4prKAFdlWBc1XgdWshpQVVAQD0%2FVPYassgF%2BIs6FCvC%2FDKaAF2i8f8Z8bijZjA41Ba80SfCJCHWF0jgiS%2FdnmIj1S6C4pYPRiSxHZrqc; path=/; secure; HttpOnly; SameSite=Lax
          < Set-Cookie: ocsyf3dow3gi=84g19gcmpisnmfvi3vjb9jev51; path=/; secure; HttpOnly; SameSite=Lax
          < Content-Security-Policy: default-src 'none';base-uri 'none';manifest-src 'self';script-src 'nonce-+c2MQ5ySpxDj6Gvq04aas9mzYzLrbm6O3mXb0yMBvKw=' blob: 'wasm-unsafe-eval';script-src-elem 'strict-dynamic' 'nonce-+c2MQ5ySpxDj6Gvq04aas9mzYzLrbm6O3mXb0yMBvKw=' blob: 'wasm-unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob: https://*.tile.openstreetmap.org;font-src 'self' data:;connect-src 'self' blob: stun.nextcloud.com:443;media-src 'self' blob:;frame-src 'self' nc:;child-src blob: 'self';frame-ancestors 'self';worker-src blob: 'self';form-action 'self'
          < Set-Cookie: __Host-nc_sameSiteCookielax=true; path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax
          < Set-Cookie: __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=strict
          < Set-Cookie: ocsyf3dow3gi=84g19gcmpisnmfvi3vjb9jev51; path=/; secure; HttpOnly; SameSite=Lax
          < X-Request-Id: BvBtF7sNbpKDWR1YlAZX
          < Cache-Control: no-cache, no-store, must-revalidate
          < Feature-Policy: autoplay 'self';camera 'self';fullscreen 'self';geolocation 'none';microphone 'self';payment 'none'
          < Content-Length: 4948
          < Content-Type: text/html; charset=UTF-8
          < 
          <!DOCTYPE html>
          <html class="ng-csp" data-placeholder-focus="false" lang="en" data-locale="en" translate="no" >
          	<head
           data-requesttoken="">
          		<meta charset="utf-8">
          		<title>
          			Nextcloud		</title>
          		<meta name="csp-nonce" nonce="+c2MQ5ySpxDj6Gvq04aas9mzYzLrbm6O3mXb0yMBvKw=">
          		<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
          				<meta name="apple-itunes-app" content="app-id=1125420102">
          				<meta name="theme-color" content="#00679e">
          		<link rel="icon" href="/core/img/favicon.ico">
          		<link rel="apple-touch-icon" href="/core/img/favicon-touch.png">
          		<link rel="mask-icon" sizes="any" href="/core/img/favicon-mask.svg" color="#00679e">
          		<link rel="manifest" href="/core/img/manifest.json" crossorigin="use-credentials">
          		<link rel="stylesheet" href="/core/css/server.css?v=9e0555a3-0">
          <link rel="stylesheet" href="/apps/theming/css/default.css?v=beb4a7bc-0">
          <link rel="stylesheet" href="/core/css/guest.css?v=9e0555a3-0">
          		<script nonce="+c2MQ5ySpxDj6Gvq04aas9mzYzLrbm6O3mXb0yMBvKw=" defer src="/dist/core-common.js?v=9e0555a3-0"></script>
          <script nonce="+c2MQ5ySpxDj6Gvq04aas9mzYzLrbm6O3mXb0yMBvKw=" defer src="/dist/core-main.js?v=9e0555a3-0"></script>
          <script nonce="+c2MQ5ySpxDj6Gvq04aas9mzYzLrbm6O3mXb0yMBvKw=" defer src="/apps/theming/js/theming.js?v=9e0555a3-0"></script>
          <script nonce="+c2MQ5ySpxDj6Gvq04aas9mzYzLrbm6O3mXb0yMBvKw=" defer src="/dist/files_sharing-main.js?v=9e0555a3-0"></script>
          		<link rel="stylesheet" media="" href="/index.php/apps/theming/theme/default.css?plain=1&amp;v=817e1db3" class="theme"/><link rel="stylesheet" media="(prefers-color-scheme: light)" href="/index.php/apps/theming/theme/light.css?plain=1&amp;v=817e1db3" class="theme"/><link rel="stylesheet" media="(prefers-color-scheme: dark)" href="/index.php/apps/theming/theme/dark.css?plain=1&amp;v=817e1db3" class="theme"/><link rel="stylesheet" media="(prefers-contrast: more)" href="/index.php/apps/theming/theme/light-highcontrast.css?plain=1&amp;v=817e1db3" class="theme"/><link rel="stylesheet" media="(prefers-color-scheme: dark) and (prefers-contrast: more)" href="/index.php/apps/theming/theme/dark-highcontrast.css?plain=1&amp;v=817e1db3" class="theme"/><link rel="stylesheet" media="" href="/index.php/apps/theming/theme/light.css?plain=0&amp;v=817e1db3" class="theme"/><link rel="stylesheet" media="" href="/index.php/apps/theming/theme/dark.css?plain=0&amp;v=817e1db3" class="theme"/><link rel="stylesheet" media="" href="/index.php/apps/theming/theme/light-highcontrast.css?plain=0&amp;v=817e1db3" class="theme"/><link rel="stylesheet" media="" href="/index.php/apps/theming/theme/dark-highcontrast.css?plain=0&amp;v=817e1db3" class="theme"/><link rel="stylesheet" media="" href="/index.php/apps/theming/theme/opendyslexic.css?plain=0&amp;v=817e1db3" class="theme"/><meta name="color-scheme" content="light dark"/>	</head>
          	<body id="body-login"  data-themes="">
          		<noscript>
          	<div id="nojavascript">
          		<div>
          			This application requires JavaScript for correct operation. Please <a href="https://www.enable-javascript.com/" target="_blank" rel="noreferrer noopener">enable JavaScript</a> and reload the page.		</div>
          	</div>
          </noscript>
          		<div id="initial-state-container" style="display: none;">
          			<input type="hidden" id="initial-state-richdocuments-startPresentation" value="ZmFsc2U=">
          			<input type="hidden" id="initial-state-core-versionHash" value="IjllMDU1NWEzIg==">
          			<input type="hidden" id="initial-state-theming-data" value="eyJuYW1lIjoiTmV4dGNsb3VkIiwic2xvZ2FuIjoiYSBzYWZlIGhvbWUgZm9yIGFsbCB5b3VyIGRhdGEiLCJ1cmwiOiJodHRwczpcL1wvbmV4dGNsb3VkLmNvbSIsImltcHJpbnRVcmwiOiIiLCJwcml2YWN5VXJsIjoiIiwicHJpbWFyeUNvbG9yIjoiIzAwNjc5ZSIsImJhY2tncm91bmRDb2xvciI6IiMwMDY3OWUiLCJkZWZhdWx0UHJpbWFyeUNvbG9yIjoiIzAwNjc5ZSIsImRlZmF1bHRCYWNrZ3JvdW5kQ29sb3IiOiIjMDA2NzllIiwiaW52ZXJ0ZWQiOmZhbHNlLCJjYWNoZUJ1c3RlciI6IjgxN2UxZGIzIiwiZW5hYmxlZFRoZW1lcyI6W10sImNvbG9yIjoiIzAwNjc5ZSIsIiI6ImNvbG9yIGlzIGRlcHJlY2F0ZWQgc2luY2UgTmV4dGNsb3VkIDI5LCB1c2UgcHJpbWFyeUNvbG9yIGluc3RlYWQifQ==">
          			<input type="hidden" id="initial-state-comments-maxAutoCompleteResults" value="MTA=">
          	</div>
          		<div class="wrapper">
          			<div class="v-align">
          									<header>
          						<div id="header" class="header-guest">
          							<div class="logo"></div>
          						</div>
          					</header>
          								<div>
          					<h1 class="hidden-visually">
          						Nextcloud					</h1>
          						<div class="body-login-container update">
          		<div class="icon-big icon-search"></div>
          		<h2>Page not found</h2>
          		<p class="infogroup">The page could not be found on the server or you may not be allowed to view it.</p>
          		<p><a class="button primary" href="/index.php">
          			Back to Nextcloud		</a></p>
          	</div>
          				</div>
          			</div>
          		</div>
          				<footer class="guest-box ">
          			<p class="info">
          				<a href="https://nextcloud.com" target="_blank" rel="noreferrer noopener" class="entity-name">Nextcloud</a> – a safe home for all your data			</p>
          		</footer>
          	</body>
          </html>
          * Connection #0 to host local-ip-address left intact
          
          
      2. From what I think is because signaling.service fails
        1. × signaling.service - Nextcloud Talk signaling server
          Loaded: loaded (/etc/systemd/system/signaling.service; enabled; preset: enabled)
          Active: failed (Result: exit-code) since Sun 2026-01-11 09:44:11 CET; 1min 38s ago
          Duration: 42ms
          Process: 1550 ExecStart=/usr/bin/signaling --config /etc/signaling/server.conf (code=exited, status=203/EXEC)
          Main PID: 1550 (code=exited, status=203/EXEC)
          CPU: 38ms
          
        2. Jan 11 09:44:11 lenoserv systemd[1]: signaling.service: Scheduled restart job, restart counter is at 5.
          Jan 11 09:44:11 lenoserv systemd[1]: signaling.service: Start request repeated too quickly.
          Jan 11 09:44:11 lenoserv systemd[1]: signaling.service: Failed with result ‘exit-code’.
          Jan 11 09:44:11 lenoserv systemd[1]: Failed to start signaling.service - Nextcloud Talk signaling server.
          

The output of your Nextcloud log in Admin > Logging or errors in nextcloud.log in /var/www/:

Nothing from today when I am setting it up.

The output of your Apache/nginx/system log in /var/log/apache2/error.log:

[Sun Jan 11 09:26:06.395877 2026] [mpm_prefork:notice] [pid 7933] AH00170: caught SIGWINCH, shutting down gracefully
[Sun Jan 11 09:26:06.499130 2026] [ssl:warn] [pid 8352] AH01909: localhost:443:0 server certificate does NOT include an ID which matches the server name
[Sun Jan 11 09:26:06.514574 2026] [ssl:warn] [pid 8353] AH01909: localhost:443:0 server certificate does NOT include an ID which matches the server name
[Sun Jan 11 09:26:06.515992 2026] [http2:warn] [pid 8353] AH10034: The mpm module (prefork.c) is not supported by mod_http2. The mpm determines how things are processed in your server. HTTP/2 has more demands in this regard and the currently selected mpm will just not do. This is an advisory warning. Your server will continue to work, but the HTTP/2 protocol will be inactive.
[Sun Jan 11 09:26:06.549675 2026] [mpm_prefork:notice] [pid 8353] AH00163: Apache/2.4.58 (Ubuntu) OpenSSL/3.0.13 configured -- resuming normal operations
[Sun Jan 11 09:26:06.549719 2026] [core:notice] [pid 8353] AH00094: Command line: '/usr/sbin/apache2'
[Sun Jan 11 09:26:31.535687 2026] [mpm_prefork:notice] [pid 8353] AH00170: caught SIGWINCH, shutting down gracefully
[Sun Jan 11 09:26:31.616306 2026] [ssl:warn] [pid 8387] AH01909: localhost:443:0 server certificate does NOT include an ID which matches the server name
[Sun Jan 11 09:26:31.632159 2026] [ssl:warn] [pid 8388] AH01909: localhost:443:0 server certificate does NOT include an ID which matches the server name
[Sun Jan 11 09:26:31.633514 2026] [http2:warn] [pid 8388] AH10034: The mpm module (prefork.c) is not supported by mod_http2. The mpm determines how things are processed in your server. HTTP/2 has more demands in this regard and the currently selected mpm will just not do. This is an advisory warning. Your server will continue to work, but the HTTP/2 protocol will be inactive.
[Sun Jan 11 09:26:31.666689 2026] [mpm_prefork:notice] [pid 8388] AH00163: Apache/2.4.58 (Ubuntu) OpenSSL/3.0.13 configured -- resuming normal operations
[Sun Jan 11 09:26:31.666725 2026] [core:notice] [pid 8388] AH00094: Command line: '/usr/sbin/apache2'
[Sun Jan 11 09:43:52.605064 2026] [mpm_prefork:notice] [pid 8388] AH00170: caught SIGWINCH, shutting down gracefully
[Sun Jan 11 09:44:08.578840 2026] [ssl:warn] [pid 879] AH01909: localhost:443:0 server certificate does NOT include an ID which matches the server name
[Sun Jan 11 09:44:08.616832 2026] [ssl:warn] [pid 958] AH01909: localhost:443:0 server certificate does NOT include an ID which matches the server name
[Sun Jan 11 09:44:08.619611 2026] [http2:warn] [pid 958] AH10034: The mpm module (prefork.c) is not supported by mod_http2. The mpm determines how things are processed in your server. HTTP/2 has more demands in this regard and the currently selected mpm will just not do. This is an advisory warning. Your server will continue to work, but the HTTP/2 protocol will be inactive.
[Sun Jan 11 09:44:08.916843 2026] [mpm_prefork:notice] [pid 958] AH00163: Apache/2.4.58 (Ubuntu) OpenSSL/3.0.13 configured -- resuming normal operations
[Sun Jan 11 09:44:08.917615 2026] [core:notice] [pid 958] AH00094: Command line: '/usr/sbin/apache2'
[Sun Jan 11 10:03:44.406103 2026] [access_compat:error] [pid 1016] [client 192.168.0.116:54656] AH01797: client denied by server configuration: /var/www/html/nextcloud/data/.ncdata
[Sun Jan 11 10:03:44.642867 2026] [access_compat:error] [pid 1863] [client 31.208.121.234:43654] AH01797: client denied by server configuration: /var/www/html/nextcloud/data/.ncdata
[Sun Jan 11 10:03:44.764714 2026] [access_compat:error] [pid 1016] [client 192.168.0.116:54656] AH01797: client denied by server configuration: /var/www/html/nextcloud/data/.ncdata

Your browser log if relevant (javascript console log, network log, etc.):

?

There are two parts I suspect being a problem, according to the HPB guide, it uses a subdomain for the talk, turn, and stun servers. I don’t have that, I have a DDNS where I (maybe obviously) only have access to myname.tplinkdns.com. So I use this domain for all settings facing the internet.

Another problem I had during install was that I was executing following commands:

cd /opt
wget https://github.com/strukturag/nextcloud-spreed-signaling/archive/refs/tags/v2.0.4.zip
unzip v2.0.4.zip
rm v2.0.4.zip
cd nextcloud-spreed-signaling-2.0.4
make build

# cp bin/signaling /usr/bin/
# gave me an error, adding -r worked 

cp -r bin/signaling /usr/bin/
mkdir /etc/signaling
cp server.conf.in /etc/signaling/server.conf
...

Then I did something outside of the guide that might cause issues when configuring the server.conf for signaling. In the [https] section there were two lines pointing to nginx certificates, since I run Apache I commented them out (the guide didn’t say anything about doing that, and the guide is written for Apache users).

So, I need help with understanding how to troubleshoot -or of course if someone knows how to fix- the signaling.service/404 problem, and once solved what the settings in Nextcloud HPB should be for the turn, stun, and HPB server in my case. Thank you! And apologies if I have forgotten to provide some info that’s needed or not formatted according to custom.

Hey @from you added the snap tag! this has nothing to do with the snap so the tag was removed.

you’re not expecting us to follow those to see where you went wrong right? :rofl:

you may want to follow official instructions instead:

or community instructions:

1 Like

Hey there! Sorry about the tag, thanks for removing it.

Haha no, not expecting you to look at all that, but figured I’d put the instructions there in case I missed something perhaps more obvious and that it was in that case traceable back to something I did in the setup. I am not used to giving information in places like this, usually I figure it out myself or give up.

I tried using the official instructions but come up against instructions like:

A correctly setup reverse proxy for your Nextcloud installation

    See our documentation on reverse proxy.

But there are no instructions on the documentation on reverse proxy that actually tells me how to install it and set it up.

With the community instructions I understand the first bulletpoint of the Configuration part to add Trusted Proxies, as I’ve done so in previous instructions, but then I get to:

Proxy Headers: Nextcloud uses X-Forwarded-For header by default to retrieve client IP address behind the proxy →
real-ip

    You can configure other headers if needed e,g, X-RealIp

Overwrite Parameters: If Nextcloud doesn’t automatically detect hostname, protocol, or webroot path,

    use overwritehost, overwriteprotocol, and overwritewebroot options in config.php
    use environment variables for containers (All-inOne and community microservice)

and have just no idea what to do with this information, and then the instructions end. Perhaps there are more resources you can point me to?

Hey @from you’ll find references to reverse proxy here: High Performance Backend for Talk on Nextcloud with Docker

Thanks again for pointing me to official instructions but I’ve tried to follow all I can find and run up against instructions I just don’t understand, like:

Prepare router/firewall & reverse proxy

    Expose TURN & STUN on port 3478 tcp/udp which must be internet facing in router/firewall (i.e your.domain.tld:3478)
        encryption is optional for TURN & STUN as it will be handled by encrypted Nextcloud
    Set reverse proxy host for signal domain to forward and encrypt HTTP & WSS (Websockets Support) for port 8181 to https://signal.yourdomain.tld

I’d need the instructions on how to do both of these things. (Although opening ports to expose to internet I can manage.. :slight_smile: )