Languages Features Calendar CSV Lists Blog About Sponsor Add Language
GitHub icon

About our servers

About our servers

You can download all the source code for this site and browse it completely offline from GitHub.

Domains and DNS

Most PLDB domains are registered with Google Domains and PLDB uses Google Domains and Digital Ocean for DNS.

This site is served using NGINX on Ubuntu 20 running on Digital Ocean droplets. SSL certificates are generated using certbot.

Marconi server setup

apt update apt upgrade apt install nginx goaccess certbot python3-certbot-nginx reboot # deploy the site to /var/www/html sudo certbot --nginx -d

Nginx Setup

add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range' always; add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always; # Update nginx conf to allow CORS using the snippet above (putting that on line 58 seems to work): vim /etc/nginx/nginx.conf nginx -t sudo systemctl restart nginx # Test that it worked here, swapping XXX with IP address of server:

The custom 404 page is activated using the code below (line 142 seems to work):

vim /etc/nginx/sites-enabled/default nginx -t sudo systemctl restart nginx error_page 404 /custom_404.html; location = /custom_404.html { root /var/www/html; internal; }


Marconi is deployed using rsync.


This site does not use cookies or include any tracking scripts. Server logs are kept and used primarily for catching broken links, broken scripts, and other QA. If you need even more privacy, you can run the site locally or on your own servers. You can view traffic today and/or traffic trends for the last two weeks.

GoAccess generates these reports. It runs every hour thanks to the cron jobs listed below.

# add the server stats cron job below with: crontab -e 0 * * * * goaccess /var/log/nginx/access.log -o /var/www/html/nginxDaily.html --log-format=COMBINED --anonymize-ip --html-report-title='~24 hours traffic to' 0 * * * * zcat -f /var/log/nginx/access.log* | goaccess -o /var/www/html/nginxDailyAll.html --log-format=COMBINED --anonymize-ip --html-report-title='~14 days traffic to'

Build Server Setup

apt update apt upgrade apt install git cloc curl -L -o n bash n lts # Now node and npm are available npm install -g n npm install -g pm2 typescript jtree # Generate keys # ssh-keygen -t rsa # Get pldb # git clone git clone cd pldb npm install . npm run tsc npm run build # Test that it works over http node ./code/BuildServer.js startDevServer 80 # Now get SSL cert for https snap install core snap refresh core snap install --classic certbot certbot certonly --standalone mkdir ignore cp /etc/letsencrypt/live/ ignore cp /etc/letsencrypt/live/ ignore # Now start with pm2 over http2 pm2 start ./code/BuildServer.js -- startProdServer pm2 startup systemd

Deploying Build Server

ssh cd pldb git pull npm install . npm run tsc npm run build pm2 restart 0

Logo and favicons

Favicon designed with this and favicon files generated with this.

View source

PLDB - Build the next great programming language 路 v2022 Day 33 Docs Build Acknowledgements Traffic Today Traffic Trends Mirrors GitHub