A comprehensive guide to self host revolt #15

Closed
opened 2026-02-16 12:51:03 -05:00 by yindo · 76 comments
Owner

Originally created by @Midou36O on GitHub (Dec 27, 2021).

Hello,
i tried self hosting revolt through docker, sure enough the guide provided on readme worked. The problem is when creating an account on localhost i always get an error, furthermore, trying to proxying through nginx (using my own knowledge, which isn't really this advanced) made things worse as i didn't even knew what to proxy and what not.
Would it be possible to write an actual complete guide to self host revolt? This defenitely would help people decentralize the service!

Originally created by @Midou36O on GitHub (Dec 27, 2021). Hello, i tried self hosting revolt through docker, sure enough the guide provided on readme worked. The problem is when creating an account on localhost i always get an error, furthermore, trying to proxying through nginx (using my own knowledge, which isn't really this advanced) made things worse as i didn't even knew what to proxy and what not. Would it be possible to write an actual complete guide to self host revolt? This defenitely would help people decentralize the service!
yindo added the documentationgood first issuehelp wanted labels 2026-02-16 12:51:03 -05:00
yindo closed this issue 2026-02-16 12:51:03 -05:00
Author
Owner

@yllekz commented on GitHub (Jan 15, 2022):

I would love this as well. The current Docker setup does not work. Trying to create an account results in an unhelpful network error. Either the app needs to be fixed or the documentation needs to be updated.

@yllekz commented on GitHub (Jan 15, 2022): I would love this as well. The current Docker setup does not work. Trying to create an account results in an unhelpful network error. Either the app needs to be fixed or the documentation needs to be updated.
Author
Owner

@maxwelljens commented on GitHub (Feb 4, 2022):

Unable to deploy it either. Stuck at nondescript "Network Error" when trying to log in remotely. Locally works just fine, however.

@maxwelljens commented on GitHub (Feb 4, 2022): Unable to deploy it either. Stuck at nondescript "Network Error" when trying to log in remotely. Locally works just fine, however.
Author
Owner

@sigaloid commented on GitHub (Feb 4, 2022):

@maxwelljens : You need to edit the .env config file. Otherwise it defaults to Screenshot from 2022-02-04 14-56-32

Which resolves to localhost. When you're using it locally, of course it resolves to localhost which is the server; outside of that network, though, would load to their localhost which the server is not hosted at. I'm not quite sure why it can't use relative URL's but it does mention that the default config only works for localhost in the readme

@sigaloid commented on GitHub (Feb 4, 2022): @maxwelljens : You need to edit the .env config file. Otherwise it defaults to ![Screenshot from 2022-02-04 14-56-32](https://user-images.githubusercontent.com/69441971/152594896-ac5c5d7d-621e-4457-9263-67f0be4eb803.png) Which resolves to localhost. When you're using it locally, of course it resolves to localhost which is the server; outside of that network, though, would load to *their* localhost which the server is not hosted at. I'm not quite sure why it can't use relative URL's but it does mention that the default config only works for localhost in the readme
Author
Owner

@maxwelljens commented on GitHub (Feb 4, 2022):

@sigaloid Thanks for your reply.

I am aware of the .env file configuration. I changed every address accordingly, and port forwarded every relevant port. It doesn't work in spite of that.

@maxwelljens commented on GitHub (Feb 4, 2022): @sigaloid Thanks for your reply. I am aware of the `.env` file configuration. I changed every address accordingly, and port forwarded every relevant port. It doesn't work in spite of that.
Author
Owner

@sigaloid commented on GitHub (Feb 4, 2022):

Try pressing F12 when logging in. That will let you see which network address it's going to. If it's still "local.revolt.chat:8000" then it's an issue with the config not being loaded correctly somehow. Otherwise it could be a bug in your web proxy

@sigaloid commented on GitHub (Feb 4, 2022): Try pressing F12 when logging in. That will let you see which network address it's going to. If it's still "local.revolt.chat:8000" then it's an issue with the config not being loaded correctly somehow. Otherwise it could be a bug in your web proxy
Author
Owner

@sigaloid commented on GitHub (Feb 4, 2022):

Oops. I just tried deploying it and hit the same problem :p it seems my .env config is not being picked up in the docker-compose.

@sigaloid commented on GitHub (Feb 4, 2022): Oops. I just tried deploying it and hit the same problem :p it seems my .env config is not being picked up in the docker-compose.
Author
Owner

@maxwelljens commented on GitHub (Feb 4, 2022):

@sigaloid Interesting. Good to know I am not the only one with this problem. Do let everyone know in this issue if you find a solution or workaround. Thanks.

@maxwelljens commented on GitHub (Feb 4, 2022): @sigaloid Interesting. Good to know I am not the only one with this problem. Do let everyone know in this issue if you find a solution or workaround. Thanks.
Author
Owner

@sigaloid commented on GitHub (Feb 4, 2022):

Okay so. Basic setup, just cloned the repo, edited .env to have different URL's for the API, but it still sends requests to http://local.revolt.chat:8000/auth/account/create. This seems to me like a problem with the environment variables because there's no configuration changes that are actually going through to the Delta server.

Basically, changing the API server in the .env has zero effect on the resulting containers. Did this on a fresh install. Looking like a bug in the docker compose setup to me at this point, maybe the env variables in the docker-compose.yml are not being properly retrieved?

Or maybe the ones in revoltchat/delta/docker-compose.yml supercede it... That would make sense because the ones there are the ones being used.

Anyway I am yet to find a solution. Unfortunately this is blocking me from deploying this awesome software ;(

@sigaloid commented on GitHub (Feb 4, 2022): Okay so. Basic setup, just cloned the repo, edited .env to have different URL's for the API, but it still sends requests to http://local.revolt.chat:8000/auth/account/create. This seems to me like a problem with the environment variables because there's no configuration changes that are actually going through to the Delta server. Basically, changing the API server in the .env has zero effect on the resulting containers. Did this on a fresh install. Looking like a bug in the docker compose setup to me at this point, maybe the env variables in the docker-compose.yml are not being properly retrieved? Or maybe the ones in revoltchat/delta/docker-compose.yml supercede it... That would make sense because the ones there are the ones being used. Anyway I am yet to find a solution. Unfortunately this is blocking me from deploying this awesome software ;(
Author
Owner

@mirkoRainer commented on GitHub (Feb 4, 2022):

I just cloned the repo and am able to get a local version up and running just using docker compose up.
I did have to adjust some of the port binding for my host machine due to conflicts but that was obvious in the logs.
i.e. I changed 5000 to 42069 for the web app 5000:5000 became 42069:5000 and I can access Revolt using 127.0.0.1:42069 or local.revolt.chat:42069.

What do logs look like when you run docker compose up?

@mirkoRainer commented on GitHub (Feb 4, 2022): I just cloned the repo and am able to get a local version up and running just using `docker compose up`. I did have to adjust some of the port binding for my host machine due to conflicts but that was obvious in the logs. i.e. I changed 5000 to 42069 for the web app `5000:5000` became `42069:5000` and I can access Revolt using `127.0.0.1:42069` or `local.revolt.chat:42069`. What do logs look like when you run `docker compose up`?
Author
Owner

@sigaloid commented on GitHub (Feb 5, 2022):

For example, try changing REVOLT_APP_URL in the .env to some random domain and see if that's where the network requests go when you restart it. (Press F12 and try registering)

This is the scenario I had trouble with

@sigaloid commented on GitHub (Feb 5, 2022): For example, try changing REVOLT_APP_URL in the .env to some random domain and see if that's where the network requests go when you restart it. (Press F12 and try registering) This is the scenario I had trouble with
Author
Owner

@Razorback360 commented on GitHub (Feb 6, 2022):

@sigaloid Thanks for your reply.

I am aware of the .env file configuration. I changed every address accordingly, and port forwarded every relevant port. It doesn't work in spite of that.

Same issue over here, nothing I do is working. Tried adding URLs in the docker-compose.yml environment but to no avail

@Razorback360 commented on GitHub (Feb 6, 2022): > @sigaloid Thanks for your reply. > > I am aware of the `.env` file configuration. I changed every address accordingly, and port forwarded every relevant port. It doesn't work in spite of that. Same issue over here, nothing I do is working. Tried adding URLs in the docker-compose.yml environment but to no avail
Author
Owner

@sigaloid commented on GitHub (Feb 6, 2022):

https://asciinema.org/a/fqCutcwDYY2jK4mMcI6ewj1W8

Okay, so I re-pulled the docker container on my local PC rather than my VPS (sudo docker pull revoltchat/server:master) and did this to the .env file (even though it's gibberish). Oddly enough, when I attempted to register, it successfully sent it to the new domain I entered in the .env file. This means that I did succeed in making my config changes save.

I don't even know what I did differently (i did basically everything the same). And I still cannot make it work on the server.

I've been trying to fix this and running against a wall about this for days now. It's gotta be something really basic I'm overlooking.

@sigaloid commented on GitHub (Feb 6, 2022): https://asciinema.org/a/fqCutcwDYY2jK4mMcI6ewj1W8 Okay, so I re-pulled the docker container on my local PC rather than my VPS (`sudo docker pull revoltchat/server:master`) and did this to the .env file (even though it's gibberish). Oddly enough, when I attempted to register, it successfully sent it to the new domain I entered in the .env file. This means that _**I did succeed in making my config changes save**_. I don't even know what I did differently (i did basically everything the same). And I *still* cannot make it work on the server. I've been trying to fix this and running against a wall about this for days now. It's gotta be something really basic I'm overlooking.
Author
Owner

@sigaloid commented on GitHub (Feb 6, 2022):

Starting from a fresh Docker install, my Fedora box can follow the directuions and persist config changes, but my Debian box cannot. Side by side, completely brand new environment... What OS are you on, @Razorback360 @mirkoRainer @maxwelljens ?

@sigaloid commented on GitHub (Feb 6, 2022): Starting from a fresh Docker install, my Fedora box can follow the directuions and persist config changes, but my Debian box cannot. Side by side, completely brand new environment... What OS are you on, @Razorback360 @mirkoRainer @maxwelljens ?
Author
Owner

@maxwelljens commented on GitHub (Feb 6, 2022):

@sigaloid My server is on Fedora 34.

@maxwelljens commented on GitHub (Feb 6, 2022): @sigaloid My server is on Fedora 34.
Author
Owner

@mirkoRainer commented on GitHub (Feb 6, 2022):

MacOS Apple Silicone

Get Outlook for iOShttps://aka.ms/o0ukef


From: maxwelljens @.>
Sent: Sunday, February 6, 2022 5:00:19 PM
To: revoltchat/self-hosted @.
>
Cc: Mirko Rainer @.>; Mention @.>
Subject: Re: [revoltchat/self-hosted] A comprehensive guide to self host revolt (Issue #25)

@sigaloidhttps://github.com/sigaloid My server is on Fedora 34.


Reply to this email directly, view it on GitHubhttps://github.com/revoltchat/self-hosted/issues/25#issuecomment-1030923198, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AMTS6CBQWIJZU6JMPCP6HF3UZ3VPHANCNFSM5K2TFC4Q.
You are receiving this because you were mentioned.Message ID: @.***>

@mirkoRainer commented on GitHub (Feb 6, 2022): MacOS Apple Silicone Get Outlook for iOS<https://aka.ms/o0ukef> ________________________________ From: maxwelljens ***@***.***> Sent: Sunday, February 6, 2022 5:00:19 PM To: revoltchat/self-hosted ***@***.***> Cc: Mirko Rainer ***@***.***>; Mention ***@***.***> Subject: Re: [revoltchat/self-hosted] A comprehensive guide to self host revolt (Issue #25) @sigaloid<https://github.com/sigaloid> My server is on Fedora 34. — Reply to this email directly, view it on GitHub<https://github.com/revoltchat/self-hosted/issues/25#issuecomment-1030923198>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/AMTS6CBQWIJZU6JMPCP6HF3UZ3VPHANCNFSM5K2TFC4Q>. You are receiving this because you were mentioned.Message ID: ***@***.***>
Author
Owner

@Razorback360 commented on GitHub (Feb 6, 2022):

Starting from a fresh Docker install, my Fedora box can follow the directuions and persist config changes, but my Debian box cannot. Side by side, completely brand new environment... What OS are you on, @Razorback360 @mirkoRainer @maxwelljens ?

I'm on Ubuntu.

@Razorback360 commented on GitHub (Feb 6, 2022): > Starting from a fresh Docker install, my Fedora box can follow the directuions and persist config changes, but my Debian box cannot. Side by side, completely brand new environment... What OS are you on, @Razorback360 @mirkoRainer @maxwelljens ? I'm on Ubuntu.
Author
Owner

@Ikun886-cxk commented on GitHub (Feb 6, 2022):

https://asciinema.org/a/fqCutcwDYY2jK4mMcI6ewj1W8

Okay, so I re-pulled the docker container on my local PC rather than my VPS (sudo docker pull revoltchat/server:master) and did this to the .env file (even though it's gibberish). Oddly enough, when I attempted to register, it successfully sent it to the new domain I entered in the .env file. This means that I did succeed in making my config changes save.

I don't even know what I did differently (i did basically everything the same). And I still cannot make it work on the server.

I've been trying to fix this and running against a wall about this for days now. It's gotta be something really basic I'm overlooking.

I think you need to refresh the cache. I tried to open the website in the browser's traceless mode, and the problem was successfully solved.

@Ikun886-cxk commented on GitHub (Feb 6, 2022): > https://asciinema.org/a/fqCutcwDYY2jK4mMcI6ewj1W8 > > Okay, so I re-pulled the docker container on my local PC rather than my VPS (`sudo docker pull revoltchat/server:master`) and did this to the .env file (even though it's gibberish). Oddly enough, when I attempted to register, it successfully sent it to the new domain I entered in the .env file. This means that _**I did succeed in making my config changes save**_. > > I don't even know what I did differently (i did basically everything the same). And I _still_ cannot make it work on the server. > > I've been trying to fix this and running against a wall about this for days now. It's gotta be something really basic I'm overlooking. I think you need to refresh the cache. I tried to open the website in the browser's traceless mode, and the problem was successfully solved.
Author
Owner

@Ikun886-cxk commented on GitHub (Feb 6, 2022):

Here is an example of nginx.

map $http_host $revolt_upstream {
  example.com http://127.0.0.1:5000;
  api.example.com http://127.0.0.1:8000;
  ws.example.com http://127.0.0.1:9000;
  autumn.example.com http://127.0.0.1:3000;
  january.example.com http://127.0.0.1:7000;
  vortex.example.com http://127.0.0.1:8080;
}

server {
  listen 80;
  listen 443 ssl http2;
  server_name example.com *.example.com;

  # SSL 

  if ($http_upgrade) {
    # Here, the path is used to reverse the generation of ws. Just roll the keyboard to prevent conflicts with other services.
    rewrite ^(.*)$ /ws_78dd759593f041bc970fd7eef8b0c4af$1;
  }

  location / {
    proxy_pass $revolt_upstream;
    proxy_set_header Host $host;
  }

  location /ws_78dd759593f041bc970fd7eef8b0c4af/ {
    # Note that here is the trailing slash.
    proxy_pass $revolt_upstream/;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header Connection $http_connection;
    proxy_set_header Upgrade $http_upgrade;
    # Important, to prevent ws from sending data for a long time and causing timeout disconnection.
    proxy_read_timeout 24h;
  }
}
@Ikun886-cxk commented on GitHub (Feb 6, 2022): Here is an example of nginx. ```nginx map $http_host $revolt_upstream { example.com http://127.0.0.1:5000; api.example.com http://127.0.0.1:8000; ws.example.com http://127.0.0.1:9000; autumn.example.com http://127.0.0.1:3000; january.example.com http://127.0.0.1:7000; vortex.example.com http://127.0.0.1:8080; } server { listen 80; listen 443 ssl http2; server_name example.com *.example.com; # SSL if ($http_upgrade) { # Here, the path is used to reverse the generation of ws. Just roll the keyboard to prevent conflicts with other services. rewrite ^(.*)$ /ws_78dd759593f041bc970fd7eef8b0c4af$1; } location / { proxy_pass $revolt_upstream; proxy_set_header Host $host; } location /ws_78dd759593f041bc970fd7eef8b0c4af/ { # Note that here is the trailing slash. proxy_pass $revolt_upstream/; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header Connection $http_connection; proxy_set_header Upgrade $http_upgrade; # Important, to prevent ws from sending data for a long time and causing timeout disconnection. proxy_read_timeout 24h; } } ```
Author
Owner

@sigaloid commented on GitHub (Feb 7, 2022):

asciinema.org/a/fqCutcwDYY2jK4mMcI6ewj1W8
Okay, so I re-pulled the docker container on my local PC rather than my VPS (sudo docker pull revoltchat/server:master) and did this to the .env file (even though it's gibberish). Oddly enough, when I attempted to register, it successfully sent it to the new domain I entered in the .env file. This means that I did succeed in making my config changes save.
I don't even know what I did differently (i did basically everything the same). And I still cannot make it work on the server.
I've been trying to fix this and running against a wall about this for days now. It's gotta be something really basic I'm overlooking.

I think you need to refresh the cache. I tried to open the website in the browser's traceless mode, and the problem was successfully solved.

Wow. My goodness. Is this some sort of caching issue? I disabled cache, refreshed, rebooted, etc and nothing fixed the issue. Are these resources aggressively cached?

Regardless, the fix is to NOT START THE DOCKER CONTAINER until you've set up the env file. I started the docker container to make sure the images were downloaded, then I stopped it to configure it. Thank you so much @SurpriseLon that saved me from a few more days of confusion!!

@sigaloid commented on GitHub (Feb 7, 2022): > > [asciinema.org/a/fqCutcwDYY2jK4mMcI6ewj1W8](https://asciinema.org/a/fqCutcwDYY2jK4mMcI6ewj1W8) > > Okay, so I re-pulled the docker container on my local PC rather than my VPS (`sudo docker pull revoltchat/server:master`) and did this to the .env file (even though it's gibberish). Oddly enough, when I attempted to register, it successfully sent it to the new domain I entered in the .env file. This means that _**I did succeed in making my config changes save**_. > > I don't even know what I did differently (i did basically everything the same). And I _still_ cannot make it work on the server. > > I've been trying to fix this and running against a wall about this for days now. It's gotta be something really basic I'm overlooking. > > I think you need to refresh the cache. I tried to open the website in the browser's traceless mode, and the problem was successfully solved. Wow. My goodness. Is this some sort of caching issue? I disabled cache, refreshed, rebooted, etc and nothing fixed the issue. Are these resources aggressively cached? Regardless, the fix is to **_NOT START THE DOCKER CONTAINER_** until you've set up the env file. I started the docker container to make sure the images were downloaded, then I stopped it to configure it. Thank you so much @SurpriseLon that saved me from a few more days of confusion!!
Author
Owner

@Razorback360 commented on GitHub (Feb 7, 2022):

Regardless, the fix is to NOT START THE DOCKER CONTAINER until you've set up the env file. I started the docker container to make sure the images were downloaded, then I stopped it to configure it. Thank you so much @SurpriseLon that saved me from a few more days of confusion!!

Solution mentioned here does not work for me. I have completely deleted the docker compose, removed all containers and their data, configured the .env, then deployed the compose and yet it is still the same issue. I am running on Ubuntu 20.04.3 LTS

@Razorback360 commented on GitHub (Feb 7, 2022): > Regardless, the fix is to **_NOT START THE DOCKER CONTAINER_** until you've set up the env file. I started the docker container to make sure the images were downloaded, then I stopped it to configure it. Thank you so much @SurpriseLon that saved me from a few more days of confusion!! Solution mentioned here does not work for me. I have completely deleted the docker compose, removed all containers and their data, configured the .env, then deployed the compose and yet it is still the same issue. I am running on Ubuntu 20.04.3 LTS
Author
Owner

@sigaloid commented on GitHub (Feb 7, 2022):

A few things I can think of: Are you editing the .env.example? Make sure you cp .env.example .env and change the config in .env. Then, try in incognito mode or in a fresh browser - the javascript containing the server is heavily cached and the filename isn't dynamically changed based on its hash, so it will never re-request it. I even did F12 - disable cache and it didn't help. Only trying in incognito + Ctrl+F5'ing helped.

@sigaloid commented on GitHub (Feb 7, 2022): A few things I can think of: Are you editing the .env.example? Make sure you `cp .env.example .env` and change the config in .env. Then, try in incognito mode or in a fresh browser - the javascript containing the server is heavily cached and the filename isn't dynamically changed based on its hash, so it will never re-request it. I even did F12 - disable cache and it didn't help. Only trying in incognito + Ctrl+F5'ing helped.
Author
Owner

@Alauraa commented on GitHub (Feb 10, 2022):

Here is an example of nginx.

map $http_host $revolt_upstream {
  example.com http://127.0.0.1:5000;
  api.example.com http://127.0.0.1:8000;
  ws.example.com http://127.0.0.1:9000;
  autumn.example.com http://127.0.0.1:3000;
  january.example.com http://127.0.0.1:7000;
  vortex.example.com http://127.0.0.1:8080;
}

server {
  listen 80;
  listen 443 ssl http2;
  server_name example.com *.example.com;

  # SSL 

  if ($http_upgrade) {
    # Here, the path is used to reverse the generation of ws. Just roll the keyboard to prevent conflicts with other services.
    rewrite ^(.*)$ /ws_78dd759593f041bc970fd7eef8b0c4af$1;
  }

  location / {
    proxy_pass $revolt_upstream;
    proxy_set_header Host $host;
  }

  location /ws_78dd759593f041bc970fd7eef8b0c4af/ {
    # Note that here is the trailing slash.
    proxy_pass $revolt_upstream/;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header Connection $http_connection;
    proxy_set_header Upgrade $http_upgrade;
    # Important, to prevent ws from sending data for a long time and causing timeout disconnection.
    proxy_read_timeout 24h;
  }
}

On this nginx config, would i need to make all those domains? As well as, can i not just reverse proxy those domains to the ports that they are on?

@Alauraa commented on GitHub (Feb 10, 2022): > Here is an example of nginx. > > ```nginx > map $http_host $revolt_upstream { > example.com http://127.0.0.1:5000; > api.example.com http://127.0.0.1:8000; > ws.example.com http://127.0.0.1:9000; > autumn.example.com http://127.0.0.1:3000; > january.example.com http://127.0.0.1:7000; > vortex.example.com http://127.0.0.1:8080; > } > > server { > listen 80; > listen 443 ssl http2; > server_name example.com *.example.com; > > # SSL > > if ($http_upgrade) { > # Here, the path is used to reverse the generation of ws. Just roll the keyboard to prevent conflicts with other services. > rewrite ^(.*)$ /ws_78dd759593f041bc970fd7eef8b0c4af$1; > } > > location / { > proxy_pass $revolt_upstream; > proxy_set_header Host $host; > } > > location /ws_78dd759593f041bc970fd7eef8b0c4af/ { > # Note that here is the trailing slash. > proxy_pass $revolt_upstream/; > proxy_http_version 1.1; > proxy_set_header Host $host; > proxy_set_header Connection $http_connection; > proxy_set_header Upgrade $http_upgrade; > # Important, to prevent ws from sending data for a long time and causing timeout disconnection. > proxy_read_timeout 24h; > } > } > ``` On this nginx config, would i need to make all those domains? As well as, can i not just reverse proxy those domains to the ports that they are on?
Author
Owner

@Ikun886-cxk commented on GitHub (Feb 11, 2022):

Here is an example of nginx.

map $http_host $revolt_upstream {
  example.com http://127.0.0.1:5000;
  api.example.com http://127.0.0.1:8000;
  ws.example.com http://127.0.0.1:9000;
  autumn.example.com http://127.0.0.1:3000;
  january.example.com http://127.0.0.1:7000;
  vortex.example.com http://127.0.0.1:8080;
}

server {
  listen 80;
  listen 443 ssl http2;
  server_name example.com *.example.com;

  # SSL 

  if ($http_upgrade) {
    # Here, the path is used to reverse the generation of ws. Just roll the keyboard to prevent conflicts with other services.
    rewrite ^(.*)$ /ws_78dd759593f041bc970fd7eef8b0c4af$1;
  }

  location / {
    proxy_pass $revolt_upstream;
    proxy_set_header Host $host;
  }

  location /ws_78dd759593f041bc970fd7eef8b0c4af/ {
    # Note that here is the trailing slash.
    proxy_pass $revolt_upstream/;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header Connection $http_connection;
    proxy_set_header Upgrade $http_upgrade;
    # Important, to prevent ws from sending data for a long time and causing timeout disconnection.
    proxy_read_timeout 24h;
  }
}

On this nginx config, would i need to make all those domains? As well as, can i not just reverse proxy those domains to the ports that they are on?

Yes,you can

@Ikun886-cxk commented on GitHub (Feb 11, 2022): > > Here is an example of nginx. > > ```nginx > > map $http_host $revolt_upstream { > > example.com http://127.0.0.1:5000; > > api.example.com http://127.0.0.1:8000; > > ws.example.com http://127.0.0.1:9000; > > autumn.example.com http://127.0.0.1:3000; > > january.example.com http://127.0.0.1:7000; > > vortex.example.com http://127.0.0.1:8080; > > } > > > > server { > > listen 80; > > listen 443 ssl http2; > > server_name example.com *.example.com; > > > > # SSL > > > > if ($http_upgrade) { > > # Here, the path is used to reverse the generation of ws. Just roll the keyboard to prevent conflicts with other services. > > rewrite ^(.*)$ /ws_78dd759593f041bc970fd7eef8b0c4af$1; > > } > > > > location / { > > proxy_pass $revolt_upstream; > > proxy_set_header Host $host; > > } > > > > location /ws_78dd759593f041bc970fd7eef8b0c4af/ { > > # Note that here is the trailing slash. > > proxy_pass $revolt_upstream/; > > proxy_http_version 1.1; > > proxy_set_header Host $host; > > proxy_set_header Connection $http_connection; > > proxy_set_header Upgrade $http_upgrade; > > # Important, to prevent ws from sending data for a long time and causing timeout disconnection. > > proxy_read_timeout 24h; > > } > > } > > ``` > > On this nginx config, would i need to make all those domains? As well as, can i not just reverse proxy those domains to the ports that they are on? Yes,you can
Author
Owner

@Alauraa commented on GitHub (Feb 13, 2022):

Here is an example of nginx.

map $http_host $revolt_upstream {
  example.com http://127.0.0.1:5000;
  api.example.com http://127.0.0.1:8000;
  ws.example.com http://127.0.0.1:9000;
  autumn.example.com http://127.0.0.1:3000;
  january.example.com http://127.0.0.1:7000;
  vortex.example.com http://127.0.0.1:8080;
}

server {
  listen 80;
  listen 443 ssl http2;
  server_name example.com *.example.com;

  # SSL 

  if ($http_upgrade) {
    # Here, the path is used to reverse the generation of ws. Just roll the keyboard to prevent conflicts with other services.
    rewrite ^(.*)$ /ws_78dd759593f041bc970fd7eef8b0c4af$1;
  }

  location / {
    proxy_pass $revolt_upstream;
    proxy_set_header Host $host;
  }

  location /ws_78dd759593f041bc970fd7eef8b0c4af/ {
    # Note that here is the trailing slash.
    proxy_pass $revolt_upstream/;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header Connection $http_connection;
    proxy_set_header Upgrade $http_upgrade;
    # Important, to prevent ws from sending data for a long time and causing timeout disconnection.
    proxy_read_timeout 24h;
  }
}

On this nginx config, would i need to make all those domains? As well as, can i not just reverse proxy those domains to the ports that they are on?

Yes,you can

So this doesn't exactly answer my question, there was 2 in the sentence, just a yes doesn't help. Sorry for any confusion or etc.

@Alauraa commented on GitHub (Feb 13, 2022): > > > Here is an example of nginx. > > > ```nginx > > > map $http_host $revolt_upstream { > > > example.com http://127.0.0.1:5000; > > > api.example.com http://127.0.0.1:8000; > > > ws.example.com http://127.0.0.1:9000; > > > autumn.example.com http://127.0.0.1:3000; > > > january.example.com http://127.0.0.1:7000; > > > vortex.example.com http://127.0.0.1:8080; > > > } > > > > > > server { > > > listen 80; > > > listen 443 ssl http2; > > > server_name example.com *.example.com; > > > > > > # SSL > > > > > > if ($http_upgrade) { > > > # Here, the path is used to reverse the generation of ws. Just roll the keyboard to prevent conflicts with other services. > > > rewrite ^(.*)$ /ws_78dd759593f041bc970fd7eef8b0c4af$1; > > > } > > > > > > location / { > > > proxy_pass $revolt_upstream; > > > proxy_set_header Host $host; > > > } > > > > > > location /ws_78dd759593f041bc970fd7eef8b0c4af/ { > > > # Note that here is the trailing slash. > > > proxy_pass $revolt_upstream/; > > > proxy_http_version 1.1; > > > proxy_set_header Host $host; > > > proxy_set_header Connection $http_connection; > > > proxy_set_header Upgrade $http_upgrade; > > > # Important, to prevent ws from sending data for a long time and causing timeout disconnection. > > > proxy_read_timeout 24h; > > > } > > > } > > > ``` > > > > > > On this nginx config, would i need to make all those domains? As well as, can i not just reverse proxy those domains to the ports that they are on? > > Yes,you can So this doesn't exactly answer my question, there was 2 in the sentence, just a yes doesn't help. Sorry for any confusion or etc.
Author
Owner

@Cocam123 commented on GitHub (Feb 20, 2022):

Hello everyone.

Sorry for the inactivity I had here (I had no pc). But I put HTTPS on my server. Problem, now it's giving me "network error". Could my other site (also in https) cause this problem?

@Cocam123 commented on GitHub (Feb 20, 2022): Hello everyone. Sorry for the inactivity I had here (I had no pc). But I put HTTPS on my server. Problem, now it's giving me "network error". Could my other site (also in https) cause this problem?
Author
Owner

@whiskeytangofoxy commented on GitHub (Mar 14, 2022):

Hello everyone.

Sorry for the inactivity I had here (I had no pc). But I put HTTPS on my server. Problem, now it's giving me "network error". Could my other site (also in https) cause this problem?

I'm also running into a myriad of issues when trying to convert a insecure instance of Revolt to https. I'm using the nginx config detailed in this same thread. Other than that, I've made no changes to my .env or docker-compose.yml beyond those that were required to get the insecure http-hosted version of my Revolt chat running. Any ideas? There seems to be an issue with an HTTP GET and a "Blocked loading mixed active content “http://[domain]:[port]/” error in the web dev console I cannot resolve.

@whiskeytangofoxy commented on GitHub (Mar 14, 2022): > Hello everyone. > > Sorry for the inactivity I had here (I had no pc). But I put HTTPS on my server. Problem, now it's giving me "network error". Could my other site (also in https) cause this problem? I'm also running into a myriad of issues when trying to convert a insecure instance of Revolt to https. I'm using the nginx config detailed in this same thread. Other than that, I've made no changes to my .env or docker-compose.yml beyond those that were required to get the insecure http-hosted version of my Revolt chat running. Any ideas? There seems to be an issue with an HTTP GET and a "Blocked loading mixed active content “http://[domain]:[port]/” error in the web dev console I cannot resolve.
Author
Owner

@josealonso commented on GitHub (Apr 4, 2022):

@maxwelljens : You need to edit the .env config file. Otherwise it defaults to Screenshot from 2022-02-04 14-56-32

Which resolves to localhost. When you're using it locally, of course it resolves to localhost which is the server; outside of that network, though, would load to their localhost which the server is not hosted at. I'm not quite sure why it can't use relative URL's but it does mention that the default config only works for localhost in the readme

I can see this screen, but I get this error message even before entering the password.
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://local.revolt.chat:8000/.

That's on Firefox. On Chrome I don't exactly the same error messages

Failed to load resource: net::ERR_SOCKET_NOT_CONNECTED    :8000/1:

Uncaught (in promise) Error: Network Error         createError.js:16 
    at Np (vendor.aeef7222.js:12)
    at XMLHttpRequest.u.onerror (vendor.aeef7222.js:13)

I use Ubuntu 20.04.2 LTS

@josealonso commented on GitHub (Apr 4, 2022): > @maxwelljens : You need to edit the .env config file. Otherwise it defaults to ![Screenshot from 2022-02-04 14-56-32](https://user-images.githubusercontent.com/69441971/152594896-ac5c5d7d-621e-4457-9263-67f0be4eb803.png) > > Which resolves to localhost. When you're using it locally, of course it resolves to localhost which is the server; outside of that network, though, would load to _their_ localhost which the server is not hosted at. I'm not quite sure why it can't use relative URL's but it does mention that the default config only works for localhost in the readme I can see this screen, but I get this error message even before entering the password. `Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://local.revolt.chat:8000/. ` That's on Firefox. On Chrome I don't exactly the same error messages ``` Failed to load resource: net::ERR_SOCKET_NOT_CONNECTED :8000/1: Uncaught (in promise) Error: Network Error createError.js:16 at Np (vendor.aeef7222.js:12) at XMLHttpRequest.u.onerror (vendor.aeef7222.js:13) ``` I use **Ubuntu 20.04.2 LTS**
Author
Owner

@fourteentrees commented on GitHub (Apr 21, 2022):

I tried to do a complete Docker reset, but the containers still didn't work

Let that sink in

Not even docker system prune -a fixed the problem of .env not applying

@fourteentrees commented on GitHub (Apr 21, 2022): I tried to do a complete Docker reset, but the containers still didn't work Let that sink in **Not even `docker system prune -a` fixed the problem of .env not applying**
Author
Owner

@insertish commented on GitHub (Apr 29, 2022):

Just dropping in to mention that I'm consolidating all issues regarding self-hosting into this issue.
I'll probably eventually be able to get around to writing something up but I currently don't have any time.

@insertish commented on GitHub (Apr 29, 2022): Just dropping in to mention that I'm consolidating all issues regarding self-hosting into this issue. I'll probably eventually be able to get around to writing something up but I currently don't have any time.
Author
Owner

@fourteentrees commented on GitHub (Apr 30, 2022):

HE RESPONDS, finally this will actually be fixed

@fourteentrees commented on GitHub (Apr 30, 2022): HE RESPONDS, finally this will actually be fixed
Author
Owner

@mirkoRainer commented on GitHub (Apr 30, 2022):

"Thank you for finally finding time to respond, as I understand that life happens and volunteer open source projects aren't always a priority."
FTFY. ;)

@mirkoRainer commented on GitHub (Apr 30, 2022): "Thank you for finally finding time to respond, as I understand that life happens and volunteer open source projects aren't always a priority." FTFY. ;)
Author
Owner

@ghost commented on GitHub (May 1, 2022):

voso hosting is been a issue for me myself @insertish everything else i can run fine even using vercel for front end and just using the vps ofc for backend

@ghost commented on GitHub (May 1, 2022): voso hosting is been a issue for me myself @insertish everything else i can run fine even using vercel for front end and just using the vps ofc for backend
Author
Owner

@insertish commented on GitHub (May 1, 2022):

I strongly do not recommend hosting the voice server since it's still under heavy development, but if you want to try anyways, please use the corresponding issue to find information: https://github.com/revoltchat/vortex/issues/23#issuecomment-1113594595

@insertish commented on GitHub (May 1, 2022): I strongly do not recommend hosting the voice server since it's still under heavy development, but if you want to try anyways, please use the corresponding issue to find information: https://github.com/revoltchat/vortex/issues/23#issuecomment-1113594595
Author
Owner

@insertish commented on GitHub (May 1, 2022):

"Thank you for finally finding time to respond, as I understand that life happens and volunteer open source projects aren't always a priority."
FTFY. ;)

I am actually putting in a couple dozen hours in every month, despite being in exam season and having to manage another major project and a side job. Though, all of that time is currently going into polishing the next major update, which is almost ready for release.

Self hosted instances can already migrate to it but may encounter minor bugs, I think we've gotten through most of the issues.

@insertish commented on GitHub (May 1, 2022): > "Thank you for finally finding time to respond, as I understand that life happens and volunteer open source projects aren't always a priority." > FTFY. ;) I am actually putting in a couple dozen hours in every month, despite being in exam season and having to manage another major project and a side job. Though, all of that time is currently going into polishing the next major update, which is almost ready for release. Self hosted instances can already migrate to it but may encounter minor bugs, I think we've gotten through most of the issues.
Author
Owner

@Midou36O commented on GitHub (May 3, 2022):

Glad this is now getting attention :)

@Midou36O commented on GitHub (May 3, 2022): Glad this is now getting attention :)
Author
Owner

@lpuv commented on GitHub (May 6, 2022):

Same, same problem :o
thanks for working on it

@lpuv commented on GitHub (May 6, 2022): Same, same problem :o thanks for working on it
Author
Owner

@djpbessems commented on GitHub (Jul 23, 2022):

I've set up a selfhosted instance; but I'm getting some interesting not implemented yet errors when trying to register:

thread 'rocket-worker-thread' panicked at 'not yet implemented: <emailaddress>', /usr/local/cargo/git/checkouts/rauth-d390fb78242db219/8a3791a/crates/rauth/src/database/dummy.rs:28:9
stack backtrace:
   0:     0x557d8e38ea0d - std::backtrace_rs::backtrace::libunwind::trace::h7401910188046071
                               at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x557d8e38ea0d - std::backtrace_rs::backtrace::trace_unsynchronized::h8dff7aa2924f24e9
                               at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x557d8e38ea0d - std::sys_common::backtrace::_print_fmt::h07ca90b544a24df2
                               at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/sys_common/backtrace.rs:66:5
   3:     0x557d8e38ea0d - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h9331308a3088c05f
                               at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/sys_common/backtrace.rs:45:22
   4:     0x557d8e3b553c - core::fmt::write::h61c349b2e024d424
                               at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/core/src/fmt/mod.rs:1196:17
   5:     0x557d8e387651 - std::io::Write::write_fmt::h84ca4b318d095fa7
                               at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/io/mod.rs:1654:15
   6:     0x557d8e3905b5 - std::sys_common::backtrace::_print::hd3c72b1e40e79baf
                               at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/sys_common/backtrace.rs:48:5
   7:     0x557d8e3905b5 - std::sys_common::backtrace::print::ha4da5a270383a62c
                               at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/sys_common/backtrace.rs:35:9
   8:     0x557d8e3905b5 - std::panicking::default_hook::{{closure}}::h8c6cca5f381817ba
                               at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/panicking.rs:295:22
   9:     0x557d8e3902d6 - std::panicking::default_hook::he91089be4e889ce2
                               at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/panicking.rs:314:9
  10:     0x557d8e390bfa - std::panicking::rust_panic_with_hook::he7ddebf187262887
                               at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/panicking.rs:702:17
  11:     0x557d8e390a37 - std::panicking::begin_panic_handler::{{closure}}::h8722b5623900e5b6
                               at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/panicking.rs:588:13
  12:     0x557d8e38eec4 - std::sys_common::backtrace::__rust_end_short_backtrace::hb889cd97ae575020
                               at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/sys_common/backtrace.rs:138:18
  13:     0x557d8e390769 - rust_begin_unwind
                               at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/panicking.rs:584:5
  14:     0x557d8cbff193 - core::panicking::panic_fmt::h81550e582c787e06
                               at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/core/src/panicking.rs:142:14
  15:     0x557d8d99bae3 - <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll::h2c0569324677ec48
  16:     0x557d8d1233af - <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll::hfaeddd5adb8c12b8
  17:     0x557d8ce7a52b - <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll::h0982a9e6e79f51cc
  18:     0x557d8ce6094f - rocket::server::hyper_service_fn::{{closure}}::{{closure}}::h96c0d24670f766fa
  19:     0x557d8cfd6a9d - tokio::runtime::task::harness::poll_future::h75ea8736854dc9ef
  20:     0x557d8cfd8cee - tokio::runtime::task::harness::Harness<T,S>::poll::hfbe63f9e93ae0f86
  21:     0x557d8e3389cf - std::thread::local::LocalKey<T>::with::h674cec49ffb2e666
  22:     0x557d8e353b43 - tokio::runtime::thread_pool::worker::Context::run_task::h1297ed749e40de3a
  23:     0x557d8e3530ae - tokio::runtime::thread_pool::worker::Context::run::ha0f93c6c9dc4d14d
  24:     0x557d8e35c737 - tokio::macros::scoped_tls::ScopedKey<T>::set::h7d3248257f0528d6
  25:     0x557d8e352aeb - tokio::runtime::thread_pool::worker::run::h4d79910df954c3ec
  26:     0x557d8e348c71 - <tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll::h8bbed5a09b69e370
  27:     0x557d8e337c29 - tokio::runtime::task::harness::Harness<T,S>::poll::h12208adb3417de05
  28:     0x557d8e34855a - tokio::runtime::blocking::pool::Inner::run::hf975627a590c0261
  29:     0x557d8e33bb72 - std::sys_common::backtrace::__rust_begin_short_backtrace::h2771ddd274e841a6
  30:     0x557d8e34011f - core::ops::function::FnOnce::call_once{{vtable.shim}}::hcf05d4d4a25edc3b
  31:     0x557d8e395783 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hd06934b23a7f2fcd
                               at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/alloc/src/boxed.rs:1951:9
  32:     0x557d8e395783 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hb092aa1c4d31e227
                               at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/alloc/src/boxed.rs:1951:9
  33:     0x557d8e395783 - std::sys::unix::thread::Thread::new::thread_start::hea70d8d092b89098
                               at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/sys/unix/thread.rs:108:17
  34:     0x7f2765769fa3 - start_thread
  35:     0x7f2765510eff - clone
  36:                0x0 - <unknown>
 ERROR _                                              > Handler create_account panicked

When I look into https://github.com/insertish/rauth/blob/master/crates/rauth/src/database/dummy.rs I see a whole lot of todo! macro's; should I downgrade the container versions I'm using??

@djpbessems commented on GitHub (Jul 23, 2022): I've set up a selfhosted instance; but I'm getting some interesting `not implemented yet` errors when trying to register: ``` thread 'rocket-worker-thread' panicked at 'not yet implemented: <emailaddress>', /usr/local/cargo/git/checkouts/rauth-d390fb78242db219/8a3791a/crates/rauth/src/database/dummy.rs:28:9 stack backtrace: 0: 0x557d8e38ea0d - std::backtrace_rs::backtrace::libunwind::trace::h7401910188046071 at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5 1: 0x557d8e38ea0d - std::backtrace_rs::backtrace::trace_unsynchronized::h8dff7aa2924f24e9 at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5 2: 0x557d8e38ea0d - std::sys_common::backtrace::_print_fmt::h07ca90b544a24df2 at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/sys_common/backtrace.rs:66:5 3: 0x557d8e38ea0d - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h9331308a3088c05f at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/sys_common/backtrace.rs:45:22 4: 0x557d8e3b553c - core::fmt::write::h61c349b2e024d424 at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/core/src/fmt/mod.rs:1196:17 5: 0x557d8e387651 - std::io::Write::write_fmt::h84ca4b318d095fa7 at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/io/mod.rs:1654:15 6: 0x557d8e3905b5 - std::sys_common::backtrace::_print::hd3c72b1e40e79baf at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/sys_common/backtrace.rs:48:5 7: 0x557d8e3905b5 - std::sys_common::backtrace::print::ha4da5a270383a62c at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/sys_common/backtrace.rs:35:9 8: 0x557d8e3905b5 - std::panicking::default_hook::{{closure}}::h8c6cca5f381817ba at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/panicking.rs:295:22 9: 0x557d8e3902d6 - std::panicking::default_hook::he91089be4e889ce2 at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/panicking.rs:314:9 10: 0x557d8e390bfa - std::panicking::rust_panic_with_hook::he7ddebf187262887 at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/panicking.rs:702:17 11: 0x557d8e390a37 - std::panicking::begin_panic_handler::{{closure}}::h8722b5623900e5b6 at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/panicking.rs:588:13 12: 0x557d8e38eec4 - std::sys_common::backtrace::__rust_end_short_backtrace::hb889cd97ae575020 at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/sys_common/backtrace.rs:138:18 13: 0x557d8e390769 - rust_begin_unwind at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/panicking.rs:584:5 14: 0x557d8cbff193 - core::panicking::panic_fmt::h81550e582c787e06 at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/core/src/panicking.rs:142:14 15: 0x557d8d99bae3 - <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll::h2c0569324677ec48 16: 0x557d8d1233af - <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll::hfaeddd5adb8c12b8 17: 0x557d8ce7a52b - <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll::h0982a9e6e79f51cc 18: 0x557d8ce6094f - rocket::server::hyper_service_fn::{{closure}}::{{closure}}::h96c0d24670f766fa 19: 0x557d8cfd6a9d - tokio::runtime::task::harness::poll_future::h75ea8736854dc9ef 20: 0x557d8cfd8cee - tokio::runtime::task::harness::Harness<T,S>::poll::hfbe63f9e93ae0f86 21: 0x557d8e3389cf - std::thread::local::LocalKey<T>::with::h674cec49ffb2e666 22: 0x557d8e353b43 - tokio::runtime::thread_pool::worker::Context::run_task::h1297ed749e40de3a 23: 0x557d8e3530ae - tokio::runtime::thread_pool::worker::Context::run::ha0f93c6c9dc4d14d 24: 0x557d8e35c737 - tokio::macros::scoped_tls::ScopedKey<T>::set::h7d3248257f0528d6 25: 0x557d8e352aeb - tokio::runtime::thread_pool::worker::run::h4d79910df954c3ec 26: 0x557d8e348c71 - <tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll::h8bbed5a09b69e370 27: 0x557d8e337c29 - tokio::runtime::task::harness::Harness<T,S>::poll::h12208adb3417de05 28: 0x557d8e34855a - tokio::runtime::blocking::pool::Inner::run::hf975627a590c0261 29: 0x557d8e33bb72 - std::sys_common::backtrace::__rust_begin_short_backtrace::h2771ddd274e841a6 30: 0x557d8e34011f - core::ops::function::FnOnce::call_once{{vtable.shim}}::hcf05d4d4a25edc3b 31: 0x557d8e395783 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hd06934b23a7f2fcd at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/alloc/src/boxed.rs:1951:9 32: 0x557d8e395783 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hb092aa1c4d31e227 at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/alloc/src/boxed.rs:1951:9 33: 0x557d8e395783 - std::sys::unix::thread::Thread::new::thread_start::hea70d8d092b89098 at /rustc/bb8c2f41174caceec00c28bc6c5c20ae9f9a175c/library/std/src/sys/unix/thread.rs:108:17 34: 0x7f2765769fa3 - start_thread 35: 0x7f2765510eff - clone 36: 0x0 - <unknown> ERROR _ > Handler create_account panicked ``` When I look into `https://github.com/insertish/rauth/blob/master/crates/rauth/src/database/dummy.rs` I see a whole lot of `todo!` macro's; should I downgrade the container versions I'm using??
Author
Owner

@djpbessems commented on GitHub (Jul 24, 2022):

I've set up a selfhosted instance; but I'm getting some interesting not implemented yet errors when trying to register:

[...]

When I look into https://github.com/insertish/rauth/blob/master/crates/rauth/src/database/dummy.rs I see a whole lot of todo! macro's; should I downgrade the container versions I'm using??

Never mind, it seems I wasn't bringing all containers online correctly (I'm doing this in K8s); it's running without any errors now :)

@djpbessems commented on GitHub (Jul 24, 2022): > I've set up a selfhosted instance; but I'm getting some interesting `not implemented yet` errors when trying to register: > > [...] > > When I look into `https://github.com/insertish/rauth/blob/master/crates/rauth/src/database/dummy.rs` I see a whole lot of `todo!` macro's; should I downgrade the container versions I'm using?? Never mind, it seems I wasn't bringing all containers online correctly (I'm doing this in K8s); it's running without any errors now :)
Author
Owner

@Michael-Stokoe commented on GitHub (Aug 7, 2022):

Same issue for me.

Changes to the .env aren't being compiled into the app. For some reason it keeps trying to connect to http:// <url> :8000 despite me removing any references to the port in the .env.

Here are my configs:

.env

MONGODB=mongodb://database
REDIS_URI=redis://redis/

REVOLT_APP_URL=https://revolt.stokoe.dev
REVOLT_PUBLIC_URL=https://revolt.stokoe.dev/api
VITE_API_URL=https://revolt.stokoe.dev/api
REVOLT_EXTERNAL_WS_URL=https://revolt.stokoe.dev/ws
AUTUMN_PUBLIC_URL=https://revolt.stokoe.dev/autumn
JANUARY_PUBLIC_URL=https://revolt.stokoe.dev/january
# VOSO_PUBLIC_URL=https://revolt.stokoe.dev/vortex

REVOLT_UNSAFE_NO_CAPTCHA=1

# REVOLT_HCAPTCHA_KEY=0x0000000000000000000000000000000000000000
# REVOLT_HCAPTCHA_SITEKEY=10000000-ffff-ffff-ffff-000000000001


REVOLT_UNSAFE_NO_EMAIL=1

# REVOLT_SMTP_HOST=smtp.example.com
# REVOLT_SMTP_USERNAME=noreply@example.com
# REVOLT_SMTP_PASSWORD=CHANGEME
# REVOLT_SMTP_FROM=Revolt <noreply@example.com>


REVOLT_INVITE_ONLY=0
REVOLT_MAX_GROUP_SIZE=150

REVOLT_VAPID_PRIVATE_KEY=xxxxxxxxxxxxxxxxxxxx
REVOLT_VAPID_PUBLIC_KEY=xxxxxxxxxxxxxxxxx


AUTUMN_S3_REGION=minio
AUTUMN_S3_ENDPOINT=http://minio:9000
MINIO_ROOT_USER=minioautumn
MINIO_ROOT_PASSWORD=minioautumn
AWS_ACCESS_KEY_ID=minioautumn
AWS_SECRET_ACCESS_KEY=minioautumn

# VOSO_MANAGE_TOKEN=CHANGEME

nginx

map $http_host $revolt_upstream {
    revolt.stokoe.dev http://127.0.0.1:5000;
    revolt.stokoe.dev/api http://127.0.0.1:8000;
    revolt.stokoe.dev/ws http://127.0.0.1:9000;
    revolt.stokoe.dev/autumn http://127.0.0.1:3000;
    revolt.stokoe.dev/january http://127.0.0.1:7000;
    revolt.stokoe.dev/vortex http://127.0.0.1:8080;
}


server {
    server_name revolt.stokoe.dev *.revolt.stokoe.dev;

    listen 80;
    listen 443 ssl http2;

    ssl_certificate /etc/letsencrypt/live/stokoe.dev-0002/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/stokoe.dev-0002/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    if ($http_upgrade) {
        # Here, the path is used to reverse the generation of ws. Just roll the keyboard to prevent conflicts with other services.
        rewrite ^(.*)$ /ws_78dd759593f041bc970fd7eef8b0c4af$1;
    }

    location / {
        proxy_pass $revolt_upstream;
        proxy_set_header Host $host;
    }

    location /ws_78dd759593f041bc970fd7eef8b0c4af/ {
        # Note that here is the trailing slash.
        proxy_pass $revolt_upstream/;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header Connection $http_connection;
        proxy_set_header Upgrade $http_upgrade;
        # Important, to prevent ws from sending data for a long time and causing timeout disconnection.
        proxy_read_timeout 24h;
    }
}

image

And sometimes (100% of the time if hard-refreshing):
image

I've tried docker system prune -a, docker volume rm $(docker volume ls -q) to remove all volumes. rm -rf revolt and rebuilding .env. Nothing seems to work.

@Michael-Stokoe commented on GitHub (Aug 7, 2022): Same issue for me. Changes to the .env aren't being compiled into the app. For some reason it keeps trying to connect to `http:// <url> :8000` despite me removing any references to the port in the .env. Here are my configs: .env ``` MONGODB=mongodb://database REDIS_URI=redis://redis/ REVOLT_APP_URL=https://revolt.stokoe.dev REVOLT_PUBLIC_URL=https://revolt.stokoe.dev/api VITE_API_URL=https://revolt.stokoe.dev/api REVOLT_EXTERNAL_WS_URL=https://revolt.stokoe.dev/ws AUTUMN_PUBLIC_URL=https://revolt.stokoe.dev/autumn JANUARY_PUBLIC_URL=https://revolt.stokoe.dev/january # VOSO_PUBLIC_URL=https://revolt.stokoe.dev/vortex REVOLT_UNSAFE_NO_CAPTCHA=1 # REVOLT_HCAPTCHA_KEY=0x0000000000000000000000000000000000000000 # REVOLT_HCAPTCHA_SITEKEY=10000000-ffff-ffff-ffff-000000000001 REVOLT_UNSAFE_NO_EMAIL=1 # REVOLT_SMTP_HOST=smtp.example.com # REVOLT_SMTP_USERNAME=noreply@example.com # REVOLT_SMTP_PASSWORD=CHANGEME # REVOLT_SMTP_FROM=Revolt <noreply@example.com> REVOLT_INVITE_ONLY=0 REVOLT_MAX_GROUP_SIZE=150 REVOLT_VAPID_PRIVATE_KEY=xxxxxxxxxxxxxxxxxxxx REVOLT_VAPID_PUBLIC_KEY=xxxxxxxxxxxxxxxxx AUTUMN_S3_REGION=minio AUTUMN_S3_ENDPOINT=http://minio:9000 MINIO_ROOT_USER=minioautumn MINIO_ROOT_PASSWORD=minioautumn AWS_ACCESS_KEY_ID=minioautumn AWS_SECRET_ACCESS_KEY=minioautumn # VOSO_MANAGE_TOKEN=CHANGEME ``` nginx ``` map $http_host $revolt_upstream { revolt.stokoe.dev http://127.0.0.1:5000; revolt.stokoe.dev/api http://127.0.0.1:8000; revolt.stokoe.dev/ws http://127.0.0.1:9000; revolt.stokoe.dev/autumn http://127.0.0.1:3000; revolt.stokoe.dev/january http://127.0.0.1:7000; revolt.stokoe.dev/vortex http://127.0.0.1:8080; } server { server_name revolt.stokoe.dev *.revolt.stokoe.dev; listen 80; listen 443 ssl http2; ssl_certificate /etc/letsencrypt/live/stokoe.dev-0002/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/stokoe.dev-0002/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot if ($http_upgrade) { # Here, the path is used to reverse the generation of ws. Just roll the keyboard to prevent conflicts with other services. rewrite ^(.*)$ /ws_78dd759593f041bc970fd7eef8b0c4af$1; } location / { proxy_pass $revolt_upstream; proxy_set_header Host $host; } location /ws_78dd759593f041bc970fd7eef8b0c4af/ { # Note that here is the trailing slash. proxy_pass $revolt_upstream/; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header Connection $http_connection; proxy_set_header Upgrade $http_upgrade; # Important, to prevent ws from sending data for a long time and causing timeout disconnection. proxy_read_timeout 24h; } } ``` ![image](https://user-images.githubusercontent.com/2981213/183312399-10f8644f-1ba1-4060-a125-efbf89be1cd8.png) And sometimes (100% of the time if hard-refreshing): ![image](https://user-images.githubusercontent.com/2981213/183312424-55b0f65f-ddd4-4879-9350-9f37cbc26be6.png) I've tried `docker system prune -a`, `docker volume rm $(docker volume ls -q)` to remove all volumes. `rm -rf revolt` and rebuilding `.env`. Nothing seems to work.
Author
Owner

@LostSoulfly commented on GitHub (Aug 10, 2022):

A lot of these reported issues can be resolved by clearing your browser cache after making changes to the .env. Or run each attempt in a new private browsing tab.

I might be able to write a quick guide for Caddy v2 if there is any interest.

@LostSoulfly commented on GitHub (Aug 10, 2022): A lot of these reported issues can be resolved by clearing your browser cache after making changes to the .env. Or run each attempt in a new private browsing tab. I might be able to write a quick guide for Caddy v2 if there is any interest.
Author
Owner

@Alauraa commented on GitHub (Aug 10, 2022):

A lot of these reported issues can be resolved by clearing your browser cache after making changes to the .env. Or run each attempt in a new private browsing tab.

I might be able to write a quick guide for Caddy v2 if there is any interest.

I'd love a caddy config / guide for V2 and or just a complete guide to getting revolt on nginx, it'd be nice to have.

@Alauraa commented on GitHub (Aug 10, 2022): > A lot of these reported issues can be resolved by clearing your browser cache after making changes to the .env. Or run each attempt in a new private browsing tab. > > I might be able to write a quick guide for Caddy v2 if there is any interest. I'd love a caddy config / guide for V2 and or just a complete guide to getting revolt on nginx, it'd be nice to have.
Author
Owner

@LostSoulfly commented on GitHub (Aug 10, 2022):

Here's the relevant parts of my caddy config. It's not complicated because I didn't want to deal with rewrites or anything fancy. It requires setting up multiple subdomains, in my case with Cloudflare. I also use a wildcard cert with a custom Caddyv2 build including said Cloudflare DNS component. I have my container with this here with some basic docs to get it running if you want to go that route.

I did not set up Vortex so voice is not working. Looks like it requires building the container yourself, which I wasn't going to do because after I got into the web client and had a friend join we realized that video/screen sharing was not implemented (and I couldn't find any talk of adding it) so I will not be using it at this time, but will monitor the progress for the future.

So I have set up revolt, revoltapi, revoltjanuary, and revoltws as subdomains. They will all be using HTTPS using this caddyfile config so no additional port forwarding (outside of 443/80) was necessary for me. You can omit the wildcard_cert directives if you don't want to worry about using a wildcard DNS challenge with Let'sEncrypt of course.

You'll want to change the IP addresses to your server's IP. The X-Frame-Options directive fixed my CORS issues, so make sure you change that appropriately as well. Alternatively, Access-Control-Allow-Origin might also solve CORS.

(wildcard_cert) {
  tls my.account@gmail.com {
    dns cloudflare <cloudflare_api_token>
	resolvers 1.1.1.1
  }
}

revolt.server.cloud {	
	encode gzip
		
	import wildcard_cert

		reverse_proxy 192.168.69.150:5000 {
			header_up X-Real-IP {remote_host}
		}
}

revoltapi.server.cloud {	
	encode gzip
		
	import wildcard_cert

	reverse_proxy 192.168.69.150:8001 {
		header_up X-Real-IP {remote_host}
		header_down X-Frame-Options "allow-from https://revolt.server.cloud"
	}
}


revoltws.server.cloud {	
	encode gzip

	import wildcard_cert

	reverse_proxy 192.168.69.150:9000 {
		header_up X-Real-IP {remote_host}
		header_down X-Frame-Options "allow-from https://revolt.server.cloud"
	}
}

revoltautumn.server.cloud {	
	encode gzip
		
	import wildcard_cert
	
	reverse_proxy 192.168.69.150:3000 {
		header_up X-Real-IP {remote_host}
		header_down X-Frame-Options "allow-from https://revolt.server.cloud"
	}
}

revoltjanuary.server.cloud {	
	encode gzip
		
	import wildcard_cert
	
	reverse_proxy 192.168.69.150:7000 {
		header_up X-Real-IP {remote_host}
		header_down X-Frame-Options "allow-from https://revolt.server.cloud"
	}
}

Here's my docker-compose.yml. I think I only changed a port or two due to conflicts, and of course directory mount points! I was running this on an Unraid server with docker-compose. Make sure you put the .env file in the same directory as your docker-compose.yml too.

version: '3.8'

services:
  # MongoDB database
  database:
    image: mongo
    restart: always
    volumes:
      - ./data/db:/mnt/user/appdata/revolt/data/db

  # Redis server
  redis:
    image: eqalpha/keydb
    restart: always

  # API server (delta)
  api:
    image: ghcr.io/revoltchat/server:20220715-1
    env_file: .env
    depends_on:
      - database
      - redis
    ports:
      - "8001:8000"
    restart: always
  
  # Events service (quark)
  events:
    image: ghcr.io/revoltchat/bonfire:20220715-1
    env_file: .env
    depends_on:
      - database
      - redis
    ports:
      - "9000:9000"
    restart: always

  # Web App (revite)
  web:
    image: ghcr.io/revoltchat/client:master
    env_file: .env
    ports:
      - "5000:5000"
    restart: always

  # S3-compatible storage server
  minio:
    image: minio/minio
    command: server /data
    env_file: .env
    volumes:
      - ./data/minio:/data
    ports:
      - "10000:9000"
    restart: always

  # Create buckets for minio.
  createbuckets:
    image: minio/mc
    depends_on:
      - minio
    env_file: .env
    entrypoint: >
      /bin/sh -c "
      while ! curl -s --output /dev/null --connect-timeout 1 http://minio:9000; do echo 'Waiting minio...' && sleep 0.1; done;
      /usr/bin/mc alias set minio http://minio:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD;
      /usr/bin/mc mb minio/attachments;
      /usr/bin/mc mb minio/avatars;
      /usr/bin/mc mb minio/backgrounds;
      /usr/bin/mc mb minio/icons;
      /usr/bin/mc mb minio/banners;
      /usr/bin/mc mb minio/emojis;
      exit 0;
      "
  # File server (autumn)
  autumn:
    image: ghcr.io/revoltchat/autumn:1.1.5
    env_file: .env
    depends_on:
      - database
      - createbuckets
    environment:
      - AUTUMN_MONGO_URI=mongodb://database
    ports:
      - "3000:3000"
    restart: always

  # Metadata and image proxy (january)
  january:
    image: ghcr.io/revoltchat/january:master
    ports:
      - "7000:7000"
    restart: always

Here's my .env. Note the REVOLT_EXTERNAL_WS_URL was changed to wss:// because it would be using HTTPS and would not allow the original HTTP call from ws:// on an HTTPS website.

##
## Quark configuration
##

# MongoDB
MONGODB=mongodb://database

# Redis
REDIS_URI=redis://redis/

# URL to where the Revolt app is publicly accessible
REVOLT_APP_URL=https://revolt.server.cloud

# URL to where the API is publicly accessible
REVOLT_PUBLIC_URL=https://revoltapi.server.cloud
VITE_API_URL=https://revoltapi.server.cloud

# URL to where the WebSocket server is publicly accessible
REVOLT_EXTERNAL_WS_URL=wss://revoltws.server.cloud

# URL to where Autumn is publicly available
AUTUMN_PUBLIC_URL=https://revoltautumn.server.cloud

# URL to where January is publicly available
JANUARY_PUBLIC_URL=https://revoltjanuary.server.cloud

# URL to where Vortex is publicly available
# VOSO_PUBLIC_URL=https://voso.server.cloud


##
## hCaptcha Settings
##

# If you are sure that you don't want to use hCaptcha, set to 1.
REVOLT_UNSAFE_NO_CAPTCHA=1

# hCaptcha API key
# REVOLT_HCAPTCHA_KEY=0x0000000000000000000000000000000000000000

# hCaptcha site key
# REVOLT_HCAPTCHA_SITEKEY=10000000-ffff-ffff-ffff-000000000001


##
## Email Settings
##

# If you are sure that you don't want to use email verification, set to 1.
REVOLT_UNSAFE_NO_EMAIL=1

# SMTP host
# REVOLT_SMTP_HOST=smtp.example.com

# SMTP username
# REVOLT_SMTP_USERNAME=noreply@example.com

# SMTP password
# REVOLT_SMTP_PASSWORD=CHANGEME

# SMTP From header
# REVOLT_SMTP_FROM=Revolt <sagiri@server.cloud>


##
## Application Settings
##

# Whether to only allow users to sign up if they have an invite code
REVOLT_INVITE_ONLY=0

# Maximum number of people that can be in a group chat
REVOLT_MAX_GROUP_SIZE=150

# VAPID keys for push notifications
# Generate using this guide: https://gitlab.insrt.uk/revolt/delta/-/wikis/vapid
# --> Please replace these keys before going into production! <--
REVOLT_VAPID_PRIVATE_KEY=Generate your own key


##
## Autumn configuration
##

# S3 Region
AUTUMN_S3_REGION=minio

# S3 Endpoint
AUTUMN_S3_ENDPOINT=http://minio:9000

# MinIO Root User
MINIO_ROOT_USER=minioautumn

# MinIO Root Password
MINIO_ROOT_PASSWORD=minioautumn

# AWS Access Key ID
AWS_ACCESS_KEY_ID=minioautumn

# AWS Secret Key
AWS_SECRET_ACCESS_KEY=minioautumn


##
## Vortex configuration
##

# VOSO_MANAGE_TOKEN=Your_secret_token

@LostSoulfly commented on GitHub (Aug 10, 2022): Here's the relevant parts of my caddy config. It's not complicated because I didn't want to deal with rewrites or anything fancy. It requires setting up multiple subdomains, in my case with Cloudflare. I also use a wildcard cert with a custom Caddyv2 build including said Cloudflare DNS component. I have my [container with this here](https://hub.docker.com/r/lostsoulfly/docker-cloudflare) with some basic docs to get it running if you want to go that route. I did not set up Vortex so voice is not working. Looks like it requires building the container yourself, which I wasn't going to do because after I got into the web client and had a friend join we realized that video/screen sharing was not implemented (and I couldn't find any talk of adding it) so I will not be using it at this time, but will monitor the progress for the future. So I have set up revolt, revoltapi, revoltjanuary, and revoltws as subdomains. They will all be using HTTPS using this caddyfile config so no additional port forwarding (outside of 443/80) was necessary for me. You can omit the wildcard_cert directives if you don't want to worry about using a wildcard DNS challenge with Let'sEncrypt of course. You'll want to change the IP addresses to your server's IP. The X-Frame-Options directive fixed my CORS issues, so make sure you change that appropriately as well. Alternatively, `Access-Control-Allow-Origin` might also solve CORS. ``` (wildcard_cert) { tls my.account@gmail.com { dns cloudflare <cloudflare_api_token> resolvers 1.1.1.1 } } revolt.server.cloud { encode gzip import wildcard_cert reverse_proxy 192.168.69.150:5000 { header_up X-Real-IP {remote_host} } } revoltapi.server.cloud { encode gzip import wildcard_cert reverse_proxy 192.168.69.150:8001 { header_up X-Real-IP {remote_host} header_down X-Frame-Options "allow-from https://revolt.server.cloud" } } revoltws.server.cloud { encode gzip import wildcard_cert reverse_proxy 192.168.69.150:9000 { header_up X-Real-IP {remote_host} header_down X-Frame-Options "allow-from https://revolt.server.cloud" } } revoltautumn.server.cloud { encode gzip import wildcard_cert reverse_proxy 192.168.69.150:3000 { header_up X-Real-IP {remote_host} header_down X-Frame-Options "allow-from https://revolt.server.cloud" } } revoltjanuary.server.cloud { encode gzip import wildcard_cert reverse_proxy 192.168.69.150:7000 { header_up X-Real-IP {remote_host} header_down X-Frame-Options "allow-from https://revolt.server.cloud" } } ``` Here's my docker-compose.yml. I think I only changed a port or two due to conflicts, and of course directory mount points! I was running this on an Unraid server with docker-compose. Make sure you put the .env file in the same directory as your docker-compose.yml too. ``` version: '3.8' services: # MongoDB database database: image: mongo restart: always volumes: - ./data/db:/mnt/user/appdata/revolt/data/db # Redis server redis: image: eqalpha/keydb restart: always # API server (delta) api: image: ghcr.io/revoltchat/server:20220715-1 env_file: .env depends_on: - database - redis ports: - "8001:8000" restart: always # Events service (quark) events: image: ghcr.io/revoltchat/bonfire:20220715-1 env_file: .env depends_on: - database - redis ports: - "9000:9000" restart: always # Web App (revite) web: image: ghcr.io/revoltchat/client:master env_file: .env ports: - "5000:5000" restart: always # S3-compatible storage server minio: image: minio/minio command: server /data env_file: .env volumes: - ./data/minio:/data ports: - "10000:9000" restart: always # Create buckets for minio. createbuckets: image: minio/mc depends_on: - minio env_file: .env entrypoint: > /bin/sh -c " while ! curl -s --output /dev/null --connect-timeout 1 http://minio:9000; do echo 'Waiting minio...' && sleep 0.1; done; /usr/bin/mc alias set minio http://minio:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD; /usr/bin/mc mb minio/attachments; /usr/bin/mc mb minio/avatars; /usr/bin/mc mb minio/backgrounds; /usr/bin/mc mb minio/icons; /usr/bin/mc mb minio/banners; /usr/bin/mc mb minio/emojis; exit 0; " # File server (autumn) autumn: image: ghcr.io/revoltchat/autumn:1.1.5 env_file: .env depends_on: - database - createbuckets environment: - AUTUMN_MONGO_URI=mongodb://database ports: - "3000:3000" restart: always # Metadata and image proxy (january) january: image: ghcr.io/revoltchat/january:master ports: - "7000:7000" restart: always ``` Here's my .env. Note the REVOLT_EXTERNAL_WS_URL was changed to wss:// because it would be using HTTPS and would not allow the original HTTP call from ws:// on an HTTPS website. ``` ## ## Quark configuration ## # MongoDB MONGODB=mongodb://database # Redis REDIS_URI=redis://redis/ # URL to where the Revolt app is publicly accessible REVOLT_APP_URL=https://revolt.server.cloud # URL to where the API is publicly accessible REVOLT_PUBLIC_URL=https://revoltapi.server.cloud VITE_API_URL=https://revoltapi.server.cloud # URL to where the WebSocket server is publicly accessible REVOLT_EXTERNAL_WS_URL=wss://revoltws.server.cloud # URL to where Autumn is publicly available AUTUMN_PUBLIC_URL=https://revoltautumn.server.cloud # URL to where January is publicly available JANUARY_PUBLIC_URL=https://revoltjanuary.server.cloud # URL to where Vortex is publicly available # VOSO_PUBLIC_URL=https://voso.server.cloud ## ## hCaptcha Settings ## # If you are sure that you don't want to use hCaptcha, set to 1. REVOLT_UNSAFE_NO_CAPTCHA=1 # hCaptcha API key # REVOLT_HCAPTCHA_KEY=0x0000000000000000000000000000000000000000 # hCaptcha site key # REVOLT_HCAPTCHA_SITEKEY=10000000-ffff-ffff-ffff-000000000001 ## ## Email Settings ## # If you are sure that you don't want to use email verification, set to 1. REVOLT_UNSAFE_NO_EMAIL=1 # SMTP host # REVOLT_SMTP_HOST=smtp.example.com # SMTP username # REVOLT_SMTP_USERNAME=noreply@example.com # SMTP password # REVOLT_SMTP_PASSWORD=CHANGEME # SMTP From header # REVOLT_SMTP_FROM=Revolt <sagiri@server.cloud> ## ## Application Settings ## # Whether to only allow users to sign up if they have an invite code REVOLT_INVITE_ONLY=0 # Maximum number of people that can be in a group chat REVOLT_MAX_GROUP_SIZE=150 # VAPID keys for push notifications # Generate using this guide: https://gitlab.insrt.uk/revolt/delta/-/wikis/vapid # --> Please replace these keys before going into production! <-- REVOLT_VAPID_PRIVATE_KEY=Generate your own key ## ## Autumn configuration ## # S3 Region AUTUMN_S3_REGION=minio # S3 Endpoint AUTUMN_S3_ENDPOINT=http://minio:9000 # MinIO Root User MINIO_ROOT_USER=minioautumn # MinIO Root Password MINIO_ROOT_PASSWORD=minioautumn # AWS Access Key ID AWS_ACCESS_KEY_ID=minioautumn # AWS Secret Key AWS_SECRET_ACCESS_KEY=minioautumn ## ## Vortex configuration ## # VOSO_MANAGE_TOKEN=Your_secret_token ```
Author
Owner

@Crashdummyy commented on GitHub (Aug 18, 2022):

Has anyone got it to run through nginx and https ( lets encrypt ) ?
The last time I tested the stack was back in april where https didnt work for me at all :/

Id appreciate a set of working configs very much

@Crashdummyy commented on GitHub (Aug 18, 2022): Has anyone got it to run through nginx and https ( lets encrypt ) ? The last time I tested the stack was back in april where https didnt work for me at all :/ Id appreciate a set of working configs very much
Author
Owner

@the-lazy-fox commented on GitHub (Sep 1, 2022):

Hi there,
Does anyone already made something working through nginx https with SWAG?
Thank you!

@the-lazy-fox commented on GitHub (Sep 1, 2022): Hi there, Does anyone already made something working through nginx https with [SWAG](https://www.linuxserver.io/blog/2020-08-21-introducing-swag)? Thank you!
Author
Owner

@svenar-nl commented on GitHub (Sep 9, 2022):

Hey,
I'm experiencing an issue with logging in.
A user can create an account successfully and it seems like they can log-in but they do not get a session.
When a new user logs in for the first time they're presented with a username field. Upon entering a desired username it errors out.
image

After a user refreshes the page they're represented by the log-in screen, indicating their session isn't saved and they get an error after logging in again.
image

Is something not configured correctly or is this a known issue?

Edit: This is now fixed by changing to subdomains instead of domain paths.

@svenar-nl commented on GitHub (Sep 9, 2022): Hey, I'm experiencing an issue with logging in. A user can create an account successfully and it seems like they can log-in but they do not get a session. When a new user logs in for the first time they're presented with a username field. Upon entering a desired username it errors out. ![image](https://user-images.githubusercontent.com/11473832/189425744-831b45c7-01d1-47df-8f04-33e899641b44.png) After a user refreshes the page they're represented by the log-in screen, indicating their session isn't saved and they get an error after logging in again. ![image](https://user-images.githubusercontent.com/11473832/189426055-439f76a7-86c2-4dee-9849-845044236a5a.png) Is something not configured correctly or is this a known issue? Edit: This is now fixed by changing to subdomains instead of domain paths.
Author
Owner

@SuitespaceDev commented on GitHub (Oct 13, 2022):

Definitely not trying to be discouraging here; this project is doing great work. Do want to point out however, the main reason we as a company are interested in moving out of Discord to something open source is the self-hosting angle.

For data protection this is a major win. The readme of this repo and the apparently lack of TLC it gets, as apparent from this year old request, are very telling that Revolt is going to shift toward a SaaS business model or otherwise discourage the self-hosting options. I hope that you reconsider, finding a way of monetizing self-hosted open source instead. IMO that will be a major hurdle in project adoption.

@SuitespaceDev commented on GitHub (Oct 13, 2022): Definitely not trying to be discouraging here; this project is doing great work. Do want to point out however, the main reason we as a company are interested in moving out of Discord to something open source is the self-hosting angle. For data protection this is a major win. The readme of this repo and the apparently lack of TLC it gets, as apparent from this year old request, are very telling that Revolt is going to shift toward a SaaS business model or otherwise discourage the self-hosting options. I hope that you reconsider, finding a way of monetizing self-hosted open source instead. IMO that will be a major hurdle in project adoption.
Author
Owner

@insertish commented on GitHub (Oct 13, 2022):

Let me make this very clear, I am for the most part a solo dev on this project, I account for around 92% of the code and pretty much manage everything, there is a lot of work left to do and it's not feasible for me to maintain every single aspect of this project consistently.

Maintaining just revolt.chat on its own is already pretty demanding and even I don't have the deployment fully down yet, so I don't know how I'm supposed to recommend others on setting up their instance when I haven't reached a point where I'm comfortable saying this is how you should be running things in production.

There's also a bunch of things I want to improve with the configuration as well which will probably land whenever I get around to it.

I want to really stress (based on "as apparent from this year old request"), I am an (effectively) solo developer who is currently studying at university, there are at least 200 issues on the revite repository, I just don't have the time to cover all of this.

I do also want to touch on this:

  • "shift toward a SaaS business model": not sure what you mean by this exactly
  • "otherwise discourage the self-hosting options": I actively encourage people to self host if they need data protection compliance (on-premises), or if they run a community that wouldn't be allowed on our service, list goes on, there are a lot of valid reasons. I will admit that I do try to encourage people not to self-host if their community would be appropriate on the main service, this is mainly just for growth and overcoming the network effect.
@insertish commented on GitHub (Oct 13, 2022): Let me make this very clear, I am for the most part a solo dev on this project, I account for around 92% of the code and pretty much manage everything, there is a lot of work left to do and it's not feasible for me to maintain every single aspect of this project consistently. Maintaining just revolt.chat on its own is already pretty demanding and even I don't have the deployment fully down yet, so I don't know how I'm supposed to recommend others on setting up their instance when I haven't reached a point where I'm comfortable saying this is how you should be running things in production. There's also a bunch of things I want to improve with the configuration as well which will probably land whenever I get around to it. I want to really stress (based on "as apparent from this year old request"), I am an (effectively) solo developer who is currently studying at university, there are at least 200 issues on the revite repository, I just don't have the time to cover all of this. I do also want to touch on this: - "shift toward a SaaS business model": not sure what you mean by this exactly - "otherwise discourage the self-hosting options": I actively encourage people to self host if they need data protection compliance (on-premises), or if they run a community that wouldn't be allowed on our service, list goes on, there are a lot of valid reasons. I will admit that I do try to encourage people *not* to self-host if their community would be appropriate on the main service, this is mainly just for growth and overcoming the network effect.
Author
Owner

@SuitespaceDev commented on GitHub (Oct 13, 2022):

Thanks for the response. Well as I say, I would like to encourage you. Not claiming to know your motives or plans. Based on your response, perhaps this was purely situational -- frankly I assumed you had more help due to the quality of work. This project has every capacity to be a great startup already, and startups taking this stance would generally be doing so with the plan of offering a managed hosting SaaS product. (usually the conclusion seeing self-hosting is discouraged and an AGPL project)

Definitely hear you that I overestimated how many hands you had helping. I am just showing what a first impression is for a company that wants to support the project. This repo is basically a marketing funnel for businesses running open software stacks. Whether that is intentional or not; this repo is very good at that purpose.

If you do go the SaaS route more power to you. If you are not trying to monetize at all, understandable. However I do still submit to you that if you work out a monetization strategy for open source self-hosting; please believe many of us are happy to pay even while development is ongoing.

I believe you can gain more contributors, sponsors and wider adoption by doing so.

Unfortunately we do not have much experience with Rust, though a few C/C++ concepts translate. We do have some extensive experience with deployments, web languages and JS/TS. Happy to lend a hand if we can ease any pain points whether techie or business...y

@SuitespaceDev commented on GitHub (Oct 13, 2022): Thanks for the response. Well as I say, I would like to encourage you. Not claiming to know your motives or plans. Based on your response, perhaps this was purely situational -- frankly I assumed you had more help due to the quality of work. This project has every capacity to be a great startup already, and startups taking this stance would generally be doing so with the plan of offering a managed hosting SaaS product. (usually the conclusion seeing self-hosting is discouraged and an AGPL project) Definitely hear you that I overestimated how many hands you had helping. I am just showing what a first impression is for a company that wants to support the project. This repo is basically a marketing funnel for businesses running open software stacks. Whether that is intentional or not; this repo is very good at that purpose. If you do go the SaaS route more power to you. If you are not trying to monetize at all, understandable. However I do still submit to you that if you work out a monetization strategy for open source self-hosting; please believe many of us are happy to pay even while development is ongoing. I believe you can gain more contributors, sponsors and wider adoption by doing so. Unfortunately we do not have much experience with Rust, though a few C/C++ concepts translate. We do have some extensive experience with deployments, web languages and JS/TS. Happy to lend a hand if we can ease any pain points whether techie or business...y
Author
Owner

@dogwillhunt commented on GitHub (Nov 15, 2022):

If anyone is still having issues with the reverse proxy, try using nginx proxy manager. You can run it as a docker container then just add it to the same docker network as your revolt docker containers. Might be overkill but it works pretty well.

@dogwillhunt commented on GitHub (Nov 15, 2022): If anyone is still having issues with the reverse proxy, try using nginx proxy manager. You can run it as a docker container then just add it to the same docker network as your revolt docker containers. Might be overkill but it works pretty well.
Author
Owner

@insertish commented on GitHub (Feb 5, 2023):

I've updated the README to include more information regarding setting up a custom domain and hopefully streamlined the whole process by putting a reverse proxy in front of everything.

I'm not really sure what, if anything, is missing from the repository at this point.

@insertish commented on GitHub (Feb 5, 2023): I've updated the README to include more information regarding setting up a custom domain and hopefully streamlined the whole process by putting a reverse proxy in front of everything. I'm not really sure what, if anything, is missing from the repository at this point.
Author
Owner

@erlend-sh commented on GitHub (Feb 5, 2023):

@zicklag anything to add from your self-hosting experience?

@erlend-sh commented on GitHub (Feb 5, 2023): @zicklag anything to add from your self-hosting experience?
Author
Owner

@zicklag commented on GitHub (Feb 5, 2023):

I can see how people can have a hard time with hosting Revolt. It's actually pretty simple, but the more services there are, the more confusing things get, especially if you're not used to server stuff.

It was pretty easy for me, but I've had years to get my self-hosting setup refined.

I used Traefik for a reverse proxy, and Traefik made it super easy to setup.


Here's a best-effort, as quick as I coud write it guide for setting it up, just in case it helps anybody:

https://gist.github.com/zicklag/c5adbf9bf4c5adb7640ed3e752c9eb28

It ended up including some bonuses including a Portainer web UI and backup system, but again, this is all best effort and the guide might not quite work exactly if you try to follow it. I'm not sure!

@zicklag commented on GitHub (Feb 5, 2023): I can see how people can have a hard time with hosting Revolt. It's actually pretty simple, but the more services there are, the more confusing things get, especially if you're not used to server stuff. It was pretty easy for me, but I've had years to get my self-hosting setup refined. I used Traefik for a reverse proxy, and Traefik made it super easy to setup. --- Here's a best-effort, as quick as I coud write it guide for setting it up, just in case it helps anybody: https://gist.github.com/zicklag/c5adbf9bf4c5adb7640ed3e752c9eb28 It ended up including some bonuses including a Portainer web UI and backup system, but again, this is all best effort and the guide might not quite work exactly if you try to follow it. I'm not sure!
Author
Owner

@TheToady commented on GitHub (Feb 5, 2023):

I'm also trying to setup revolt behind nginx reverse proxy, I followed the instructions in the readme and now the custom port (9008) just redirects me to 443.

@TheToady commented on GitHub (Feb 5, 2023): I'm also trying to setup revolt behind nginx reverse proxy, I followed the instructions in the readme and now the custom port (9008) just redirects me to 443.
Author
Owner

@YukiKras commented on GitHub (Mar 6, 2023):

I can't understand writing everywhere here for the sake of a custom port ":80" or not? If not, what should be written here?
Sorry in advance for not the best English
image
P.S. the page in the browser was painted before, but now it is empty

@YukiKras commented on GitHub (Mar 6, 2023): I can't understand writing everywhere here for the sake of a custom port ":80" or not? If not, what should be written here? Sorry in advance for not the best English ![image](https://user-images.githubusercontent.com/72355380/223280996-504312b3-4643-4177-bdbd-edf1a2560256.png) P.S. the page in the browser was painted before, but now it is empty
Author
Owner

@markiemm commented on GitHub (Mar 13, 2023):

I have finally solved this. This is my configuration

  # Redis
  REDIS_URI=redis://redis/
  
  # Hostname used for Caddy
  # This should in most cases match REVOLT_APP_URL
  HOSTNAME=:80
  
  # URL to where the Revolt app is publicly accessible
  REVOLT_APP_URL=https://revolt.mydomain.net
  
  # URL to where the API is publicly accessible
  REVOLT_PUBLIC_URL=https://revolt.mydomain.net/api
  VITE_API_URL=https://revolt.mydomain.net/api
  
  # URL to where the WebSocket server is publicly accessible
  REVOLT_EXTERNAL_WS_URL=wss://revolt.mydomain.net/ws
  
  # URL to where Autumn is publicly available
  AUTUMN_PUBLIC_URL=https://revolt.mydomain.net/autumn
  
  # URL to where January is publicly available
  JANUARY_PUBLIC_URL=https://revolt.mydomain.net/january

...

(revolt.mydomain.net is a placeholder, i changed it to my actual domain)

So my first attempt was with my Nginx proxy manager, I was routing traffic straight to the revolt_web_1 on port 5000 with scheme https which was a mistake and also the HOSTNAME env variable was https://revolt.mydomain.net

How I got it working

  1. I put all the containers on the nginx proxy manager network using this config:
version: "3.8"

services:
  # MongoDB database
  database:
    image: mongo
    restart: always
    volumes:
      - ./data/db:/data/db
    networks:
      - nginx-proxy-manager_default
  # Redis server
  redis:
    image: eqalpha/keydb
    restart: always
    networks:
      - nginx-proxy-manager_default
  # S3-compatible storage server
  minio:
    image: minio/minio
    command: server /data
    env_file: .env
    volumes:
      - ./data/minio:/data
    restart: always
    networks:
      - nginx-proxy-manager_default
  # Caddy web server
  caddy:
    image: caddy
    restart: always
    env_file: .env
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./data/caddy-data:/data
      - ./data/caddy-config:/config
    networks:
      - nginx-proxy-manager_default
    hostname: caddy
  # API server (delta)
  api:
    image: ghcr.io/revoltchat/server:20220715-1
    env_file: .env
    depends_on:
      - database
      - redis
      - caddy
    restart: always
    networks:
      - nginx-proxy-manager_default
  # Events service (quark)
  events:
    image: ghcr.io/revoltchat/bonfire:20220715-1
    env_file: .env
    depends_on:
      - database
      - redis
      - caddy
    restart: always
    networks:
      - nginx-proxy-manager_default
  # Web App (revite)
  web:
    image: ghcr.io/revoltchat/client:master
    env_file: .env
    depends_on:
      - caddy
    restart: always
    networks:
      - nginx-proxy-manager_default
  # File server (autumn)
  autumn:
    image: ghcr.io/revoltchat/autumn:1.1.5
    env_file: .env
    depends_on:
      - database
      - createbuckets
      - caddy
    environment:
      - AUTUMN_MONGO_URI=mongodb://database
    restart: always
    networks:
      - nginx-proxy-manager_default
  # Metadata and image proxy (january)
  january:
    image: ghcr.io/revoltchat/january:master
    depends_on:
      - caddy
    restart: always
    networks:
      - nginx-proxy-manager_default
  # Create buckets for minio.
  createbuckets:
    image: minio/mc
    depends_on:
      - minio
    env_file: .env
    entrypoint: >
      /bin/sh -c "
      while ! curl -s --output /dev/null --connect-timeout 1 http://minio:9000; do echo 'Waiting minio...' && sleep 0.1; done;
      /usr/bin/mc alias set minio http://minio:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD;
      /usr/bin/mc mb minio/attachments;
      /usr/bin/mc mb minio/avatars;
      /usr/bin/mc mb minio/backgrounds;
      /usr/bin/mc mb minio/icons;
      /usr/bin/mc mb minio/banners;
      /usr/bin/mc mb minio/emojis;
      exit 0;
      "
    networks:
      - nginx-proxy-manager_default
networks:
  nginx-proxy-manager_default:
    external: true

Note the networks: - nginx-proxy-manager_default on each service

  1. I routed all traffic to the caddy server using the hostname feature with the scheme http and port 80 (I have not tested routing traffic through using scheme https and 443 yet)

  2. Instead of deleting all containers and doing docker-compose up -d, I have just done docker-compose up -d and it updated the .env for the containers. If this does not work for you then just delete the containers, volumes etc and then do docker-compose up -d for a fresh install

  3. In cloudflare, I purged all cache and purged cache for the browser and it works!

I hope this guide helps you guys out.

@markiemm commented on GitHub (Mar 13, 2023): I have finally solved this. This is my configuration ``` # Redis REDIS_URI=redis://redis/ # Hostname used for Caddy # This should in most cases match REVOLT_APP_URL HOSTNAME=:80 # URL to where the Revolt app is publicly accessible REVOLT_APP_URL=https://revolt.mydomain.net # URL to where the API is publicly accessible REVOLT_PUBLIC_URL=https://revolt.mydomain.net/api VITE_API_URL=https://revolt.mydomain.net/api # URL to where the WebSocket server is publicly accessible REVOLT_EXTERNAL_WS_URL=wss://revolt.mydomain.net/ws # URL to where Autumn is publicly available AUTUMN_PUBLIC_URL=https://revolt.mydomain.net/autumn # URL to where January is publicly available JANUARY_PUBLIC_URL=https://revolt.mydomain.net/january ... ``` (``revolt.mydomain.net`` is a placeholder, i changed it to my actual domain) So my first attempt was with my Nginx proxy manager, I was routing traffic straight to the ``revolt_web_1`` on port 5000 with scheme ``https`` which was a mistake and also the ``HOSTNAME`` env variable was https://revolt.mydomain.net # How I got it working 1. I put all the containers on the nginx proxy manager network using this config: ``` version: "3.8" services: # MongoDB database database: image: mongo restart: always volumes: - ./data/db:/data/db networks: - nginx-proxy-manager_default # Redis server redis: image: eqalpha/keydb restart: always networks: - nginx-proxy-manager_default # S3-compatible storage server minio: image: minio/minio command: server /data env_file: .env volumes: - ./data/minio:/data restart: always networks: - nginx-proxy-manager_default # Caddy web server caddy: image: caddy restart: always env_file: .env volumes: - ./Caddyfile:/etc/caddy/Caddyfile - ./data/caddy-data:/data - ./data/caddy-config:/config networks: - nginx-proxy-manager_default hostname: caddy # API server (delta) api: image: ghcr.io/revoltchat/server:20220715-1 env_file: .env depends_on: - database - redis - caddy restart: always networks: - nginx-proxy-manager_default # Events service (quark) events: image: ghcr.io/revoltchat/bonfire:20220715-1 env_file: .env depends_on: - database - redis - caddy restart: always networks: - nginx-proxy-manager_default # Web App (revite) web: image: ghcr.io/revoltchat/client:master env_file: .env depends_on: - caddy restart: always networks: - nginx-proxy-manager_default # File server (autumn) autumn: image: ghcr.io/revoltchat/autumn:1.1.5 env_file: .env depends_on: - database - createbuckets - caddy environment: - AUTUMN_MONGO_URI=mongodb://database restart: always networks: - nginx-proxy-manager_default # Metadata and image proxy (january) january: image: ghcr.io/revoltchat/january:master depends_on: - caddy restart: always networks: - nginx-proxy-manager_default # Create buckets for minio. createbuckets: image: minio/mc depends_on: - minio env_file: .env entrypoint: > /bin/sh -c " while ! curl -s --output /dev/null --connect-timeout 1 http://minio:9000; do echo 'Waiting minio...' && sleep 0.1; done; /usr/bin/mc alias set minio http://minio:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD; /usr/bin/mc mb minio/attachments; /usr/bin/mc mb minio/avatars; /usr/bin/mc mb minio/backgrounds; /usr/bin/mc mb minio/icons; /usr/bin/mc mb minio/banners; /usr/bin/mc mb minio/emojis; exit 0; " networks: - nginx-proxy-manager_default networks: nginx-proxy-manager_default: external: true ``` Note the `` networks: - nginx-proxy-manager_default `` on each service 2. I routed all traffic to the caddy server using the hostname feature with the scheme ``http`` and port ``80`` (I have not tested routing traffic through using scheme ``https`` and ``443`` yet) 3. Instead of deleting all containers and doing ``docker-compose up -d``, I have just done ``docker-compose up -d`` and it updated the .env for the containers. If this does not work for you then just delete the containers, volumes etc and then do ``docker-compose up -d`` for a fresh install 4. In cloudflare, I purged all cache and purged cache for the browser and it works! I hope this guide helps you guys out.
Author
Owner

@markiemm commented on GitHub (Mar 13, 2023):

This is all the settings i've done
4
3
2
1

@markiemm commented on GitHub (Mar 13, 2023): This is all the settings i've done ![4](https://user-images.githubusercontent.com/63561809/224840963-e3449e52-9f82-466f-af79-9d76252563c2.png) ![3](https://user-images.githubusercontent.com/63561809/224840966-37efc6d7-0734-4a7a-ad8e-b90b1199bd60.png) ![2](https://user-images.githubusercontent.com/63561809/224840968-4d91b900-d5b8-4d2b-b50f-aba52b7b89c4.png) ![1](https://user-images.githubusercontent.com/63561809/224840970-8dbb4063-4d06-4072-98c9-368321cbdb27.png)
Author
Owner

@MatveyMirman commented on GitHub (May 20, 2023):

I have finally solved this. This is my configuration

  # Redis
  REDIS_URI=redis://redis/
  
  # Hostname used for Caddy
  # This should in most cases match REVOLT_APP_URL
  HOSTNAME=:80
  
  # URL to where the Revolt app is publicly accessible
  REVOLT_APP_URL=https://revolt.mydomain.net
  
  # URL to where the API is publicly accessible
  REVOLT_PUBLIC_URL=https://revolt.mydomain.net/api
  VITE_API_URL=https://revolt.mydomain.net/api
  
  # URL to where the WebSocket server is publicly accessible
  REVOLT_EXTERNAL_WS_URL=wss://revolt.mydomain.net/ws
  
  # URL to where Autumn is publicly available
  AUTUMN_PUBLIC_URL=https://revolt.mydomain.net/autumn
  
  # URL to where January is publicly available
  JANUARY_PUBLIC_URL=https://revolt.mydomain.net/january

...

(revolt.mydomain.net is a placeholder, i changed it to my actual domain)

So my first attempt was with my Nginx proxy manager, I was routing traffic straight to the revolt_web_1 on port 5000 with scheme https which was a mistake and also the HOSTNAME env variable was https://revolt.mydomain.net

How I got it working

1. I put all the containers on the nginx proxy manager network using this config:
version: "3.8"

services:
  # MongoDB database
  database:
    image: mongo
    restart: always
    volumes:
      - ./data/db:/data/db
    networks:
      - nginx-proxy-manager_default
  # Redis server
  redis:
    image: eqalpha/keydb
    restart: always
    networks:
      - nginx-proxy-manager_default
  # S3-compatible storage server
  minio:
    image: minio/minio
    command: server /data
    env_file: .env
    volumes:
      - ./data/minio:/data
    restart: always
    networks:
      - nginx-proxy-manager_default
  # Caddy web server
  caddy:
    image: caddy
    restart: always
    env_file: .env
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./data/caddy-data:/data
      - ./data/caddy-config:/config
    networks:
      - nginx-proxy-manager_default
    hostname: caddy
  # API server (delta)
  api:
    image: ghcr.io/revoltchat/server:20220715-1
    env_file: .env
    depends_on:
      - database
      - redis
      - caddy
    restart: always
    networks:
      - nginx-proxy-manager_default
  # Events service (quark)
  events:
    image: ghcr.io/revoltchat/bonfire:20220715-1
    env_file: .env
    depends_on:
      - database
      - redis
      - caddy
    restart: always
    networks:
      - nginx-proxy-manager_default
  # Web App (revite)
  web:
    image: ghcr.io/revoltchat/client:master
    env_file: .env
    depends_on:
      - caddy
    restart: always
    networks:
      - nginx-proxy-manager_default
  # File server (autumn)
  autumn:
    image: ghcr.io/revoltchat/autumn:1.1.5
    env_file: .env
    depends_on:
      - database
      - createbuckets
      - caddy
    environment:
      - AUTUMN_MONGO_URI=mongodb://database
    restart: always
    networks:
      - nginx-proxy-manager_default
  # Metadata and image proxy (january)
  january:
    image: ghcr.io/revoltchat/january:master
    depends_on:
      - caddy
    restart: always
    networks:
      - nginx-proxy-manager_default
  # Create buckets for minio.
  createbuckets:
    image: minio/mc
    depends_on:
      - minio
    env_file: .env
    entrypoint: >
      /bin/sh -c "
      while ! curl -s --output /dev/null --connect-timeout 1 http://minio:9000; do echo 'Waiting minio...' && sleep 0.1; done;
      /usr/bin/mc alias set minio http://minio:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD;
      /usr/bin/mc mb minio/attachments;
      /usr/bin/mc mb minio/avatars;
      /usr/bin/mc mb minio/backgrounds;
      /usr/bin/mc mb minio/icons;
      /usr/bin/mc mb minio/banners;
      /usr/bin/mc mb minio/emojis;
      exit 0;
      "
    networks:
      - nginx-proxy-manager_default
networks:
  nginx-proxy-manager_default:
    external: true

Note the networks: - nginx-proxy-manager_default on each service

2. I routed all traffic to the caddy server using the hostname feature with the scheme `http` and port `80` (I have not tested routing traffic through using scheme `https` and `443` yet)

3. Instead of deleting all containers and doing `docker-compose up -d`, I have just done `docker-compose up -d` and it updated the .env for the containers. If this does not work for you then just delete the containers, volumes etc and then do `docker-compose up -d` for a fresh install

4. In cloudflare, I purged all cache and purged cache for the browser and it works!

I hope this guide helps you guys out.

@markiemm first of all I followed your guide and it was very helpful.

The main takeaway is that if you are using a reverse proxy you must set your hostname to :80, I'm using traefik, and using :433 did not work unfortunately.

Since everything goes through Caddy anyways, you only need to have it in the reverse proxy network.

I have a similar config but with traefik, and only Caddy is in the traefik_default network.
I didn't need to set any header middlewares, but I do have insecureSkipVerify enabled in the traefik.yml file.

@MatveyMirman commented on GitHub (May 20, 2023): > I have finally solved this. This is my configuration > > ``` > # Redis > REDIS_URI=redis://redis/ > > # Hostname used for Caddy > # This should in most cases match REVOLT_APP_URL > HOSTNAME=:80 > > # URL to where the Revolt app is publicly accessible > REVOLT_APP_URL=https://revolt.mydomain.net > > # URL to where the API is publicly accessible > REVOLT_PUBLIC_URL=https://revolt.mydomain.net/api > VITE_API_URL=https://revolt.mydomain.net/api > > # URL to where the WebSocket server is publicly accessible > REVOLT_EXTERNAL_WS_URL=wss://revolt.mydomain.net/ws > > # URL to where Autumn is publicly available > AUTUMN_PUBLIC_URL=https://revolt.mydomain.net/autumn > > # URL to where January is publicly available > JANUARY_PUBLIC_URL=https://revolt.mydomain.net/january > > ... > ``` > > (`revolt.mydomain.net` is a placeholder, i changed it to my actual domain) > > So my first attempt was with my Nginx proxy manager, I was routing traffic straight to the `revolt_web_1` on port 5000 with scheme `https` which was a mistake and also the `HOSTNAME` env variable was https://revolt.mydomain.net > # How I got it working > > 1. I put all the containers on the nginx proxy manager network using this config: > > > ``` > version: "3.8" > > services: > # MongoDB database > database: > image: mongo > restart: always > volumes: > - ./data/db:/data/db > networks: > - nginx-proxy-manager_default > # Redis server > redis: > image: eqalpha/keydb > restart: always > networks: > - nginx-proxy-manager_default > # S3-compatible storage server > minio: > image: minio/minio > command: server /data > env_file: .env > volumes: > - ./data/minio:/data > restart: always > networks: > - nginx-proxy-manager_default > # Caddy web server > caddy: > image: caddy > restart: always > env_file: .env > volumes: > - ./Caddyfile:/etc/caddy/Caddyfile > - ./data/caddy-data:/data > - ./data/caddy-config:/config > networks: > - nginx-proxy-manager_default > hostname: caddy > # API server (delta) > api: > image: ghcr.io/revoltchat/server:20220715-1 > env_file: .env > depends_on: > - database > - redis > - caddy > restart: always > networks: > - nginx-proxy-manager_default > # Events service (quark) > events: > image: ghcr.io/revoltchat/bonfire:20220715-1 > env_file: .env > depends_on: > - database > - redis > - caddy > restart: always > networks: > - nginx-proxy-manager_default > # Web App (revite) > web: > image: ghcr.io/revoltchat/client:master > env_file: .env > depends_on: > - caddy > restart: always > networks: > - nginx-proxy-manager_default > # File server (autumn) > autumn: > image: ghcr.io/revoltchat/autumn:1.1.5 > env_file: .env > depends_on: > - database > - createbuckets > - caddy > environment: > - AUTUMN_MONGO_URI=mongodb://database > restart: always > networks: > - nginx-proxy-manager_default > # Metadata and image proxy (january) > january: > image: ghcr.io/revoltchat/january:master > depends_on: > - caddy > restart: always > networks: > - nginx-proxy-manager_default > # Create buckets for minio. > createbuckets: > image: minio/mc > depends_on: > - minio > env_file: .env > entrypoint: > > /bin/sh -c " > while ! curl -s --output /dev/null --connect-timeout 1 http://minio:9000; do echo 'Waiting minio...' && sleep 0.1; done; > /usr/bin/mc alias set minio http://minio:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD; > /usr/bin/mc mb minio/attachments; > /usr/bin/mc mb minio/avatars; > /usr/bin/mc mb minio/backgrounds; > /usr/bin/mc mb minio/icons; > /usr/bin/mc mb minio/banners; > /usr/bin/mc mb minio/emojis; > exit 0; > " > networks: > - nginx-proxy-manager_default > networks: > nginx-proxy-manager_default: > external: true > ``` > > Note the `networks: - nginx-proxy-manager_default` on each service > > 2. I routed all traffic to the caddy server using the hostname feature with the scheme `http` and port `80` (I have not tested routing traffic through using scheme `https` and `443` yet) > > 3. Instead of deleting all containers and doing `docker-compose up -d`, I have just done `docker-compose up -d` and it updated the .env for the containers. If this does not work for you then just delete the containers, volumes etc and then do `docker-compose up -d` for a fresh install > > 4. In cloudflare, I purged all cache and purged cache for the browser and it works! > > > I hope this guide helps you guys out. @markiemm first of all I followed your guide and it was very helpful. The main takeaway is that if you are using a reverse proxy you **must set your hostname to :80**, I'm using traefik, and using :433 did not work unfortunately. Since everything goes through Caddy anyways, you only need to have it in the reverse proxy network. I have a similar config but with traefik, and only Caddy is in the `traefik_default` network. I didn't need to set any header middlewares, but I do have `insecureSkipVerify` enabled in the `traefik.yml` file.
Author
Owner

@demetera commented on GitHub (Jun 3, 2023):

I'm interested about pure minimal config without Cloudfare and using certificate from Letsencrypt and nginx as a reverse proxy. I'm using no-ip.com DDNS as a domain.

Managed to get rid of NETWORKERROR message, when registering an account - now it's working, but now I have UNKNOWNERROR when logging in with existing account. Console showing problems while connecting to wss Websocket endpoint.

I have very similar config to : https://github.com/revoltchat/self-hosted/issues/25#issuecomment-1467010464
But without proxy managers (which shouldn't be a part of the game) + caddy config based on the official manual ("1234:80")

Nginx location points to: http://localhost:1234

I assume, the problem is very obvious, but I can't figure out. Trying to guess the solution for 2 days already.

@demetera commented on GitHub (Jun 3, 2023): I'm interested about pure minimal config without Cloudfare and using certificate from Letsencrypt and nginx as a reverse proxy. I'm using no-ip.com DDNS as a domain. Managed to get rid of NETWORKERROR message, when registering an account - now it's working, but now I have UNKNOWNERROR when logging in with existing account. Console showing problems while connecting to wss Websocket endpoint. I have very similar config to : https://github.com/revoltchat/self-hosted/issues/25#issuecomment-1467010464 But without proxy managers (which shouldn't be a part of the game) + caddy config based on the official manual ("1234:80") Nginx location points to: http://localhost:1234 I assume, the problem is very obvious, but I can't figure out. Trying to guess the solution for 2 days already.
Author
Owner

@Crashdummyy commented on GitHub (Jun 4, 2023):

I'm interested about pure minimal config without Cloudfare and using certificate from Letsencrypt and nginx as a reverse proxy. I'm using no-ip.com DDNS as a domain.

Managed to get rid of NETWORKERROR message, when registering an account - now it's working, but now I have UNKNOWNERROR when logging in with existing account. Console showing problems while connecting to wss Websocket endpoint.

I have very similar config to : #25 (comment) But without proxy managers (which shouldn't be a part of the game) + caddy config based on the official manual ("1234:80")

Nginx location points to: http://localhost:1234

I assume, the problem is very obvious, but I can't figure out. Trying to guess the solution for 2 days already.

Despite the readme stating how to do it correctly I removed the caddy entry from docker-compose and exposed the ports again.
My nginx config uses subdomains maybe that somehows works better on your setup as well.
I'll just leave my setup here maybe it can help you a bit.

docker-compose.yml
version: "3.8"

services:
  # MongoDB database
  database:
    image: mongo
    restart: always
    volumes:
      - ./data/db:/data/db

  # Redis server
  redis:
    image: eqalpha/keydb
    restart: always

  # S3-compatible storage server
  minio:
    image: minio/minio
    command: server /data
    env_file: .env
    volumes:
      - ./data/minio:/data
    restart: always
    ports:
      - "10000:9000"

  # API server (delta)
  api:
    image: ghcr.io/revoltchat/server:20230421-3
    env_file: .env
    depends_on:
      - database
      - redis
    restart: always
    ports:
      - "8000:8000"

  # Events service (quark)
  events:
    image: ghcr.io/revoltchat/bonfire:20230421-3
    env_file: .env
    depends_on:
      - database
      - redis
    restart: always
    ports:
      - "9000:9000"

  # Web App (revite)
  web:
    image: ghcr.io/revoltchat/client:master
    env_file: .env
    restart: always
    ports:
      - "5000:5000"

  # File server (autumn)
  autumn:
    image: ghcr.io/revoltchat/autumn:1.1.8
    env_file: .env
    depends_on:
      - database
      - createbuckets
    environment:
      - AUTUMN_MONGO_URI=mongodb://database
    restart: always
    ports:
      - "3000:3000"

  # Metadata and image proxy (january)
  january:
    image: ghcr.io/revoltchat/january:master
    restart: always
    ports:
      - "7000:7000"

  # Create buckets for minio.
  createbuckets:
    image: minio/mc
    depends_on:
      - minio
    env_file: .env
    entrypoint: >
      /bin/sh -c "
      while ! curl -s --output /dev/null --connect-timeout 1 http://minio:9000; do echo 'Waiting minio...' && sleep 0.1; done;
      /usr/bin/mc alias set minio http://minio:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD;
      /usr/bin/mc mb minio/attachments;
      /usr/bin/mc mb minio/avatars;
      /usr/bin/mc mb minio/backgrounds;
      /usr/bin/mc mb minio/icons;
      /usr/bin/mc mb minio/banners;
      /usr/bin/mc mb minio/emojis;
      exit 0;
      "
.env
REVOLT_APP_URL=https://revolt.YOUR.DOMAIN
REVOLT_PUBLIC_URL=https://api.revolt.YOUR.DOMAIN
VITE_API_URL=https://api.revolt.YOUR.DOMAIN
REVOLT_EXTERNAL_WS_URL=wss://ws.revolt.YOUR.DOMAIN
AUTUMN_PUBLIC_URL=https://autumn.revolt.YOUR.DOMAIN
JANUARY_PUBLIC_URL=https://january.revolt.YOUR.DOMAIN
nginx
map $http_host $revolt_upstream {
  revolt.YOUR.DOMAIN http://127.0.0.1:5000;
  api.revolt.YOUR.DOMAIN http://127.0.0.1:8000;
  ws.revolt.YOUR.DOMAIN http://127.0.0.1:9000;
  autumn.revolt.YOUR.DOMAIN http://127.0.0.1:3000;
  january.revolt.YOUR.DOMAIN http://127.0.0.1:7000;
}

server {
  server_name revolt.YOUR.DOMAIN api.revolt.YOUR.DOMAIN ws.revolt.YOUR.DOMAIN autumn.revolt.YOUR.DOMAIN january.revolt.YOUR.DOMAIN;
  
  listen 80;

  add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;

    client_max_body_size 10G;
    client_body_timeout 6000m;
    fastcgi_buffers 64 4K;
    client_header_timeout    6000m;
    proxy_connect_timeout     6000m;
    proxy_read_timeout      6000m;
    proxy_send_timeout      6000m;

  if ($http_upgrade) {
    rewrite ^(.*)$ /ws_78dd759593f041bc970fd7eef8b0c4af$1;
  }

  location / {
    proxy_pass $revolt_upstream;
    proxy_set_header Host $host;
  }

  location /ws_78dd759593f041bc970fd7eef8b0c4af/ {
    proxy_pass $revolt_upstream/;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header Connection $http_connection;
    proxy_set_header Upgrade $http_upgrade;
    # Important, to prevent ws from sending data for a long time and causing timeout disconnection.
    proxy_read_timeout 24h;
  }
    
}

@Crashdummyy commented on GitHub (Jun 4, 2023): > I'm interested about pure minimal config without Cloudfare and using certificate from Letsencrypt and nginx as a reverse proxy. I'm using no-ip.com DDNS as a domain. > > Managed to get rid of NETWORKERROR message, when registering an account - now it's working, but now I have UNKNOWNERROR when logging in with existing account. Console showing problems while connecting to wss Websocket endpoint. > > I have very similar config to : [#25 (comment)](https://github.com/revoltchat/self-hosted/issues/25#issuecomment-1467010464) But without proxy managers (which shouldn't be a part of the game) + caddy config based on the official manual ("1234:80") > > Nginx location points to: http://localhost:1234 > > I assume, the problem is very obvious, but I can't figure out. Trying to guess the solution for 2 days already. Despite the readme stating how to do it correctly I removed the caddy entry from docker-compose and exposed the ports again. My nginx config uses subdomains maybe that somehows works better on your setup as well. I'll just leave my setup here maybe it can help you a bit. <details><summary>docker-compose.yml</summary> ```yml version: "3.8" services: # MongoDB database database: image: mongo restart: always volumes: - ./data/db:/data/db # Redis server redis: image: eqalpha/keydb restart: always # S3-compatible storage server minio: image: minio/minio command: server /data env_file: .env volumes: - ./data/minio:/data restart: always ports: - "10000:9000" # API server (delta) api: image: ghcr.io/revoltchat/server:20230421-3 env_file: .env depends_on: - database - redis restart: always ports: - "8000:8000" # Events service (quark) events: image: ghcr.io/revoltchat/bonfire:20230421-3 env_file: .env depends_on: - database - redis restart: always ports: - "9000:9000" # Web App (revite) web: image: ghcr.io/revoltchat/client:master env_file: .env restart: always ports: - "5000:5000" # File server (autumn) autumn: image: ghcr.io/revoltchat/autumn:1.1.8 env_file: .env depends_on: - database - createbuckets environment: - AUTUMN_MONGO_URI=mongodb://database restart: always ports: - "3000:3000" # Metadata and image proxy (january) january: image: ghcr.io/revoltchat/january:master restart: always ports: - "7000:7000" # Create buckets for minio. createbuckets: image: minio/mc depends_on: - minio env_file: .env entrypoint: > /bin/sh -c " while ! curl -s --output /dev/null --connect-timeout 1 http://minio:9000; do echo 'Waiting minio...' && sleep 0.1; done; /usr/bin/mc alias set minio http://minio:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD; /usr/bin/mc mb minio/attachments; /usr/bin/mc mb minio/avatars; /usr/bin/mc mb minio/backgrounds; /usr/bin/mc mb minio/icons; /usr/bin/mc mb minio/banners; /usr/bin/mc mb minio/emojis; exit 0; " ``` </details> <details><summary>.env</summary> ```ini REVOLT_APP_URL=https://revolt.YOUR.DOMAIN REVOLT_PUBLIC_URL=https://api.revolt.YOUR.DOMAIN VITE_API_URL=https://api.revolt.YOUR.DOMAIN REVOLT_EXTERNAL_WS_URL=wss://ws.revolt.YOUR.DOMAIN AUTUMN_PUBLIC_URL=https://autumn.revolt.YOUR.DOMAIN JANUARY_PUBLIC_URL=https://january.revolt.YOUR.DOMAIN ``` </details> <details><summary>nginx</summary> ```nginx map $http_host $revolt_upstream { revolt.YOUR.DOMAIN http://127.0.0.1:5000; api.revolt.YOUR.DOMAIN http://127.0.0.1:8000; ws.revolt.YOUR.DOMAIN http://127.0.0.1:9000; autumn.revolt.YOUR.DOMAIN http://127.0.0.1:3000; january.revolt.YOUR.DOMAIN http://127.0.0.1:7000; } server { server_name revolt.YOUR.DOMAIN api.revolt.YOUR.DOMAIN ws.revolt.YOUR.DOMAIN autumn.revolt.YOUR.DOMAIN january.revolt.YOUR.DOMAIN; listen 80; add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always; client_max_body_size 10G; client_body_timeout 6000m; fastcgi_buffers 64 4K; client_header_timeout 6000m; proxy_connect_timeout 6000m; proxy_read_timeout 6000m; proxy_send_timeout 6000m; if ($http_upgrade) { rewrite ^(.*)$ /ws_78dd759593f041bc970fd7eef8b0c4af$1; } location / { proxy_pass $revolt_upstream; proxy_set_header Host $host; } location /ws_78dd759593f041bc970fd7eef8b0c4af/ { proxy_pass $revolt_upstream/; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header Connection $http_connection; proxy_set_header Upgrade $http_upgrade; # Important, to prevent ws from sending data for a long time and causing timeout disconnection. proxy_read_timeout 24h; } } ``` </details>
Author
Owner

@demetera commented on GitHub (Jun 4, 2023):

Despite the readme stating how to do it correctly I removed the caddy entry from docker-compose and exposed the ports again. My nginx config uses subdomains maybe that somehows works better on your setup as well. I'll just leave my setup here maybe it can help you a bit.

Thanks a lot for your config. After 1 more hour I've managed to launch the instance without Cloudfare, additional domain mappings, using Letsencrypt cert and no-ip secondary level domain.

In docker-compose.yml I've changed only these lines for caddy initially (removed https):

ports:
  - "1234:80"
  #- "443:443"

My .env file header:

HOSTNAME=:80
REVOLT_APP_URL=https://mynoipdomain.org
REVOLT_PUBLIC_URL=https://mynoipdomain.org/api
VITE_API_URL=https://mynoipdomain.org/api
REVOLT_EXTERNAL_WS_URL=wss://mynoipdomain.org/ws
AUTUMN_PUBLIC_URL=https://mynoipdomain.org/autumn
JANUARY_PUBLIC_URL=https://mynoipdomain.org/january

But, the problem was in Nginx (location part) actually (I guess).
Instead of
proxy_set_header Connection upgrade;
I've put
proxy_set_header Connection $http_connection;
as per your sample:

location / {
    proxy_pass http://localhost:1234/;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_set_header Host $host;
    proxy_http_version 1.1;
        }

I still have some errors in console, but those are really minor comparing to that challenge I had.

Thanks!

@demetera commented on GitHub (Jun 4, 2023): > Despite the readme stating how to do it correctly I removed the caddy entry from docker-compose and exposed the ports again. My nginx config uses subdomains maybe that somehows works better on your setup as well. I'll just leave my setup here maybe it can help you a bit. Thanks a lot for your config. After 1 more hour I've managed to launch the instance without Cloudfare, additional domain mappings, using Letsencrypt cert and no-ip secondary level domain. In docker-compose.yml I've changed only these lines for caddy initially (removed https): ```yaml ports: - "1234:80" #- "443:443" ``` My .env file header: ```env HOSTNAME=:80 REVOLT_APP_URL=https://mynoipdomain.org REVOLT_PUBLIC_URL=https://mynoipdomain.org/api VITE_API_URL=https://mynoipdomain.org/api REVOLT_EXTERNAL_WS_URL=wss://mynoipdomain.org/ws AUTUMN_PUBLIC_URL=https://mynoipdomain.org/autumn JANUARY_PUBLIC_URL=https://mynoipdomain.org/january ``` But, the problem was in Nginx (location part) actually (I guess). Instead of `proxy_set_header Connection upgrade;` I've put `proxy_set_header Connection $http_connection;` as per your sample: ```nginx location / { proxy_pass http://localhost:1234/; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $http_connection; proxy_set_header Host $host; proxy_http_version 1.1; } ``` I still have some errors in console, but those are really minor comparing to that challenge I had. Thanks!
Author
Owner

@demetera commented on GitHub (Jun 4, 2023):

Also, I would like to document all the steps for beginners (and myself too for the future purpose) to configure secured self-hosted instance in a very detailed way (including domain, VPS registration and especially Nginx part)

@demetera commented on GitHub (Jun 4, 2023): Also, I would like to document all the steps for beginners (and myself too for the future purpose) to configure secured self-hosted instance in a very detailed way (including domain, VPS registration and especially Nginx part)
Author
Owner

@GreaterJoe commented on GitHub (Jul 1, 2023):

I'm trying to make an invite-only server. Got the .env editing done, I proceed to the next step:

~/revolt# docker compose exec database mongosh
service "database" is not running container #1

Something tells me I haven't installed Mongo to the app's satisfaction, but I'm not sure how that's done. This is on a VPS running Debian 11.

@GreaterJoe commented on GitHub (Jul 1, 2023): I'm trying to make an invite-only server. Got the .env editing done, I proceed to the next step: ``` ~/revolt# docker compose exec database mongosh service "database" is not running container #1 ``` Something tells me I haven't installed Mongo to the app's satisfaction, but I'm not sure how that's done. This is on a VPS running Debian 11.
Author
Owner

@zicklag commented on GitHub (Jul 1, 2023):

Try running docker compose up -d first. That is required to start the containers before the docker compose exec database mongosh command executes the mongosh command in the database container.

@zicklag commented on GitHub (Jul 1, 2023): Try running `docker compose up -d` first. That is required to start the containers before the `docker compose exec database mongosh` command executes the `mongosh` command in the `database` container.
Author
Owner

@GreaterJoe commented on GitHub (Jul 1, 2023):

That worked perfectly, thank you.

@GreaterJoe commented on GitHub (Jul 1, 2023): That worked perfectly, thank you.
Author
Owner

@GNUGradyn commented on GitHub (Jul 12, 2023):

anyone experiencing revolt redirecting to itself?
image
here is my nginx config

server {
    listen 80;
    server_name chat.hbigroup.org;
    location / {
        return 301 https://$host$request_uri;
    }
}
server {
    listen 443 ssl;
    server_name chat.hbigroup.org;
    ssl_certificate /etc/letsencrypt/live/hbigroup.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hbigroup.org/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:46395;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # WebSocket support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
@GNUGradyn commented on GitHub (Jul 12, 2023): anyone experiencing revolt redirecting to itself? ![image](https://github.com/revoltchat/self-hosted/assets/20762604/b11b0a28-5dc1-415c-a895-aa20222db0f2) here is my nginx config ``` server { listen 80; server_name chat.hbigroup.org; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; server_name chat.hbigroup.org; ssl_certificate /etc/letsencrypt/live/hbigroup.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/hbigroup.org/privkey.pem; location / { proxy_pass http://127.0.0.1:46395; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # WebSocket support proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } ```
Author
Owner

@Fifthdread commented on GitHub (Aug 4, 2023):

I've been struggling to self-host Revolt in docker with my NGINX reverse proxy for days now. I can't get it working via https.

No matter what I change I get some variant of this error. Replacing mydomain.com with my actual domain...

xhr.js:210 Mixed Content: The page at 'https://mydomain.com/login' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://mydomain.com/'. This request has been blocked; the content must be served over HTTPS.

All URLs that I can find have been adjusted for HTTPS, so what gives?

I tried changing all my environment variables to HTTPS instead of HTTP. Changed WS to WSS. I'm using a reverse proxy, so I set HOSTNAME to :80.

Maybe I need to do some work in NGINX proxy manager, but I can't figure out what's going on... Any tips?

@Fifthdread commented on GitHub (Aug 4, 2023): I've been struggling to self-host Revolt in docker with my NGINX reverse proxy for days now. I can't get it working via https. No matter what I change I get some variant of this error. Replacing mydomain.com with my actual domain... `xhr.js:210 Mixed Content: The page at 'https://mydomain.com/login' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://mydomain.com/'. This request has been blocked; the content must be served over HTTPS.` All URLs that I can find have been adjusted for HTTPS, so what gives? I tried changing all my environment variables to HTTPS instead of HTTP. Changed WS to WSS. I'm using a reverse proxy, so I set HOSTNAME to :80. Maybe I need to do some work in NGINX proxy manager, but I can't figure out what's going on... Any tips?
Author
Owner

@0dragosh commented on GitHub (Aug 4, 2023):

@Fifthdread I fixed that by moving each service to its own subdomain

@0dragosh commented on GitHub (Aug 4, 2023): @Fifthdread I fixed that by moving each service to its own subdomain
Author
Owner

@steel4me commented on GitHub (Oct 7, 2023):

It's pain! Well documented! Im outside docker network with nginx. Must work too. Basicly the same . No Errors in Network / console, till i try to start voice chat........

i get:

Request URL: https://revolt.domain.com/api/channels/01HC3QM8FZT4WZS4M8V8KZMNPJ/join_call
Request Method: POST
Status Code: 400 Bad Request
Remote Address: 1.2.3.4:443
Referrer Policy: strict-origin-when-cross-origin
  # Caddy web server
  caddy:
    image: caddy
    restart: always
    env_file: .env
    ports:
      - "88:80"
      #- "443:443"
# Hostname used for Caddy
# This should in most cases match REVOLT_APP_URL
HOSTNAME=:80

# URL to where the Revolt app is publicly accessible
REVOLT_APP_URL=https://revolt.domain.com

# URL to where the API is publicly accessible
REVOLT_PUBLIC_URL=https://revolt.domain.com/api
VITE_API_URL=https://revolt.domain.com/api

# URL to where the WebSocket server is publicly accessible
REVOLT_EXTERNAL_WS_URL=wss://revolt.domain.com/ws

# URL to where Autumn is publicly available
AUTUMN_PUBLIC_URL=https://revolt.domain.com/autumn

# URL to where January is publicly available
JANUARY_PUBLIC_URL=https://revolt.domain.com/january
server  {
        listen          443 ssl;
        server_name 	revolt.domain.com;
	include         ssl.conf;	
		
	add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;

        client_max_body_size 10G;
        client_body_timeout 6000m;
        fastcgi_buffers 64 4K;
        client_header_timeout    6000m;
        proxy_connect_timeout     6000m;
        proxy_read_timeout      6000m;
        proxy_send_timeout      6000m;

        
	if ($http_upgrade) {
        rewrite ^(.*)$ /ws_78dd759593f041bc970fd7eef8b0c4af$1;
        }

        location / {
        proxy_pass http://localhost:88;
        proxy_set_header Host $host;
        }

        location /ws_78dd759593f041bc970fd7eef8b0c4af/ {
        proxy_pass http://localhost:88/;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header Connection $http_connection;
        proxy_set_header Upgrade $http_upgrade;
        # Important, to prevent ws from sending data for a long time and causing timeout disconnection.
        proxy_read_timeout 24h;
        }
		
}
@steel4me commented on GitHub (Oct 7, 2023): It's pain! Well documented! Im outside docker network with nginx. Must work too. Basicly the same . No Errors in Network / console, till i try to start voice chat........ i get: ``` Request URL: https://revolt.domain.com/api/channels/01HC3QM8FZT4WZS4M8V8KZMNPJ/join_call Request Method: POST Status Code: 400 Bad Request Remote Address: 1.2.3.4:443 Referrer Policy: strict-origin-when-cross-origin ``` ``` # Caddy web server caddy: image: caddy restart: always env_file: .env ports: - "88:80" #- "443:443" ``` ``` # Hostname used for Caddy # This should in most cases match REVOLT_APP_URL HOSTNAME=:80 # URL to where the Revolt app is publicly accessible REVOLT_APP_URL=https://revolt.domain.com # URL to where the API is publicly accessible REVOLT_PUBLIC_URL=https://revolt.domain.com/api VITE_API_URL=https://revolt.domain.com/api # URL to where the WebSocket server is publicly accessible REVOLT_EXTERNAL_WS_URL=wss://revolt.domain.com/ws # URL to where Autumn is publicly available AUTUMN_PUBLIC_URL=https://revolt.domain.com/autumn # URL to where January is publicly available JANUARY_PUBLIC_URL=https://revolt.domain.com/january ``` ``` server { listen 443 ssl; server_name revolt.domain.com; include ssl.conf; add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always; client_max_body_size 10G; client_body_timeout 6000m; fastcgi_buffers 64 4K; client_header_timeout 6000m; proxy_connect_timeout 6000m; proxy_read_timeout 6000m; proxy_send_timeout 6000m; if ($http_upgrade) { rewrite ^(.*)$ /ws_78dd759593f041bc970fd7eef8b0c4af$1; } location / { proxy_pass http://localhost:88; proxy_set_header Host $host; } location /ws_78dd759593f041bc970fd7eef8b0c4af/ { proxy_pass http://localhost:88/; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header Connection $http_connection; proxy_set_header Upgrade $http_upgrade; # Important, to prevent ws from sending data for a long time and causing timeout disconnection. proxy_read_timeout 24h; } } ```
Author
Owner

@steel4me commented on GitHub (Oct 8, 2023):

somone got voice running? must be possible...i asked in the official supoprt channel from revolt and got the answer that voice is not running at the moment. but i tried it on the official webapp, not self hosted, it is working...so it must work selfhosted too. maybe without docker? I already tried it directly with port 80 and 443, no chance.

@steel4me commented on GitHub (Oct 8, 2023): somone got voice running? must be possible...i asked in the official supoprt channel from revolt and got the answer that voice is not running at the moment. but i tried it on the official webapp, not self hosted, it is working...so it must work selfhosted too. maybe without docker? I already tried it directly with port 80 and 443, no chance.
Author
Owner

@steel4me commented on GitHub (Oct 9, 2023):

Cant generate api keys, cause gitlab.insrt.uk timed out. A Nightmare.
https://gitlab.insrt.uk/revolt/delta/-/wikis/vapid

Took this, seems to work but smaller generated keys:
https://tools.reactpwa.com/vapid?

@steel4me commented on GitHub (Oct 9, 2023): Cant generate api keys, cause gitlab.insrt.uk timed out. A Nightmare. https://gitlab.insrt.uk/revolt/delta/-/wikis/vapid Took this, seems to work but smaller generated keys: https://tools.reactpwa.com/vapid?
Author
Owner

@Brandters commented on GitHub (Oct 9, 2023):

somone got voice running? must be possible...i asked in the official supoprt channel from revolt and got the answer that voice is not running at the moment. but i tried it on the official webapp, not self hosted, it is working...so it must work selfhosted too. maybe without docker? I already tried it directly with port 80 and 443, no chance.

Same, I get an API error for vortex but I can't figure out why, the API seems to work for the rest.
image

@Brandters commented on GitHub (Oct 9, 2023): > somone got voice running? must be possible...i asked in the official supoprt channel from revolt and got the answer that voice is not running at the moment. but i tried it on the official webapp, not self hosted, it is working...so it must work selfhosted too. maybe without docker? I already tried it directly with port 80 and 443, no chance. Same, I get an API error for vortex but I can't figure out why, the API seems to work for the rest. ![image](https://github.com/revoltchat/self-hosted/assets/35875020/920826e6-f839-42d2-9ccd-ee41d1c34337)
Author
Owner

@killforby commented on GitHub (Oct 28, 2023):

image
Hello it is impossible for me to send a content whether it is photo or video I have a 422 error return. Do you have a solution thank you

@killforby commented on GitHub (Oct 28, 2023): ![image](https://github.com/revoltchat/self-hosted/assets/94224508/2768db2c-afc5-48f2-946a-5db8c06b0a24) Hello it is impossible for me to send a content whether it is photo or video I have a 422 error return. Do you have a solution thank you
Author
Owner

@NoahMoyer commented on GitHub (Mar 5, 2024):

This is all the settings i've done 4 3 2 1

@markiemm What is that second picture of? Is it a network device that you named nginx-proxy-manager_default?

@NoahMoyer commented on GitHub (Mar 5, 2024): > This is all the settings i've done ![4](https://user-images.githubusercontent.com/63561809/224840963-e3449e52-9f82-466f-af79-9d76252563c2.png) ![3](https://user-images.githubusercontent.com/63561809/224840966-37efc6d7-0734-4a7a-ad8e-b90b1199bd60.png) ![2](https://user-images.githubusercontent.com/63561809/224840968-4d91b900-d5b8-4d2b-b50f-aba52b7b89c4.png) ![1](https://user-images.githubusercontent.com/63561809/224840970-8dbb4063-4d06-4072-98c9-368321cbdb27.png) @markiemm What is that second picture of? Is it a network device that you named nginx-proxy-manager_default?
Author
Owner

@mlclns commented on GitHub (Mar 23, 2024):

I'm interested about pure minimal config without Cloudfare and using certificate from Letsencrypt and nginx as a reverse proxy. I'm using no-ip.com DDNS as a domain.
Managed to get rid of NETWORKERROR message, when registering an account - now it's working, but now I have UNKNOWNERROR when logging in with existing account. Console showing problems while connecting to wss Websocket endpoint.
I have very similar config to : #25 (comment) But without proxy managers (which shouldn't be a part of the game) + caddy config based on the official manual ("1234:80")
Nginx location points to: http://localhost:1234
I assume, the problem is very obvious, but I can't figure out. Trying to guess the solution for 2 days already.

Despite the readme stating how to do it correctly I removed the caddy entry from docker-compose and exposed the ports again. My nginx config uses subdomains maybe that somehows works better on your setup as well. I'll just leave my setup here maybe it can help you a bit.

docker-compose.yml

version: "3.8"

services:
  # MongoDB database
  database:
    image: mongo
    restart: always
    volumes:
      - ./data/db:/data/db

  # Redis server
  redis:
    image: eqalpha/keydb
    restart: always

  # S3-compatible storage server
  minio:
    image: minio/minio
    command: server /data
    env_file: .env
    volumes:
      - ./data/minio:/data
    restart: always
    ports:
      - "10000:9000"

  # API server (delta)
  api:
    image: ghcr.io/revoltchat/server:20230421-3
    env_file: .env
    depends_on:
      - database
      - redis
    restart: always
    ports:
      - "8000:8000"

  # Events service (quark)
  events:
    image: ghcr.io/revoltchat/bonfire:20230421-3
    env_file: .env
    depends_on:
      - database
      - redis
    restart: always
    ports:
      - "9000:9000"

  # Web App (revite)
  web:
    image: ghcr.io/revoltchat/client:master
    env_file: .env
    restart: always
    ports:
      - "5000:5000"

  # File server (autumn)
  autumn:
    image: ghcr.io/revoltchat/autumn:1.1.8
    env_file: .env
    depends_on:
      - database
      - createbuckets
    environment:
      - AUTUMN_MONGO_URI=mongodb://database
    restart: always
    ports:
      - "3000:3000"

  # Metadata and image proxy (january)
  january:
    image: ghcr.io/revoltchat/january:master
    restart: always
    ports:
      - "7000:7000"

  # Create buckets for minio.
  createbuckets:
    image: minio/mc
    depends_on:
      - minio
    env_file: .env
    entrypoint: >
      /bin/sh -c "
      while ! curl -s --output /dev/null --connect-timeout 1 http://minio:9000; do echo 'Waiting minio...' && sleep 0.1; done;
      /usr/bin/mc alias set minio http://minio:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD;
      /usr/bin/mc mb minio/attachments;
      /usr/bin/mc mb minio/avatars;
      /usr/bin/mc mb minio/backgrounds;
      /usr/bin/mc mb minio/icons;
      /usr/bin/mc mb minio/banners;
      /usr/bin/mc mb minio/emojis;
      exit 0;
      "

.env
nginx

map $http_host $revolt_upstream {
  revolt.YOUR.DOMAIN http://127.0.0.1:5000;
  api.revolt.YOUR.DOMAIN http://127.0.0.1:8000;
  ws.revolt.YOUR.DOMAIN http://127.0.0.1:9000;
  autumn.revolt.YOUR.DOMAIN http://127.0.0.1:3000;
  january.revolt.YOUR.DOMAIN http://127.0.0.1:7000;
}

server {
  server_name revolt.YOUR.DOMAIN api.revolt.YOUR.DOMAIN ws.revolt.YOUR.DOMAIN autumn.revolt.YOUR.DOMAIN january.revolt.YOUR.DOMAIN;
  
  listen 80;

  add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;

    client_max_body_size 10G;
    client_body_timeout 6000m;
    fastcgi_buffers 64 4K;
    client_header_timeout    6000m;
    proxy_connect_timeout     6000m;
    proxy_read_timeout      6000m;
    proxy_send_timeout      6000m;

  if ($http_upgrade) {
    rewrite ^(.*)$ /ws_78dd759593f041bc970fd7eef8b0c4af$1;
  }

  location / {
    proxy_pass $revolt_upstream;
    proxy_set_header Host $host;
  }

  location /ws_78dd759593f041bc970fd7eef8b0c4af/ {
    proxy_pass $revolt_upstream/;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header Connection $http_connection;
    proxy_set_header Upgrade $http_upgrade;
    # Important, to prevent ws from sending data for a long time and causing timeout disconnection.
    proxy_read_timeout 24h;
  }
    
}

Using this has helped immensely, and I have now been able to get past the initial error on registering, but when I try to sign in after onboarding, I get the following error:

Screenshot 2024-03-23 at 13 01 42 Screenshot 2024-03-23 at 12 53 25

Trying to connect to the websocket locally results in it dropping the connection immediately

Screenshot 2024-03-23 at 12 59 44 Screenshot 2024-03-23 at 12 59 34

Any help would be greatly appreciated!

Edit: I missed the trailing the slash in proxy_pass $revolt_upstream/;, adding that and removing the add_header Access-Control-Allow-Origin that I tried adding to fix another issue did the trick!

@mlclns commented on GitHub (Mar 23, 2024): > > I'm interested about pure minimal config without Cloudfare and using certificate from Letsencrypt and nginx as a reverse proxy. I'm using no-ip.com DDNS as a domain. > > Managed to get rid of NETWORKERROR message, when registering an account - now it's working, but now I have UNKNOWNERROR when logging in with existing account. Console showing problems while connecting to wss Websocket endpoint. > > I have very similar config to : [#25 (comment)](https://github.com/revoltchat/self-hosted/issues/25#issuecomment-1467010464) But without proxy managers (which shouldn't be a part of the game) + caddy config based on the official manual ("1234:80") > > Nginx location points to: http://localhost:1234 > > I assume, the problem is very obvious, but I can't figure out. Trying to guess the solution for 2 days already. > > Despite the readme stating how to do it correctly I removed the caddy entry from docker-compose and exposed the ports again. My nginx config uses subdomains maybe that somehows works better on your setup as well. I'll just leave my setup here maybe it can help you a bit. > > docker-compose.yml > ```yaml > version: "3.8" > > services: > # MongoDB database > database: > image: mongo > restart: always > volumes: > - ./data/db:/data/db > > # Redis server > redis: > image: eqalpha/keydb > restart: always > > # S3-compatible storage server > minio: > image: minio/minio > command: server /data > env_file: .env > volumes: > - ./data/minio:/data > restart: always > ports: > - "10000:9000" > > # API server (delta) > api: > image: ghcr.io/revoltchat/server:20230421-3 > env_file: .env > depends_on: > - database > - redis > restart: always > ports: > - "8000:8000" > > # Events service (quark) > events: > image: ghcr.io/revoltchat/bonfire:20230421-3 > env_file: .env > depends_on: > - database > - redis > restart: always > ports: > - "9000:9000" > > # Web App (revite) > web: > image: ghcr.io/revoltchat/client:master > env_file: .env > restart: always > ports: > - "5000:5000" > > # File server (autumn) > autumn: > image: ghcr.io/revoltchat/autumn:1.1.8 > env_file: .env > depends_on: > - database > - createbuckets > environment: > - AUTUMN_MONGO_URI=mongodb://database > restart: always > ports: > - "3000:3000" > > # Metadata and image proxy (january) > january: > image: ghcr.io/revoltchat/january:master > restart: always > ports: > - "7000:7000" > > # Create buckets for minio. > createbuckets: > image: minio/mc > depends_on: > - minio > env_file: .env > entrypoint: > > /bin/sh -c " > while ! curl -s --output /dev/null --connect-timeout 1 http://minio:9000; do echo 'Waiting minio...' && sleep 0.1; done; > /usr/bin/mc alias set minio http://minio:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD; > /usr/bin/mc mb minio/attachments; > /usr/bin/mc mb minio/avatars; > /usr/bin/mc mb minio/backgrounds; > /usr/bin/mc mb minio/icons; > /usr/bin/mc mb minio/banners; > /usr/bin/mc mb minio/emojis; > exit 0; > " > ``` > > .env > nginx > ```nginx > map $http_host $revolt_upstream { > revolt.YOUR.DOMAIN http://127.0.0.1:5000; > api.revolt.YOUR.DOMAIN http://127.0.0.1:8000; > ws.revolt.YOUR.DOMAIN http://127.0.0.1:9000; > autumn.revolt.YOUR.DOMAIN http://127.0.0.1:3000; > january.revolt.YOUR.DOMAIN http://127.0.0.1:7000; > } > > server { > server_name revolt.YOUR.DOMAIN api.revolt.YOUR.DOMAIN ws.revolt.YOUR.DOMAIN autumn.revolt.YOUR.DOMAIN january.revolt.YOUR.DOMAIN; > > listen 80; > > add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always; > > client_max_body_size 10G; > client_body_timeout 6000m; > fastcgi_buffers 64 4K; > client_header_timeout 6000m; > proxy_connect_timeout 6000m; > proxy_read_timeout 6000m; > proxy_send_timeout 6000m; > > if ($http_upgrade) { > rewrite ^(.*)$ /ws_78dd759593f041bc970fd7eef8b0c4af$1; > } > > location / { > proxy_pass $revolt_upstream; > proxy_set_header Host $host; > } > > location /ws_78dd759593f041bc970fd7eef8b0c4af/ { > proxy_pass $revolt_upstream/; > proxy_http_version 1.1; > proxy_set_header Host $host; > proxy_set_header Connection $http_connection; > proxy_set_header Upgrade $http_upgrade; > # Important, to prevent ws from sending data for a long time and causing timeout disconnection. > proxy_read_timeout 24h; > } > > } > ``` Using this has helped immensely, and I have now been able to get past the initial error on registering, but when I try to sign in after onboarding, I get the following error: <img width="240" alt="Screenshot 2024-03-23 at 13 01 42" src="https://github.com/revoltchat/self-hosted/assets/145590728/d6a1fd58-7a83-4c0f-b3d0-57a23ede942d"> <img width="725" alt="Screenshot 2024-03-23 at 12 53 25" src="https://github.com/revoltchat/self-hosted/assets/145590728/c62b61e2-0de3-4675-a12d-5911b721fc99"> Trying to connect to the websocket locally results in it dropping the connection immediately <img width="552" alt="Screenshot 2024-03-23 at 12 59 44" src="https://github.com/revoltchat/self-hosted/assets/145590728/48f24216-bbd2-4f0b-bdcb-755b95c80939"> <img width="386" alt="Screenshot 2024-03-23 at 12 59 34" src="https://github.com/revoltchat/self-hosted/assets/145590728/1e99efc2-1976-4580-89a3-c2233ffa6839"> Any help would be greatly appreciated! **Edit:** I missed the trailing the slash in ```proxy_pass $revolt_upstream/;```, adding that and removing the ```add_header Access-Control-Allow-Origin``` that I tried adding to fix another issue did the trick!
Author
Owner

@DeclanChidlow commented on GitHub (Sep 1, 2024):

Guide updated and improved with https://github.com/revoltchat/self-hosted/pull/97

@DeclanChidlow commented on GitHub (Sep 1, 2024): Guide updated and improved with https://github.com/revoltchat/self-hosted/pull/97
Author
Owner

@GaMeRaM commented on GitHub (Oct 8, 2024):

Seems like vortex is missing from this configuration, which makes voice calls broken (400 VosoUnavailable). I've been logging my experience here https://github.com/revoltchat/revite/issues/989 (sorry if its in unrelated repo)

UPD: Sorry. Read the whole conversation. Seems like vortex is not recommended for selfhosting and thus voice is not deployable at this time

@GaMeRaM commented on GitHub (Oct 8, 2024): Seems like vortex is missing from this configuration, which makes voice calls broken (400 VosoUnavailable). I've been logging my experience here https://github.com/revoltchat/revite/issues/989 (sorry if its in unrelated repo) UPD: Sorry. Read the whole conversation. Seems like vortex is not recommended for selfhosting and thus voice is not deployable at this time
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: stoatchat/self-hosted#15