this post was submitted on 08 Apr 2025
186 points (98.9% liked)

Selfhosted

45983 readers
978 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

  3. Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 2 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
[–] Markaos@discuss.tchncs.de 0 points 1 week ago (1 children)

Node.js is a web server. It doesn't run in a browser, therefore doesn't deal with the browser sandbox. That should answer your first dig.

For the second part, WebRTC is a standard that allows two WebRTC peers to communicate. You can't use WebRTC to open an arbitrary TCP or UDP stream to for example a database, unless said database decides to implement a WebRTC peer support.

[–] just_another_person@lemmy.world 0 points 1 week ago (3 children)

Friend, I've literally linked the DBGate repo. You can see yourself there is no server component running, and it's all in browser. It's literally called "web-based". Have a look here: https://docs.dbgate.io/web-app-config/

So in your world, you imagine that if you run this project, there is a server running...somewhere, and then it's forwarding all requests from the browser to this server, and the server is making the connections to the DB endpoint? Lolzzzz 🤣🤣🤣

https://github.com/dbgate/dbgate/tree/master/plugins/dbgate-plugin-postgres

[–] jogai_san@lemmy.world 1 points 1 week ago

Friend, I’ve literally linked the DBGate repo. You can see yourself there is no server component running

Yet you ignore I pointed to the api component in the repo...

[–] Markaos@discuss.tchncs.de 1 points 1 week ago

All right, I had some spare time today, so I went and installed this thing.

My setup is a bit more complex than the minimum necessary, but that's because I'm using an already existing Postgres database instead of installing a new one on my computer. It is as follows: Postgres running on a mini PC on my local network (192.168.2.199:5432), a browser running on my main computer, and a Debian VM for DBgate with two NICs - one is the default NAT interface (I'm too lazy to configure proper bridging / routing) and the second is a virtual bridge, testbr. On testbr, the host OS is 192.168.123.1/24, and the guest is 192.168.123.2/24.

I installed DBgate on the VM using NPM - npm install -g dbgate-serve, as specified in the documentation. Then I ran it using simply dbgate-serve, then connected to it from a browser running on my host OS as http://192.168.123.2:3000/. That works fine.

Then I added my Postgres DB through the web interface (to be verbose, I entered 192.168.2.199 as the IP address), created a table and inserted some dummy data. Then I wanted to do the next step, which is to block outgoing connections to port 5432 from the VM, but I noticed something very strange, given that DBgate obviously doesn't use the server as a backend to do the actual DB connection: this was in the server log

{"pid":7012,"caller":"databaseConnections","conid":"24d95082-ca6a-4dac-aa28-f3121bfc508d","database":"dbgate","sql":"INSERT INTO \"public\".\"dbgate_test\" (\"text\") VALUES ('haha');\nINSERT INTO \"public\".\"dbgate_test\" (\"text\") VALUES ('hehe');\n","level":30,"msg":"Processing script","time":1744395411096}

But it would be ridiculous to even suggest that the connection is relayed through the server, so it is probably some kind of telemetry. Makes sense.

Anyway, I went ahead and added the rules on the VM nft add table ip filter, nft 'add chain ip filter output { type filter hook output priority 0; tcp dport 5432 drop; }', and you wouldn't believe what happened next... The DBgate tab can no longer load data from the database. I can reload DBgate itself without any issues, and I can connect to the database from the same computer using psql and DataGrip just fine, but for some reason it seems to be affected by the fact that its server (which is only serving the HTML/JS files and doing nothing else, as you said) cannot connect to Postgres.

Weird how that works, huh?

[–] priapus@sh.itjust.works 1 points 1 week ago* (last edited 1 week ago)

there is no server component running

What the hell are you talking about? Just look at the Dockerfile.

CMD ["node", "server.js"]

You think that line isn't running a server?

Thr repo makes it very obvious that it runs a server that the webgui connects to. Its fine if you dont know shit but dont be a dick while being stupid.