This commit is contained in:
kento2 2026-08-18 19:19:33 +02:00
parent dede9ce18d
commit 15f60f0465
7 changed files with 111 additions and 270 deletions

View file

@ -22,20 +22,40 @@ us connect to the resolved IPs. With a single node, that's fine but if we want t
access a service on another node, we need wireguard(or something similar).
Actually if we run all nodes in the same network and it'd be fine without.
## Most Basic Implementation
- single node
- runs `nomad agent -dev` and `consul agent -dev`
- runs `dnsmasq -d`, `nomad agent -dev`, and `consul agent -dev` as root
- /etc/nomad.d/consul.hcl:
consul {
address = "127.0.0.1:8500"
}
- /etc/dnsmasq.conf:
server=/consul/127.0.0.1#8600
- all jobs define a consul service
- TODO: make dns/connect work
## useful commands
## useful stuff
- `nomad job run <job>.hcl`
- `consul catalog services` <- list registered services
- http://localhost:4646/ui/jobs <- web UI accessible after `nomad agent -dev`
- https://developer.hashicorp.com/nomad/docs/configuration
- https://developer.hashicorp.com/nomad/docs/job-declare/service-discovery
## Storage/SPOT
the papermc container already copies all files in /mnt/*
to /data, so it's easy to add overwrites.
in ./lobby.nomad.hcl I just use a prestart container that downloads the plugin
to a temporary volume that is then used as /mnt.
A lot of boilerplate and it's also not easy to add other files.
Ideally, we'd just copy a whole directory over sftp. it would look
like this:
/.gitignore <- data
/Makefile <- downloads plugins specified to /data/plugins
/static <- static files that are copied by make to /data
But ig that wouldn't play nice with CI/CD...
Also currently we need to duplicate a lot of this boilerplate btw.

View file

@ -5,10 +5,56 @@ job "lobby" {
count = 1
network {
mode = "host"
mode = "bridge"
port "minecraft" {
to = 25565
}
dns {
servers = ["172.17.0.1"]
}
}
service {
name = "lobby"
port = "minecraft"
address_mode = "alloc"
check {
type = "tcp"
interval = "5s"
timeout = "1s"
}
}
ephemeral_disk {
size = 5000 # 5 gb
}
task "download-plugins" {
driver = "docker"
lifecycle {
hook = "prestart"
sidecar = false
}
config {
image = "busybox"
command = "sh"
volumes = ["../alloc/data:/mnt"]
args = [
"-xec",
<<-EOF
mkdir -p /mnt/plugins
cd /mnt/plugins
wget \
https://git.lab0x13.site/api/packages/scrow/generic/core-bukkit/UNVERSIONED/CoreBukkit.jar \
https://download.luckperms.net/1652/bukkit/loader/LuckPerms-Bukkit-5.5.65.jar \
https://hangarcdn.papermc.io/plugins/ViaVersion/ViaVersion/versions/5.11.0/PAPER/ViaVersion-5.11.0.jar \
https://hangarcdn.papermc.io/plugins/ViaVersion/ViaBackwards/versions/5.11.0/PAPER/ViaBackwards-5.11.0.jar
ls -l
EOF
]
}
}
task "run" {
@ -18,9 +64,9 @@ job "lobby" {
image = "git.lab0x13.site/scrow/papermc:0.1"
force_pull = false
ports = ["minecraft"]
#args = ["java", "-jar", "server.jar", "--port=${NOMAD_PORT_minecraft}"]
volumes = ["../alloc/data:/mnt"]
}
env {
HOST_POSTGRES = "jdbc:postgresql://postgres.service.consul/scrow"
HOST_NATS = "nats://nats.service.consul"
@ -30,18 +76,6 @@ job "lobby" {
cpu = 1000
memory = 2048
}
service {
name = "lobby"
port = "minecraft"
provider = "consul"
check {
type = "tcp"
interval = "5s"
timeout = "1s"
}
}
}
}
}

View file

@ -2,14 +2,24 @@ job "nats" {
type = "service"
group "nats" {
network {
mode = "host"
mode = "bridge"
port "nats" {
to = 4222
}
}
service {
name = "nats"
port = "nats"
address_mode = "alloc"
check {
type = "tcp"
interval = "1s"
timeout = "1s"
}
}
task "nats" {
driver = "docker"
@ -22,18 +32,6 @@ job "nats" {
cpu = 500
memory = 1000
}
service {
name = "nats"
port = "nats"
provider = "consul"
check {
type = "tcp"
interval = "5s"
timeout = "1s"
}
}
}
}
}

View file

@ -1,15 +1,27 @@
# TODO add host volume
job "postgres" {
datacenters = ["dc1"]
type = "service"
group "db" {
network {
mode = "host"
mode = "bridge"
port "postgres" {
to = 5432
}
}
service {
name = "postgres"
port = "postgres"
address_mode = "alloc"
check {
type = "tcp"
interval = "5s"
timeout = "1s"
}
}
task "postgres" {
driver = "docker"
@ -28,18 +40,6 @@ job "postgres" {
cpu = 500
memory = 512
}
service {
name = "postgres"
port = "postgres"
provider = "consul"
check {
type = "tcp"
interval = "10s"
timeout = "1s"
}
}
}
}
}

View file

@ -1,21 +1,25 @@
job "velocity" {
type = "service"
group "proxy" {
group "velocity" {
network {
port "minecraft" {
mode = "bridge"
port "ingress" {
static = 25565
}
dns {
server = ["127.0.0.1"]
}
}
task "velocity" {
driver = "docker"
config {
image = "scrow/velocity:local"
}
resources {
cpu = 2000
memory = 1000
driver = "docker"
config {
image = "scrow/velocity:local"
}
resources {
cpu = 1000
memory = 500
}
}
}