Compare commits
29
Commits
6068741562
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3b5cff67bb | ||
|
|
cb0b738567 | ||
|
|
7156ee72aa | ||
|
|
8f2a99348e | ||
|
|
15c4064e12 | ||
|
|
428f3cf654 | ||
|
|
6ee09d3829 | ||
|
|
aa0e20d6d7 | ||
|
|
fccb275e47 | ||
|
|
696b72909a | ||
|
|
6eff9a41d9 | ||
|
|
85878fdea3 | ||
|
|
fff689f7ef | ||
|
|
2a7bbfd5b5 | ||
|
|
9c7ac07e00 | ||
|
|
9f34f8aa22 | ||
|
|
5b8f3579d4 | ||
|
|
4255a46631 | ||
|
|
143f3fee76 | ||
|
|
bec88ce7b3 | ||
|
|
dde2595990 | ||
|
|
74944410dc | ||
|
|
cca5db5acb | ||
|
|
ad6de45a32 | ||
|
|
e625f7f505 | ||
|
|
812298e5ad | ||
|
|
b135f9e430 | ||
|
|
1d3eb276ca | ||
|
|
3b506670dd |
@@ -2,7 +2,7 @@ name: Check
|
||||
"on": [push]
|
||||
jobs:
|
||||
"Lint Ansible Files":
|
||||
runs-on: node-22-bookworm
|
||||
runs-on: node-26-trixie
|
||||
steps:
|
||||
- run: apt-get update
|
||||
- run: apt-get upgrade -y
|
||||
|
||||
@@ -5,14 +5,11 @@
|
||||
- [x] Use `/var/lib/pbri/docker/...` instead of Docker volumes (makes backups easier)
|
||||
- [x] Make it inaccessible to anyone but root (`-rw------`)
|
||||
- [x] Add [Drone runner](https://docs.drone.io/runner/docker/installation/linux/)
|
||||
- [ ] Figure out how to dependably store `.env` files (Ansible vault? Something else?)
|
||||
- [ ] In vault, seperate from other config
|
||||
- [x] Figure out how to dependably store `.env` files (Ansible vault? Something else?)
|
||||
- [x] In vault, seperate from other config
|
||||
- [x] Check out docker swarm and current best practices for Ansible
|
||||
- [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] Factorio server
|
||||
- [ ] Add flag for Gitea backups (after which Gitea will be up but no contain the sites source code)
|
||||
- [x] Add Gitea actions
|
||||
- [ ] Remove drone
|
||||
- [x] Remove drone
|
||||
|
||||
+7
-6
@@ -9,25 +9,26 @@ To drop into a shell with `ansible-*` commands, run:
|
||||
nix develop
|
||||
```
|
||||
|
||||
## `misc.yaml`
|
||||
## `nanna-setup.yaml`
|
||||
|
||||
Server for miscellaneous stuff, e.g. the website.
|
||||
Expects to have a user `paul who can `sudo`.
|
||||
Small VPS for self-hosted services.
|
||||
Expects to have a user `paul` who can `sudo`.
|
||||
Sets up:
|
||||
|
||||
- Some basic packages
|
||||
- Docker and `docker-compose`
|
||||
- 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
|
||||
- Copies configuration into `/etc/pbri/docker`
|
||||
- Creates folder `/var/lib/pbri/docker` for storing application files
|
||||
- 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.
|
||||
|
||||
@@ -44,24 +44,22 @@
|
||||
- name: Upload and decrypt docker environment vars
|
||||
become: true
|
||||
ansible.builtin.copy:
|
||||
src: "../../docker/envs/{{ item.name }}/.env"
|
||||
dest: /etc/pbri/docker/{{ item.name }}/.env
|
||||
src: "../../docker/envs/{{ item.path }}"
|
||||
dest: "/etc/pbri/docker/{{ item.path }}"
|
||||
# Files should inaccessible to non-root users.
|
||||
mode: u=rw,g=,o=
|
||||
# This is true by default but I put it here anyways
|
||||
# to emphasize what's happening
|
||||
decrypt: true
|
||||
loop:
|
||||
- name: gitea
|
||||
state: present
|
||||
- name: codi
|
||||
state: present
|
||||
- name: vrnp
|
||||
state: present
|
||||
- name: zomboid
|
||||
state: present
|
||||
- name: yore
|
||||
state: present
|
||||
- path: gitea/.env
|
||||
- path: codi/.env
|
||||
- path: vrnp/.env
|
||||
- path: zomboid/.env
|
||||
- path: yore/.env
|
||||
- path: factorio/.env
|
||||
- path: hitparade/.env
|
||||
- path: hitparade/pollmaster-config.yml
|
||||
# This needs to be done for any services where user:
|
||||
# is set in docker-compose.yaml.
|
||||
- name: Create volume directories with correct permissions
|
||||
@@ -129,5 +127,9 @@
|
||||
state: present
|
||||
- name: yore
|
||||
state: present
|
||||
- name: hitparade
|
||||
state: absent
|
||||
- name: factorio
|
||||
state: absent
|
||||
- name: zomboid
|
||||
state: absent
|
||||
|
||||
@@ -53,6 +53,39 @@ nxEdyH1aEGOGGRqDCp3U/SG46 davidtanner@coolerLaptop2.fritz.box"
|
||||
create: true
|
||||
state: present
|
||||
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
|
||||
become: true
|
||||
ansible.builtin.lineinfile:
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
checkouts:
|
||||
- path: /home/paul/Sites/pbrinkmeier.de
|
||||
url: https://git.pbrinkmeier.de/paul/pbrinkmeier.de
|
||||
commit: 611cee6f405f1bf8b8a87f597ff5a4222621493a
|
||||
commit: 1df3566997535ab563b5fa76724a8c6c55b96483
|
||||
owner: paul
|
||||
- path: /home/paul/Sites/tichy.click
|
||||
url: https://github.com/pbrinkmeier/tichy-clicker
|
||||
@@ -40,3 +40,11 @@
|
||||
owner: david
|
||||
group: david
|
||||
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"
|
||||
|
||||
@@ -46,6 +46,20 @@ pad.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
|
||||
}
|
||||
|
||||
@@ -64,3 +78,13 @@ vrnp.beany.club {
|
||||
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,4 +1,4 @@
|
||||
FROM caddy
|
||||
FROM caddy:latest
|
||||
|
||||
COPY Caddyfile /etc/caddy/Caddyfile
|
||||
RUN chown 42002:42002 /etc/caddy/Caddyfile
|
||||
|
||||
@@ -6,6 +6,9 @@ services:
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
# For hitparade/pollmaster
|
||||
- "12080:12080"
|
||||
- "12081:12081"
|
||||
user: "42002"
|
||||
volumes:
|
||||
- /var/lib/pbri/docker/caddy_data:/data
|
||||
@@ -16,6 +19,7 @@ services:
|
||||
- /home/paul/Sites/files.pbrinkmeier.de:/srv/files.pbrinkmeier.de:ro
|
||||
- /home/paul/Sites/pbrinkmeier.de:/srv/pbrinkmeier.de:ro
|
||||
- /home/paul/Sites/tichy.click:/srv/tichy.click:ro
|
||||
- /home/paul/Sites/beany.club:/srv/beany.club:ro
|
||||
restart: always
|
||||
|
||||
networks:
|
||||
|
||||
@@ -6,5 +6,3 @@ CODI_DB_USER=...
|
||||
CODI_DB_PASSWORD=...
|
||||
CODI_DB_DB=...
|
||||
```
|
||||
|
||||
See also: https://docs.drone.io/server/provider/gitea/.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
codi:
|
||||
image: hackmdio/hackmd:2.5.4
|
||||
image: hackmdio/hackmd:2.6.1
|
||||
user: hackmd
|
||||
environment:
|
||||
# Admin stuff
|
||||
|
||||
@@ -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" ]
|
||||
@@ -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,3 +1,3 @@
|
||||
FROM gitea/act_runner:0.2.11
|
||||
FROM gitea/runner:5.0.0
|
||||
|
||||
COPY runner-config.yaml /opt/runner-config.yaml
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
gitea:
|
||||
image: gitea/gitea:1.23.1
|
||||
image: gitea/gitea:1.27.3
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
# Ref: https://docs.gitea.io/en-us/config-cheat-sheet
|
||||
@@ -23,8 +23,6 @@ services:
|
||||
GITEA__database__NAME: gitea
|
||||
GITEA__database__USER: gitea
|
||||
GITEA__database__PASSWD: "${GITEA_DB_PASSWORD}"
|
||||
GITEA__picture__DISABLE_GRAVATAR: "true"
|
||||
GITEA__picture__FEDERATED_AVATAR: "false"
|
||||
GITEA__service__DISABLE_REGISTRATION: "true"
|
||||
GITEA__service__REGISTER_EMAIL_CONFIRM: "true"
|
||||
GITEA__service__ENABLE_NOTIFY_MAIL: "true"
|
||||
@@ -65,7 +63,7 @@ services:
|
||||
|
||||
gitea_runner:
|
||||
# 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: .
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
|
||||
@@ -34,6 +34,7 @@ runner:
|
||||
- "ubuntu-22.04:docker://node:16-bullseye"
|
||||
- "node-22-bullseye:docker://node:22-bullseye"
|
||||
- "node-22-bookworm:docker://node:22-bookworm"
|
||||
- "node-26-trixie:docker://node:26-trixie"
|
||||
|
||||
cache:
|
||||
# Enable cache server to use actions/cache.
|
||||
|
||||
@@ -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,6 +1,6 @@
|
||||
services:
|
||||
yore:
|
||||
image: git.pbrinkmeier.de/paul/yore:0.0.9
|
||||
image: git.pbrinkmeier.de/paul/yore:0.0.12
|
||||
restart: always
|
||||
environment:
|
||||
# For dbmate (migrations)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
$ANSIBLE_VAULT;1.1;AES256
|
||||
33633161386465383663373137623030626264653862373161353564343662346433376437353530
|
||||
6265356266663464613439663434373531333939326538330a313064343637366632633866343534
|
||||
38313234303830636364383361613538666338636333323262333438313134353134356635626239
|
||||
6366336439353266660a633161383062666130396566396431383534313266343431633064376463
|
||||
38623562656564363565346166396363303636323062336636313838653638663833
|
||||
@@ -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
|
||||
Generated
+3
-3
@@ -20,11 +20,11 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1759779330,
|
||||
"narHash": "sha256-xZOU0j9Ix5IkOEDKM91ownNNmOcfDhAbhSCtG6FiPl4=",
|
||||
"lastModified": 1779042148,
|
||||
"narHash": "sha256-0/iVMQ31Zna06KJselli3hFuGy4HKacyJ8UxmWMrNZI=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "41da8f041b93896fa4758c7291a65bc96d1ed6cc",
|
||||
"rev": "3ef9dc56727d66ad28c2c3608da7261391ca18ad",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
Reference in New Issue
Block a user