# Trying to install on VPS

**URL:** https://community.silverbullet.md/t/trying-to-install-on-vps/619
**Category:** General
**Created:** [July 11, 2024, 10:13am UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619 "2024-07-11T10:13:11Z")
**Posts on this page:** 19
**Page:** 1

<div class="post-metadata">

### Author: ![dmsrev](https://community.silverbullet.md/user_avatar/community.silverbullet.md/dmsrev/32/384_2.png) [@dmsrev](https://community.silverbullet.md/u/dmsrev)
#### Post date: [July 11, 2024, 10:13am UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/1 "2024-07-11T10:13:11Z")

</div>

Hi, I’m a total beginner to this, my knowledge is practically zero, but I want to learn. I would love to be able to install SilverBullet onto a VPS so that I can access on my Chromebook/phone.

But I need help. I don’t know if anyone is willing to walk a newbie through this process? If so, here’s my progress so far:

1. I’ve purchased a VPS.
2. I’ve installed docker on it.
3. I’ve installed Silverbullet with docker.

All good. But when I input my server’s IP address with port 3000, it doesn’t work. It “took too long to respond.”

Please can anyone help??

---

<div class="post-metadata">

### Author: ![ethan](https://community.silverbullet.md/letter_avatar_proxy/v4/letter/e/8dc957/32.png) [@ethan](https://community.silverbullet.md/u/ethan)
#### Post date: [July 11, 2024, 10:23am UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/2 "2024-07-11T10:23:45Z")

</div>

