#How to deploy geoipdate on Railway?

94 messages · Page 1 of 1 (latest)

stray breach
#

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

tardy tulipBOT
#

Project ID: N/A

stray breach
#

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

frail pumice
#

why not just run an in code cron job to check for updates and download if needed, storing the database in a volume

stray breach
#

I did that yesterday, it's a ton of boilerplate and geoipupdate is implemented in Go the same language I wrote my thing in

#

I figured I'd try the prescribed solution instead of reinvent the wheel

#

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

frail pumice
#

so geoipupdate the binary is a long lived process and just downloads the database and any updates when it comes out?

stray breach
#

Yes

#

The website doesn't state when the database updates to geoipupdate would probably just handle all the ambiguity for you

frail pumice
#

so you need a way to run that in parallel with your go app?

stray breach
#

Yeah it comes with a conf file for cron

#

So I guess what I'm asking is they distribute both a binary in GitHub and a Docker

#

But I can't SSH into a service right?

frail pumice
#

correct

#

is it a long lived process or no?

stray breach
#

Yes

#

Well actually

#

No if it uses a cron job

#

No it probably isn't

frail pumice
#

yeah exactly

stray breach
#

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

#

Not supposed to be an ephemeral serverless thing

#

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

frail pumice
#

even if you could ssh into the service and set it up, it wont not be setup next time you deploy

stray breach
#

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.gz
frail pumice
#

are you using nixpacks?

stray breach
#

I have. I can

frail pumice
#

are you using nixpacks in this app of yours?

stray breach
#

I can, this is a standalone service, it can use whatever

#

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

frail pumice
#

you would want to do array extending ['...', 'geoipupdate'] dont specify go since that would be added by railway automatically

stray breach
#

As far as the conf for the cron job it gives you

#

I just hope I put it in the right place and the VM picks it up?

#

It almost seems easier to reinvent the wheel here

#

Sorry for all the questions, deployments are not my strength

frail pumice
#

also they arent really VMs they are containers

stray breach
#

In that case it sounds like I should just stick with my hand rolled code

frail pumice
#

you really shouldnt assume anything will just work

stray breach
#

I know lmao

#

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?

frail pumice
#

linux_amd64

stray breach
#

Ah

frail pumice
#

it wont ever be anything but that

stray breach
#

OK thanks, so basically I download the binary and then I can invoke it manually or use Railway's cron settings

#

Was I misunderstanding the thing about cron in Railway? From the other thread

frail pumice
#

well in this case it would need to be done in the same service that you run your api in

#

so you cant use railway cron for web services

#

aka this needs to be an in code cron or linux cron

stray breach
#

Well my plan was to back up the DB to R2

#

That part is pretty easy

frail pumice
#

but honestly even though its a lot of boilerplate, a fully in code solution is not a bad idea

stray breach
#

So once serivce for syncing DBs and one service for reading IPs

frail pumice
stray breach
#

R2 egress is free

#

The dbs are pretty small

frail pumice
#

railway is not

stray breach
#

Oh right

#

But still I don't think 50mb twice a week is a lot?

frail pumice
#

no but theres really no need

stray breach
#

What would you do? Given the same problem

frail pumice
#

store the database on a volume in the same service as the api

stray breach
#

So two services one VM with a volume?

#

Or collapse into one service with a volume?

frail pumice
#

not VMs, container*

but yes your api would be responsible for doing its own thing and downloading the database

stray breach
#

OK I can try that, I've never used volumes intentionally before

frail pumice
#

its just a path and then you store the files in the path

stray breach
#

But can you debug it?

#

Like in Railway is there anyway to LS it?

#

How are you supposed to know what the contents are, does the web view help you?

frail pumice
#

there is not any native way to do that

stray breach
#

OK but it's a volume that you can programmatically LS is your point

frail pumice
#

you know the contents because you wrote the code that put the files into the volume

frail pumice
stray breach
#

Don't underestimate my naiveness

#

🙂

frail pumice
#

haha dont overthink it

stray breach
#

Alright, thanks!