If only everything was as easy as setting up your own personal web server.
- Provision a Linux VPS and point your domain name to it (the hardest step).
- Connect to your VPS.
ssh my-demo.site
- Make a web page and start serving it over HTTPS.
# Make a web page echo 'Hello, world.' > index.html # Install Indie Web Server wget -qO- https://ind.ie/web-server/install.sh | bash # Start your secure web site web-server enable
Hit your domain in a browser. It will take a few seconds to load on the first go as your Let’s Encrypt certificates are automatically provisioned for you.
That’s it!
You can close your terminal and your web server will continue to run. It will be restarted automatically should it crash or when the server reboots. Your TLS certificates will be automatically renewed for you as required.
Supported platforms
Linux and Linux-like operating systems are supported:
- Linux
- macOS
- Windows Subsystem for Linux
Note: the deployment server functionality requires systemd.
Install
Copy and paste the following command into your Terminal. Before you pipe any script into your computer, always view the source code and make sure you understand what it does.
wget -qO- https://ind.ie/web-server/install.sh | bash
Uninstall
web-server uninstall
Use
As a development server
You can also use Indie Web Server as a local development server with locally-trusted TLS certificates (no certificate warnings) on Linux, macOS, and Windows.
To start serving the current folder at https://localhost:
web-server
As a local proxy server
Say you’re running Hugo locally at its default location (http://localhost:1313) and you want to test it via TLS:
web-server proxy localhost:1313
Now you can view it at https://localhost and even your live reload will work as Indie Web Server in proxy mode also proxies WebSockets.
As a local development server with live sync of changes to your production server
web-server sync my-demo.site
Any changes in your current folder will be synced via rsync over ssh to _your-account_@my-demo.site:/home/your-account/_current-folder-name. You can customise all of those details via optional flags.
As a staging server
To give others access to your server without running as a deployment server (daemon):
web-server global
Then use, for example, ngrok (Pro+) to point a custom domain name to your temporary staging server. Make sure you set your hostname
file (e.g., in /etc/hostname
or via hostnamectl set-hostname <hostname>
or the equivalent for your platform) to match your domain name. The first time you hit your server via your hostname it will take a little longer to load as your Let’s Encrypt certificates are being automatically provisioned by ACME TLS.
As a production server
web-server enable
Once your server is running, it will survive crashes and server restarts and you can use the following commands:
web-server status
: display the server status.web-server logs
: display the server logs.web-server disable
: stop the server and remove it from startup items.
Extend
You can extend the server and create your own dynamic servers using Node.js:
npm i @ind.ie/web-server
Create your own dynamic web apps in Node.js using the API.
Learn more
web-server help
See the docs for full details, like using custom error pages and cascading archives and the 404→302 technique for an evergreen web.
About
Indie Web Server is Small Tech and an early artefact of the Hypha project.
Made with ♥ by Ind.ie.
If you like our work, fund us.