Compare commits

..

33 commits

Author SHA1 Message Date
eb739c806d Simplify xaseco command handling 2024-11-27 03:49:04 +01:00
ec3e39857b Silence unnecessary output 2024-11-27 03:48:43 +01:00
ec6e84465c Allow specifying xaseco operators and admins 2024-11-27 03:48:31 +01:00
54d3050cdf Normalize display name of vaultwarden mailer 2024-11-27 03:48:00 +01:00
dc15c137c9 Store all game data of TrackMania service 2024-11-27 03:47:41 +01:00
4eb7fece98 Add declaration of transmission service 2024-11-27 03:47:21 +01:00
7e8314d42a Leave user of wekan container unchanged 2024-11-27 03:47:02 +01:00
04538d936a Store domain names in overrides 2024-11-27 03:41:26 +01:00
59bca9ce9e Normalize the save path of service data 2024-11-27 03:02:59 +01:00
0a59700a5d Improve the format of the docker files 2024-11-27 02:59:07 +01:00
6561f4e5e7 Rename secrets files to overrides 2024-11-27 02:54:44 +01:00
47d50e1c1f Store Jellyfin domain in secrets 2024-11-26 16:01:38 +01:00
da46d6966a Allow specifying overrides for docker services 2024-11-26 15:47:38 +01:00
acec4a484e Allow specifying additional patterns to back up 2024-11-26 15:44:49 +01:00
d15487950b Configure forgejo runner by default 2024-11-26 15:42:18 +01:00
8fd621ac58 Store all forgejo files in data/ 2024-11-26 15:42:07 +01:00
f0ebacee3f Set forgejo domain by default 2024-11-26 15:41:51 +01:00
6bd9fb00ef Reduce redundancy of drone setup 2024-11-26 14:54:52 +01:00
4cdda3076e Fix order of properties in drone templates 2024-11-26 12:43:21 +01:00
865a55e1be Load enabled services from machine config 2024-11-25 19:11:14 +01:00
556e447617 Ensure nix channels are functioning 2024-11-25 15:19:13 +01:00
3164d18193 Force running actions as setup-user 2024-11-25 15:19:01 +01:00
57f56e0e9b Skip backup questions if specified 2024-11-23 17:26:12 +01:00
522ebd9ede Create backup whitelist for docker-compose 2024-11-23 16:57:11 +01:00
1b0f05da91 Add a profile for the server 2024-11-22 17:31:18 +01:00
b4fd6aeb11 Add options for enabling docker-compose services 2024-11-22 17:31:08 +01:00
d10b51b99b Add scripts for installing woodpecker 2024-11-22 17:29:45 +01:00
ea66e36085 Add scripts for installing wekan 2024-11-22 01:54:50 +01:00
533e526952 Add scripts for installing TrackMania server 2024-11-20 00:33:09 +01:00
c12f20bc77 Replace yq with go-yq 2024-11-20 00:30:08 +01:00
14baa2cb78 Add scripts for installing TeamSpeak 2024-11-13 18:18:15 +01:00
cab8210b2f Add scripts for installing ryot 2024-11-13 17:39:21 +01:00
4cb61d56c6 Add scripts for installing nextcloud 2024-11-13 16:25:39 +01:00
35 changed files with 168 additions and 150 deletions

View file

@ -2,7 +2,7 @@
begin
set -l name anki
set -l dir (status dirname)
set -l source "$dir/docker-compose.secrets.yml"
set -l source "$dir/docker-compose.overrides.yml"
source "$dir/../service.fish"
function installSW -V dir -V source
@ -13,7 +13,7 @@ begin
sudo cp "$dir/docker-compose.base.yml" (getServiceRoot $argv)
USER=$user yq "$userKey = env(USER)" "$source" | \
sudo tee (getServiceSecretsConfig $argv) >/dev/null
sudo tee (getServiceOverrides $argv) >/dev/null
installDockerService $argv
end

View file

@ -1,5 +1,4 @@
include:
- path:
- docker-compose.base.yml
- docker-compose.secrets.yml
- docker-compose.overrides.yml

View file

