Setting up a NodeJs.org Dist Mirror
Posted: Oct 16, 2015 by Bryan Tong
This will show an easy way to setup and maintain a mirror of the nodejs.org dist folder on your server for quicker downloads.
In my scenario I wanted to setup a mirror copying what is located here: https://nodejs.org/dist/
This is for testing with https://github.com/marcelklehr/nodist/ which we are helping with some upgrades. In testing I am getting terrible download rates. Thus, slowing down my development. My way of handling this is to mirror these files on one of our servers.
After doing some research on the best way to handle this. I found a thread on how to compose a reliable wget command that can be used on a cron to reliably mirror the dist folder without any interaction from the upstream.
Create a Mirror Folder
In my case I am going to use /opt/nodejs
$ mkdir -p /opt/nodejs/dist
$ chown -R node. /opt/nodejs
$ cd /opt/nodejs
Initial Sync
I like to do the initial sync in the foreground just to make sure it works the way I am intending.
$ cd /opt/nodejs
$ wget -m -nH -e robots=off -np --convert-links --reject="index.html*" http://nodejs.org/dist/
This will take a while as it will actually download every file in this folder.
For my instance here it was 20GB.
Setup a Cron
Now we want to keep our mirror up-to-date so we need a cron job.
$ echo "0 0 * * * root cd /opt/nodejs; wget -m -nH -e robots=off -np --convert-links --reject=\"index.html*\" http://nodejs.org/dist/ >> /var/log/nodejs-dist 2>&1" > /etc/cron.d/nodejs-dist
This will install a cron job that will sync our mirror folder every day at midnight.
Setup a Webserver
Lastly, if we want to use our mirror we are going to need a webserver to handle serving the files.
We are an NGINX shop so I will provide an example configuration for NGINX.
/etc/nginx/conf.d/nodejs-dist.conf
server {
server_name nodejs.mydomain.com;
listen 80;
location = / {
return 301 http://nodejs.mydomain.com/dist;
}
location /dist {
autoindex on;
alias /opt/nodejs/dist;
}
}
Checking the Sync Log
The cron job will automatically setup a log for you to view.
You can do this easily.
$ tail /var/log/nodejs-dist
Or watch it during a sync
$ tail -f /var/log/nodejs-dist
Example Mirror
As I was writing this I setup our mirror for anyone to use. Please see it here: http://nodejs.serverpals.com/dist
Cheers!