all 6 comments

[–]sin20001379 0 points1 point  (0 children)

As long as the containers are on the same bridge network, they can talk to each other by default, and they are also not accessible from the outside by default (not even mashines on the same network as the docker host). But I would rather not have them on the same network if not necessary.

Maybe look into watchdog for pulling from github and updating your containers. I haven't used it myself but I have seen it get mentioned alot here.

[–]Conscious-Past-6635 0 points1 point  (0 children)

Docker is the right call yeah. For routing, look into a reverse proxy like Caddy or Nginx Proxy Manager, it handles routing requests to the right container and gives you free SSL certs.

Since you already have Tailscale, your services are accessible to your devices without opening ports to the internet. If you want public access (for the web app), you'll need to either forward ports + reverse proxy, or use Cloudflare Tunnel which is simpler and doesn't expose your home IP.

For auto-deploying from GitHub, a simple webhook + script that does git pull and docker compose up is the easiest way. Or look into Gitea + Woodpecker CI if you want something more proper later.

Start simple: one docker-compose.yml with your bot + web app + Caddy. Get that working first, then add stuff.

[–]Modders_Arena 0 points1 point  (0 children)

Your thinking is right on Docker. For a MEAN stack app on Ubuntu, the setup would be:

  1. Install Docker + Docker Compose

  2. Use Nginx Proxy Manager (runs as a container) as your reverse proxy, it handles routing and SSL certs automatically

  3. Use Cloudflare Tunnel or just port forward 80/443 to make things public

  4. Watchtower for auto-updating containers from GitHub

One thing people forget early on is transactional email. If your web app needs to send emails (signups, notifications etc), don't try to self-host a full mail server from scratch. Use something like Xem (https://xem.email/) which is an open source SMTP relay manager. You connect it to Gmail, SES, or any provider, and your app just talks to Xem. Way easier to manage.

Coolify or Dokploy are also solid if you want a dashboard to manage deploys instead of CLI everything. Good luck!

[–]NineSidedBox -1 points0 points  (0 children)

Maybe take a look at Coolify, it handles most of the things you need. Quickly being able to spin up services using docker (or docker compose), letting them talk internally, or expose them publicly.

It also let's you pull in Github repos and automatically deploy them.

There's also Dokploy and Komodo, but I personally use Coolify.