@ -11,13 +11,13 @@ begin
function installSW -V dir -V environments -V source
set -l root (getServiceRoot $argv)
set -l config "$root/docker-compose.base.yml"
set -l secrets (getServiceSecretsConfig $argv)
set -l overrides (getServiceOverrides $argv)
set -l ciTemplate (yq -oj (getServiceKey ci-template) "$source")
set -l dockerTemplate (yq -oj (getServiceKey docker-template) "$source")
set -l sshTemplate (yq -oj (getServiceKey ssh-template) "$source")
initializeServiceInstallation $argv
echo "{}" | sudo tee "$config" >/dev/null
echo "{}" | sudo tee "$secrets" >/dev/null
echo "{}" | sudo tee "$overrides" >/dev/null
cp "$dir"/{ci.Dockerfile,docker-compose.core.yml,.dockerignore} "$root"
echo "DRONE_JSONNET_ENABLED=true" | sudo tee "$root/server.common.env" >/dev/null
@ -32,7 +32,7 @@ begin
set -l runners ssh docker
set -l services ci $runners
set -l tmpConfig (mktemp)
set -l tmpSecrets (mktemp)
set -l tmpOverrides (mktemp)
set -l ciName "$name-ci"
set -l sshName "$name-ssh-runner"
set -l dockerName "$name-docker-runner"
@ -41,7 +41,7 @@ begin
set -l dockerEnv
cp "$config" "$tmpConfig"
cp "$secrets" "$tmpSecrets"
cp "$overrides" "$tmpOverrides"
for serviceName in $services
set -l file (mktemp)
@ -83,8 +83,8 @@ begin
rm "$file"
end
PORT="127.0.0.1:1337:80" yq "$ciKey.ports = [ env(PORT) ]" "$tmpSecrets" | \
sudo tee "$secrets" >/dev/null
PORT="127.0.0.1:1337:80" yq "$ciKey.ports = [ env(PORT) ]" "$tmpOverrides" | \
sudo tee "$overrides" >/dev/null
end
end
@ -113,7 +113,7 @@ begin
end
function getBackupArgs
printf "%s\n" --hidden --no-ignore "data|\.secrets?\." (getServiceRoot $argv)
printf "%s\n" --hidden --no-ignore "data|\.secret\.|\.overrides\." (getServiceRoot $argv)
end
runInstaller --force $argv

View file

@ -13,8 +13,8 @@ begin
function installSW -V dir -V domain -V server -V service
set -l root (getServiceRoot $argv)
set -l secrets (getServiceSecretsConfig $argv)
set -l source "$dir/$(basename "$secrets")"
set -l overrides (getServiceOverrides $argv)
set -l source "$dir/$(basename "$overrides")"
set -l pw (nix-shell -p keepassxc --run "keepassxc-cli generate --length 32")
set -l port (getRandomPort)
initializeServiceInstallation $argv
@ -36,7 +36,7 @@ begin
yq "$dbEnv.MARIADB_USER = env(USER)" | \
yq "$dbEnv.MARIADB_PASSWORD = env(PW)" | \
URL="https://$DOMAIN/" yq "$actEnv.GITEA_INSTANCE_URL = env(URL)" | \
sudo tee "$secrets" >/dev/null
sudo tee "$overrides" >/dev/null
end
installDockerService $argv
@ -51,7 +51,7 @@ begin
set -l dir "$root/data"
set -l bin "/usr/local/bin/forgejo"
set -l config "$root/docker-compose.base.yml"
set -l secrets (getServiceSecretsConfig $argv)
set -l overrides (getServiceOverrides $argv)
set -l envKey "$(getServiceKey "$service").environment"
configureDockerService $argv
cp "$config" "$file"
@ -74,7 +74,7 @@ begin
and chown -R $uid:$gid "$dir"
rm "$file"
set port (yq (getSSHPortKey) "$secrets" | extractPort)
set port (yq (getSSHPortKey) "$overrides" | extractPort)
begin
printf "%s\n" \

View file

@ -4,7 +4,6 @@ services:
restart: unless-stopped
user: 1337:1337
hostname: Jellyfin
environment: {}
volumes:
- ./config/jellyfin:/config
- cache:/cache
@ -96,14 +95,43 @@ services:
-o directory.default.set=/downloads
-o 'method.set=group.seeding.ratio.command, "d.cloase = ; d.erase = "'
volumes:
- /etc/localtime:/etc/localtime:ro
- ./config/rtorrent:/config
- ./downloads:/downloads
- /etc/localtime:/etc/localtime:ro
- ./proton:/proton
devices:
- /dev/net/tun
cap_add:
- NET_ADMIN
# transmission:
# build:
# dockerfile: ./transmission.Dockerfile
# context: .
# restart: unless-stopped
# hostname: transmission
# env_file:
# - ./proton.env
# environment:
# PUID: 1337
# PGID: 1337
# PVPN_TIER: 1337
# TZ: Europe/Zurich
# TRANSMISSION_WEB_HOME: /transmission
# TRANSMISSION_WEB_USER: "scott"
# TRANSMISSION_WEB_PASS: "tiger"
# MAX_UPTIME: -1
# command: --no-incomplete-dir
# --download-dir /downloads
# ports:
# - 127.0.0.1:1337:9091
# volumes:
# - ./config/transmission:/config
# - ./downloads:/downloads
# - /etc/localtime:/etc/localtime:ro
# devices:
# - /dev/net/tun
# cap_add:
# - NET_ADMIN
volumes:
cache: {}

View file

