Self-Hosting Dozens of Web Applications and Services on a Single Server

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • SonarLint - Deliver Cleaner and Safer Code - Right in Your IDE of Choice!
  • Scout APM - Less time debugging, more time building
  • SaaSHub - Software Alternatives and Reviews
  • awayto

    Awayto is a curated development platform, producing great value with minimal investment. With all the ways there are to reach a solution, it's important to understand the landscape of tools to use.

    I built a tool for deploying web apps on AWS.. https://github.com/keybittech/awayto If you look at the deployment script app/bin/data/deploy, you can break things down into manageable pieces and understand what's going on probably within a day or two given you have some baseline understanding of frameworks and APIs.

    But, I totally agree that the underlying nuance is a lot to take on when you start getting into X is required for Z which connects to A, yadda yadda.

    That being said, if you choose a service and invest the time to understand it, you are availing yourself to a very wide world of technology "at your fingertips." You can most certainly say the same for DIY, just different shades of what you want to be responsible for I guess.

  • Dokku

    A docker-powered PaaS that helps you build and manage the lifecycle of applications

    - standard app with a docker image available: deploy directly

    Dokku comes with useful "service" plugins for databases, auto https (letsencrypt), virtual hosts... Overall, a good experience.

    [0] https://dokku.com/

  • SonarLint

    Deliver Cleaner and Safer Code - Right in Your IDE of Choice!. SonarLint is a free and open source IDE extension that identifies and catches bugs and vulnerabilities as you code, directly in the IDE. Install from your favorite IDE marketplace today.

  • yunohost

    YunoHost is an operating system aiming to simplify as much as possible the administration of a server. This repository corresponds to the core code, written mostly in Python and Bash.

  • docker-volume-backup

    Utility container for periodically backing up Docker volumes (by jareware)

    Echoing the sentiment here, this is a great way to host smaller projects on the cheap, without adding the complexity/price of k8s, Nomad et al!

    I do the same, and have spent some time automating the backup of such a set of standalone containers [0], in case others also find it useful.

    [0] https://github.com/jareware/docker-volume-backup

  • cert-manager

    Automatically provision and manage TLS certificates in Kubernetes

  • GoAccess

    GoAccess is a real-time web log analyzer and interactive viewer that runs in a terminal in *nix systems or through your browser.

    Thanks for this article, it's great to see people caring for their server (does it have a name?) and not defaulting to the serverless craze. Here's a few thoughts :)

    > there is some small downtime when I deploy new versions of things since I don't have any load balancing or rolling deployments

    It's entirely possible to achieve, depending on your stack. `nginx -s reload` will reload the entire config without killing existing connections or inducing undue downtime. So if you can start a second instance of your "webapp" on a separate port/socket (or folder for PHP) and point nginx to it there shouldn't be any downtime involved.

    > for users that are geographically far away latency can be high

    That's true, but counter-intuitively, i found unless you're serving huge content (think video or multiple MB pages) it's not a problem. CDN can actually make it worse on a bad connection, because it takes additional roundtrips to resolve the CDN's domain and fetch stuff from there while i already have a connection established to your site. As someone who regularly uses really poor xDSL (from the other side of the atlantic ocean) i have a better experience with sites without a CDN that fit in under 1MB (or even better < 200KB) with as little requests as possible (for the clients that don't support HTTP2).

    > CloudFlare (...) That may become necessary if I ever have trouble with DDOS attacks

    I've personally found OVH to be more than capable and willing to deal with DDOS for their customers. OVH has been previously posted on HN for dealing with huge DDOS. That is of course if you have proper caching and you don't have an easy venue for a remote attacker to induce huge CPU/RAM load. For example, Plausible-like analytics can be such an attack vector because every request is logged in a database; something like GoAccess [0] is more resilient, and no logs is even lighter on resources.

    [0] https://goaccess.io/

  • piku

    The tiniest PaaS you've ever seen. Piku allows you to do git push deployments to your own servers.

    Nice. I've gone down a different path and built https://github.com/piku/piku, which I use to run 12-15 web services (and batch workers) off a single-core VM in Azure, plus around the same amount of private services on a 4GB RAM Raspberry Pi.

    I still use docker-compose and have a k3s cluster running, but I really like the simplicity of deploying via git.

  • Scout APM

    Less time debugging, more time building. Scout APM allows you to find and fix performance issues with no hassle. Now with error monitoring and external services monitoring, Scout is a developer's best friend when it comes to application development.

  • Sandstorm

    Sandstorm is a self-hostable web productivity suite. It's implemented as a security-hardened web app package manager.

    Seems like https://sandstorm.io/ could be what you are looking for.

  • server_setup

  • runlike

    Given an existing docker container, prints the command line necessary to run a copy of it.

    I had started out the same way, especially if it was a new app and I wasn't familiar with how I really wanted to run it. Some containers expect a fair number of environment variables and multiple mounts. Once I got everything working, I would create a script /svcs with the corresponding docker run command. There's even a cool tool called "runlike" which can create a well formatted command for any running container.

    https://github.com/lavie/runlike/

    But I've got those migrated to docker-compose files these days and I try to start with the docker-compose file instead of going directly into testing out docker run commands.

  • I had the same problem and didn't want to manage things by hand, so I wrote Harbormaster:

    https://gitlab.com/stavros/harbormaster

    It basically pulls Compose apps from the git repositories you specify, builds the containers and makes sure they're running. Pretty simple and works really well for me.

  • crowdsec

    CrowdSec - the open-source and participative IPS able to analyze visitor behavior & provide an adapted response to all kinds of attacks. It also leverages the crowd power to generate a global CTI database to protect the user network.

  • Nginx Proxy Manager

    Docker container for managing Nginx proxy hosts with a simple, powerful interface

    Have you ever looked at nginx proxy manager? I find it much easier to use than traefik since everything can be done through a UI.

    https://nginxproxymanager.com/

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts