Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 16 additions & 23 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,17 @@ DaNode - A secure, small footprint web server written in D
master: [![D](https://github.com/DannyArends/DaNode/actions/workflows/d.yml/badge.svg?branch=master)](https://github.com/DannyArends/DaNode/actions/workflows/d.yml)
licence: [![license](https://img.shields.io/github/license/DannyArends/DaNode.svg?style=flat)](https://github.com/DannyArends/DaNode/blob/master/LICENSE.txt)

DaNode is a web server written in the [D programming language](https://dlang.org/) that hosts websites written in **ANY** language that can output to *stdout*. It supports multiple domains, SSL via [ImportC](https://dlang.org/spec/importc.html) with support for [Server Name Indication](https://en.wikipedia.org/wiki/Server_Name_Indication) (SNI) and [ACME](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment) automatic certificate renewal.
DaNode is a web server written in the [D programming language](https://dlang.org/) that can host websites in **ANY** language that can output to *stdout*. It supports multiple domains, SSL via [ImportC](https://dlang.org/spec/importc.html) with support for [Server Name Indication](https://en.wikipedia.org/wiki/Server_Name_Indication) (SNI) and [ACME](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment) automatic certificate renewal.

*Battle tested in production for over 12 years, including hosting my own [personal website](https://www.dannyarends.nl/).*

### Main features

- Host websites in **ANY** language that writes to *stdout*
- HTTPS: SNI, TLS 1.2+, ACME auto-renewing certificates via [OpenSSL](https://www.openssl.org/)
- Minimal Code, CPU, and RAM footprint
- Static file serving: ETag, gzip, range requests, SSE, keep-alive, conditional GET
- Streaming multipart uploads - large files written directly to disk
- Per-domain config: CGI control, redirects, directory access
- Per-IP rate limiting and configurable request/upload size limits
- Host websites in **ANY** language that has a *stdout*
- Minimal footprint - code, CPU and RAM
- HTTPS with SNI, TLS 1.2+ and ACME auto-renew
- Static files support ETag, gzip and range requests
- Streams large file uploads directly to disk
- Native APIs: PHP, Python, D, R - or [add your own](api/)

### Get DaNode
Expand Down Expand Up @@ -93,12 +91,13 @@ nohup authbind danode/server -b 100 -v 0 > server.log 2>&1 &
Start the server with a backlog (-b) of 100 simultaneous connection (per port), and less log output (-v 0).

```
--port -p # HTTP port to listen on (integer)
--backlog -b # Backlog of clients supported simultaneously per port (integer)
--certDir # Location of folder with SSL certificates (string)
--keyFile # Server private key location (string)
--wwwRoot # Server www root folder holding website domains (string)
--verbose -v # Verbose level, logs on STDOUT (integer)
--port -p # HTTP port to listen on (integer)
--backlog -b # Backlog of clients supported simultaneously per port (integer)
--ssl # Location of SSL certificates folder (string)
--sslKey # Server private key filename (string)
--accountKey # Let's Encrypt account key filename (string)
--wwwRoot # Server www root folder holding website domains (string)
--verbose -v # Verbose level, logs on STDOUT (integer)
```

### server.config
Expand Down Expand Up @@ -140,13 +139,13 @@ touch www/domain.xxx/web.config
```
Add the following configuration settings to the web.config file, if you want to use
scripting languages such as PHP, you have to manually allow the execution of cgi file.
Add the following lines in your web.cofig file to redirect to the index.php file, and
Add the following lines in your web.config file to redirect to the index.php file, and
allow the webserver to execute the php script, and redirect the incomming requests to
the index.php page:

```
allowcgi = yes
redirecturl = index.php
allowcgi = yes
redirect = index.php
```

### Update the hosts file
Expand All @@ -166,12 +165,6 @@ Then add the following lines to this hostfile using your favourite editor:
Save the file with these lines added, then open a browser and navigate to:
http://www.domain.xxx, you should now see the content of your php / html file.

### Supported back-end languages

Languages with supported APIs: PHP, PYTHON, D, R

See: [api/README.md](api/README.md)

### Contributing

Want to contribute? Great! Contribute to this repo by starring ⭐ or forking 🍴, and feel
Expand Down
Loading