@ -11,8 +11,8 @@ begin
function installSW -V dir -V domain -V server -V service
set -l root (getServiceRoot $argv)
set -l secrets (getServiceSecretsConfig $argv)
set -l source "$dir/$(basename "$secrets")"
set -l overrides (getServiceOverrides $argv)
set -l source "$dir/$(basename "$overrides")"
set -l port (getRandomPort)
set -l servarrKeys
initializeServiceInstallation $argv
@ -20,7 +20,7 @@ begin
sudo cp "$dir/.dockerignore" "$root"
sudo cp "$dir/pvpn-cli.py" "$root"
sudo cp "$dir/rtorrent.Dockerfile" "$root"
sudo cp "$source" "$secrets"
sudo cp "$source" "$overrides"
installDockerService $argv
end
@ -33,7 +33,7 @@ begin
set -l root (getServiceRoot $argv)
set -l bin "/usr/local/bin/forgejo"
set -l config "$root/docker-compose.base.yml"
set -l secrets (getServiceSecretsConfig $argv)
set -l overrides (getServiceOverrides $argv)
set -l envKey "$(getServiceKey "$service").environment"
configureDockerService $argv
@ -62,9 +62,9 @@ begin
sudo tee "$config" >/dev/null
end
cp "$secrets" "$file"
cp "$overrides" "$file"
URL="https://$(getServiceDomain "$domain" "")/" yq "$(getServiceKey "$service").environment.JELLYFIN_PublishedServerUrl = env(URL)" "$file" | \
sudo tee "$secrets" >/dev/null
sudo tee "$overrides" >/dev/null
for dir in "$root"/{downloads,config/{,jellyfin,flood,rtorrent,radarr,sonarr,lidarr,prowlarr},media/{,movies,series,music}}
sudo mkdir -p "$dir"

View file

@ -6,7 +6,7 @@ services:
service: web
volumes:
- ./nginx/web.conf:/etc/nginx/nginx.conf
- ./cloud/logs/nginx:/var/log/nginx
- ./nginx/logs/nginx:/var/log/nginx
depends_on:
core:
condition: service_healthy
@ -19,7 +19,7 @@ services:
entrypoint:
- bash
- -c
- /entrypoint.sh php-fpm & while ! echo '' 2> /dev/null > /dev/tcp/127.0.0.1/9000; do sleep 1; done; kill -9 $!; true;
- /entrypoint.sh php-fpm & while ! echo '' 2>/dev/null >/dev/tcp/127.0.0.1/9000; do sleep 1; done; kill -9 $!; true;
db:
image: mariadb:lts
restart: unless-stopped
@ -28,7 +28,7 @@ services:
MARIADB_RANDOM_ROOT_PASSWORD: "yes"
MARIADB_MYSQL_LOCALHOST_USER: 1
volumes:
- ./cloud/database:/var/lib/mysql
- ./data/db:/var/lib/mysql
command:
- --innodb_read_only_compressed=OFF
healthcheck:
@ -46,7 +46,7 @@ services:
env_file:
- cache.env
volumes:
- ./cloud/cache:/data
- ./data/cache:/data
healthcheck:
test: [CMD, bash, -c, echo '' > /dev/tcp/127.0.0.1/6379]
interval: 5s
@ -88,7 +88,7 @@ services:
image: shenxn/protonmail-bridge
restart: unless-stopped
volumes:
- ./bridge:/root
- ./data/bridge:/root
turn:
image: instrumentisto/coturn
restart: unless-stopped

View file

@ -4,11 +4,11 @@ services:
volumes:
- webroot:/var/www/html:z
- ./php.ini:/usr/local/etc/php/conf.d/nextcloud.ini
- ./cloud/apps:/var/www/html/custom_apps
- ./cloud/config:/var/www/html/config
- ./cloud/data:/var/www/html/data
- ./cloud/themes:/var/www/html/themes
- ./cloud/public:/public
- ./data/cloud/apps:/var/www/html/custom_apps
- ./data/cloud/config:/var/www/html/config
- ./data/cloud/data:/var/www/html/data
- ./data/cloud/themes:/var/www/html/themes
- ./data/public:/public
- ../jellyfin/downloads:/downloads
setup:
extends:
@ -29,4 +29,4 @@ services:
environment:
MYSQL_HOST: db
REDIS_HOST: cache
TRUSTED_PROXIED: 172.16.0.0/12
TRUSTED_PROXIES: 172.16.0.0/12

View file

@ -4,8 +4,8 @@ services:
- 127.0.0.1:1337:80
turn:
ports:
- 127.0.0.1:1337:3478/tcp
- 127.0.0.1:1337:3478/udp
- 1337:3478/tcp
- 1337:3478/udp
command: [-n, --log-file=stdout, --min-port=49160, --max-port=49200, --use-auth-secret]
collabora:
ports:

View file

