2 years ago
geoipupdate is a program that allows you to get a local copy of an IP database so you can inspect a IP address and get a rough idea of where your users are coming from. It's like a free version of the IP API services
93 Replies
geoipupdate looks like it has both a dedicated Docker and a Nix presence https://search.nixos.org/packages?channel=23.11&show=geoipupdate&from=0&size=50&sort=relevance&type=packages&query=geoipupdate
This is the instructions page: https://dev.maxmind.com/geoip/updating-databases
It looks like I have possibly several options
Use dedicated Docker thing
Get binary from GitHub
Use Nix package
How would you got about figuring out which methodology to pursue? My impression is that if geoipupdate is supposed to be a long lived service, you would want to install it on a service in a way that doesn't reinstall it everytime meaning it's a part of the deploy, so that could mean Nix or Docker
2 years ago
why not just run an in code cron job to check for updates and download if needed, storing the database in a volume
I did that yesterday, it's a ton of boilerplate and geoipupdate is implemented in Go the same language I wrote my thing in
But I'm pretty confused about using Nix or Docker, It seems like Nix is supposed to be easier but it just seems more convoluted to me
2 years ago
so geoipupdate the binary is a long lived process and just downloads the database and any updates when it comes out?
The website doesn't state when the database updates to geoipupdate would probably just handle all the ambiguity for you
2 years ago
so you need a way to run that in parallel with your go app?
So I guess what I'm asking is they distribute both a binary in GitHub and a Docker
2 years ago
correct
2 years ago
is it a long lived process or no?
2 years ago
yeah exactly
My point was that it's supposed to live in a VM that doesn't get shutdown because it has it's own cron job
So if there's a binary on GitHub should I just download the right the architecture and commit it to git so it shows up in the Railway VM or Docker copy it or something else you think?
If I could SSH into Railway I could set it up once but that doesn't seem to be available
2 years ago
even if you could ssh into the service and set it up, it wont not be setup next time you deploy
I also don't know how I'd know which binary to select from assuming it's Linux
geoipupdate_6.1.0_linux_386.deb
2.09 MB
Jan 9
geoipupdate_6.1.0_linux_386.rpm
2.16 MB
Jan 9
geoipupdate_6.1.0_linux_386.tar.gz
2.09 MB
Jan 9
geoipupdate_6.1.0_linux_amd64.deb
2.21 MB
Jan 9
geoipupdate_6.1.0_linux_amd64.rpm
2.28 MB
Jan 9
geoipupdate_6.1.0_linux_amd64.tar.gz
2.2 MB
Jan 9
geoipupdate_6.1.0_linux_arm64.deb
2.04 MB
Jan 9
geoipupdate_6.1.0_linux_arm64.rpm
2.09 MB
Jan 9
geoipupdate_6.1.0_linux_arm64.tar.gz
2.03 MB
Jan 9
geoipupdate_6.1.0_linux_armv6.deb
2.09 MB
Jan 9
geoipupdate_6.1.0_linux_armv6.rpm
2.14 MB
Jan 9
geoipupdate_6.1.0_linux_armv6.tar.gz2 years ago
are you using nixpacks?
2 years ago
are you using nixpacks in this app of yours?
This is meant to be a microservice so I can ping users IP and store it in their session info. First step is getting the db stuff under control the rest is easy
If I use Nix I assume I just list it as a dependency like ["go", "geoipupdate"] and theoretically it is in my path or something?
I am skiddish on Nix because if I changed providers with me I can't assume Nix will work somewhere else
So having the binary download on initialization or just using Docker seems to make more sense
2 years ago
you would want to do array extending ['...', 'geoipupdate'] dont specify go since that would be added by railway automatically
2 years ago
use a Dockerfile then
2 years ago
not how it works, you would have to install cron into the container and load the config file, and then finally start the cron daemon
2 years ago
also they arent really VMs they are containers
2 years ago
you really shouldnt assume anything will just work
OK but assuming I went with the binary, is there a way to know what platform specifically to use?
I could probably write a Go program that will run a command and just tell me the answer, assuming that architectures don't change between deployments?
2 years ago
linux_amd64
2 years ago
it wont ever be anything but that
OK thanks, so basically I download the binary and then I can invoke it manually or use Railway's cron settings
2 years ago
well in this case it would need to be done in the same service that you run your api in
2 years ago
so you cant use railway cron for web services
2 years ago
aka this needs to be an in code cron or linux cron
2 years ago
but honestly even though its a lot of boilerplate, a fully in code solution is not a bad idea
2 years ago
thats just going to cost you extra in egress fees
2 years ago
railway is not
2 years ago
no but theres really no need
2 years ago
store the database on a volume in the same service as the api
2 years ago
not VMs, container*
but yes your api would be responsible for doing its own thing and downloading the database
2 years ago
its just a path and then you store the files in the path
How are you supposed to know what the contents are, does the web view help you?
2 years ago
there is not any native way to do that
Sounds related to https://discord.com/channels/713503345364697088/1225968032631754802
2 years ago
you know the contents because you wrote the code that put the files into the volume
2 years ago
i mean you can do it via code yes, but you are storing one file in a single location, you cant mess that up
2 years ago
haha dont overthink it
2 years ago
no problem!