callsigns
This is the code that powers callsigns.ca.
It started with the simple desire for a simple mobile friendly way of
searching the Canadian Callsign Database and ended with me developing
my own website.
Features
- mobile friendly design that also works on the desktop and in the terminal
- bilingual user interface (English and French)
- no advertisements nor any form of monetization (strictly non-commercial)
- no login required to access any part of the site
- no social media buttons to distract you
- no cookies beyond an ephemeral session cookie for language preference
- free and open source code
Requirements
- systemd
- iptables
- nginx
- openssl
- mysql
- wget
- unzip
- node.js
- npm
- letsencrypt
Installation
Grab the source code:
mkdir -p /var/node && cd /var/node
git clone git://github.com/tcort/callsigns.git && cd callsigns
Install the dependencies:
npm install
Configure iptables:
iptables-restore < ./etc/iptables/rules.v4
ip6tables-restore < ./etc/iptables/rules.v6
apt-get install iptables-persistent
Configure:
$EDITOR config.json
Populate the database:
/var/node/callsigns/db/refresh.sh
Add a cron job to refresh the database:
crontab -e
15 1 * * * /var/node/callsigns/db/refresh.sh >/dev/null 2>&1
Configure rsyslog
:
sudo -e /etc/rsyslog.conf
local5.* /var/log/callsigns.log
sudo service rsyslog restart
logger -p local5.info "Test"
Get SSL Certificates:
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --agree-dev-preview --server \
https://acme-v01.api.letsencrypt.org/directory certonly
Generate DHE Parameters:
openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Configure nginx:
cp /var/node/callsigns/etc/nginx/sites-available/callsigns.ca /etc/nginx/sites-available/callsigns.ca
$EDITOR /etc/nginx/sites-available/callsigns.ca
systemctl restart nginx
Configure the service:
cp /var/node/callsigns/etc/systemd/system/callsigns.service /etc/systemd/system/callsigns.service
systemctl enable callsigns
systemctl start callsigns
Testing
Once the service is up and running, execute npm test
to perform some end-to-end tests.
License
Code License: see LICENSE.md
Data License: see Terms and Conditions
on the Industry Canada website.