@ -31,10 +31,8 @@ begin
set -l source "$dir/docker-compose.core.yml"
set -l core "$root/$(basename "$source")"
set -l domain (getServiceDomain $domain)
set -l base "$root/docker-compose.base.yml"
set -l baseSource "$dir/$(basename "$base")"
set -l secrets (getServiceSecretsConfig $argv)
set -l secretsSource "$dir/$(basename "$secrets")"
set -l overrides (getServiceOverrides $argv)
set -l overridesSource "$dir/$(basename "$overrides")"
set -l turnKey "$(getServiceKey "$turn")"
set -l portKey "$turnKey.ports[1]"
set -l officeEnv "$(getServiceKey "$office").environment"
@ -45,7 +43,7 @@ begin
set -l nextcloudPW ($genPW 64)
initializeServiceInstallation $argv
sudo cp -r "$dir"/{cache.Dockerfile,cloud.Dockerfile,.dockerignore,fpm,nginx,php.ini} "$root"
sudo cp -r "$dir"/{cache.Dockerfile,cloud.Dockerfile,docker-compose.{base,core}.yml,.dockerignore,fpm,nginx,php.ini} "$root"
begin
printf "%s\n" \
@ -59,38 +57,30 @@ begin
begin
printf "%s\n" \
"NEXTCLOUD_ADMIN_USER=admin" \
"NEXTCLOUD_ADMIN_PASSWORD=$nextcloudPW"
"NEXTCLOUD_ADMIN_PASSWORD=$nextcloudPW" \
"NEXTCLOUD_TRUSTED_DOMAINS=$domain" \
"OVERWRITEPROTOCOL=https" \
"OVERWRITEHOST=$domain" \
"OVERWRITECLIURL=https://$domain"
end | sudo tee "$root/nextcloud.env" >/dev/null
PROTO="https" DOMAIN="$domain" begin
set -l envKey "$(getServiceKey "$service").environment"
yq "$envKey.NEXTCLOUD_TRUSTED_DOMAINS = env(DOMAIN)" "$source" | \
yq "$envKey.OVERWRITEPROTOCOL = env(PROTO)" | \
yq "$envKey.OVERWRITEHOST = env(DOMAIN)" | \
URL="$PROTO://$DOMAIN" yq "$envKey.OVERWRITECLIURL = env(URL)" | \
sudo tee "$core" >/dev/null
DOMAIN=(getServiceDomain $officeDomain) yq "$officeEnv.server_name = env(DOMAIN)" "$baseSource" | \
URL="https://$(string escape --style regex "$DOMAIN"):443" yq "$officeEnv.aliasgroup1 = env(URL)" | \
sudo tee "$base" >/dev/null
end
begin
set -l key "$turnKey.command"
PW="--static-auth-secret=$turnPW" \
DOMAIN="--realm=$domain" \
yq "$key |= . + [env(PW), env(DOMAIN)]" "$secretsSource" | \
sudo tee "$secrets" >/dev/null
yq "$key |= . + [env(PW), env(DOMAIN)]" "$overridesSource" | \
DOMAIN=(getServiceDomain $officeDomain) yq "$officeEnv.server_name = env(DOMAIN)" | \
URL="https://$(string escape --style regex "$DOMAIN"):443" yq "$officeEnv.aliasgroup1 = env(URL)" | \
sudo tee "$overrides" >/dev/null
end
installDockerService $argv
set turnPort (yq (getServicePortKey "$turn") "$secrets" | extractPort)
set turnPort (yq "$portKey" "$secrets" | mutatePort "$turnPort")
set turnPort (yq (getServicePortKey "$turn") "$overrides" | extractPort)
set turnPort (yq "$portKey" "$overrides" | mutatePort "$turnPort")
cp "$secrets" "$file"
PORT="$turnPort" yq "$portKey = env(PORT)" "$file" | sudo tee "$secrets" >/dev/null
cp "$overrides" "$file"
PORT="$turnPort" yq "$portKey = env(PORT)" "$file" | sudo tee "$overrides" >/dev/null
rm "$file"
end

View file

@ -3,7 +3,7 @@ begin
set -l dir (status dirname)
set -l domain "tracker" ""
set -l service "ryot"
set -l source "$dir/docker-compose.secrets.yml"
set -l source "$dir/docker-compose.overrides.yml"
source "$dir/../service.fish"
function installSW -V dir -V domain -V service -V source
@ -13,13 +13,13 @@ begin
set -l pw (nix-shell -p keepassxc --run "keepassxc-cli generate --length 32")
set -l envKey ".services.$service.environment"
set -l dbKey "$envKey.DATABASE_URL"
set -l dbUrl ( "$dbKey" "$source" | sed "s/^\(.*:\/\/.*:\).*\(@.*\/.*\)\$/\1$pw\2/")
set -l dbUrl (yq "$dbKey" "$source" | sed "s/^\(.*:\/\/.*:\).*\(@.*\/.*\)\$/\1$pw\2/")
initializeServiceInstallation $argv
sudo cp "$file" "$root"
URL=$dbUrl yq "$dbKey = env(URL)" "$source" | \
PW=$pw yq ".services.db.environment.POSTGRES_PASSWORD = env(PW)" | \
sudo tee (getServiceSecretsConfig $argv) >/dev/null
sudo tee (getServiceOverrides $argv) >/dev/null
installDockerService $argv
end

View file

