website-server v0.0.4
Website Server
A website server that supports serving many websites by subdomain-based routing.
Usages
Command line tool
Install it by the following command:
npm install -g website-serverThe command line program is called website-server.
Examples
website-server serve
Serve a single-page-app using http with an available port (starting from 8080):
website-server serve /websites/pomodoro \
--cors \
--rewrite-not-found-to index.html \
--cache-control-pattern 'assets/**: max-age=31536000'Serve a single-page-app using https with a given port:
website-server serve /websites/readonlylink \
--cors \
--port 443 \
--rewrite-not-found-to index.html \
--cache-control-pattern 'assets/**: max-age=31536000' \
--tls-cert /etc/letsencrypt/live/readonly.link/fullchain.pem \
--tls-key /etc/letsencrypt/live/readonly.link/privkey.pemServe a single-page-app using https with a website.json config file:
website-server serve /websites/readonlylink/website.jsonWhere /websites/readonlylink/website.json:
{
"server": {
"port": 443,
"tls": {
"cert": "/etc/letsencrypt/live/readonly.link/fullchain.pem",
"key": "/etc/letsencrypt/live/readonly.link/privkey.pem"
}
},
"cors": true,
"rewriteNotFoundTo": "index.html",
"cacheControlPatterns": {
"assets/**": "max-age=31536000"
}
}website-server serve-many
Serve many websites in a directory, using subdomain-based routing:
- Each website might have it's own
website.jsonconfig file, - The
serveroption of config file in subdirectory will be ignored. - the
hostnameoption is required.
website-server serve-many /websites \
--hostname localhost \
--port 443 \
--tls-cert /etc/letsencrypt/live/fidb.app/fullchain.pem \
--tls-key /etc/letsencrypt/live/fidb.app/privkey.pemServe many with base website.json config file:
website-server serve-many /websites/website.jsonWhere /websites/website.json:
{
"server": {
"hostname": "localhost",
"port": 443,
"tls": {
"cert": "/etc/letsencrypt/live/readonly.link/fullchain.pem",
"key": "/etc/letsencrypt/live/readonly.link/privkey.pem"
},
"logger": {
"name": "pretty-line",
"disableRequestLogging": true
}
}
}The LoggerOptions used above is:
export type LoggerName = "json" | "silent" | "pretty" | "pretty-line"
export type LoggerOptions = {
name: LoggerName
disableRequestLogging?: boolean
}The default LoggerOptions is:
{
"name": "pretty-line"
}On Linux, to test website-server serve-many locally,
we can add subdomains to localhost by editing /etc/hosts.
For examples:
127.0.1.1 readonlylink.localhost
127.0.1.1 pomodoro.localhost
...Using .domain-map/ with serve-many
When doing subdomain-based routing,
we can also support custom domain for a subdomain,
by adding adding a file .domain-map/<custom-domain>,
where the file name is the custom domain,
and the file content is the subdomain.
You can edit the DNS record of your custom domain,
to point to the full subdomain.
And update .domain-map/ on your server to support it.
Development
npm install # Install dependencies
npm run build # Compile `src/` to `lib/`
npm run build:watch # Watch the compilation
npm run format # Format the code
npm run test # Run test
npm run test:watch # Watch the testingContributions
To make a contribution, fork this project and create a pull request.
Please read the STYLE-GUIDE.md before you change the code.
Remember to add yourself to AUTHORS. Your line belongs to you, you can write a little introduction to yourself but not too long.