37 Commits
Author SHA1 Message Date
Paul Brinkmeier 3b5cff67bb Disable hitparade service
Check / Lint Ansible Files (push) Successful in 1m34s
2026-10-28 08:59:32 +01:00
Paul Brinkmeier cb0b738567 Move Caddyfile to right location
Check / Lint Ansible Files (push) Successful in 1m24s
2026-10-27 23:56:18 +01:00
Paul Brinkmeier 7156ee72aa Use node-26-trixie for CI
Check / Lint Ansible Files (push) Successful in 2m11s
2026-10-27 23:53:27 +01:00
Paul Brinkmeier 8f2a99348e Add node-26-trixie container to gitea-runner 2026-10-27 23:50:06 +01:00
Paul Brinkmeier 15c4064e12 Don't try to decrypt the Caddyfile
Check / Lint Ansible Files (push) Canceled after 1m52s
It's back to plain text
2026-10-27 23:49:38 +01:00
Paul Brinkmeier 428f3cf654 Update todos 2026-10-27 23:48:26 +01:00
Paul Brinkmeier 6ee09d3829 Bump gitea-runner
Check / Lint Ansible Files (push) Successful in 3m8s
2026-10-27 23:40:57 +01:00
Paul Brinkmeier aa0e20d6d7 Disable hitparade 2026-10-27 23:40:57 +01:00
Paul Brinkmeier fccb275e47 Bump codi to 2.6.1 2026-10-27 23:40:56 +01:00
Paul Brinkmeier 696b72909a Update ansible readme 2026-10-27 23:40:56 +01:00
jakob 6eff9a41d9 Change SSH key
Check / Lint Ansible Files (push) Successful in 3m15s
Delete the one deployed on the (publicly accessible) Coli-Pad, replace with one safely stored on the (encrypted, only accessible to Jakob) JakobsLaptop
2026-09-27 19:40:51 +02:00
Paul Brinkmeier 85878fdea3 Remove deprecated options
Check / Lint Ansible Files (push) Successful in 3m13s
2026-09-21 14:08:04 +02:00
Paul Brinkmeier fff689f7ef Update gitea
Check / Lint Ansible Files (push) Successful in 3m16s
2026-09-21 13:52:58 +02:00
Paul Brinkmeier 2a7bbfd5b5 Bump yore
Check / Lint Ansible Files (push) Successful in 3m16s
2026-09-15 19:09:15 +02:00
Paul Brinkmeier 9c7ac07e00 Add Jakob
Check / Lint Ansible Files (push) Successful in 3m15s
2026-09-12 19:26:12 +02:00
Paul Brinkmeier 9f34f8aa22 qr.beany.club
Check / Lint Ansible Files (push) Successful in 3m23s
2026-09-12 19:04:28 +02:00
Paul Brinkmeier 5b8f3579d4 Add voter
Check / Lint Ansible Files (push) Successful in 3m9s
2026-09-11 00:04:45 +02:00
Paul Brinkmeier 4255a46631 Open https://hitparade.beany.club:1208{0,1}
Check / Lint Ansible Files (push) Successful in 3m9s
2026-09-10 23:50:35 +02:00
Paul Brinkmeier 143f3fee76 Add depends_on for pollmaster
Check / Lint Ansible Files (push) Successful in 3m9s
2026-09-10 23:35:26 +02:00
Paul Brinkmeier bec88ce7b3 Add config for pollmaster_db and pollmaster 2026-09-10 23:34:45 +02:00
Paul Brinkmeier dde2595990 Add hitparade mopidy config
Check / Lint Ansible Files (push) Successful in 3m21s
2026-09-10 21:57:19 +02:00
Paul Brinkmeier 74944410dc Downgrade CI ansible version (this should be Nixified)
Check / Lint Ansible Files (push) Successful in 3m2s
2026-05-17 20:40:15 +02:00
Paul Brinkmeier cca5db5acb Fix ansible version
Check / Lint Ansible Files (push) Failing after 2m1s
2026-05-17 20:37:05 +02:00
Paul Brinkmeier ad6de45a32 Update nixpkgs
Check / Lint Ansible Files (push) Failing after 1m54s
2026-05-17 20:31:54 +02:00
Paul Brinkmeier e625f7f505 Bump yore to 0.0.10
Check / Lint Ansible Files (push) Successful in 3m8s
2026-05-17 20:28:26 +02:00
Paul Brinkmeier 812298e5ad Add CORS header for Gitea OAuth
Check / Lint Ansible Files (push) Has been cancelled
2026-05-17 20:27:57 +02:00
paul b135f9e430 Change Factorio password
Check / Lint Ansible Files (push) Successful in 3m10s
2026-03-07 17:02:28 +01:00
Paul Brinkmeier 1d3eb276ca Re-add factorio
Check / Lint Ansible Files (push) Successful in 3m16s
2026-03-05 18:39:41 +01:00
Paul Brinkmeier 3b506670dd Add beany.club
Check / Lint Ansible Files (push) Successful in 3m58s
2026-02-06 18:13:15 +01:00
Paul Brinkmeier 6068741562 Fix project website
Check / Lint Ansible Files (push) Successful in 3m59s
2025-10-29 00:50:05 +01:00
Paul Brinkmeier 9afb2deda0 Bump yore to 0.0.9 2025-10-29 00:39:01 +01:00
Paul Brinkmeier 7aeaa1eef5 Mount time zone info into yore container
Check / Lint Ansible Files (push) Successful in 4m41s
2025-10-07 18:29:38 +02:00
Paul Brinkmeier a712cf786b Add volumes for yore and yore DB
Check / Lint Ansible Files (push) Successful in 4m59s
2025-10-07 18:21:26 +02:00
Paul Brinkmeier 490c4f3fac Basic yore deployment
Check / Lint Ansible Files (push) Successful in 4m55s
2025-10-07 13:57:45 +02:00
Paul Brinkmeier 3bf6fc4104 Add nix_runner volumes and enable them in runner
Check / Lint Ansible Files (push) Successful in 6m22s
2025-10-07 00:19:06 +02:00
Paul Brinkmeier e140109e20 Disable PZ server 2025-10-07 00:15:41 +02:00
Paul Brinkmeier f2218d5bdd Bump utoy to 0.6.3 2025-10-06 23:51:47 +02:00
30 changed files with 474 additions and 52 deletions
+1 -1
View File
@@ -2,7 +2,7 @@ name: Check
"on": [push] "on": [push]
jobs: jobs:
"Lint Ansible Files": "Lint Ansible Files":
runs-on: node-22-bookworm runs-on: node-26-trixie
steps: steps:
- run: apt-get update - run: apt-get update
- run: apt-get upgrade -y - run: apt-get upgrade -y
+3 -2
View File
@@ -21,5 +21,6 @@ to avoid checking for a new version every single run.
## TODO ## TODO
- [x] Migrate to `community.docker.docker_compose_v2` (`v1` is deprecated) - [x] Migrate to `community.docker.docker_compose_v2` (`v1` is deprecated)
- [ ] Nix Gitea Action runner with host Nix daemon - [x] Nix Gitea Action runner
- [ ] Install but disable zomboid server - [x] Install but disable zomboid server
- [x] Download volume for yore
+3 -6
View File
@@ -5,14 +5,11 @@
- [x] Use `/var/lib/pbri/docker/...` instead of Docker volumes (makes backups easier) - [x] Use `/var/lib/pbri/docker/...` instead of Docker volumes (makes backups easier)
- [x] Make it inaccessible to anyone but root (`-rw------`) - [x] Make it inaccessible to anyone but root (`-rw------`)
- [x] Add [Drone runner](https://docs.drone.io/runner/docker/installation/linux/) - [x] Add [Drone runner](https://docs.drone.io/runner/docker/installation/linux/)
- [ ] Figure out how to dependably store `.env` files (Ansible vault? Something else?) - [x] Figure out how to dependably store `.env` files (Ansible vault? Something else?)
- [ ] In vault, seperate from other config - [x] In vault, seperate from other config
- [x] Check out docker swarm and current best practices for Ansible - [x] Check out docker swarm and current best practices for Ansible
- [x] Use Gitea instead of GitLab - [x] Use Gitea instead of GitLab
- [ ] Add drone exec runner for Nix builds with shared `/nix`
- [ ] Lint caddy file, add gzip and disable admin interface
- [x] Make Gitea display graphs in Notebooks (see https://docs.gitea.io/en-us/external-renderers/). - [x] Make Gitea display graphs in Notebooks (see https://docs.gitea.io/en-us/external-renderers/).
- [x] Factorio server - [x] Factorio server
- [ ] Add flag for Gitea backups (after which Gitea will be up but no contain the sites source code)
- [x] Add Gitea actions - [x] Add Gitea actions
- [ ] Remove drone - [x] Remove drone
+7 -6
View File
@@ -9,25 +9,26 @@ To drop into a shell with `ansible-*` commands, run:
nix develop nix develop
``` ```
## `misc.yaml` ## `nanna-setup.yaml`
Server for miscellaneous stuff, e.g. the website. Small VPS for self-hosted services.
Expects to have a user `paul who can `sudo`. Expects to have a user `paul` who can `sudo`.
Sets up: Sets up:
- Some basic packages - Some basic packages
- Docker and `docker-compose` - Docker and `docker-compose`
- Nix multi-user installation - Nix multi-user installation
## `misc-docker.yaml` ## `nanna-docker.yaml`
Deploys Docker configurations from `../docker`: Deploys Docker Compose configurations from `../docker`:
- Sets up the docker network `caddy-network` for services that are reverse proxied by caddy - Sets up the docker network `caddy-network` for services that are reverse proxied by caddy
- Copies configuration into `/etc/pbri/docker` - Copies configuration into `/etc/pbri/docker`
- Creates folder `/var/lib/pbri/docker` for storing application files - Creates folder `/var/lib/pbri/docker` for storing application files
- Creates users with `42xxx` UIDs for running containers - Creates users with `42xxx` UIDs for running containers
- `docker compose {up,down}`s all enabled/disabled services
## `misc-sites.yaml` ## `nanna-sites.yaml`
Checks out static sites into `/home/paul/Sites` which is mounted into `/srv` in the Caddy container. Checks out static sites into `/home/paul/Sites` which is mounted into `/srv` in the Caddy container.
+3
View File
@@ -13,3 +13,6 @@ gods_users:
- name: caddy - name: caddy
uid: 42002 uid: 42002
state: present state: present
- name: yore
uid: 42004
state: present
+25 -11
View File
@@ -44,22 +44,22 @@
- name: Upload and decrypt docker environment vars - name: Upload and decrypt docker environment vars
become: true become: true
ansible.builtin.copy: ansible.builtin.copy:
src: "../../docker/envs/{{ item.name }}/.env" src: "../../docker/envs/{{ item.path }}"
dest: /etc/pbri/docker/{{ item.name }}/.env dest: "/etc/pbri/docker/{{ item.path }}"
# Files should inaccessible to non-root users. # Files should inaccessible to non-root users.
mode: u=rw,g=,o= mode: u=rw,g=,o=
# This is true by default but I put it here anyways # This is true by default but I put it here anyways
# to emphasize what's happening # to emphasize what's happening
decrypt: true decrypt: true
loop: loop:
- name: gitea - path: gitea/.env
state: present - path: codi/.env
- name: codi - path: vrnp/.env
state: present - path: zomboid/.env
- name: vrnp - path: yore/.env
state: present - path: factorio/.env
- name: zomboid - path: hitparade/.env
state: present - path: hitparade/pollmaster-config.yml
# This needs to be done for any services where user: # This needs to be done for any services where user:
# is set in docker-compose.yaml. # is set in docker-compose.yaml.
- name: Create volume directories with correct permissions - name: Create volume directories with correct permissions
@@ -77,6 +77,14 @@
user: caddy user: caddy
- name: codi_uploads - name: codi_uploads
user: hackmd user: hackmd
- name: nix_runner_etc
user: 1000
- name: nix_runner_nix
user: 1000
- name: nix_runner_home_node
user: 1000
- name: yore_data
user: yore
# Since some docker-compose configuration might want to pull # Since some docker-compose configuration might want to pull
# images from the Gitea package repository, we need to ensure # images from the Gitea package repository, we need to ensure
# that Gitea is reachable before those configurations are deployed. # that Gitea is reachable before those configurations are deployed.
@@ -117,5 +125,11 @@
state: present state: present
- name: vrnp - name: vrnp
state: present state: present
- name: zomboid - name: yore
state: present state: present
- name: hitparade
state: absent
- name: factorio
state: absent
- name: zomboid
state: absent
+33
View File
@@ -53,6 +53,39 @@ nxEdyH1aEGOGGRqDCp3U/SG46 davidtanner@coolerLaptop2.fritz.box"
create: true create: true
state: present state: present
mode: "0600" mode: "0600"
- name: Add Jakobs group
become: true
ansible.builtin.group:
name: "jakob"
state: "present"
- name: Add Jakob
become: true
ansible.builtin.user:
name: "jakob"
group: "jakob"
state: "present"
shell: "/bin/bash"
append: true
groups:
- sudo
- name: Create Jakob SSH directory
become: true
ansible.builtin.file:
path: /home/jakob/.ssh
owner: jakob
group: jakob
state: directory
mode: "0700"
- name: Set Jakob SSH key
become: true
ansible.builtin.lineinfile:
path: /home/jakob/.ssh/authorized_keys
line: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHzStuc1f7CfTsmp1qLz5x/YCwJ2wHVjxOv2Fvocs3xH pbrinkmeier.de@jakob.moser.contact"
owner: jakob
group: jakob
create: true
state: present
mode: "0600"
- name: Add work SSH key - name: Add work SSH key
become: true become: true
ansible.builtin.lineinfile: ansible.builtin.lineinfile:
+9 -1
View File
@@ -10,7 +10,7 @@
checkouts: checkouts:
- path: /home/paul/Sites/pbrinkmeier.de - path: /home/paul/Sites/pbrinkmeier.de
url: https://git.pbrinkmeier.de/paul/pbrinkmeier.de url: https://git.pbrinkmeier.de/paul/pbrinkmeier.de
commit: 611cee6f405f1bf8b8a87f597ff5a4222621493a commit: 1df3566997535ab563b5fa76724a8c6c55b96483
owner: paul owner: paul
- path: /home/paul/Sites/tichy.click - path: /home/paul/Sites/tichy.click
url: https://github.com/pbrinkmeier/tichy-clicker url: https://github.com/pbrinkmeier/tichy-clicker
@@ -40,3 +40,11 @@
owner: david owner: david
group: david group: david
mode: "0775" mode: "0775"
- name: Create beany.club directory
become: true
ansible.builtin.file:
path: /home/paul/Sites/beany.club
state: directory
owner: paul
group: paul
mode: "0775"
+35 -11
View File
@@ -24,6 +24,13 @@ dt.beany.club {
} }
} }
vorschlagzumklangvongeschichtsschreibendenprozessen.de {
file_server {
root /srv/vorschlagzumklangvongeschichtsschreibendenprozessen.de
browse
}
}
tichy.click { tichy.click {
file_server { file_server {
root /srv/tichy.click root /srv/tichy.click
@@ -39,20 +46,23 @@ pad.pbrinkmeier.de {
} }
git.pbrinkmeier.de { git.pbrinkmeier.de {
# Allow apps to requests tokens 'n stuff
@oauth path /login/oauth/*
header @oauth {
Access-Control-Allow-Origin "*"
Access-Control-Allow-Methods "GET, POST, OPTIONS"
Access-Control-Allow-Headers "Content-Type, Authorization"
}
@oauth_preflight {
path /login/oauth/*
method OPTIONS
}
respond @oauth_preflight 204
reverse_proxy gitea:3000 reverse_proxy gitea:3000
} }
ci.pbrinkmeier.de {
reverse_proxy drone:80
}
jupyter.pbrinkmeier.de {
reverse_proxy jupyter:8888
basicauth {
wug JDJhJDE0JEJrQXUzVWxFZ2JGVmx6YlZWTkpYdy5IMjRXdnZZdGw5SjZDcUg2ZWMxOEVjcEV6dWhIRmhD
}
}
plantuml.pbrinkmeier.de { plantuml.pbrinkmeier.de {
reverse_proxy codi_plantuml:8080 reverse_proxy codi_plantuml:8080
} }
@@ -64,3 +74,17 @@ utoy.beany.club {
vrnp.beany.club { vrnp.beany.club {
reverse_proxy vrnp:8000 reverse_proxy vrnp:8000
} }
fz.beany.club {
reverse_proxy yore:3000
}
beany.club, www.beany.club {
file_server {
root /srv/beany.club
}
}
qr.beany.club {
redir https://beany.club{uri}
}
+1 -1
View File
@@ -1,4 +1,4 @@
FROM caddy FROM caddy:latest
COPY Caddyfile /etc/caddy/Caddyfile COPY Caddyfile /etc/caddy/Caddyfile
RUN chown 42002:42002 /etc/caddy/Caddyfile RUN chown 42002:42002 /etc/caddy/Caddyfile
+5
View File
@@ -6,15 +6,20 @@ services:
ports: ports:
- "80:80" - "80:80"
- "443:443" - "443:443"
# For hitparade/pollmaster
- "12080:12080"
- "12081:12081"
user: "42002" user: "42002"
volumes: volumes:
- /var/lib/pbri/docker/caddy_data:/data - /var/lib/pbri/docker/caddy_data:/data
- /var/lib/pbri/docker/caddy_config:/config - /var/lib/pbri/docker/caddy_config:/config
# See nanna-sites playbook/Caddyfile # See nanna-sites playbook/Caddyfile
- /home/david/Sites/dt.beany.club:/srv/dt.beany.club:ro - /home/david/Sites/dt.beany.club:/srv/dt.beany.club:ro
- /home/david/Sites/vorschlagzumklangvongeschichtsschreibendenprozessen.de:/srv/vorschlagzumklangvongeschichtsschreibendenprozessen.de:ro
- /home/paul/Sites/files.pbrinkmeier.de:/srv/files.pbrinkmeier.de:ro - /home/paul/Sites/files.pbrinkmeier.de:/srv/files.pbrinkmeier.de:ro
- /home/paul/Sites/pbrinkmeier.de:/srv/pbrinkmeier.de:ro - /home/paul/Sites/pbrinkmeier.de:/srv/pbrinkmeier.de:ro
- /home/paul/Sites/tichy.click:/srv/tichy.click:ro - /home/paul/Sites/tichy.click:/srv/tichy.click:ro
- /home/paul/Sites/beany.club:/srv/beany.club:ro
restart: always restart: always
networks: networks:
-2
View File
@@ -6,5 +6,3 @@ CODI_DB_USER=...
CODI_DB_PASSWORD=... CODI_DB_PASSWORD=...
CODI_DB_DB=... CODI_DB_DB=...
``` ```
See also: https://docs.drone.io/server/provider/gitea/.
+1 -1
View File
@@ -1,6 +1,6 @@
services: services:
codi: codi:
image: hackmdio/hackmd:2.5.4 image: hackmdio/hackmd:2.6.1
user: hackmd user: hackmd
environment: environment:
# Admin stuff # Admin stuff
+4
View File
@@ -0,0 +1,4 @@
FROM factoriotools/factorio:2.0.73
COPY server-settings.json /server-settings.json
ENTRYPOINT [ "/bin/sh", "-c", "mkdir -p /factorio/config && envsubst < /server-settings.json > /factorio/config/server-settings.json && exec /docker-entrypoint.sh" ]
+10
View File
@@ -0,0 +1,10 @@
# factorio
Add a `.env` file like this:
```
GAME_PASSWORD=...
```
Environment variables are put into `server-settings.json` during startup using `envsubst`.
See also: https://hub.docker.com/r/factoriotools/factorio.
@@ -0,0 +1,15 @@
---
services:
factorio:
image: pbrinkmeier/factorio
build: .
restart: always
environment:
GAME_PASSWORD: "${GAME_PASSWORD}"
DLC_SPACE_AGE: false
volumes:
- /var/lib/pbri/docker/factorio:/factorio
ports:
- "34197:34197/udp"
- "27015:27015/tcp"
@@ -0,0 +1,72 @@
{
"name": "le epic factorio server",
"description": "Description of the game that will appear in the listing",
"tags": ["game", "tags"],
"_comment_max_players": "Maximum number of players allowed, admins can join even a full server. 0 means unlimited.",
"max_players": 0,
"_comment_visibility": ["public: Game will be published on the official Factorio matching server",
"lan: Game will be broadcast on LAN"],
"visibility":
{
"public": false,
"lan": false
},
"_comment_credentials": "Your factorio.com login credentials. Required for games with visibility public",
"username": "",
"password": "",
"_comment_token": "Authentication token. May be used instead of 'password' above.",
"token": "",
"game_password": "${GAME_PASSWORD}",
"_comment_require_user_verification": "When set to true, the server will only allow clients that have a valid Factorio.com account",
"require_user_verification": false,
"_comment_max_upload_in_kilobytes_per_second" : "optional, default value is 0. 0 means unlimited.",
"max_upload_in_kilobytes_per_second": 0,
"_comment_max_upload_slots" : "optional, default value is 5. 0 means unlimited.",
"max_upload_slots": 5,
"_comment_minimum_latency_in_ticks": "optional one tick is 16ms in default speed, default value is 0. 0 means no minimum.",
"minimum_latency_in_ticks": 0,
"_comment_max_heartbeats_per_second": "Network tick rate. Maximum rate game updates packets are sent at before bundling them together. Minimum value is 6, maximum value is 240.",
"max_heartbeats_per_second": 60,
"_comment_ignore_player_limit_for_returning_players": "Players that played on this map already can join even when the max player limit was reached.",
"ignore_player_limit_for_returning_players": false,
"_comment_allow_commands": "possible values are, true, false and admins-only",
"allow_commands": "admins-only",
"_comment_autosave_interval": "Autosave interval in minutes",
"autosave_interval": 10,
"_comment_autosave_slots": "server autosave slots, it is cycled through when the server autosaves.",
"autosave_slots": 5,
"_comment_afk_autokick_interval": "How many minutes until someone is kicked when doing nothing, 0 for never.",
"afk_autokick_interval": 5,
"_comment_auto_pause": "Whether should the server be paused when no players are present.",
"auto_pause": true,
"only_admins_can_pause_the_game": true,
"_comment_autosave_only_on_server": "Whether autosaves should be saved only on server or also on all connected clients. Default is true.",
"autosave_only_on_server": true,
"_comment_non_blocking_saving": "Highly experimental feature, enable only at your own risk of losing your saves. On UNIX systems, server will fork itself to create an autosave. Autosaving on connected Windows clients will be disabled regardless of autosave_only_on_server option.",
"non_blocking_saving": false,
"_comment_segment_sizes": "Long network messages are split into segments that are sent over multiple ticks. Their size depends on the number of peers currently connected. Increasing the segment size will increase upload bandwidth requirement for the server and download bandwidth requirement for clients. This setting only affects server outbound messages. Changing these settings can have a negative impact on connection stability for some clients.",
"minimum_segment_size": 25,
"minimum_segment_size_peer_count": 20,
"maximum_segment_size": 100,
"maximum_segment_size_peer_count": 10
}
+1 -1
View File
@@ -1,3 +1,3 @@
FROM gitea/act_runner:0.2.11 FROM gitea/runner:5.0.0
COPY runner-config.yaml /opt/runner-config.yaml COPY runner-config.yaml /opt/runner-config.yaml
+2 -4
View File
@@ -1,6 +1,6 @@
services: services:
gitea: gitea:
image: gitea/gitea:1.23.1 image: gitea/gitea:1.27.3
restart: unless-stopped restart: unless-stopped
environment: environment:
# Ref: https://docs.gitea.io/en-us/config-cheat-sheet # Ref: https://docs.gitea.io/en-us/config-cheat-sheet
@@ -23,8 +23,6 @@ services:
GITEA__database__NAME: gitea GITEA__database__NAME: gitea
GITEA__database__USER: gitea GITEA__database__USER: gitea
GITEA__database__PASSWD: "${GITEA_DB_PASSWORD}" GITEA__database__PASSWD: "${GITEA_DB_PASSWORD}"
GITEA__picture__DISABLE_GRAVATAR: "true"
GITEA__picture__FEDERATED_AVATAR: "false"
GITEA__service__DISABLE_REGISTRATION: "true" GITEA__service__DISABLE_REGISTRATION: "true"
GITEA__service__REGISTER_EMAIL_CONFIRM: "true" GITEA__service__REGISTER_EMAIL_CONFIRM: "true"
GITEA__service__ENABLE_NOTIFY_MAIL: "true" GITEA__service__ENABLE_NOTIFY_MAIL: "true"
@@ -65,7 +63,7 @@ services:
gitea_runner: gitea_runner:
# Make sure to keep this in sync with the version in the Dockerfile # Make sure to keep this in sync with the version in the Dockerfile
image: pbrinkmeier/act_runner:0.2.11 image: pbrinkmeier/gitea-runner:5.0.0
build: . build: .
restart: unless-stopped restart: unless-stopped
environment: environment:
+5 -1
View File
@@ -34,6 +34,7 @@ runner:
- "ubuntu-22.04:docker://node:16-bullseye" - "ubuntu-22.04:docker://node:16-bullseye"
- "node-22-bullseye:docker://node:22-bullseye" - "node-22-bullseye:docker://node:22-bullseye"
- "node-22-bookworm:docker://node:22-bookworm" - "node-22-bookworm:docker://node:22-bookworm"
- "node-26-trixie:docker://node:26-trixie"
cache: cache:
# Enable cache server to use actions/cache. # Enable cache server to use actions/cache.
@@ -74,7 +75,10 @@ container:
# If you want to allow any volume, please use the following configuration: # If you want to allow any volume, please use the following configuration:
# valid_volumes: # valid_volumes:
# - '**' # - '**'
valid_volumes: [] valid_volumes:
- /var/lib/pbri/docker/nix_runner_etc
- /var/lib/pbri/docker/nix_runner_nix
- /var/lib/pbri/docker/nix_runner_home_node
# overrides the docker client host with the specified one. # overrides the docker client host with the specified one.
# If it's empty, act_runner will find an available docker host automatically. # If it's empty, act_runner will find an available docker host automatically.
# If it's "-", act_runner will find an available docker host automatically, but the docker host won't be mounted to the job containers and service containers. # If it's "-", act_runner will find an available docker host automatically, but the docker host won't be mounted to the job containers and service containers.
+3
View File
@@ -0,0 +1,3 @@
FROM mariadb:10.6
COPY pollmaster_scheme.sql /docker-entrypoint-initdb.d/init.sql
@@ -0,0 +1,30 @@
services:
pollmaster_db:
image: pbrinkmeier/pollmaster_db
build: .
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_DATABASE: 'pollmaster'
MYSQL_USER: 'pollmaster'
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
volumes:
- /var/lib/pbri/docker/hitparade_pollmaster_db_data:/var/lib/mysql
# Caddy terminates https for :12080 and :12081
pollmaster:
image: git.pbrinkmeier.de/paul/pollmaster:4
volumes:
- /etc/pbri/docker/hitparade/pollmaster-config.yml:/config.yml:ro
- /var/lib/pbri/docker/pollmaster_sessions:/app/pollmaster/sessions
depends_on:
- pollmaster_db
# Doesn't need further config, the pollmaster URL is baked into the image
voter:
image: git.pbrinkmeier.de/paul/voter:4
networks:
default:
name: caddy-network
external: true
@@ -0,0 +1,114 @@
CREATE TABLE IF NOT EXISTS `admin` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`image` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `Schlüssel 2` (`name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `artist` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`locked` tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `Name` (`name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2285 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `track` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`uri` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`name` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`album` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`year` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`length` mediumint(8) unsigned NOT NULL,
`image` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`locked` tinyint(1) unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `URI` (`uri`) USING BTREE,
KEY `Name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3570 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `playback` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`track_id` int(10) unsigned NOT NULL,
`timestamp` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `FK_playback_track` (`track_id`),
KEY `Time` (`timestamp`),
CONSTRAINT `FK_playback_track` FOREIGN KEY (`track_id`) REFERENCES `track` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=227 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `playlist` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`uri` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `Schlüssel 2` (`name`),
KEY `Schlüssel 3` (`uri`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `playlist_track` (
`playlist_id` int(10) unsigned NOT NULL,
`track_id` int(10) unsigned NOT NULL,
`position` int(10) unsigned NOT NULL,
PRIMARY KEY (`playlist_id`,`track_id`),
KEY `FK_playlist_track_track` (`track_id`),
KEY `FK_playlist_track_playlist` (`playlist_id`),
CONSTRAINT `FK_playlist_track_playlist` FOREIGN KEY (`playlist_id`) REFERENCES `playlist` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_playlist_track_track` FOREIGN KEY (`track_id`) REFERENCES `track` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `search_term` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`term` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`first_search` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `Schlüssel 2` (`term`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=88 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `search_term_track` (
`search_term_id` int(10) unsigned NOT NULL,
`track_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`search_term_id`,`track_id`),
KEY `FK_search_term_tracks_track` (`track_id`),
CONSTRAINT `FK_search_term_tracks_search_term` FOREIGN KEY (`search_term_id`) REFERENCES `search_term` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_search_term_tracks_track` FOREIGN KEY (`track_id`) REFERENCES `track` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `session` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`image` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`last_seen` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `Schlüssel 2` (`name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `setting` (
`key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`value` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `track_artist` (
`track_id` int(10) unsigned NOT NULL,
`artist_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`artist_id`,`track_id`),
KEY `FK__track` (`track_id`),
KEY `FK__artist` (`artist_id`),
CONSTRAINT `FK__artist` FOREIGN KEY (`artist_id`) REFERENCES `artist` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK__track` FOREIGN KEY (`track_id`) REFERENCES `track` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `vote` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`track_id` int(10) unsigned NOT NULL,
`session_id` int(10) unsigned DEFAULT NULL,
`timestamp` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `FK_vote_track` (`track_id`),
KEY `FK_vote_session` (`session_id`),
CONSTRAINT `FK_vote_track` FOREIGN KEY (`track_id`) REFERENCES `track` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=319 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+1 -1
View File
@@ -1,6 +1,6 @@
services: services:
utoy: utoy:
image: git.pbrinkmeier.de/paul/utoy:0.6.2 image: git.pbrinkmeier.de/paul/utoy:0.6.3
restart: always restart: always
networks: networks:
+34
View File
@@ -0,0 +1,34 @@
services:
yore:
image: git.pbrinkmeier.de/paul/yore:0.0.12
restart: always
environment:
# For dbmate (migrations)
DATABASE_URL: "postgres://yore:${YORE_DB_PASSWORD}@yore_db/yore-db?sslmode=disable&search_path=public"
# For yore itself
YORE_DB: "host=yore_db dbname=yore-db user=yore password=${YORE_DB_PASSWORD}"
YORE_DOWNLOAD_DIR: /data/downloads
YORE_DBMATE_DIR: /data/dbmate
user: 42004:42004
volumes:
- /etc/passwd:/etc/passwd:ro
- /etc/group:/etc/group:ro
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /var/lib/pbri/docker/yore_data:/data
yore_db:
image: postgres:17-alpine
restart: unless-stopped
environment:
POSTGRES_DB: yore-db
POSTGRES_USER: yore
POSTGRES_PASSWORD: "${YORE_DB_PASSWORD}"
volumes:
- /var/lib/pbri/docker/yore_db:/var/lib/postgresql/data
networks:
default:
name: caddy-network
external: true
+6
View File
@@ -0,0 +1,6 @@
$ANSIBLE_VAULT;1.1;AES256
33633161386465383663373137623030626264653862373161353564343662346433376437353530
6265356266663464613439663434373531333939326538330a313064343637366632633866343534
38313234303830636364383361613538666338636333323262333438313134353134356635626239
6366336439353266660a633161383062666130396566396431383534313266343431633064376463
38623562656564363565346166396363303636323062336636313838653638663833
+11
View File
@@ -0,0 +1,11 @@
$ANSIBLE_VAULT;1.1;AES256
39313233623136333531343838643537373064363466356664326339323237623032303436613735
6233383831383339366365663931333837313161646263390a646237306331386263323031373164
33383365643735343834643839356238646161613330353938643738636135653562646430303330
3332306436613537370a653234353464646639366236623665623162643363353230643963636361
65386363623336396664333237313066383764656438363233653831623238623062333064343263
36336132393563333031656366313066383132663732313964376261656331613863393965393232
66383031366564313636643363653239663537616537623263383135326464376330636333303736
32316530316139323264353136633865373634323761653763326262383238396639646664653039
31376639346138343635343937613061623261666465323332313361363064393035663038346231
3734333734656334626265643030303634383864613536373934
@@ -0,0 +1,30 @@
$ANSIBLE_VAULT;1.1;AES256
62303232383236386431613965343261333235646564616235643363393462646166613531303230
6361343030396633663262333363616538323230313733620a306237396132663064316633323937
62313339383336613066653662663066323330396234303435373137326435343637623465366133
3534643534396639640a373834656135393733373465663138316564383662613561353065613861
62643438383165316132333737623038336132666264353531633965663032333165666630626633
65643632616363343938643138353238636231383134383733656466346531626634346163626434
32383065316231363737663463663562373031313965346363336134653536663365613264383261
61616434383537666334663166393536376634386231343030343465393837326439363465633064
62643661643063316465623034646566363962353431623430356432366461613835633133663663
35663836383830616161656265316463396335326330623439383935323039366136366232303235
38323262316432343762663865333036313137396235396530656632366531303535626364363666
32613030346636646136636532653134616639396237643866356464363138633863363061656534
34646431393238386166306239666331376166316635333361616464396363626635343963306663
30363930366332343934613830396464633534653565306138613066383933346633323337656264
62636337326266633162356363373430626433653837346330653338306530356261383462336261
65333364656263623335653937386439326164623838613463613031323037383762343165363230
38343366346130383632316234656166313935336464666530373939333063356461303139643033
38636133313037613431663161383836653137653964393866346564663339363764643535333037
36616337666636653835313334373164666165313066366163373739393462653362306135396538
66303636623535353231373839383539613165353463643961643130666563633465353534623931
31343039313336323932373230643137323432313737396538353834376639353235306332353334
65303231623138386237383437383234366461356464343236396631303234353566346534326665
34316436326335333737633463386635356432326162346463646665643034626339643161383938
63363531393131363464643232376232363639306564656463323162316362343233376663633662
31333164316565383436326461316533386536623062373531323037373033373265333437393836
36613530303163393931363666613865616566626533356131613239626162633236643635613938
30393362316461396532393261643464376365643337633233323666336135366535653536386130
35623564626135303232656337313430346136376361376232343166663232353763376464376230
39356565373364353635386630333238616263306639663963616662633137343965
+7
View File
@@ -0,0 +1,7 @@
$ANSIBLE_VAULT;1.1;AES256
36313063633538313631386664353535373166306563613830316430613035306438326564396331
6336306566306166616266643630343262616465306631350a393932613665346164613361333037
39386135396364666630623962653462623234386430383034353731353361663837343036393130
3261633964626135610a626364363761373734333762373764366363643537316662643634616263
32383730663230303064626130393164616237636362656331313333316439323135366535303334
3436323333383739666261656531363335326532616562353166
Generated
+3 -3
View File
@@ -20,11 +20,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1759779330, "lastModified": 1779042148,
"narHash": "sha256-xZOU0j9Ix5IkOEDKM91ownNNmOcfDhAbhSCtG6FiPl4=", "narHash": "sha256-0/iVMQ31Zna06KJselli3hFuGy4HKacyJ8UxmWMrNZI=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "41da8f041b93896fa4758c7291a65bc96d1ed6cc", "rev": "3ef9dc56727d66ad28c2c3608da7261391ca18ad",
"type": "github" "type": "github"
}, },
"original": { "original": {