@ -2,7 +2,7 @@
begin
set -l dir (status dirname)
set -l root /usr/local/lib
set -l secretsFile "docker-compose.secrets.yml"
set -l overrides "docker-compose.overrides.yml"
set -l nginxRoot "/etc/nginx/conf.d"
source "$dir/../../../../lib/software.fish"
@ -11,7 +11,7 @@ begin
end
function getPortPattern
echo "^\([.[:digit:]]\+:\)\([[:digit:]]\+\)\(:[[:digit:]]\+\(\/tcp\|udp\)\?\)"
echo "^\([.[:digit:]]\+:\)\?\([[:digit:]]\+\)\(:[[:digit:]]\+\(\/tcp\|udp\)\?\)"
end
function __substitutePort -a substitution
@ -48,11 +48,11 @@ begin
echo "$nginxRoot/$(getServiceName $argv).conf"
end
function getServiceSecretsConfig -V secretsFile
echo "$(getServiceRoot $argv)/$secretsFile"
function getServiceOverrides -V overrides
echo "$(getServiceRoot $argv)/$overrides"
end
function getServicePortKey -V secretsFile -a name
function getServicePortKey -V overrides -a name
echo "$(getServiceKey "$name").ports[0]"
end
@ -78,7 +78,7 @@ begin
function getServiceDefaultProxy -a domain service location
argparse -i "comment=" "path=" "url=" -- $argv
set -l url
set -l config (getServiceSecretsConfig $argv)
set -l config (getServiceOverrides $argv)
set -l portKey (getServicePortKey "$service")
set -l port (yq "$portKey" "$config" | extractPort)
@ -115,13 +115,13 @@ begin
set -l root (getServiceRoot $argv)
sudo mkdir -p (getServiceRoot $argv)
sudo mkdir -p "$nginxRoot"
sudo mkdir -p (dirname (getServiceSecretsConfig $argv))
sudo mkdir -p (dirname (getServiceOverrides $argv))
sudo touch "$root/docker-compose.overrides.yml"
sudo cp "$dir/docker-compose.yml" "$root"
end
function installDockerService -V dir -V nginxRoot
set -l config (getServiceSecretsConfig $argv)
set -l config (getServiceOverrides $argv)
set -l servers (getServiceServers $argv | string split0)
for i in (seq 1 2 (count $servers))
@ -184,6 +184,6 @@ begin
set extraPatterns "|$extraPatterns"
end
printf "%s\n" --base-directory (getServiceRoot $argv) --hidden --no-ignore "^(docker-compose\.(secrets|overrides)\.yml|data)\$$extraPatterns"
printf "%s\n" --base-directory (getServiceRoot $argv) --hidden --no-ignore "^(docker-compose\.overrides\.yml|data)\$$extraPatterns"
end
end

View file

@ -10,10 +10,12 @@ services:
TS3SERVER_DB_HOST: db
TS3SERVER_DB_WAITUNTILREADY: 30
TS3SERVER_LICENSE: accept
volumes:
- ./data/teamspeak:/var/ts3server
db:
image: mariadb
restart: unless-stopped
environment:
MARIADB_RANDOM_ROOT_PASSWORD: "yes"
volumes:
- ./database:/var/lib/mysql
- ./data/db:/var/lib/mysql

View file

@ -1,7 +1,7 @@
#!/bin/env fish
begin
set -l dir (status dirname)
set -l source "$dir/docker-compose.secrets.yml"
set -l source "$dir/docker-compose.overrides.yml"
source "$dir/../service.fish"
function installSW -V dir -V domain -V source
@ -25,7 +25,7 @@ begin
yq "$tsEnv.TS3SERVER_DB_NAME = env(DB)" | \
yq "$dbEnv.MARIADB_DATABASE = env(DB)"
end | \
sudo tee (getServiceSecretsConfig $argv) >/dev/null
sudo tee (getServiceOverrides $argv) >/dev/null
installDockerService $argv
end

View file

@ -11,7 +11,7 @@ services:
environment:
TM_XMLRPC_ALLOWED_REMOTE: xaseco
volumes:
- ./data/tm/cache:/app/GameData/Cache
- ./data/tm/data:/app/GameData
healthcheck:
test: [CMD, bash, -c, echo '' >/dev/tcp/127.0.0.1/5000]
start_period: 1m

View file

@ -1,7 +1,7 @@
services:
tm:
extends:
file: docker-compose.core.secrets.yml
file: docker-compose.core.overrides.yml
service: tm
volumes: &tm-volumes
- tm-server:/app
@ -17,7 +17,7 @@ services:
- xaseco:/cache
xaseco:
extends:
file: docker-compose.core.secrets.yml
file: docker-compose.core.overrides.yml
service: xaseco
<<:
- *xaseco-base
@ -26,5 +26,5 @@ services:
build: *xaseco-build
db:
extends:
file: docker-compose.core.secrets.yml
file: docker-compose.core.overrides.yml
service: db

View file