Have you exposed SilverBullet to the Internet and configured TLS/HTTPS? I use [Nginx Proxy Manager](https://nginxproxymanager.com/), but the documentation includes a guide for [Caddy](https://silverbullet.md/Install/Network%20and%20Internet). If you’re open to other, non-Docker options, @edison23 also wrote a guide to setting up SilverBullet with [Apache and Certbot](https://community.silverbullet.md/t/set-up-silverbullet-on-apache-server-with-reverse-proxy/614).

---

<div class="post-metadata">

### Author: ![dmsrev](https://community.silverbullet.md/user_avatar/community.silverbullet.md/dmsrev/32/384_2.png) [@dmsrev](https://community.silverbullet.md/u/dmsrev)
#### Post date: [July 11, 2024, 10:29am UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/3 "2024-07-11T10:29:36Z")

</div>

No, I haven’t. I could try the Caddy route. But I don’t know how install caddy on my VPS. And in the instructions, what is “[yourdomain.com](http://yourdomain.com)”? I have no domain.

sudo caddy reverse-proxy --to :3000 --from [yourdomain.com:443](http://yourdomain.com:443)

---

<div class="post-metadata">

### Author: ![ethan](https://community.silverbullet.md/letter_avatar_proxy/v4/letter/e/8dc957/32.png) [@ethan](https://community.silverbullet.md/u/ethan)
#### Post date: [July 11, 2024, 10:39am UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/4 "2024-07-11T10:39:41Z")

</div>

It [might be easiest](https://stackoverflow.com/questions/51340872/can-i-certify-website-without-domain-name) to get a domain name. You can get [a domain name in the `.xyz` top-level domain of six to nine digits](https://www.reddit.com/r/homelab/comments/vtqg9m/psa_any_xyz_domain_of_the_format_69_digitsxyz_is/) (e.g., `123456789.xyz`) for about a dollar per year. I’ve used [Porkbun](https://porkbun.com/) as my domain name registrar for several years.

Alternatively, I’d also consider using [YunoHost](https://yunohost.org/). It’s how I got started with self-hosting a few years ago, and @fflorent has [packaged SilverBullet for YunoHost](https://community.silverbullet.md/t/silverbullet-packaged-for-yunohost-to-easily-self-host-it/313). You can set up YunoHost with [a free subdomain](https://yunohost.org/en/dns_nohost_me), and it’ll largely handle DNS and HTTPS for you.

---

<div class="post-metadata">

### Author: ![dmsrev](https://community.silverbullet.md/user_avatar/community.silverbullet.md/dmsrev/32/384_2.png) [@dmsrev](https://community.silverbullet.md/u/dmsrev)
#### Post date: [July 11, 2024, 10:48am UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/5 "2024-07-11T10:48:25Z")

</div>

OK. So I do actually have a domain, which I’m using for a blog. Do I have to alter any of the DNS settings, or can I run this command regardless? (sudo caddy reverse-proxy --to :3000 --from [yourdomain.com:443](http://yourdomain.com:443))

(I’ve now installed caddy on my VPS.)

---

<div class="post-metadata">

### Author: ![ethan](https://community.silverbullet.md/letter_avatar_proxy/v4/letter/e/8dc957/32.png) [@ethan](https://community.silverbullet.md/u/ethan)
#### Post date: [July 11, 2024, 10:58am UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/6 "2024-07-11T10:58:48Z")

</div>

If SilverBullet and Caddy are on the same network, you might actually be able to [configure it](https://caddyserver.com/docs/quick-starts/reverse-proxy) to use self-signed certificates on `localhost`. I haven’t used Caddy before so I can’t provide specific recommendations.

---

<div class="post-metadata">

### Author: ![dmsrev](https://community.silverbullet.md/user_avatar/community.silverbullet.md/dmsrev/32/384_2.png) [@dmsrev](https://community.silverbullet.md/u/dmsrev)
#### Post date: [July 11, 2024, 11:02am UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/7 "2024-07-11T11:02:42Z")

</div>

Thanks. But I’m totally lost.

---

<div class="post-metadata">

### Author: ![LumenYoung](https://community.silverbullet.md/user_avatar/community.silverbullet.md/lumenyoung/32/368_2.png) [@LumenYoung](https://community.silverbullet.md/u/LumenYoung)
#### Post date: [July 11, 2024, 1:40pm UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/8 "2024-07-11T13:40:42Z")

</div>

Hi @dmsrev, I would like to explain a bit about the problem.

You have a VPS which has a public ip address. This means it is potentially accessible to everyone, this is kind of dangerous to expose directly, therefore most of the vps provider would impose an additional control interface to firewall your ports (3000 in your case). One reason you can’t access the port directly could be this firewall.

But generally you shouldn’t open the port without a proper reverse proxy like Caddy or nginx. Accessing such port is very dangerous since it is not protected by ssl encrption. Therefore you should following the example to 1) point your domain (or most frequently subdomain) to your current instance (ip address) and then 2) setup caddy for the reverse proxy.

Also note that docker is containerizing all the services, therefore if you didn’t bind your silverbullet container with your host port. You can’t access them via `localhost:3000`. The practice to use `sudo caddy reverse-proxy --to :3000 --from yourdomain.com:443` is also wrong, since this domain points to your service only after you have caddy setup properly, but when you were setting the caddy, you should use either 1) `localhost:<port>` if you have bind your container’s port 3000 with your host or 2) `container_ip:<port>` if you didn’t.

I would suggest newbie starting with binding the ip then learn how to connect to container ip. But note that this assumes your caddy is **not** running inside another container, in which case caddy can’t access host’s ip address via `localhost`.

Also if any of the previous explaination is too confusing to you, consider to turn to ChatGPT for background explaination for the knowledge. It would be very intemidating if you don’t have a mental model on how network of server/docker/etc works, but should be straight forward once you established such model.

---

<div class="post-metadata">

### Author: ![dmsrev](https://community.silverbullet.md/user_avatar/community.silverbullet.md/dmsrev/32/384_2.png) [@dmsrev](https://community.silverbullet.md/u/dmsrev)
#### Post date: [July 11, 2024, 1:52pm UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/9 "2024-07-11T13:52:19Z")

</div>

Thank you for this.

What I have done up to now is as follows:

1. I used chatgpt to bind my domain name (I bought a new one) to my VPS
2. I installed nginx
3. I installed docker followed by SilverBullet
4. I’m now trying to run the caddy reverse-proxy command, but at the end of the long error message I get: “Bind: address already in use”

---

<div class="post-metadata">

### Author: ![LumenYoung](https://community.silverbullet.md/user_avatar/community.silverbullet.md/lumenyoung/32/368_2.png) [@LumenYoung](https://community.silverbullet.md/u/LumenYoung)
#### Post date: [July 11, 2024, 1:56pm UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/10 "2024-07-11T13:56:31Z")

</div>

You should be clear on the following things:

1. nginx is of the same function with caddy, you should choose one instead of both. I recommand caddy since it handles ssl certificate for you and the syntax of Caddyfile is more simple.
2. You should know the difference between binding and listening. Binding is when container want to post something via this port, listening is when the app want to hear what is posted at this port. In this case, caddy shouldn’t bind the 3000 port rather only listening.
3. You should be clear on if you are running caddy in a container or directly on the host.

---

<div class="post-metadata">

### Author: ![dmsrev](https://community.silverbullet.md/user_avatar/community.silverbullet.md/dmsrev/32/384_2.png) [@dmsrev](https://community.silverbullet.md/u/dmsrev)
#### Post date: [July 11, 2024, 1:59pm UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/11 "2024-07-11T13:59:48Z")

</div>

OK, thank you. So, step by step, what do I need to do? (thank you!!)

---

<div class="post-metadata">

### Author: ![LumenYoung](https://community.silverbullet.md/user_avatar/community.silverbullet.md/lumenyoung/32/368_2.png) [@LumenYoung](https://community.silverbullet.md/u/LumenYoung)
#### Post date: [July 11, 2024, 2:15pm UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/12 "2024-07-11T14:15:37Z")

</div>

I don’t have full info on what you have done. But I would start from:

1. disable the nginx
2. check if you are running caddy using docker. If not, you can assume connecting to your silver bullet via `localhost`, if not, try to understand the following example configuration for caddy. Find where your Caddyfile is and adapt the following example based on your need.

```auto
homepage.domain.de {
    reverse_proxy http://<silverbullet_ip>:3000
}

```

---

<div class="post-metadata">

### Author: ![dmsrev](https://community.silverbullet.md/user_avatar/community.silverbullet.md/dmsrev/32/384_2.png) [@dmsrev](https://community.silverbullet.md/u/dmsrev)
#### Post date: [July 11, 2024, 2:42pm UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/14 "2024-07-11T14:42:26Z")

</div>

OK. I have done as you said. I found my Caddyfile and I adapted your example to my own details.

And… I think we’ve done it. I can now see SilverBullet on my domain, with https…!

Is this too good to be true???

---

<div class="post-metadata">

### Author: ![dmsrev](https://community.silverbullet.md/user_avatar/community.silverbullet.md/dmsrev/32/384_2.png) [@dmsrev](https://community.silverbullet.md/u/dmsrev)
#### Post date: [July 11, 2024, 3:37pm UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/15 "2024-07-11T15:37:09Z")

</div>

It’s definitely working. Thank you so much.

---

<div class="post-metadata">

### Author: ![zef](https://community.silverbullet.md/user_avatar/community.silverbullet.md/zef/32/7_2.png) [@zef](https://community.silverbullet.md/u/zef)
#### Post date: [July 11, 2024, 5:38pm UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/16 "2024-07-11T17:38:29Z")

</div>

> [@ethan](#):
>
> It [might be easiest](https://stackoverflow.com/questions/51340872/can-i-certify-website-without-domain-name) to get a domain name. You can get [a domain name in the `.xyz` top-level domain of six to nine digits](https://www.reddit.com/r/homelab/comments/vtqg9m/psa_any_xyz_domain_of_the_format_69_digitsxyz_is/) (e.g., `123456789.xyz`) for about a dollar per year. I’ve used [Porkbun](https://porkbun.com/) as my domain name registrar for several years.

These $1 .xyz domains are pretty nice for the SB use case. Let me post that more publicly.

---

<div class="post-metadata">

### Author: ![LumenYoung](https://community.silverbullet.md/user_avatar/community.silverbullet.md/lumenyoung/32/368_2.png) [@LumenYoung](https://community.silverbullet.md/u/LumenYoung)
#### Post date: [July 11, 2024, 6:45pm UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/17 "2024-07-11T18:45:25Z")

</div>

Grats! It is impressive that you learnt so fast. I still need to remind you that you don’t need to open firewall for silverbullet if you configured it properly.

To briefly explain that, your caddy is a reverse proxy mapping the domain requests to different services on your VPS, and all the https requests are coming from port 443, meaning that caddy will pass all the requests of your silverbullet domains to 3000 and this can be done internally since the traffic happens in one machine.

Therefore I recommand you to close your 3000 firewall port and enjoy your Silverbullet journey!

---

<div class="post-metadata">

### Author: ![dmsrev](https://community.silverbullet.md/user_avatar/community.silverbullet.md/dmsrev/32/384_2.png) [@dmsrev](https://community.silverbullet.md/u/dmsrev)
#### Post date: [July 12, 2024, 10:42am UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/18 "2024-07-12T10:42:31Z")

</div>

So you’re telling me to take off port 3000 from the firewall policy? Why? Was it only necessary to access it for installation?

---

<div class="post-metadata">

### Author: ![LumenYoung](https://community.silverbullet.md/user_avatar/community.silverbullet.md/lumenyoung/32/368_2.png) [@LumenYoung](https://community.silverbullet.md/u/LumenYoung)
#### Post date: [July 12, 2024, 10:56am UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/19 "2024-07-12T10:56:32Z")

</div>

Yes, you should close the 3000 port firewall on your VPS’s providers interface.

No, it is not even necessary for installation. The reason in detail was explained on last reply. But the gist would be: when using https, it is accessing your silver bullet via port 443, caddy should automatically route it to your port 3000, but since this traffic happens internally, there is no reason to expose your port 3000, which could expose more vulnerabilities.

---

<div class="post-metadata">

### Author: ![Christoph](https://community.silverbullet.md/user_avatar/community.silverbullet.md/christoph/32/1067_2.png) [@Christoph](https://community.silverbullet.md/u/Christoph)
#### Post date: [March 10, 2025, 12:40pm UTC](https://community.silverbullet.md/t/trying-to-install-on-vps/619/20 "2025-03-10T12:40:32Z")

</div>

Let me just say that I find the tone and attitude on this forum exceptionally friendly and supportive. At the moment I am mostly reading and learning, and I am benefitting immensely from instructions like these.  
Thank you all!
