So I have been making improvements to the location app I blogged about recently. The first cut of the app wasn’t really all that much of an achievement as I could have done the same with a file and a webserver, without needing an app written in go. Now in my last blog post I stated that I would build an API, and I have done so. I have also moved the default page, and created a new one. If you choose to look at the code you will notice a function for checking an id and key (which are both currently hard coded to “test”) this is to allow multiple locations to be shared (via a randomly generated ID) and also make it harder to enumerate the location ID’s that the system knows about by pairing that with a randomly generated key. The creation of these ID’s and keys is going to be what I work on next, as well as some optimisations to the code.
I have a basic app, as per my last blog post. Now I need to host it somewhere. I have changed the app to only listen on local host, I have iptables on my servers to hopefully prevent me exposing ports I don’t want to expose, but better to not push my luck. I’m using a server running apache and using systemd as the init system. So for SSL termination we’ll use apache as the revers proxy. For this we need a vhost with mod_proxy enabled and the following config in a vhost
ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/
We then need to create a user to run the app, we want an unprivileged user
sudo adduser --system\ --shell /bin/false\ --gecos 'Location Finder App'\ --group\ --disabled-password\ --home /opt/location location
With that we need to create a systemd system file (I’ve added an example systemd file to the app repo) and to move a built copy of the binary onto the system, along with the HTML template file. And that is what I have done.
So in my previous blog post I said I was going to try and build a web app to find someone’s location using their smartphone’s location services. The first step in this is choosing a language and/or framework to build it in. I’ve decided to use Go, which a former collegue of mine tells me makes me a hipster.
So I have been hearing lately about What3Words and how the emergency services in the UK are using it to locate people. This, and other information I have read about recently has got me thinking. What3Words is a proprietary service, that the emergency services will be paying to use. Now a number of mountain rescue teams in the UK use a service developed by one of their volunteers called SARLOC which appears to have a similar set of requirements, but from what I have read appears much more useful for the mountain rescue teams that use it. Now what I have been thinking, these services both rely on the person that needs to be located to have a smartphone, with location services, and an internet connection. They both require the person to receive a link, and allow the opened web page to see their location. So with these assumptions, how hard is it to build a service that allows an operator to send a personalised link to someone, have that use the smartphone’s location services to get a current location for the user, and share that automatically with the operator?
As I mentioned in my last post I have been working on the migration of my blog, well it is now completed. This is my first post powered by Jekyll. So far everything appears to be working as expected, but I’m sure I’ll find niggles that need fixing as time goes on.
So I have been working away in the background on the migration of my blog away from the Apache Roller powered blog platform that I currently use. One of the issues that annoyed me, and I never got around to fixing (although it would probably have been easy to fix), is the fact that all my posts appear at a URL that includes the word "blog" twice. It was redundant, and irritated me, and because I never fixed it, removing that means that when I migrate the blog I'll need to set up a redirect for the old links to still work, which also annoys me, but is the cost of this migration I suppose. So I am going to do a review of the process, what I wanted to do, how far I have got, how I did it, and what is left to do.
I said I was going to migrate my blog some time ago, off of Apache Roller that it currently runs on, and onto Jekyll (probably). Well since then I've basically not done a lot, but I have now hit a minor milestone. I have managed to migrate my blog content to a new Jekyll site. It's not ready for me to publish it yet, I still have a lot to learn about how to use and set up Jekyll, I either want to match the URL layout of my current blog as much as possible, or at the very least map out the URL rewrites I'm going to need so that any links continue to work. But for this milestone I needed to get the content out of the Roller database, and into Jekyll, and for that I found the RSS importer not quite up to what I wanted. So in the true spirit of open source, I took the available tools, I hacked around with them, and I got something that worked for me, and then as I may not be the only one that needs this, I raised a pull request.
I normally shy away from giving a set of instructions for how to do something. There are two reasons for this, often there are already better instructions than I could write out on the internet already, and also it is very easy to give incomplete, or incorrect, instructions, that when blindly followed leave people in a situation that is bad, and that they don't know is bad. However I need to have faith in my own knowledge, and I need to stretch myself.
So with this in mind, following Microsoft's purchase of Github I have finally got around to building my own git server. This is something I have wanted to do for some time, but have always shied away from. Well now I have done it, and I have also written a guide for others to follow on how to do the same.
I have started to look into rebuilding my blog based on jekyll. Part of this will mean changing code, which will need version control. As I mentioned when talking about my new hosted website this can be done in git. That git repository is just a local repository though (not counting the copies pushed up to the server). It's probably about time I had some public code repositories (not including the professional ones I have worked on, those have always been kept separate from my personal identity). However it looks like Microsoft are buying GitHub. The timing isn't great, but I'm a resourceful sysadmin, maybe it's time to host my own. Also the timing could be worse I could be invested in hosting the repositories with GitHub. So I'm going to look into Gitea as an option for hosting my own code repository. I'll let you know how it goes.