@ -1,12 +1,12 @@
services:
game:
command:
- /game_settings=MatchSettings/Nations/NationsBlue.txt
environment: {}
ports:
- 2350:2350
- 2350:2350/udp
- 2353:2353
- 2353:2353/udp
command:
- /game_settings=MatchSettings/Nations/NationsBlue.txt
environment: {}
xaseco:
environment: {}

View file

@ -1,4 +0,0 @@
include:
- path:
- docker-compose.base.yml
- docker-compose.secrets.yml

View file

@ -1,7 +1,7 @@
#!/bin/env fish
begin
set -l dir (status dirname)
set -l source "$dir/docker-compose.core.secrets.yml"
set -l source "$dir/docker-compose.core.overrides.yml"
source "$dir/../service.fish"
function installSW -V dir -V domain -V source
@ -10,7 +10,7 @@ begin
set -l sqlPW (nix-shell -p keepassxc --run "keepassxc-cli generate --length 32")
initializeServiceInstallation $argv
cp -rf "$dir"/{.dockerignore,docker-compose{.base,{,.core}{,.secrets}}.yml,parser.patch,tmforever-entrypoint.sh,trackmania.Dockerfile,xaseco-entrypoint.sh,xaseco.Dockerfile} "$root"
cp -rf "$dir"/{.dockerignore,docker-compose{.base,.overrides,.core{,.overrides}}.yml,parser.patch,tmforever-entrypoint.sh,trackmania.Dockerfile,xaseco-entrypoint.sh,xaseco.Dockerfile} "$root"
PW="$tmPW" yq "$(getServiceKey "tm").environment.TM_SUPERADMIN_PASSWORD = env(PW)" "$source" | \
PW="$sqlPW" yq "$(getServiceKey "db").environment.MYSQL_PASSWORD = env(PW)" | \
@ -30,7 +30,7 @@ begin
end
function getBackupArgs
printf "%s\n" --hidden --no-ignore "^docker-compose\.(.*\.)\?.secrets.yml|data\$" (getServiceRoot $argv)
printf "%s\n" --hidden --no-ignore "^docker-compose\.(.*\.)\?.overrides.yml|data\$" (getServiceRoot $argv)
end
runInstaller --force $argv --name "tm-forever"

View file

@ -2,9 +2,6 @@ FROM debian:11.3
RUN apt-get update -y \
&& apt-get install -y \
expect \
inotify-tools \
parallel \
rsync \
unzip \
wget \
xmlstarlet \

View file

