With most of the content and features now working, it’s time to choose a hosting partner. Given recent politics, I’m inclined to limit my search to Canadian providers, but I’m not willing to compromise on the few services and features I require. First on the list to explore was HostPapa.
As a rule, I don’t trust promises and marketing content on these sites. There are too many ways the truth can be distorted or obscured, so my practice is to sign up for the account that seems the best fit and then get started. The only thing I insist on is a guarantee that I can cancel and get my money back if I’m not satisfied. Most services offer either a week or a month for this trial period, and HostPapa offers the full month, so I set it up and dove in.
My plan was to set up my intended site deployment automation and see how easy it was going to be to maintain. If I could do what I want, the way I want and didn’t get annoyed by the experience, I’d stick with them and call it done. But if I experienced too much friction, I’d just pull the plug, delete my account, get my refund, and move on to the next candidate.
My first annoyance was that HP doesn’t offer SSH account access. Apparently, they’ve had problems with some customers causing trouble via SSH, so they’ve opted to punish everyone. Without knowing the details, it’s hard to be sure, but this feels like a nuclear option solution to a localized problem. And frankly, if someone can cause trouble through an SSH shell, that speaks as much to a poorly planned security infrastructure as it does to anything the customers might have been doing. HP does offer FTP access though, so I set that up and continued with my experiment.
The next problem I encountered was that HP assumes that I’ve already changed my domain pointers and that I’ll be accessing FTP via the creativityhacker.ca URL. But I’m not going to take my existing site (crippled as it might be) offline until my new host is completely set up and ready to go. Unfortunately, I couldn’t find any reference in their documentation to a direct domain address I could use for preliminary setup and testing, so that have me the chance to test out their customer support. I logged a request for guidance on this and sat back to wait.
To their credit, I got a response about an hour. In addition to giving me the direct address for FTP and some workaround tips for accessing my site before swapping the pointers, they also took the initiative to set up a new FTP account for me, to simplify the workflow I was trying to set up. So bonus points for customer service.
It’s been at least a decade since I had to use FTP, but I used it extensively in the old days, so I wasn’t too worried about it. I just fired up the ftp command in my console and connected. That part went easily enough, but no matter what I tried, I could not access anything in my account. I couldn’t list files. I couldn’t check my directory location. FTP just kept complaining about inability to make data connections, but I couldn’t find a way to get any more information about the problem.
Before I went back to tech support, I asked ChatGPT about it and was told that the default ftp
client on Linux is fairly simplistic and that the newer lftp
would provide better diagnostics. To my surprise though, rather than debugging with lftp, it actually just connected, no problem. I’m pleased that it was so easy to fix, but a service as rudimentary as FTP should just work, and I count it as another strike against HP that their FTP implementation is wonky.
With the login problem resolved, I was able to upload the site files without hassle. It took a full 15 minutes the first time, but that was my bad, because I forgot to enable parallel uploading. But when I did it a second time, the parallel upload still took 8 minutes, and that’s when I started to get nervous.
See, when I’m using FTP, there’s no reliable way for me to upload only the files that have changed. Yes, lftp does have a feature called mirroring, that will only upload files that have changed, but it relies on the file timestamps to identify what has changed. For many users, this would be enough, but in my case, Hugo rebuilds the entire site every time something updates, so all the file are created anew each time, with completely new timestamps. A more reliable way to determine that a file has changed is by comparing checksums, but the FTP protocol doesn’t offer any way to do that remotely, and uploading the full site every time would be problematic, because for the entire duration of the upload, the parts of the site currently uploading would be unstable. The only way left to limit the files uploading would be to write an extra tool to backdate all my files before deploying them. And that tool would become yet another thing that could break and screw up my process.
Then I had an interesting thought. What if I uploaded using a double buffering scheme? If my site was rooted at the upload1 directory, then I could load my update into upload2 while the HTML server was still serving upload1. Then I could switch my server to use upload2 after the upload has successfully completed, and everything would change instantly - no unstable time. On the next update, I would just reverse things, uploading into upload1 and then switching back there again after it was done. It’s a bit wonky, but it would absolutely work, and as a bonus, it wouldn’t matter how long each upload took.
So I contacted support again and asked if they had some mechanism for letting me change root folders like that. Again, they replied within an hour, so again they get a thumbs up for response time. But the answer was disappointing - no way to change root folders. And worse, they didn’t seem at all concerned that their FTP-only policy was forcing me to implement Byzantine workarounds for what is supposed to be the absolute simplest kind of web site possible: raw HTML files.
At this point, I decided that I had made a good faith effort to work with the tools they offered, but that I shouldn’t have to work so hard to implement such a fundamentally simple thing as uploading files. I’ve requested my refund and I’ll drop an addendum here when that process is finally completed.
Meanwhile, it’s time to move on to my next candidate.
Note: 3 days later, the refund had been fully processed.