Runs many small websites on one inexpensive server, and deploys each one when its code is pushed to GitHub.
Wetfish is a small internet community that has maintained a network of open-source projects for decades, on servers that cost around $5 a month.
We don't want to be the next Facebook. The internet used to be great because it connected people all over the world. Today, giant corporate platforms control the flow of information and pit people against each other to farm engagement. We want to promote the old internet: the truly decentralized, grassroots internet, made of many small communities that respect their own privacy and values.
So we build systems that anyone can replicate. Everything here is open source and runs on the cheapest servers available, because a low hosting cost lowers the barrier to running your own websites and communities. If this helps you start yours, it worked.
- Running any number of projects side by side behind one HTTPS proxy, each from its own repository.
- Deploying a project within seconds of a push, through a webhook with its own secret. No build pipeline, container registry, or Kubernetes.
- Running the same way on staging (each project's
mainbranch) and production (release), and on separate servers for separate groups of projects. - Adding a project in one command: its secrets are generated, and only what a person has to enter, such as SMTP credentials, is asked for.
- Sharing one database server between the projects that need one, each with its own database.
- Keeping large files, such as uploads, on a separately mounted file system, on the servers that need one.
- Optionally accepting web traffic only through Cloudflare, which hides the server's address.
Status: server setup, the shared proxy and webhook listener, adding and deploying projects, the shared database, storage, and Cloudflare-only mode work. Backups are next.
You need a server running Debian 13 (Ubuntu works too) and a hostname for it, such as stage.example.com, with a DNS record pointing at the server. Then, as root:
curl -fsSL https://raw.githubusercontent.com/wetfish/server/main/setup.sh | bashSetup installs Docker, clones this repository into /srv/wetfish-server, asks for the hostname and whether the server is for staging or production, and starts the shared services. When it finishes, https://<hostname>/ answers OK.
To keep the repository somewhere else, clone it there and run ./setup.sh from the clone. Setup is safe to re-run, and accepts its answers as options for unattended installs; see ./setup.sh --help.
Then add projects with ./add-project.sh; Preparing a Project covers what a project's repository needs.
To try it on your own computer first, clone the repository and run ./setup.sh as yourself: it sets up a local copy that serves https://localhost/, without installing anything.
- How it works: setup, adding and setting up projects, databases, storage, deploys, preparing a project (including Laravel projects), and files
- Cloudflare-only mode: accepting web traffic only through Cloudflare
- Design decisions: why it is built this way
MIT; see LICENSE. The Node.js web framework this repository held in 2015–2016 is in the v0.2.0 tag, under its original GPL-3.0 license.