This site is an example of the technologies that I use to build virtual things. It is built and depends almost entirely on free and open source software (starting from the top and working down):
- This website is built on the Drupal 7 CMS platform, using a theme/look and feel I constructed using Twitter's Bootstrap framework.
- Drupal, in turn, depends on the PHP script interpreter to do all the work, coordinated by the Nginx webserver.
- The PHP interpreter and Nginx webserver run in Docker containers, and reverse proxying is provided by another Nginx instance running on the underlying host virtual machine.
- Data is stored on the host in a MariaDB (an improved drop-in replacement for MySQL) database.
- Behind the scenes there's also a Postfix mail server (which sends emails from the site) to communicate with mail server I run, using Mailcow.
- The whole domain (and quite a few others) run on a virtual server (based in Singapore, which I think is more trustworthy than the US) running Ubuntu Linux.
- The domain uses secure certificates (providing the "https" end-to-end encryption between your browser and this site, protecting your security) via the essential Let's Encrypt service which, in turn, depends on the ubiquitous OpenSSL on both the server and in your browser.
Actually, this site depends on many supporting actors: libraries like CKEditor rich text area widget (for the Drupal CMS' content editor) and web services like Matomo (previously Piwik). I'm sure I'm forgetting plenty of others.
The development process I employ allows me to work primarily on my laptop (running Linux Mint) and push updates to the website server. My workflow depends the following crucial tools:
- All the files making up the site are stored in the miraculous git version control system which allows me to transfer the files with bulletproof (but not necessarily idiot proof) reliability across the interwebs.
- I use Docker containers (I used to use Vagrant until I worked out Docker) to create a fully virtualised Ubuntu Linux environment on my laptop which runs the full stack necessary to develop the Drupal site, which is stored in a git-managed directory tree on my laptop. I use Docker Compose extensively to keep everything Dockerish as organised and sane as possible - this is how I use it.
- I use the composer PHP package manager to install and manage drush, which, in turn, I use constantly to do all kinds of useful Drupaly command line things.
- I use compass Ruby package manager to install various Ruby gems which let me compile Sass - essentially souped-up Cascading Style Sheets with much more useful syntax that behaves like a programming language.
- I use ssh to connect to my remote server and to my local Docker-based virtual servers.
- I use the Atom integrated development environment and Vim text editor to change files locally and on remote machines respectively.
- For manipulating images I use The GIMP and for creating vector graphics I use Inkscape.
- I back up my servers (fully encrypted & incremental) to remote storage (also on different servers) with restic. On my local development machine, I use backintime.
For sanity while I work, I use tools like RhythmBox to listen to music or VLC to stream online radio, or I often listen to RadioNZ programmes, always selecting the open source Ogg Vorbis formatted version. I use lots and lots of other open source software, but not for this site...
My personal code is all made available under Free and Open Source Software licenses. I always select a Copyleft license by preference, but where I'm making derivative works, I tend to respect the "upstream" license of the project I'm modifying. It's all available on one or the other of the two Gitlab (Community Edition) instances: one I run for the OERu (my day job - I also have a few personal repos) and the other for the NZOSS. I no longer host any code on Github since its acquisition by the Microsoft Corporation.
As any web developer knows, no website is ever "finished"... This site is no exception. Next steps include incorporating some images :) - it'd be fair to say the site's currently quite text-heavy. Luckily, I have a large collection of (I hope!) evocative images which I will work in over the coming days/weeks.