Published
Questions to ask when purchasing a domain name
Every few months, I get asked for guidance about what to consider when buying a domain name. Notes below for future reference!
Writing related to what I do as a web engineer. Read about my background and how I approach my work. Follow via RSS.
Published
Every few months, I get asked for guidance about what to consider when buying a domain name. Notes below for future reference!
Published
Been a busy few days with Redecentralize on Friday followed by MozFest over the weekend. Redecentralize was a one-day unconference at 4th Floor Studios in Whitechapel. The event was expertly organised by Ira Bolychevsky and her crack team.
It was a day of thought-provoking conversations and notebook scribbling. This is an attempt to decode the scribbles, make some follow-up plans, and to generally summarise the day from my perspective. There was a lot going on so I can’t cover it all, but I’m going to keep an eye out for other people’s notes via the Redecentralize newsletter.
\ \ \ \ \\\ \ \ \\ \ \\ \ \ \\ \\\\\ \\\ \\\ \\\ \ \ \\ \ \\\ \ \\ \ \\ \\\ \ \\ \\\\\\\\\\\ \\\\ \\\\ \\\\\\ \\\\\\\\\\\ \\\ \\\ \\\\\\\\ \\ \\\ \\\\\\\ \\\\\\\\\\\\\\\\\\\\\\ \\ \\\\\\\\\\\\\\\\ \ \ \ \\ \ \ \\\ \ \\\ \ \ \\\ \\\ \\\ \ \ \ \ \ \ \
Published
Sam and I were working together to debug some issues encountered while configuring Netlify Large Media for a particular repository. It’s a *very* cool option when it comes to media for static site generators, particularly since it allows you to transform images. This is a run-down of the process, including a few specific snags we hit along the way.
Published
A good friend of mine is starting to work with the command line a little more often. These are reference notes for her, me, and anyone else that finds them useful.
Published
After far too much delay, I’ve finally ditched MAMP Pro. 🎉
I’m now trying Laravel Valet + MySQL via Homebrew for local PHP development on my MacBook Pro. The notes below are an account of the steps I took for future reference. There were some fiddly points getting started and I expect there to be more, but I’m pretty pleased with the swap overall.
The pre-step is to back up any preexisting databases so that you can set them up later if needed. Personally, I use Sequel Pro for all local and some remote database management, so I pulled my necessary exports from there.
The first step is to install Laravel Valet. Their installation docs are pretty much all that is needed. The only caveat is that I’d be a little careful about updating Homebrew or Composer willy nilly, just be wary if you already have it installed and need your preexisting version for any reason. While completing the installation steps, pay attention to the warnings! Complete any recommended steps if you can, they pop up for a reason.
If all went well, at this point you should have an Apache server so you’d be ready to work on a file-based website such as one that uses Kirby CMS or a static site generator (Hugo, Gatsby, Jekyll, etc).
To work on a database-driven site like a Craft CMS or WordPress build, the next step is to install MySQL via Homebrew.
The Laravel Valet docs mention this step, but for me it was nowhere *near* as simple as their two-command recommendation. I think there was likely a conflict with my preexisting MAMP-specific MySQL setup and possibly an old Homebrew installation. I ran the commands from the Valet docs to install MySQL v5.7 and run it, but I would get the error The server requested authentication method unknown to the client [caching_sha2_password]
on the front-end. This error indicated that it was actually running MySQL v8 (read more). Sure enough, mysql --version
returned mysql Ver 8.0.16 for osx10.14 on x86_64 (Homebrew)
. To sort it out, I had to reinstall and restart the MySQL service.
To remove MySQL, I followed these instructions. (Be careful with those commands, they remove a lot of stuff.)
After I’d gotten rid of MySQL, I ran the Homebrew commands below to install, link, and start the service.
brew install mysql@5.7
brew link --force mysql@5.7
brew services start mysql@5.7
Note that I tried doing this without the link but consistently ran in to the error Can't connect to local MySQL server through socket '/tmp/mysql.sock'
when trying to connect in the next steps. Linking seemed to sort it.
The Homebrew installation command recommended a step involving mysql_secure_installation
which sets the root user’s password. We need this for phpMyAdmin and Sequel Pro (coming up below), so I completed this step as well.
Once MySQL is set up and running, it’s time to set up your databases. Check out this article for some useful instructions on how to create a user and database on the command line. To import one of your SQL exports from earlier, run mysql -u [username] -p [databasename] < [filename.sql]
replacing the bits in brackets with your username, database, and filename. When prompted, enter the password you set up via mysql_secure_installation
.
Otherwise, you can do add your database via a UI such as phpMyAdmin (see Laravel Valet-friendly steps) or Sequel Pro.
I usually adjust my PHP settings (e.g. memory_limit
, max_execution_time
, post_max_size
, etc.) to something that is similar most of my sites’ production hosting environments. Ideally this would be less manual (Docker? Ansible?), but that’s exploration for another day.
I thought that changing the PHP settings would be as simple as adjusting the php.ini
file that is specified in the “Loaded Configuration File” value returned by phpinfo()
. I edited /usr/local/etc/php/7.2/php.ini
and then ran valet restart
to restart the server and… it didn’t work. One of my changes was respected according to phpinfo()
, but the rest weren’t.
I checked the “Additional .ini files parsed” value and saw that the file /usr/local/etc/php/7.2/conf.d/php-memory-limits.ini
was also in use. After I edited this file to include my preferred settings and restarted Valet, all was well.
Valet’s default Nginx config should normally be sufficient, but you might have to tweak it for certain edge cases.
My edge case was the British Earways site (read more). I was working with it locally and suddenly ran in to a 413 Request Entity Too Large
error when attempting to upload a very large audio file. To get around this, I needed to raise the client_max_body_size
Nginx directive.
To adjust the Nginx configuration, I first had a look at the main config file by running /usr/local/etc/nginx/nginx.conf
. Scanning through that, I saw a few includes:
include "/Users/[username]/.config/valet/Nginx/*";
include servers/*;
include valet/valet.conf;
I had a look at /Users/[username]/.config/valet/Nginx/valet.conf
, found client_max_body_size
and changed that value to suit my requirements, and then restarted the server by running valet restart
.
Run brew services list
to find out which services are running. This is useful for troubleshooting if you’re having PHP or mySQL errors.
If you’re adjusting the PHP settings in a .ini
file, run valet restart
, and then suddenly start seeing only an “It works!” screen where your site should be, you probably have to stop Apache first before restarting Valet. Most guidance online recommends running apachectl stop
, but I had trouble with this (see related StackOverflow thread). Instead, I ran valet stop
, sudo killall httpd
, then valet start
. This worked smoothly.
Here’s a list of MySQL commands.
For more info about what $PATH
is and why it’s important, see this Unix & Linux Stack Exchange thread or notes on the command line geared towards beginners.
I usually use redirect rules to use media from production when developing locally, for example when working on the WordPress theme that powers this site. Laravel Valet doesn’t seem to play nice with the normal .htaccess
method, maybe because it’s actually an Nginx server. See “Proxying images to a remote host on Laravel Valet” for an effective alternative using a local driver.
On an image-heavy project using Craft CMS, I ran in to a 504 error brick wall at one point. Could not for the life of me figure out the problem, even after pouring over the error logs. Ultimately I uninstalled and then reinstalled valet, and that seemed to do the trick.
Edit 10 July 2019 – Added further notes based on working with Laravel Valet the past few days, including the PHP and Nginx config adjustments.
Edit 04 October 2019 – Various small wording adjustments and additional reference links. Used these notes for reference when working with SB to adjust his own setup, and it was clear that some bits could use clarification.
Edit 18 October 2019 – Added note regarding 504 errors.
Published
Been getting a bunch of targeted phishing emails recently. They’re pretending to be my domain registrar, saying that payment is overdue and they’re going to delete my domain permanently. I’ve received similar things before, but this one of the more convincing and aggressive attempts I’ve seen.
This reminded me about a task on my backlog of TODOs, sorting out my domain’s SPF and DKIM. Both are email authentication methods designed to detect forged sender addresses in emails, a.k.a. email spoofing. SPF + DKIM won’t prevent inbound phishing emails, but they do help prevent my own domain from being spoofed in shady outbound emails.
I’d forgotten to add a SPF record so sorted that out. I made sure to add include
values for both my email provider and my web host since the web host is responsible for sending things such as password reset emails from the CMS. Unfortunately, my email host Gandi doesn’t support DKIM. 🙁 So that’s a non-starter.
I’ve been considering switching to Proton though, and happily they offer SPF, DKIM, and DMARC. Maybe I’ll make the switch a bigger priority. Gandi has mentioned that they’re working on implementing DKIM though, so maybe I’ll just check back later this year
Eventually I’ll look in to a DMARC policy, but that’s going to come a little later.
A few links that may be useful:
?all
like they demonstrate, see below.?all
it’s kinda pointless.Edit 21.02.20 – Added link to EasyEngine tutorial b/c I previously was using ?all
and received a spoofed email from my domain on another email address I have. *facepalm*
Published
Last month, I completed a major overhaul of the British Earways website. The design by Valerio di Lucente of Julia is almost entirely unchanged, the adjustments were largely performance-related and under the hood, geared towards modern browsers. Here’s brief rundown of the changes:
100vh
since that can lead to unexpected behaviour on mobile browsers), and use CSS Scroll Snap w/ polyfill for scroll behaviourmax
and value
attributes and don’t require adjustment if the window is resizedpreload
attribute from auto
to metadata
to reduce the size of the page when it initially loadspost_max_size
, memory_limit
, max_execution_time
, and upload_max_filesize
to allow upload of large (150MB+) audio filesI ran in to one issue that isn’t yet resolved. Kirby copies all uploaded media from the private /content
folder to the publicly-accessible /media
folder. This copying normally happens almost instantly, even with very large files. On the BE site however, the copy is pretty slow. Since the site pulls the audio duration from the audio file itself via the Web Audio API, the displayed duration is incorrect until the file has finished copying. This is almost certainly related to some rate limiting done by the shared hosting company, a legacy from the preexisting site. It isn’t a huge deal since the copying always finishes eventually, but it isn’t the best behaviour. I’d like to raise the issue with the hosting company but don’t have high hopes, shared hosting providers use rate limiting for a reason.
At any rate, I’m really looking forward to seeing how DB uses the site over the next year and listening to the new mixes.
Published
I just had my first experience with a subdomain takeover due to a dangling DNS record. It’s been lovely. /s
This note outlines how I came across it, what I had to do to fix it, and what I’ve learned from it.
Published
This suite of tutorials is the result of a recent Agorama Server Co-op workshop day. They cover how to set up a Raspberry Pi, how to use an Ansible playbook to easily get a Pi set up as a server, and how to run Homebase on a Raspberry server.
For almost all of the tutorials below, you’ll need: a computer, a Raspberry Pi, a power supply for your Pi (read more), an SD card appropriate to your requirements (read more), and an SD card reader. You may also find an ethernet cable useful if your Pi has an ethernet port.
Personally, I’m working with: a 15ʺ MacBook Pro with an SD card port; a Raspberry Pi 3 Model B+; a SanDisk Ultra 16GB micro SD card with an 80Mbps read speed that came with a microSD adapter; and the charger from an old Android phone.
Some of these tutorials are like a mini crash course in server administration. You don’t need to know much to get started and mess around, but it is useful to be aware of a few terms. If you’re unfamiliar with any of the terms used, see below for very brief explanations.
.zip
file. If you will only be using the Raspberry Pi as a server, such as with Homebase, you may wish to go with Raspbian Lite.Flashing the Raspbian image on to an SD can be done manually instead of using Etcher. For further info, see the base of the “Installing operating system images” page on raspberrypi.org.
If you want to connect the Pi to a WiFi network or enable SSH, complete those steps before booting the Pi.
This tutorial assumes you have flashed Raspbian on an SD card but have not yet booted the Pi. If you have already booted the Pi, see instructions on how to change the existing WiFi configuration on the command line.
Plug your SD card in to your card reader so that it mounts on your computer.
Open the command line and run:
nano /Volumes/boot/wpa_supplicant.conf
This will open a blank file using nano
. Paste in the configuration below:
country=gb
update_config=1
ctrl_interface=/var/run/wpa_supplicant
network={
scan_ssid=1
ssid="YOUR_NETWORK_NAME"
psk="YOUR_NETWORK_PASSWORD"
}
Be sure to change the ssid
and psk
values to your WiFi network name and password respectively. The country
value should be set to the ISO 3166-1 alpha-2 code for the country the Pi is in.
If you are planning to use the Raspberry Pi on a few networks, you should add any other required networks to this file as so:
country=gb
update_config=1
ctrl_interface=/var/run/wpa_supplicant
network={
scan_ssid=1
ssid="YOUR_NETWORK_NAME_1"
psk="YOUR_NETWORK_PASSWORD_1"
priority = 1
}
network={
scan_ssid=1
ssid="YOUR_NETWORK_NAME_2"
psk="YOUR_NETWORK_PASSWORD_2"
priority = 2
}
When you are done editing the credentials, save the wpa_supplicant.conf
file and close Nano.
If you want to enable SSH but haven’t yet done so, complete that step before you boot the Pi for the first time.
When you are ready to boot the Pi for the first time and test the WiFi connection, insert the SD card in the Raspberry Pi and plug the Pi in to a power source. Give it a minute or two, then view the devices on the network. If the Pi shows up, you’re ready to go.
If you are planning to use the Raspberry Pi as a server, such as to run Homebase, you may wish to keep it plugged in to the ethernet for a more stable connection.
As of late 2016, Raspbian has SSH disabled by default. This is to protect users from accidentally making their Pi accessible to the internet with default credentials. This tutorial assumes you have flashed Raspbian on an SD card but have not yet booted the Pi.
Plug your SD card in to your card reader so that it mounts on your computer.
Next, open the command line and run
touch /Volumes/boot/ssh
This will create a new empty file titled ssh
in the root of your SD card. This empty file will allow you to connect via SSH when the Pi is first booted.
If you get an error after running the touch
command that says No such file or directory
, check that your SD card has mounted correctly and check that Raspbian is installed on the SD card.
If you want to connect the Pi to a WiFi network but haven’t yet done so, complete that step before you boot the Pi for the first time.
pi
This tutorial assumes you have already flashed Raspbian on an SD card, have enabled SSH, have connected the Pi to the internet via WiFi or ethernet, and have booted the Pi.
Open the command line and run:
ssh pi@raspberrypi.local
If this is the first time you are connecting via SSH then type in the default password raspberry
. If you don’t plan to use Agorama’s Ansible playbook to configure your SSH credentials, you must change your default password by using the passwd
command (read more). Keeping the default password in place and enabling SSH just invites bad guys to do shady things with your Pi.
If this is not the first time you are connecting via SSH, use the password you configured with passwd
or the password you added to the Ansible playbook.
For security reasons, nothing will show on the screen while you are typing your password.
If nothing happens when you attempt to log in, your Pi may not be connected to the internet.
If you receive a Permission denied
error, you will need to find the Pi’s IP address. View the devices on the network to determine the IP. Once you have the Pi’s IP address, try logging in as instructed above but replace raspberrypi.local
with your Pi’s IP address. If you had to take this step, you may want to write down your Pi’s IP address for use in other steps on this page.
If you receive an error relating to the ECDSA host key changing, see the guidance below guidance below related to ECDSA errors.
Agorama’s Ansible Raspberry server playbook automates a number of fiddly tasks that are required to get a Raspberry Pi set up as a server geared towards use with Homebase. You can get a feel for the tasks that will be performed by the playbook by browsing the files within the playbook, working backwards from all.yml
.
As of late April 2019, the tasks performed by the playbook include:
worker
group and userapt
packages and cachegit
geerlingguy.security
geerlingguy.ntp
geerlingguy.firewall
nodesource.node
.npmrc
PATH
nginx
web serverFuture tasks planned for the playbook include DNS configuration and HTTPS support.
Regardless of what method you use to set up a server, and no matter where the server “lives” – on a Raspberry Pi, a DigitalOcean droplet, or anywhere else – the most important thing to remember is that it is your responsibility to keep it secure and up-to-date.
This tutorial assumes you have Python, pip
, and git
installed on your computer.
Open the command line.
Install the Python packages Ansible and Passlib by running:
pip install ansible passlib
Next, clone Agorama’s ansible-raspberry-server repository:
git clone https://github.com/agoramaHub/ansible-raspberry-server.git
and change directories in to the root of that repository by running:
cd ansible-raspberry-server
Now you are ready to add your SSH credentials to this Ansible playbook and configure a Raspberry Pi.
This tutorial assumes you have already set up Ansible and the playbook. It also assumes that you have set up SSH keys (see tutorial on DigitalOcean).
Open the command line and change directories to the root directory of the cloned Ansible playbook by running the command below. Replace the path with the correct path on your computer.
cd /path/to/your/ansible-raspberry-server
To add your SSH key and change the password for the root pi
user, run the command:
ansible-playbook 01-auth.yml
You will be prompted to add your public key path and set a password for the root user. The default key path should be fine unless you placed your public key somewhere other than the default path when you created it. Set the password to the password you would prefer to use when you log in to the root pi
user via SSH. Note that you will not need to use this password often since you are adding your SSH key, however you will need it when you first run the playbook.
When you have finished answering each prompt, the output will be saved to vars/auth.yml
with the password encrypted by passlib
.
To check and edit the timezone, run:
nano vars/base.yml
to open the base variables file with nano
. If you need to change the timezone, edit the ntp_timezone
value and save this file.
This tutorial assumes you have already set up Ansible and the playbook, have configured your SSH credentials in the playbook, have flashed Raspbian, have enabled SSH, have connected the Pi to the internet via WiFi or ethernet, and have booted the Pi.
Open the command line and change directories to the root directory of the cloned Ansible playbook by running the command below. Replace the path with the correct path on your computer.
cd /path/to/your/ansible-raspberry-server
When you’re ready, run the playbook:
ansible-playbook all.yml --ask-pass
If the command fails because it cannot find the Pi, you need to change the hosts
file so that the script can find the Pi via its IP address. View the devices on the network to determine the IP, then run:
nano hosts
to open the hosts
file with nano
. Replace raspberrypi.local
with your Raspberry Pi’s IP address. You may add additional Raspberry Pi IP addresses to this file if you want to run the playbook on multiple Pis. When you are done editing, save and close this file and then run the ansible-playbook
command above again.
You will be prompted for the password you added to the playbook. If your SSH key is added and you can log in successfully then the playbook will proceed to configure the Raspberry Pi, logging tasks as they are performed.
Note: if you configured a passphrase for your SSH key when you set it up, you will be asked for this as well and will be asked for it each time you connect to your Raspberry Pi via SSH in the future. See this StackExchange thread for a few suggestions on how to avoid being asked for the passphrase every time.
dat
and homebase
This tutorial assumes that you have set up a Raspberry Pi and have configured it for use as a server using Agorama’s Ansible playbook or via other means. It also assumes that your configured Raspberry Pi is on and connected to the internet and that you have logged in via SSH.
For security purposes, the Ansible playbook configures worker
user on Raspberry server so that we’re not using the root user pi
to install and run software. When you first log in with SSH you are logged in as the root user, so we need to switch to worker
by running:
sudo su worker
Next, install dat
:
npm install -g dat
Test whether or not the dat installation works with the Pi configuration by running:
dat doctor
When prompted, select the peer-to-peer
test and send the command it returns to a friend that has dat
installed. Ask the friend to run the command. If dat doctor
returns successful, then you’re all good. Disconnect from dat doctor
by typing ctrl
+ c
.
Install homebase by running:
npm install -g @beaker/homebase
Change directory to the user root:
cd
and then create a Homebase config. Run:
nano .homebase.yml
to open up the Homebase config with nano
, then paste in:
dats:
- url: dat://01cd482f39eb729cdcbb479b03b0c76c6def9cfc9cff276a564a17c99c4432f4/
- url: dat://b0bc462c23e3ca1fee7731d0a1a2dc38bd9b9385daa413520e25aea0a26237a6/
- url: dat://f707397e8dacc1893dced5afa285bab1715b70fe40135c2e14aac7de52f2c6bb/
directory: ~/.homebase # where your data will be stored
# For API service. Establish API endpoint through port 80 (http)
ports:
http: 8080 # HTTP port for redirects or non-TLS serving
This config will set up a pinning service without DNS support that pins three Agorama-related URLs. Feel free to replace them with URLs of your choice. Save and close the file when you’re done editing.
Next, run homebase
:
homebase
The response should indicate success and that your URLs from the .homebase.yml
file are being pinned.
If you get an error message here or when you ran dat doctor
, you may need to check the configuration of your Raspberry Pi.
homebase
with systemd
This tutorial assumes that you have set up a Raspberry Pi, have configured it with Agorama’s Ansible Raspberry playbook according to the instructions above, and have installed dat
and homebase
on the Pi. It also assumes that your configured Raspberry Pi is on and connected to the internet and that you have logged in via SSH.
Daemonizing homebase
means that it will constantly run in the background as long as the service hasn’t failed, the server is on, and the server is connected to the internet. This is important because the whole point is that we want the Dat sites specified in .homebase.yml
to run in perpetuity.
First, add a service configuration for homebase
. As the root user pi
, run:
nano /etc/systemd/system/homebase.service
to open a new file with nano
. Paste in:
[Unit]
Description=homebase
[Service]
Type=simple
ExecStart=/usr/bin/env .npm-packages/bin/homebase
WorkingDirectory=/home/worker/
Restart=on-failure
StandardInput=null
StandardOutput=syslog
StandardError=syslog
Restart=always
SyslogIdentifier=homebase
User=worker
Group=worker
[Install]
WantedBy=multi-user.target
This configuration file indicates (amongst other things) which user will run the service, where to find homebase
, and whether or not to restart when the system is rebooted.
To start the service, run:
sudo service homebase start
To stop the service, run:
sudo service homebase stop
To read the logs, run:
journalctl -u homebase
If the service is running and is working as it should, you should be able to visit any of the URLs you added to your .homebase.yml
config file in Beaker Browser.
NOTE
A few friendly folks have suggested pm2
for daemonizing Homebase (see Twitter thread). This is also what is suggested in the Homebase readme, and it’s what I used previously when getting Homebase set up on DigitalOcean. It worked great for me, but this time round we used systemd
because two people at the workshop had rough experiences using pm2
with Homebase on a Raspberry Pi. I think it had something to do with a crazy amount of memory usage? Not 100% sure, I think we may cover this in a future workshop.
These are very basic examples of some useful commands. Have a search online for more powerful examples.
To change directory:
cd preferred/directory
To list the files in a directory (omit directoryname
if you want to list the files in the current directory):
ls directoryname
To display the contents of a file:
cat filename
To edit a file using nano
(the file will be created in the current directory if it doesn’t exist):
nano filename
To reboot a Raspberry Pi, be sure you are connected via SSH as the pi
root user and then run:
sudo reboot
To disconnect from an SSH session, type ctrl
+ d
It isn’t a great idea to just pull the plug on a Raspberry Pi to turn it off since it can cause problems with your SD card or the file system. To shut down a Raspberry Pi:
sudo shutdown -h now
It can be useful to view all devices connected to a network if you want to check your Raspberry Pi’s WiFi connection or need to identify its IP address.
You can use your router’s admin interface, the mobile app Fing, or the network scanning tool nmap
to view a list of the devices connected to your network.
If you are trying to find a Raspberry Pi’s IP address and there are a lot of devices connected, you may need to use the list of devices and the process of elimination (i.e. turn devices on and off and see what disappears).
If you plug in an SD card and it will not mount, try to use your system tools such as Disk Utility to check for the drive. If that doesn’t work, try restarting your computer. If that doesn’t work, try different hardware such as a friend’s computer or an external card reader. I know at least four people with Macbook Pros that have dealt with defective card reader ports.
If you added your SSH key using Agorama’s Ansible Raspberry playbook and then move your Pi on to a new network, you will probably receive an error relating to the ECDSA host key changing. The base of the warning message should indicate that you can fix this by adding the correct host key in ~/.ssh/known_hosts
.
One way to resolve this is to re-add your SSH credentials to the Ansible playbook and then run the playbook so that your SSH keys are added again.
If you did not add your new network to your wpa_supplicant.config
file when you first set up WiFi on your Pi, you will need to add your new network to this file.
If your Raspberry Pi does not have an ethernet port, it may be easiest to start from scratch (flash Raspbian on to the SD card and configure the wpa_supplicant.conf
file).
If your Raspberry Pi has an ethernet port, connect it to the network via ethernet. Open the command line and connect via SSH, then run:
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
This will open up the wpa_supplicant.conf
with nano
. Scroll down the file and edit the network details as per the WiFi connection instructions above.
When you are done editing, save and close the file then disconnect your Raspberry Pi from the ethernet. To test the connection, check for the Raspberry Pi by viewing all of the devices connected to the network. If the Pi is not connected after a couple minutes, try rebooting the Raspberry Pi.
pm2
to “Daemonize homebase
with systemd
” tutorialNext steps include configuring HTTPS support, DNS support, and getting more familiar with the maintenance involved in this setup. I think there is also some complication involving DMZ and routers, but I’m very unfamiliar with those implications at this point. I have a feeling we’ll dig in to a lot of this during the upcoming Agorama Server Co-op evenings and workshops. See the Agorama site and their Twitter account for dates.
Thanks to the Agorama folks – organisers and fellow attendees – for a very fun workshop.
Published
Richard Hollis’s Henry van de Velde: The Artist as Designer is out at long last. A lot of love, sweat, and tears has gone in to that book. It is absolutely jam packed, covering pretty much all of HvdV’s life with over 400 images. As part of Occasional Papers, I worked on the permissions, a bit of editing, and compiled the index.