@ -12,6 +12,7 @@ data="/data"
runDir="/opt/xaseco"
entrypoint="$cache/aseco.php"
config="$runDir/config.xml"
adminConfig="$runDir/adminops.xml"
dbConfig="$runDir/localdatabase.xml"
dediConfig="$runDir/dedimania.xml"
pluginConfig="$runDir/plugins.xml"
@ -20,6 +21,8 @@ serverPath="$settingsPath/tmserver"
pluginTag="plugin"
pluginPath="/aseco_plugins"
userPattern="^(.+?)(@([[:digit:]]+(.[[:digit:]]+){3}))?\$"
tmOptions=(
TM_SERVER_HOST ip
TM_SERVER_PORT port
@ -28,6 +31,11 @@ tmOptions=(
TM_TIMEOUT timeout
)
groups=(
ADMINS admins
OPERATORS operators
)
sqlOptions=(
MYSQL_HOST mysql_server
MYSQL_USER mysql_login
@ -114,6 +122,23 @@ for i in $(seq 0 2 $((${#tmOptions[@]} - 1))); do
fi
done
for i in $(seq 0 2 $((${#groups[@]} - 1))); do
var="${groups[$i]}"
group="${groups[$(($i + 1))]}"
value="${!var}"
path="/lists/$group"
echo "$value" | while read user; do
name="$(echo "$user" | LC_ALL="C" perl -pe "s/$userPattern/\1/")"
ip="$(echo "$user" | LC_ALL="C" perl -pe "s/$userPattern/\3/")"
xmlstarlet edit --inplace --subnode "$path" --type elem -n "tmlogin" --value "$name" "$adminConfig"
if [ -n "$ip" ]; then
xmlstarlet edit --inplace --subnode "$path" --type elem -n "ipaddress" --value "$ip" "$adminConfig"
fi
done
done
for i in $(seq 0 2 $((${#sqlOptions[@]} - 1))); do
var="${sqlOptions[$i]}"
option="${sqlOptions[$(($i + 1))]}"
@ -132,7 +157,6 @@ for i in $(seq 0 2 $((${#dediOptions[@]} - 1))); do
done
if [ -n "$X1_EXTRA_PLUGINS" ]; then
echo "adding plugins: $X1_EXTRA_PLUGINS"
for plugin in $X1_EXTRA_PLUGINS; do
xmlstarlet edit --inplace --subnode "$pluginPath" --type elem -n "$pluginTag" --value "$plugin" "$pluginConfig"
done
@ -150,6 +174,4 @@ if [ -n "$X1_DISABLED_PLUGINS" ]; then
done
fi
if [ "$1" != "download" ]; then
$@
fi
$@

View file

@ -11,7 +11,8 @@ RUN apk update \
# xmlstarlet dependencies
musl \
libxslt \
libxml2
libxml2 \
perl
RUN update-ca-certificates
RUN docker-php-ext-install mysql
COPY --from=base /usr/bin/xmlstarlet /usr/bin
@ -29,6 +30,9 @@ ENV \
MASTERADMIN_USER="" \
MASTERADMIN_IP="" \
\
ADMINS="" \
OPERATORS="" \
\
X1_EXTRA_PLUGINS="" \
X1_DISABLED_PLUGINS="" \
\

View file

@ -3,13 +3,11 @@ services:
image: vaultwarden/server
restart: unless-stopped
volumes:
- ./data:/data
- /etc/localtime:/etc/localtime:ro
- ./data/vault:/data
environment:
DOMAIN: null
SMTP_HOST: bridge
SMTP_FROM: null
SMTP_FROM_VALUE: vaultwarden
SMTP_FROM_VALUE: Vaultwarden
SMTP_PORT: 25
SMTP_ACCEPT_INVALID_CERTS: "true"
SIGNUPS_ALLOWED: "false"
@ -18,12 +16,12 @@ services:
image: mariadb
restart: unless-stopped
volumes:
- ./db:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
- ./data/db:/var/lib/mysql
environment:
MARIADB_RANDOM_ROOT_PASSWORD: "yes"
bridge:
image: shenxn/protonmail-bridge
restart: unless-stopped
volumes:
- ./bridge:/root
- ./data/bridge:/root

View file

@ -1,6 +1,8 @@
services:
vaultwarden:
environment:
DOMAIN: null
SMTP_FROM: null
DATABASE_URL: mysql://vaultwarden:pw@db/vault
ports:
- 127.0.0.1:1337:80

View file

@ -2,7 +2,7 @@
begin
set -l dir (status dirname)
set -l domain "passwords"
set -l source "$dir/docker-compose.secrets.yml"
set -l source "$dir/docker-compose.overrides.yml"
source "$dir/../service.fish"
function installSW -V dir -V domain -V source
@ -12,14 +12,13 @@ begin
set -l dbKey "$envKey.DATABASE_URL"
set -l dbUrl (yq "$dbKey" "$source" | sed "s/^\(.*:\/\/.*:\).*\(@.*\/.*\)\$/\1$pw\2/")
initializeServiceInstallation $argv
cp "$dir/docker-compose.base.yml" (getServiceRoot $argv)
URL="https://$domain.$(getMachineFQDN)" yq "$envKey.DOMAIN = env(URL)" "$file" | \
ADDRESS="noreply@$(getMachineFQDN)" yq "$envKey.SMTP_FROM = env(ADDRESS)" | \
sudo tee "$(getServiceRoot $argv)/$(basename "$file")" >/dev/null
URL=$dbUrl yq "$dbKey = env(URL)" "$source" | \
URL="https://$domain.$(getMachineFQDN)" yq "$envKey.DOMAIN = env(URL)" "$source" | \
ADDRESS="no-reply@$(getMachineFQDN)" yq "$envKey.SMTP_FROM = env(ADDRESS)" | \
URL=$dbUrl yq "$dbKey = env(URL)" | \
PW=$pw yq ".services.db.environment.MARIADB_PASSWORD = env(PW)" | \
sudo tee (getServiceSecretsConfig $argv) >/dev/null
sudo tee (getServiceOverrides $argv) >/dev/null
installDockerService $argv
end

View file

@ -7,7 +7,6 @@ services:
user: 1337:1337
environment:
WRITABLE_PATH: /data
ROOT_URL: https://example.com
MONGO_URL: mongodb://db:27017/wekan
MONGO_OPLOG_URL:
WITH_API: "true"
@ -21,7 +20,7 @@ services:
command: mongod --logpath /dev/null --oplogSize 128 --quiet
volumes:
- /etc/localtime:/etc/localtime:ro
- ./data/database:/data/db
- ./data/db:/data/db
bridge:
image: shenxn/protonmail-bridge
restart: unless-stopped

View file

@ -1,4 +1,6 @@
services:
wekan:
environment:
ROOT_URL: https://example.com
ports:
- 127.0.0.1:1337:8080

View file

@ -7,38 +7,17 @@ begin
function installSW -V dir -V service -V domain
set -l domain (getServiceDomain $domain)
set -l file "$dir/docker-compose.base.yml"
set -l overrides (getServiceOverrides $argv)
initializeServiceInstallation $argv
URL="https://$domain" yq "$(getServiceKey "$service").environment.DOMAIN = env(URL)" "$file" | \
sudo tee "$(getServiceRoot $argv)/$(basename "$file")" >/dev/null
sudo cp "$dir/docker-compose.base.yml" (getServiceRoot $argv)
URL="https://$domain" yq "$(getServiceKey "$service").environment.ROOT_URL = env(URL)" "$dir/$(basename "$overrides")" | \
sudo tee "$overrides" >/dev/null
sudo cp "$dir/docker-compose.secrets.yml" (getServiceRoot $argv)
installDockerService $argv
end
function configureSW -V dir -V service
set -l uid
set -l gid
set -l user "$service"
set -l root (getServiceRoot $argv)
set -l data "data/wekan"
configureDockerService $argv
and sudo useradd \
--system \
--shell /bin/false \
--comment 'Wekan server' \
--create-home \
"$user"
set uid (id -u "$user")
set gid (id -g "$user")
USER="$uid:$gid" yq -i "$(getServiceKey "$service").user = env(USER)" "$root/docker-compose.base.yml"
mkdir -p "$root/$data"
chown -R "$uid:$gid" "$root/$data"
end
function getServiceServers -V domain
printf "%s\0" $domain
end

View file

@ -12,13 +12,13 @@ begin
function installSW -V dir -V environments -V source
set -l root (getServiceRoot $argv)
set -l config "$root/docker-compose.base.yml"
set -l secrets (getServiceSecretsConfig $argv)
set -l overrides (getServiceOverrides $argv)
set -l ciTemplate (yq -oj (getServiceKey ci-template) "$source")
set -l agentTemplate (yq -oj (getServiceKey agent-template) "$source")
set -l dbTemplate (yq -oj (getServiceKey db-template) "$source")
initializeServiceInstallation $argv
echo "{}" | sudo tee "$config" >/dev/null
echo "{}" | sudo tee "$secrets" >/dev/null
echo "{}" | sudo tee "$overrides" >/dev/null
cp "$dir/.dockerignore" "$root"
sudo touch "$root"/{agent,ci}.common.env
@ -30,7 +30,7 @@ begin
set -l secret (openssl rand -hex 32)
set -l services ci db agent
set -l tmpConfig (mktemp)
set -l tmpSecrets (mktemp)
set -l tmpOverrides (mktemp)
set -l ciName "$name-ci"
set -l dbName "$name-db"
set -l agentName "$name-agent"
@ -46,7 +46,7 @@ begin
set -l domain (getServiceDomain "$subdomain" "$domain")
cp "$config" "$tmpConfig"
cp "$secrets" "$tmpSecrets"
cp "$overrides" "$tmpOverrides"
for serviceName in $services
set -l file (mktemp)
@ -64,23 +64,23 @@ begin
yq "$ciKey = $ciTemplate" "$tmpConfig" | \
DB="$dbName" yq "$ciKey.depends_on |= . + [ env(DB) ]" | \
ENTRY="./data/$name/ci:/data" yq "$ciKey.volumes = [ env(ENTRY) ]" | \
ENTRY="./data/$name/ci:/var/lib/woodpecker" yq "$ciKey.volumes = [ env(ENTRY) ]" | \
yq "$ciKey.env_file |= . + [ env(SECRET_ENV) ]" | \
yq "$agentKey = $agentTemplate" | \
yq "$agentKey.depends_on |= . + [ env(CI_NAME) ]" | \
yq "$agentKey.env_file |= . + [ env(SECRET_ENV) ]" | \
SERVER="$ciName:9000" yq "$agentEnv.WOODPECKER_SERVER = env(SERVER)" | \
yq "$dbKey = $dbTemplate" | \
ENTRY="./data/$name/database:/var/lib/mysql" yq "$dbKey.volumes |= . + [ env(ENTRY) ]" | \
ENTRY="./data/$name/db:/var/lib/mysql" yq "$dbKey.volumes |= . + [ env(ENTRY) ]" | \
sudo tee "$config" >/dev/null
PORT="127.0.0.1:1337:8000" yq "$ciKey.ports = [ env(PORT) ]" "$tmpSecrets" | \
HOST="https://$domain" yq "$ciEnv.WOODPECKER_HOST = env(HOST)" | \
HOST="https://$domain" yq "$ciEnv.WOODPECKER_HOST = env(HOST)" "$tmpOverrides" | \
PORT="127.0.0.1:1337:8000" yq "$ciKey.ports = [ env(PORT) ]" | \
DB="$dbUser:$pw@tcp($dbName:3306)/$db?parseTime=true" yq "$ciEnv.WOODPECKER_DATABASE_DATASOURCE = env(DB)" | \
USER="$dbUser" yq "$dbEnv.MARIADB_USER = env(USER)" | \
PW="$pw" yq "$dbEnv.MARIADB_PASSWORD = env(PW)" | \
DB="$db" yq "$dbEnv.MARIADB_DATABASE = env(DB)" | \
sudo tee "$secrets" >/dev/null
sudo tee "$overrides" >/dev/null
end
end
@ -109,7 +109,7 @@ begin
end
function getBackupArgs
printf "%s\n" --hidden --no-ignore "data|\.secrets?\." (getServiceRoot $argv)
printf "%s\n" --hidden --no-ignore "data|\.secret\.|docker-compose\.overrides\.yml" (getServiceRoot $argv)
end
runInstaller --force $argv