diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c6f9a44 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.vscode/settings.json diff --git a/basex/custom/.gitignore b/basex/custom/.gitignore new file mode 100644 index 0000000..1e04ba0 --- /dev/null +++ b/basex/custom/.gitignore @@ -0,0 +1,8 @@ +# .gitignore sample +################### + +# Ignore all files in this dir... +* + +# ... except for this one. +!.gitignore diff --git a/basex/data/.gitignore b/basex/data/.gitignore new file mode 100644 index 0000000..1e04ba0 --- /dev/null +++ b/basex/data/.gitignore @@ -0,0 +1,8 @@ +# .gitignore sample +################### + +# Ignore all files in this dir... +* + +# ... except for this one. +!.gitignore diff --git a/basex/docker-compose.yml b/basex/docker-compose.yml new file mode 100644 index 0000000..3bf55e9 --- /dev/null +++ b/basex/docker-compose.yml @@ -0,0 +1,16 @@ +version: '3.2' +# quodatum basex +services: + + basex: + image: "quodatum/basexhttp:latest" + container_name: basex-test + command: /srv/basex/bin/basexhttp + ports: + - 8984:8984 + restart: unless-stopped + volumes: + - ./data:/srv/basex/data + - ./webapp:/srv/basex/webapp + - ./repo:/srv/basex/repo + - ./custom:/srv/basex/lib/custom \ No newline at end of file diff --git a/basex/repo/.gitignore b/basex/repo/.gitignore new file mode 100644 index 0000000..1e04ba0 --- /dev/null +++ b/basex/repo/.gitignore @@ -0,0 +1,8 @@ +# .gitignore sample +################### + +# Ignore all files in this dir... +* + +# ... except for this one. +!.gitignore diff --git a/basex/webapp/WEB-INF/jetty.xml b/basex/webapp/WEB-INF/jetty.xml new file mode 100644 index 0000000..c0dbd03 --- /dev/null +++ b/basex/webapp/WEB-INF/jetty.xml @@ -0,0 +1,19 @@ + + + + + + + + + + 0.0.0.0 + 8984 + 60000 + true + + + + diff --git a/basex/webapp/WEB-INF/web.xml b/basex/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..0f5e987 --- /dev/null +++ b/basex/webapp/WEB-INF/web.xml @@ -0,0 +1,146 @@ + + + + BaseX: The XML Database and XQuery Processor + HTTP Services + + + + + + org.basex.http.SessionListener + + + org.basex.http.ServletListener + + + + + + + RESTXQ + org.basex.http.restxq.RestXqServlet + + org.basex.user + admin + + 1 + + + RESTXQ + /* + + + + + WebSocket + org.basex.http.ws.WsServlet + + + + WebSocket + /ws/* + + + + + REST + org.basex.http.rest.RESTServlet + + + REST + /rest/* + + + + + WebDAV + org.basex.http.webdav.WebDAVServlet + + + WebDAV + /webdav/* + + + + + default + + useFileMappedBuffer + false + + + + default + /static/* + + + diff --git a/basex/webapp/restxq.xqm b/basex/webapp/restxq.xqm new file mode 100644 index 0000000..4fe7eaf --- /dev/null +++ b/basex/webapp/restxq.xqm @@ -0,0 +1,69 @@ +(:~ + : This module contains some basic examples for RESTXQ annotations. + : @author BaseX Team + :) +module namespace page = 'http://basex.org/examples/web-page'; + +(:~ + : Generates a welcome page. + : @return HTML page + :) +declare + %rest:GET + %rest:path('') + %output:method('xhtml') + %output:omit-xml-declaration('no') + %output:doctype-public('-//W3C//DTD XHTML 1.0 Transitional//EN') + %output:doctype-system('http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd') +function page:start( +) as element(Q{http://www.w3.org/1999/xhtml}html) { + + + BaseX HTTP Services + + + +
+

BaseX HTTP Services

+
Welcome to the BaseX HTTP Services. They allow you to:
+ + +

Find more information on the + Web Application + page in our documentation.

+ +

The following sample applications give you a glimpse of how applications + can be written with BaseX:

+ +

DBA: Database Administration

+ +

The Database Administration interface is completely + written in RESTXQ.
+ The source code helps to understand how complex + web applications can be built with XQuery. +

+ +

WebSocket Chat

+ +

The chat application demonstrates how bidirectional communication + is realized with BaseX.
+ For a better experience when testing the chat, + consider the following steps: +

+ +
    +
  1. Create different database users first (e.g. via the DBA).
  2. +
  3. Open two different browsers and log in with different users.
  4. +
+ + +}; diff --git a/caddy/.dockerignore b/caddy/.dockerignore new file mode 100644 index 0000000..ecaa72a --- /dev/null +++ b/caddy/.dockerignore @@ -0,0 +1 @@ +/site \ No newline at end of file diff --git a/caddy/Caddyfile b/caddy/Caddyfile index d5691d8..2729a24 100644 --- a/caddy/Caddyfile +++ b/caddy/Caddyfile @@ -1,29 +1,169 @@ -# caddyfile dec 2021 +# caddyfile for omv +# 2022-04 add domain sites +# 2022-03 init { admin 0.0.0.0:2015 email bunce.andy@gmail.com - # acme_ca https://acme-staging-v02.api.letsencrypt.org/directory } -netdata.n2-plus.local { - reverse_proxy n2-plus.local:9000 +# Physical +(omv) { + reverse_proxy 192.168.1.6:{args.0} +} +(n2) { + reverse_proxy 192.168.1.4:{args.0} +} +(n2plus) { + reverse_proxy 192.168.1.10:{args.0} +} +(xu4) { + reverse_proxy 192.168.1.5:{args.0} } -code.n2-plus.local { - reverse_proxy n2-plus.local:8443 -} -code4.n2-plus.local { - reverse_proxy n2-plus.local:8444 +# DNS +(duckdns) { + tls { + dns duckdns { + api_token 428a1b3b-bc1d-4906-a230-9cd0a72fd06b + } + } } -n2-plus.local { - encode zstd gzip - root links - file_server browse +# Auth +(auth_quodatum) { + basicauth bcrypt "Quodatum domain access" { + andy JDJhJDE0JDFHeUJHdGdZalFRdDg0cWhsRTFXeXU0cWZqZDNCNVV1d2gyRUlaNXhBMDFiZEFBZk5zM2RD + guest JDJhJDE0JDVYTENVREtLbG5xdzUyNXFGdm56Ti5rVmFSZ3VoOEZQR015V0F6VjdaMk1SeGM1NXVVeWR1 + } +} +(auth) { + basicauth bcrypt "Orlop domain" { + andy JDJhJDE0JDFHeUJHdGdZalFRdDg0cWhsRTFXeXU0cWZqZDNCNVV1d2gyRUlaNXhBMDFiZEFBZk5zM2RD + solange JDJhJDE0JE9kcjNWY1U4VS54M2IwUmJuV1UwYS41SDRQQi9Kc2lDUDBKUkpkVjNVc1I2dUNyYzl5MU9x + } +} +# quodatum domain ------------------------------- +quodatum.duckdns.org { + redir https://about.quodatum.duckdns.org } -fish.local { - encode zstd gzip - root . - file_server browse -} \ No newline at end of file +*.quodatum.duckdns.org { + import duckdns +# import auth_quodatum + + @quodatum host about.quodatum.duckdns.org + handle @quodatum { + import auth_quodatum + encode zstd gzip + root * quodatum + file_server browse + } + + @git host git.quodatum.duckdns.org + handle @git { + import omv 8300 + } + + @wiki host wiki.quodatum.duckdns.org + handle @wiki { +# import auth_quodatum + import xu4 8088 + } + @wiki_alt host wiki-alt.quodatum.duckdns.org + handle @wiki_alt { +# import auth_quodatum + import n2plus 8088 + } + + @code host code.quodatum.duckdns.org + handle @code { + import auth_quodatum + import n2plus 8444 + } + + @code-alt host code-alt.quodatum.duckdns.org + handle @code-alt { + import auth_quodatum + import omv 8444 + } + + @code-bmy host code-bmy.quodatum.duckdns.org + handle @code-bmy { + import auth_quodatum + import omv 8448 + } + @shark host shark.quodatum.duckdns.org + handle @shark { + import auth_quodatum + import xu4 4000 + } + # Fallback for otherwise unhandled domains + handle { + abort + } +} +# orlop domain ------------------------------------ +orlop.duckdns.org { + redir https://about.orlop.duckdns.org +} + +*.orlop.duckdns.org { + import duckdns +# import auth + + @orlop host about.orlop.duckdns.org + handle @orlop { + import auth + encode zstd gzip + root * orlop + file_server browse + } + + @jellyfin host jellyfin.orlop.duckdns.org + handle @jellyfin { + import auth + import omv 8096 + } + @emby host emby.orlop.duckdns.org + handle @emby { + import auth + import omv 8097 + } + @photoprism host photoprism.orlop.duckdns.org + handle @photoprism { + import omv 2342 + } + @tvheadend host tvheadend.orlop.duckdns.org + handle @tvheadend { + import n2plus 9981 + } + @kodi host kodi.orlop.duckdns.org + handle @kodi { + import n2 8080 + } + @test host test.orlop.duckdns.org + handle @test { + respond "test, test. Hello, world!" + } + # Fallback for otherwise unhandled domains + handle { + abort + } +} +# local domain +odroid.local { + tls internal + import auth + + encode zstd gzip + root . + file_server browse +} +xu4.local { + tls internal + import auth + + encode zstd gzip + root * links + file_server browse +} diff --git a/caddy/Dockerfile b/caddy/Dockerfile new file mode 100644 index 0000000..7732c18 --- /dev/null +++ b/caddy/Dockerfile @@ -0,0 +1,15 @@ +# caddy with duckdns +# @created 2022-03 +# author="Andy Bunce" + +ARG VERSION=caddy:2.6.2 +FROM $VERSION-builder AS builder + +RUN xcaddy build \ + --with github.com/caddy-dns/duckdns + --with github.com/greenpau/caddy-security \ + --with github.com/greenpau/caddy-trace \ + --with github.com/greenpau/caddy-git +FROM $VERSION + +COPY --from=builder /usr/bin/caddy /usr/bin/caddy \ No newline at end of file diff --git a/caddy/certs.sh b/caddy/certs.sh new file mode 100755 index 0000000..2364031 --- /dev/null +++ b/caddy/certs.sh @@ -0,0 +1,5 @@ +#!/bin/bash +# extract keys +mkdir ~/backup + +docker run --rm --volumes-from caddy -v `pwd`/backup:/backup ubuntu bash -c "cd /data && tar cvf /backup/caddy-data.tar ." diff --git a/caddy/docker-compose.yml b/caddy/docker-compose.yml index 3631ddf..473b56e 100644 --- a/caddy/docker-compose.yml +++ b/caddy/docker-compose.yml @@ -2,7 +2,8 @@ version: "3.7" services: caddy: - image: caddy:2.4.6 + image: caddy-saffron:1.0.4 + build: . container_name: caddy restart: unless-stopped ports: diff --git a/caddy/readme.md b/caddy/readme.md index 269a891..68f1060 100644 --- a/caddy/readme.md +++ b/caddy/readme.md @@ -1,3 +1,13 @@ -Caddy +# Caddy -needs plugins \ No newline at end of file +builds docker image with +* github.com/caddy-dns/duckdns +* https://github.com/authp/authp.github.io @v1.1.6 https://authp.github.io/ +* https://github.com/greenpau/caddy-trace @v1.1.9 + +## local + +1. use `certs.sh` to get tar of data +1. extract `caddy-data.tar\.\caddy\pki\authorities\local\root.crt` +1. right click, install +1. select "trusted root certification authorities" diff --git a/caddy/site/orlop/icon.png b/caddy/site/orlop/icon.png new file mode 100644 index 0000000..3a1ff08 Binary files /dev/null and b/caddy/site/orlop/icon.png differ diff --git a/caddy/site/orlop/index.html b/caddy/site/orlop/index.html new file mode 100644 index 0000000..5de9ca6 --- /dev/null +++ b/caddy/site/orlop/index.html @@ -0,0 +1,54 @@ + + + + + + Orlop domain + + + + + + + + +
+ + +
+ Loaded at: {{ loaded }} + mdi-clock + {{ message }} + hits {{ hits }} +
+
+ + + + + + + + + {{ item.text }} + + + ? + {{ item.port }} + + + + + + + + + + +
+
+ + + + + \ No newline at end of file diff --git a/caddy/site/orlop/index.js b/caddy/site/orlop/index.js new file mode 100644 index 0000000..94f8124 --- /dev/null +++ b/caddy/site/orlop/index.js @@ -0,0 +1,27 @@ +// app +var app = new Vue({ + el: '#app', + vuetify: new Vuetify(), + data: { + message: 'Hello Vue!', + links: null, + hits:0, + loaded: null, + target: "caddy", + targets: ["srv","top","new"] + + }, + + methods:{ + load() { + this.loaded = new Date() + this.hits += 1 + fetch("links.json") + .then(response => response.json()) + .then(data => (this.links = data)); + } + }, + mounted () { + this.load() + } +}); diff --git a/caddy/site/orlop/links.json b/caddy/site/orlop/links.json new file mode 100644 index 0000000..ef20acd --- /dev/null +++ b/caddy/site/orlop/links.json @@ -0,0 +1,7 @@ +[ + {"href": "https://about.orlop.duckdns.org", "text": "about", "port": "19999"}, + {"href": "https://jellyfin.orlop.duckdns.org", "text": "jellyfin", "port": "9000"}, + {"href": "https://emby.orlop.duckdns.org", "text": "emby", "port": "9981"}, + {"href": "https://tvheadend.orlop.duckdns.org", "text": "tvheadend", "port": "8088"} + +] \ No newline at end of file diff --git a/caddy/site/quodatum/icon.png b/caddy/site/quodatum/icon.png new file mode 100644 index 0000000..876079a Binary files /dev/null and b/caddy/site/quodatum/icon.png differ diff --git a/caddy/site/quodatum/index.html b/caddy/site/quodatum/index.html new file mode 100644 index 0000000..ec867b0 --- /dev/null +++ b/caddy/site/quodatum/index.html @@ -0,0 +1,48 @@ + + + + + + Quodatum domain + + + + + + + + +
+ + +
+ Loaded at: {{ loaded }}mdi-clock + {{ message }} + hits {{ hits }} +
+ + + + + + {{ item.text }} + + + ? + {{ item.port }} + + + + + + + + +
+
+
+ + + + + \ No newline at end of file diff --git a/caddy/site/quodatum/index.js b/caddy/site/quodatum/index.js new file mode 100644 index 0000000..9b5e325 --- /dev/null +++ b/caddy/site/quodatum/index.js @@ -0,0 +1,30 @@ +// app +var app = new Vue({ + el: '#app', + vuetify: new Vuetify(), + data: { + message: 'Hello Vue!', + links: null, + hits:0, + loaded: null, + target: "caddy", + targets: ["srv","top","new"], + caddy: null + }, + + methods:{ + load() { + this.loaded = new Date() + this.hits += 1 + fetch("links.json") + .then(response => response.json()) + .then(data => (this.links = data)); + fetch("http://192.168.1.5:2015/config/") + .then(response => response.json()) + .then(data => (this.caddy = data)); + } + }, + mounted () { + this.load() + } +}); diff --git a/caddy/site/quodatum/links.json b/caddy/site/quodatum/links.json new file mode 100644 index 0000000..abfd056 --- /dev/null +++ b/caddy/site/quodatum/links.json @@ -0,0 +1,8 @@ +[ + {"href": "https://about.quodatum.duckdns.org", "text": "about", "port": "19999"}, + {"href": "https://git.quodatum.duckdns.org", "text": "git", "port": "9000"}, + {"href": "https://wiki.quodatum.duckdns.org", "text": "wiki", "port": "9981"}, + {"href": "https://wiki-alt.quodatum.duckdns.org", "text": "wiki alt", "port": "8088"}, + {"href": "https://code.quodatum.duckdns.org", "text": "code", "port": "8002"}, + {"href": "https://code-alt.quodatum.duckdns.org", "text": "code alt", "port": "3030"} +] \ No newline at end of file diff --git a/cadvisor/docker-compose.yml b/cadvisor/docker-compose.yml new file mode 100644 index 0000000..e6cd222 --- /dev/null +++ b/cadvisor/docker-compose.yml @@ -0,0 +1,36 @@ +version: '3.4' + +services: + cadvisor: + image: zcube/cadvisor:latest + ports: + - published: 9102 + target: 9102 + mode: host + command: + - "--port=9102" + - "--housekeeping_interval=30s" + - "--docker_only=true" + - "--disable_metrics=percpu,sched,tcp,udp,disk,diskIO,accelerator,hugetlb,referenced_memory,cpu_topology,resctrl" + volumes: + - /var/lib/docker/:/var/lib/docker:ro + - /dev/disk/:/dev/disk:ro + - /sys:/sys:ro + - /var/run:/var/run:ro + - /:/rootfs:ro + - /sys/fs/cgroup:/cgroup:ro + - /etc/machine-id:/etc/machine-id:ro + - /etc/localtime:/etc/localtime:ro + deploy: + mode: global + update_config: + order: stop-first + resources: + reservations: + memory: 80M + healthcheck: + test: wget --quiet --tries=1 --spider http://localhost:9102/healthz || exit 1 + interval: 15s + timeout: 15s + retries: 5 + start_period: 30s diff --git a/code-bmy/.dockerignore b/code-bmy/.dockerignore new file mode 100644 index 0000000..f788eea --- /dev/null +++ b/code-bmy/.dockerignore @@ -0,0 +1,2 @@ +# docker ignore +custom \ No newline at end of file diff --git a/code-bmy/Dockerfile b/code-bmy/Dockerfile new file mode 100644 index 0000000..4fbb597 --- /dev/null +++ b/code-bmy/Dockerfile @@ -0,0 +1,58 @@ +# A code-server image with added +# openjdk@11 +# BaseX installed@9.7.3 +# @author Andy Bunce +# Bugs: +# hardcoded for amd64 + +# Main image +FROM ghcr.io/linuxserver/code-server:4.5.1 + +ARG TARGETARCH +ARG BUILDARCH +RUN echo "I'm building vscode-basex for ${BUILDARCH} on ${TARGETARCH} User: ${PUID}" + +LABEL author="Andy Bunce" +LABEL company="Quodatum Ltd" +LABEL maintainer="quodatum@gmail.com" + +# Install OpenJDK-8 +RUN apt-get update && \ + apt-get install -y openjdk-8-jdk-headless; + +# Fix certificate issues +RUN apt-get update && \ + apt-get install ca-certificates-java && \ + apt-get clean && \ + update-ca-certificates -f; + +# Setup JAVA_HOME -- useful for docker commandline +ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/ +RUN export JAVA_HOME + +# install BaseX to /basex/ +RUN curl https://files.basex.org/releases/9.5.1/BaseX951.zip | jar xv && \ + chown -R 1000:1000 /basex && chmod a+x /basex/bin/* ; +ENV PATH=$PATH:/basex/bin + +# install docker cli only +RUN curl https://download.docker.com/linux/static/stable/x86_64/docker-20.10.17.tgz | tar zxv -C /tmp/ && \ + cp /tmp/docker/docker /usr/local/bin && rm -r /tmp/docker; + +# install maven +RUN curl https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz | \ + tar zxv -C /usr/local/bin && \ + cd /usr/local/bin && \ + ln -s apache-maven-3.8.6 maven +ENV PATH=$PATH:/usr/local/bin/maven/bin + +# install node+npm LTS see https://www.how2shout.com/linux/how-to-install-node-js-npm-on-debian-11-bullseye/ +RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \ + apt install nodejs + +#RUN chmod 666 /var/run/docker.sock + +#RUN /usr/local/bin/code-server --install-extension vscode-basex-0.0.21.vsix + +# ports and volumes +EXPOSE 8443 \ No newline at end of file diff --git a/code-bmy/config/.gitignore b/code-bmy/config/.gitignore new file mode 100644 index 0000000..5a4253a --- /dev/null +++ b/code-bmy/config/.gitignore @@ -0,0 +1,3 @@ +# .gitignore nothing +################### + diff --git a/code-bmy/config/.vscode/buenon.scratchpads-0.0.7.vsix b/code-bmy/config/.vscode/buenon.scratchpads-0.0.7.vsix new file mode 100644 index 0000000..3359a1c Binary files /dev/null and b/code-bmy/config/.vscode/buenon.scratchpads-0.0.7.vsix differ diff --git a/code-bmy/config/.vscode/deltaxml.xslt-xpath-1.1.0.vsix b/code-bmy/config/.vscode/deltaxml.xslt-xpath-1.1.0.vsix new file mode 100644 index 0000000..ca4d179 Binary files /dev/null and b/code-bmy/config/.vscode/deltaxml.xslt-xpath-1.1.0.vsix differ diff --git a/code-bmy/config/.vscode/extensions.json b/code-bmy/config/.vscode/extensions.json new file mode 100644 index 0000000..6084485 --- /dev/null +++ b/code-bmy/config/.vscode/extensions.json @@ -0,0 +1,11 @@ +{ + "recommendations": [ + "ms-azuretools.vscode-docker", + "dbaeumer.vscode-eslint", + "eamodio.gitlens", + "kelvin.vscode-sshfs", + "alefragnani.project-manager", + "johnpapa.vscode-peacock", + "nonoroazoro.syncing" + ] +} \ No newline at end of file diff --git a/code-bmy/config/.vscode/raffazizzi.sxml-0.2.2.vsix b/code-bmy/config/.vscode/raffazizzi.sxml-0.2.2.vsix new file mode 100644 index 0000000..adee8d6 Binary files /dev/null and b/code-bmy/config/.vscode/raffazizzi.sxml-0.2.2.vsix differ diff --git a/code-bmy/config/.vscode/vscode-basex-0.0.52.vsix b/code-bmy/config/.vscode/vscode-basex-0.0.52.vsix new file mode 100644 index 0000000..de023d9 Binary files /dev/null and b/code-bmy/config/.vscode/vscode-basex-0.0.52.vsix differ diff --git a/code-bmy/config/.vscode/w3c-ebnf-0.2.0.vsix b/code-bmy/config/.vscode/w3c-ebnf-0.2.0.vsix new file mode 100644 index 0000000..130e6aa Binary files /dev/null and b/code-bmy/config/.vscode/w3c-ebnf-0.2.0.vsix differ diff --git a/code-bmy/config/install.sh b/code-bmy/config/install.sh new file mode 100755 index 0000000..fbf8e33 --- /dev/null +++ b/code-bmy/config/install.sh @@ -0,0 +1,26 @@ +# setup + + +#install extensions located in /exts/ folder +# code-server@4.0.2 omv +CODE_SERVER="/app/code-server/bin/code-server" + +# 4.0.1 n2-plus +#CODE_SERVER="/usr/local/bin/code-server" + +for FILE in .vscode/*.vsix +do + $CODE_SERVER --install-extension $FILE +done + + +# pull useful projects +cd /config/workspace +git clone https://github.com/BloomsburyDigital/XML-CMS.git +mkdir quodatum +cd quodatum +git clone https://github.com/Quodatum/xqlint.git +git clone https://github.com/Quodatum/xqdoca.git +git clone https://git.quodatum.duckdns.org/apb/file-samples.git + + diff --git a/code-bmy/custom/saxon-he-10.8.jar b/code-bmy/custom/saxon-he-10.8.jar new file mode 100644 index 0000000..aae93fa Binary files /dev/null and b/code-bmy/custom/saxon-he-10.8.jar differ diff --git a/code-bmy/docker-compose.yml b/code-bmy/docker-compose.yml new file mode 100644 index 0000000..e194de2 --- /dev/null +++ b/code-bmy/docker-compose.yml @@ -0,0 +1,21 @@ +version: '3' + +services: + vscode-basex: + container_name: vscode-bmy + image: vscode-bmy + build: . + environment: + - PUID=1000 + - PGID=1000 + - TZ=Europe/London + - SUDO_PASSWORD=password #optional + - SUDO_PASSWORD_HASH= #optional + volumes: + - ./config:/config + - ./repo:/basex/repo + - ./custom:/basex/lib/custom + - /var/run/docker.sock:/var/run/docker.sock + ports: + - 8448:8443 + restart: unless-stopped \ No newline at end of file diff --git a/code-bmy/readme.md b/code-bmy/readme.md new file mode 100644 index 0000000..cd86086 --- /dev/null +++ b/code-bmy/readme.md @@ -0,0 +1,15 @@ +# A BaseX development environment for vscode + +## docker build +``` +docker build --tag=vscode-basex . +``` +## compose +``` +docker-compose up +``` +## Includes +* openjdk-11-jdk-headless +* BaseX + + diff --git a/code-server/README.md b/code-server/README.md index fc6e6f3..199c727 100644 --- a/code-server/README.md +++ b/code-server/README.md @@ -1,3 +1,5 @@ -# code-server +# code-bmy + +Docker vscode build for bloomsbury Installs `code-server:version-v3.9.1` with JRE and BaseX. \ No newline at end of file diff --git a/code-server/docker-compose.yml b/code-server/docker-compose.yml index 8742daa..d7e1297 100644 --- a/code-server/docker-compose.yml +++ b/code-server/docker-compose.yml @@ -12,7 +12,7 @@ services: - SUDO_PASSWORD_HASH= #optional volumes: - ./config:/config - - /var/run/docker.sock:/var/run/docker.sock:ro + - /var/run/docker.sock:/var/run/docker.sock ports: - 8443:8443 restart: unless-stopped diff --git a/code-server4/docker-compose.yml b/code-server4/docker-compose.yml index 13588dd..42ef18c 100644 --- a/code-server4/docker-compose.yml +++ b/code-server4/docker-compose.yml @@ -2,7 +2,7 @@ version: "2.1" services: code-server: - image: ghcr.io/linuxserver/code-server:4.0.1 + image: ghcr.io/linuxserver/code-server container_name: code-server4 environment: - PUID=1000 @@ -12,7 +12,7 @@ services: - SUDO_PASSWORD_HASH= #optional volumes: - ./config:/config - - /var/run/docker.sock:/var/run/docker.sock:ro + - /var/run/docker.sock:/var/run/docker.sock ports: - 8444:8443 restart: unless-stopped diff --git a/code-serverx/Dockerfile b/code-serverx/Dockerfile index 31cc6eb..499e717 100644 --- a/code-serverx/Dockerfile +++ b/code-serverx/Dockerfile @@ -1,14 +1,16 @@ # A code-server image with added -# openjdk 11 -# BaseX installed +# openjdk@11 +# BaseX installed@9.7.3 # @author Andy Bunce +# Bugs: +# hardcoded for amd64 # Main image -FROM ghcr.io/linuxserver/code-server:4.1.0 +FROM ghcr.io/linuxserver/code-server:4.5.1 ARG TARGETARCH ARG BUILDARCH -RUN echo "I'm building vscode-basex for ${BUILDARCH} on ${TARGETARCH}" +RUN echo "I'm building vscode-basex for ${BUILDARCH} on ${TARGETARCH} User: ${PUID}" LABEL author="Andy Bunce" LABEL company="Quodatum Ltd" @@ -29,13 +31,25 @@ ENV JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64/ RUN export JAVA_HOME # install BaseX to /basex/ -RUN curl https://files.basex.org/releases/9.6.4/BaseX964.zip | jar xv && \ - chmod a+x /basex/bin/*; +RUN curl https://files.basex.org/releases/9.7.3/BaseX973.zip | jar xv && \ + chown -R $PUID:$PGID /basex && chmod a+x /basex/bin/* ; ENV PATH=$PATH:/basex/bin # install docker cli only -RUN curl https://download.docker.com/linux/static/stable/x86_64/docker-20.10.12.tgz | tar zxv -C /tmp/ && \ +RUN curl https://download.docker.com/linux/static/stable/x86_64/docker-20.10.17.tgz | tar zxv -C /tmp/ && \ cp /tmp/docker/docker /usr/local/bin && rm -r /tmp/docker; + +# install maven +RUN curl https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz | \ + tar zxv -C /usr/local/bin && \ + cd /usr/local/bin && \ + ln -s apache-maven-3.8.6 maven +ENV PATH=$PATH:/usr/local/bin/maven/bin + +# install node+npm LTS see https://www.how2shout.com/linux/how-to-install-node-js-npm-on-debian-11-bullseye/ +RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \ + apt install nodejs + #RUN chmod 666 /var/run/docker.sock #RUN /usr/local/bin/code-server --install-extension vscode-basex-0.0.21.vsix diff --git a/code-serverx/custom/saxon-he-10.8.jar b/code-serverx/custom/saxon-he-10.8.jar new file mode 100644 index 0000000..aae93fa Binary files /dev/null and b/code-serverx/custom/saxon-he-10.8.jar differ diff --git a/code-serverx/custom/saxon-he-11.1.jar b/code-serverx/custom/saxon-he-11.1.jar deleted file mode 100644 index 84f5bdf..0000000 Binary files a/code-serverx/custom/saxon-he-11.1.jar and /dev/null differ diff --git a/code-serverx/docker-compose.yml b/code-serverx/docker-compose.yml index 2b508cd..c924efa 100644 --- a/code-serverx/docker-compose.yml +++ b/code-serverx/docker-compose.yml @@ -14,7 +14,7 @@ services: volumes: - ./config:/config - ./custom:/basex/lib/custom - - /var/run/docker.sock:/var/run/docker.sock:ro + - /var/run/docker.sock:/var/run/docker.sock ports: - 8444:8443 restart: unless-stopped \ No newline at end of file diff --git a/code-serverx/readme.md b/code-serverx/readme.md index cd86086..a02bd9c 100644 --- a/code-serverx/readme.md +++ b/code-serverx/readme.md @@ -2,7 +2,7 @@ ## docker build ``` -docker build --tag=vscode-basex . +docker build --tag=vs451-basex973 . ``` ## compose ``` @@ -10,6 +10,8 @@ docker-compose up ``` ## Includes * openjdk-11-jdk-headless -* BaseX +* BaseX 9.7.3 +* node+npm v16 +* maven 3.8.6 diff --git a/docker-registry/README.md b/docker-registry/README.md new file mode 100644 index 0000000..485d038 --- /dev/null +++ b/docker-registry/README.md @@ -0,0 +1 @@ +https://joxit.dev/docker-registry-ui/ \ No newline at end of file diff --git a/docker-registry/docker-compose.yml b/docker-registry/docker-compose.yml new file mode 100644 index 0000000..01efcb3 --- /dev/null +++ b/docker-registry/docker-compose.yml @@ -0,0 +1,19 @@ +version: "3" +services: + docker-registry: + image: registry:2 + container_name: docker-registry + ports: + - 5000:5000 + restart: always + volumes: + - ./docker-registry:/var/lib/registry + + docker-registry-ui: + image: konradkleine/docker-registry-frontend:v2 + container_name: docker-registry-ui + ports: + - 8090:80 + environment: + ENV_DOCKER_REGISTRY_HOST: docker-registry + ENV_DOCKER_REGISTRY_PORT: 5000 \ No newline at end of file diff --git a/docker-registry/docker-registry/.gitignore b/docker-registry/docker-registry/.gitignore new file mode 100644 index 0000000..1e04ba0 --- /dev/null +++ b/docker-registry/docker-registry/.gitignore @@ -0,0 +1,8 @@ +# .gitignore sample +################### + +# Ignore all files in this dir... +* + +# ... except for this one. +!.gitignore diff --git a/drone/docker-compose.yml b/drone/docker-compose.yml new file mode 100644 index 0000000..1202013 --- /dev/null +++ b/drone/docker-compose.yml @@ -0,0 +1,19 @@ +version: '2' + +services: + drone-server: + image: drone/drone + + ports: + - 80:80 + volumes: + - ./drone-server-data:/var/lib/drone/ + restart: always + environment: + - DRONE_SERVER_HOST=drone.quodatum.duckdns.org + - DRONE_SERVER_PROTO=https + - DRONE_GITEA_SERVER=https://git.quodatum.duckdns.org/ + - DRONE_GITEA_CLIENT_ID=607bc1aa-2491-4193-8e6b-a82d2dd05be0 + - DRONE_GITEA_CLIENT_SECRET=HZgKI4c353aqNPOhTgjJ5WUttYnVKYp9omifezS-dLM= + - DRONE_RPC_SECRET=06522d7b764c0d05138e79ab7c8c341e + - DRONE_USER_CREATE=username:apb,admin:true \ No newline at end of file diff --git a/emby/cache/.gitignore b/emby/cache/.gitignore new file mode 100644 index 0000000..1e04ba0 --- /dev/null +++ b/emby/cache/.gitignore @@ -0,0 +1,8 @@ +# .gitignore sample +################### + +# Ignore all files in this dir... +* + +# ... except for this one. +!.gitignore diff --git a/emby/config/.gitignore b/emby/config/.gitignore new file mode 100644 index 0000000..1e04ba0 --- /dev/null +++ b/emby/config/.gitignore @@ -0,0 +1,8 @@ +# .gitignore sample +################### + +# Ignore all files in this dir... +* + +# ... except for this one. +!.gitignore diff --git a/emby/docker-compose.yml b/emby/docker-compose.yml new file mode 100644 index 0000000..2f52fd7 --- /dev/null +++ b/emby/docker-compose.yml @@ -0,0 +1,26 @@ +version: "2.3" +services: + emby: + image: emby/embyserver + container_name: embyserver + #runtime: nvidia # Expose NVIDIA GPUs + # network_mode: host # Enable DLNA and Wake-on-Lan + # https://forums.docker.com/t/docker-errors-invalidargument-host-network-mode-is-incompatible-with-port-bindings/103492/14 + environment: + - UID=1000 # The UID to run emby as (default: 2) + - GID=100 # The GID to run emby as (default 2) + - GIDLIST=100 # A comma-separated list of additional GIDs to run emby as (default: 2) + volumes: + - ./config:/config + - ./cache:/cache + - /srv/dev-disk-by-uuid-45e2e732-9e00-4a82-a7cc-9c743e033671/datastore/music:/music + - /srv/dev-disk-by-uuid-45e2e732-9e00-4a82-a7cc-9c743e033671/datastore/PicasaStarter/pictures/Pictures:/photos + - /srv/dev-disk-by-uuid-45e2e732-9e00-4a82-a7cc-9c743e033671/datastore/entertain:/entertain + + ports: + - 8097:8096 # HTTP port + - 8920:8920 # HTTPS port + devices: + - /dev/dri:/dev/dri # VAAPI/NVDEC/NVENC render nodes + #- /dev/vchiq:/dev/vchiq # MMAL/OMX on Raspberry Pi + restart: unless-stopped diff --git a/gerbera/docker-compose.yml b/gerbera/docker-compose.yml index 2ac9a5a..b13a096 100644 --- a/gerbera/docker-compose.yml +++ b/gerbera/docker-compose.yml @@ -5,7 +5,6 @@ services: gerbera: image: gerbera/gerbera:1.9.2 container_name: gerbera - restart: always volumes: - "/mnt/media/pictures:/media/pictures:ro" - "./videos:/media/videos:ro" diff --git a/gitea/README.md b/gitea/README.md index a36c52c..1b49308 100644 --- a/gitea/README.md +++ b/gitea/README.md @@ -4,6 +4,52 @@ from https://gist.github.com/sinbad/4bb771b916fa8facaf340af3fc49ee43 -### backup_gitea.sh -writes to `/mnt/drive/backups/gitea/` -### restore +### Backup + +`backup_gitea.sh` writes to `/mnt/drive/backups/gitea/` + +### Restore +* Requires `7z` (`apt install p7zip-full`) + +```bash + +#restore_gitea_data.sh [--dry-run] + ./restore_gitea_data.sh /srv/dev-disk-by-uuid-45e2e732-9e00-4a82-a7cc-9c743e033671/datastore/gitea data + ``` + +## Samples +### Backup +```bash +./backup_gitea.sh +Backing up Gitea data to /mnt/drive/backups/gitea/gitea_backup.zip via gitea:/tmp/gitea_dump_temp.zip +2022/03/23 22:49:30 ...dules/setting/log.go:286:newLogService() [I] Gitea v1.15.8 built with GNU Make 4.3, go1.16.12 : bindata, timetzdata, sqlite, sqlite_unlock_notify +2022/03/23 22:49:30 ...dules/setting/log.go:333:newLogService() [I] Gitea Log Mode: Console(Console:) +2022/03/23 22:49:30 ...dules/setting/log.go:249:generateNamedLogger() [I] Router Log: Console(console:) +2022/03/23 22:49:30 ...les/setting/cache.go:78:newCacheService() [I] Cache Service Enabled +2022/03/23 22:49:30 ...les/setting/cache.go:93:newCacheService() [I] Last Commit Cache Service Enabled +2022/03/23 22:49:30 ...s/setting/session.go:77:newSessionService() [I] Session Service Enabled +2022/03/23 22:49:30 ...es/setting/mailer.go:109:newMailService() [I] Mail Service Enabled +2022/03/23 22:49:30 ...s/storage/storage.go:171:initAttachments() [I] Initialising Attachment storage with type: +2022/03/23 22:49:30 ...les/storage/local.go:47:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/attachments +2022/03/23 22:49:30 ...s/storage/storage.go:165:initAvatars() [I] Initialising Avatar storage with type: +2022/03/23 22:49:30 ...les/storage/local.go:47:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/avatars +2022/03/23 22:49:30 ...s/storage/storage.go:183:initRepoAvatars() [I] Initialising Repository Avatar storage with type: +2022/03/23 22:49:30 ...les/storage/local.go:47:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/repo-avatars +2022/03/23 22:49:30 ...s/storage/storage.go:177:initLFS() [I] Initialising LFS storage with type: +2022/03/23 22:49:30 ...les/storage/local.go:47:NewLocalStorage() [I] Creating new Local Storage at /data/git/lfs +2022/03/23 22:49:30 ...s/storage/storage.go:189:initRepoArchives() [I] Initialising Repository Archive storage with type: +2022/03/23 22:49:30 ...les/storage/local.go:47:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/repo-archive +2022/03/23 22:49:30 cmd/dump.go:221:runDump() [I] Skip dumping local repositories +2022/03/23 22:49:30 cmd/dump.go:267:runDump() [I] Dumping database... +2022/03/23 22:49:30 cmd/dump.go:279:runDump() [I] Adding custom configuration file from /data/gitea/conf/app.ini +2022/03/23 22:49:30 cmd/dump.go:295:runDump() [I] Custom dir /data/gitea is inside data dir /data/gitea, skipped +2022/03/23 22:49:30 cmd/dump.go:307:runDump() [I] Packing data directory.../data/gitea +2022/03/23 22:49:31 cmd/dump.go:352:runDump() [I] Skip dumping log files +Backing up git repositories +Backing up LFS data +Gitea backup completed successfully +``` +##Restore +``` +todo +``` \ No newline at end of file diff --git a/gitea/backup.sh b/gitea/backup.sh new file mode 100755 index 0000000..f182149 --- /dev/null +++ b/gitea/backup.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +# backup gitea +echo "stopping" +docker-compose stop +echo "stopping" +. backup_gitea.sh +echo "restart" +docker-compose up -d diff --git a/gitea/backup_gitea.sh b/gitea/backup_gitea.sh old mode 100644 new mode 100755 index aded7ab..8299776 --- a/gitea/backup_gitea.sh +++ b/gitea/backup_gitea.sh @@ -14,22 +14,22 @@ # * /repositories/ - containing the bundles, structured owner/name.bundle # * /lfs/ - containing all the direct LFS data # -# Stop on errors -set -e +# Stop on errors or undefined +set -e -u # Gitea config / SQL DB backup rotation CONTAINER=gitea # Backup dir from our perspective -HOST_BACKUP_DIR="/mnt/drive/backups" +HOST_BACKUP_DIR=$DEST # Git repo dir from our perspective (it's outside container) -HOST_GIT_REPO_DIR="/mnt/drive/docker/thedocks/gitea/data/git/repositories" +HOST_GIT_REPO_DIR="$SRC/git/repositories" # Git LFS dir from our perspective (it's outside container) -HOST_GIT_LFS_DIR="/mnt/drive/docker/thedocks/gitea/data/git/lfs" +HOST_GIT_LFS_DIR="$SRC/git/lfs" # Where we work on things (host and container) TEMP_DIR="/tmp" GITEA_DATA_FILENAME="gitea_backup.zip" -HOST_BACKUP_FILE="$HOST_BACKUP_DIR/$GITEA_DATA_FILENAME" +HOST_BACKUP_FILE="$DEST/$GITEA_DATA_FILENAME" # Back up to temp files then copy on success to prevent syncing incomplete/bad files CONTAINER_BACKUP_FILE_TEMP="$TEMP_DIR/gitea_dump_temp.zip" @@ -43,7 +43,7 @@ docker cp $CONTAINER:$CONTAINER_BACKUP_FILE_TEMP $HOST_BACKUP_FILE echo Backing up git repositories # Git repos are in 2-level structure, owner/repository # Again we MUST tar to a TEMP file and move into place when successful -GITREPO_BACKUP_FILE="$HOST_BACKUP_DIR/gitrepos_backup.tar.bz2" +GITREPO_BACKUP_FILE="$DEST/gitrepos_backup.tar.bz2" GITREPO_BACKUP_FILE_TEMP=`mktemp -p $TEMP_DIR gitrepos_backup.tar.bz2.XXXXXX` tar cjf $GITREPO_BACKUP_FILE_TEMP -C $HOST_GIT_REPO_DIR . mv -f $GITREPO_BACKUP_FILE_TEMP $GITREPO_BACKUP_FILE diff --git a/gitea/omv.profile b/gitea/omv.profile new file mode 100755 index 0000000..a7535fe --- /dev/null +++ b/gitea/omv.profile @@ -0,0 +1,5 @@ +# for gitea_backup +#!/bin/bash + +export SRC="/root/thedocks/gitea/data" +export DEST="/srv/dev-disk-by-uuid-45e2e732-9e00-4a82-a7cc-9c743e033671/datastore/gitea" \ No newline at end of file diff --git a/gitea/restore_gitea_container.sh b/gitea/restore_gitea_container.sh old mode 100644 new mode 100755 diff --git a/gitea/restore_gitea_data.sh b/gitea/restore_gitea_data.sh old mode 100644 new mode 100755 index 0c86f26..0b25083 --- a/gitea/restore_gitea_data.sh +++ b/gitea/restore_gitea_data.sh @@ -31,11 +31,12 @@ if [[ "$1" == "--help" ]]; then fi DRYRUN=0 -SOURCE="gitea" -DATADIR="data" +#SOURCE="gitea" +# /srv/dev-disk-by-uuid-45e2e732-9e00-4a82-a7cc-9c743e033671/datastore/gitea +#DATADIR="data" SQLDEST="" USER_UID=1000 -GROUP_GID=1000 +GROUP_GID=100 while (( "$#" )); do if [[ "$1" == "--dry-run" ]]; then diff --git a/jellyfin/cache/.gitignore b/jellyfin/cache/.gitignore new file mode 100644 index 0000000..1e04ba0 --- /dev/null +++ b/jellyfin/cache/.gitignore @@ -0,0 +1,8 @@ +# .gitignore sample +################### + +# Ignore all files in this dir... +* + +# ... except for this one. +!.gitignore diff --git a/jellyfin/config/.gitignore b/jellyfin/config/.gitignore new file mode 100644 index 0000000..1e04ba0 --- /dev/null +++ b/jellyfin/config/.gitignore @@ -0,0 +1,8 @@ +# .gitignore sample +################### + +# Ignore all files in this dir... +* + +# ... except for this one. +!.gitignore diff --git a/jellyfin/docker-compose.yml b/jellyfin/docker-compose.yml new file mode 100644 index 0000000..a1ecf76 --- /dev/null +++ b/jellyfin/docker-compose.yml @@ -0,0 +1,24 @@ +version: "3.5" +services: + jellyfin: + image: jellyfin/jellyfin + container_name: jellyfin + user: 1000:100 + group_add: + - 107 + network_mode: "host" + volumes: + - ./config:/config + - ./cache:/cache + - /srv/dev-disk-by-uuid-45e2e732-9e00-4a82-a7cc-9c743e033671/datastore/music:/music + - /srv/dev-disk-by-uuid-45e2e732-9e00-4a82-a7cc-9c743e033671/datastore/PicasaStarter/pictures/Pictures:/photos + - /srv/dev-disk-by-uuid-45e2e732-9e00-4a82-a7cc-9c743e033671/datastore/entertain:/entertain + + restart: "unless-stopped" + # Optional - alternative address used for autodiscovery + environment: + - JELLYFIN_PublishedServerUrl=https://jellyfin.orlop.duckdns.org + #devices: + # VAAPI Devices (for omv :Intel NUC Board D54250WYK) + # - /dev/dri/renderD128:/dev/dri/renderD128 + # - /dev/dri/card0:/dev/dri/card0 diff --git a/mermaid-server/docker-compose.yml b/mermaid-server/docker-compose.yml new file mode 100644 index 0000000..e42778b --- /dev/null +++ b/mermaid-server/docker-compose.yml @@ -0,0 +1,13 @@ +--- +version: "2.1" +services: + mermaid: + image: tomwright/mermaid-server:latest + container_name: mermaid + environment: + - USER_UID=1000 + - USER_GID=1000 + ports: + - "4500:80" + restart: unless-stopped + diff --git a/mermaid-server/readme.md b/mermaid-server/readme.md new file mode 100644 index 0000000..e144c99 --- /dev/null +++ b/mermaid-server/readme.md @@ -0,0 +1 @@ +https://github.com/TomWright/mermaid-server \ No newline at end of file diff --git a/netdata/docker-compose.yml b/netdata/docker-compose.yml new file mode 100644 index 0000000..6294d1a --- /dev/null +++ b/netdata/docker-compose.yml @@ -0,0 +1,27 @@ +version: '3' +services: + netdata: + image: netdata/netdata + container_name: netdata + #hostname: example.com # set to fqdn of host + ports: + - 19999:19999 + restart: unless-stopped + cap_add: + - SYS_PTRACE + security_opt: + - apparmor:unconfined + volumes: + - netdataconfig:/etc/netdata + - netdatalib:/var/lib/netdata + - netdatacache:/var/cache/netdata + - /etc/passwd:/host/etc/passwd:ro + - /etc/group:/host/etc/group:ro + - /proc:/host/proc:ro + - /sys:/host/sys:ro + - /etc/os-release:/host/etc/os-release:ro + +volumes: + netdataconfig: + netdatalib: + netdatacache: \ No newline at end of file diff --git a/ntopng/data/.gitignore b/ntopng/data/.gitignore new file mode 100644 index 0000000..1e04ba0 --- /dev/null +++ b/ntopng/data/.gitignore @@ -0,0 +1,8 @@ +# .gitignore sample +################### + +# Ignore all files in this dir... +* + +# ... except for this one. +!.gitignore diff --git a/ntopng/docker-compose.yaml b/ntopng/docker-compose.yaml new file mode 100644 index 0000000..1593ea0 --- /dev/null +++ b/ntopng/docker-compose.yaml @@ -0,0 +1,21 @@ +version: '3' + +services: + redis: + image: redis:alpine + command: --save 900 1 + volumes: + - ./data/redis:/data + restart: on-failure:5 + network_mode: "host" + ntopng: + build: + context: ntop + dockerfile: Dockerfile + command: ntopng -r localhost:6379 -d /ntopngcustom + volumes: + - ./data/ntopng:/var/lib/ntopng + restart: on-failure:5 + network_mode: "host" + depends_on: + - redis \ No newline at end of file diff --git a/ntopng/ntop/Dockerfile b/ntopng/ntop/Dockerfile new file mode 100644 index 0000000..e986298 --- /dev/null +++ b/ntopng/ntop/Dockerfile @@ -0,0 +1,24 @@ +# from: https://github.com/ntop/docker-ntop/blob/master/Dockerfile.ntopng-arm64 +FROM debian:bullseye-slim + +# Main dependencies and ntop.org apt package repo installation +RUN apt-get update && \ + apt-get -y -q install software-properties-common wget lsb-release gnupg libelf1 && \ + wget -q http://packages.ntop.org/RaspberryPI/apt-ntop_1.0.190416-469_all.deb && \ + apt-get -y -q install ./apt-ntop_1.0.190416-469_all.deb + +# ntopng, some of its dependencies and libcap2 / libzstd1 need to be armhf +# architecture, because latest ntopng (4.3) is not available in arm64 +RUN apt-get clean all && \ + dpkg --add-architecture armhf && \ + apt-get update && \ + apt-get -y -q install ntopng:armhf libcap2:armhf libzstd1:armhf + + +RUN echo '#!/bin/bash\n/etc/init.d/redis-server start\nntopng "$@" "$NTOP_CONFIG"' > /run.sh && \ + chmod +x /run.sh + +EXPOSE 3000 + +ENTRYPOINT ["/run.sh"] + \ No newline at end of file diff --git a/pihole/readme.md b/pihole/readme.md index 893d5bf..10a98bd 100644 --- a/pihole/readme.md +++ b/pihole/readme.md @@ -11,13 +11,15 @@ docker network create -d macvlan \ ``` then -1. sudo ip link set eth0 promisc on -1. sudo ip link add macvlan-shim link eth0 type macvlan mode bridge -1. sudo ip addr add 192.168.1.60/28 dev macvlan-shim -1. sudo ip link set macvlan-shim up +``` +sudo ip link set eth0 promisc on +sudo ip link add macvlan-shim link eth0 type macvlan mode bridge +sudo ip addr add 192.168.1.60/28 dev macvlan-shim +sudo ip link set macvlan-shim up +``` Check - ifconfig macvlan-shim + `ifconfig macvlan-shim` ## /usr/local/bin/pi-vlan.sh diff --git a/prism/database/.gitignore b/prism/database/.gitignore new file mode 100644 index 0000000..1e04ba0 --- /dev/null +++ b/prism/database/.gitignore @@ -0,0 +1,8 @@ +# .gitignore sample +################### + +# Ignore all files in this dir... +* + +# ... except for this one. +!.gitignore diff --git a/prism/docker-compose b/prism/docker-compose new file mode 100644 index 0000000..6e7d018 --- /dev/null +++ b/prism/docker-compose @@ -0,0 +1,145 @@ +version: '3.5' + +# Example Docker Compose config file for PhotoPrism (Raspberry Pi 3/4 and other ARM64-based devices) +# +# Note: +# - You have to boot your Raspberry Pi 3/4 with the parameter "arm_64bit=1" in config.txt to use our ARM64 (64-bit) image. +# An "exec format" error will occur otherwise. +# - Try explicitly pulling the ARM64 version if you've booted your device with the "arm_64bit=1" flag and you see +# the "no matching manifest" error on Raspberry Pi OS (Raspbian). See documentation for details. +# - Use https://dl.photoprism.app/docker/armv7/docker-compose.yml to run PhotoPrism and MariaDB on ARMv7-based devices +# as well as Raspberry Pi OS (Raspbian) installations without 64-bit support. +# - Running PhotoPrism on a server with less than 4 GB of swap space or setting a memory/swap limit can cause unexpected +# restarts ("crashes"), for example, when the indexer temporarily needs more memory to process large files. +# - In case you see Docker errors related to "cgroups", try adding the following parameters to /boot/firmware/cmdline.txt +# or /boot/cmdline.txt (file location depends on the OS in use): cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1 +# - If you install PhotoPrism on a public server outside your home network, please always run it behind a secure +# HTTPS reverse proxy such as Traefik or Caddy. Your files and passwords will otherwise be transmitted +# in clear text and can be intercepted by anyone, including your provider, hackers, and governments: +# https://docs.photoprism.app/getting-started/proxies/traefik/ +# +# Documentation : https://docs.photoprism.app/getting-started/raspberry-pi/ +# Docker Hub URL: https://hub.docker.com/r/photoprism/photoprism/ +# +# DOCKER COMPOSE COMMAND REFERENCE +# see https://docs.photoprism.app/getting-started/docker-compose/#command-line-interface +# -------------------------------------------------------------------------- +# Start | docker-compose up -d +# Stop | docker-compose stop +# Update | docker-compose pull +# Logs | docker-compose logs --tail=25 -f +# Terminal | docker-compose exec photoprism bash +# Help | docker-compose exec photoprism photoprism help +# Config | docker-compose exec photoprism photoprism config +# Reset | docker-compose exec photoprism photoprism reset +# Backup | docker-compose exec photoprism photoprism backup -a -i +# Restore | docker-compose exec photoprism photoprism restore -a -i +# Index | docker-compose exec photoprism photoprism index +# Reindex | docker-compose exec photoprism photoprism index -f +# Import | docker-compose exec photoprism photoprism import +# +# To search originals for faces without a complete rescan: +# docker-compose exec photoprism photoprism faces index +# +# All commands may have to be prefixed with "sudo" when not running as root. +# This will point the home directory shortcut ~ to /root in volume mounts. + +services: + photoprism: + ## Use photoprism/photoprism:preview-arm64 for testing preview builds: + image: photoprism/photoprism:arm64 + depends_on: + - mariadb + ## Don't enable automatic restarts until PhotoPrism has been properly configured and tested! + ## If the service gets stuck in a restart loop, this points to a memory, filesystem, network, or database issue: + ## https://docs.photoprism.app/getting-started/troubleshooting/#fatal-server-errors + # restart: unless-stopped + security_opt: + - seccomp:unconfined + - apparmor:unconfined + ports: + - "2342:2342" # HTTP port (host:container) + environment: + PHOTOPRISM_ADMIN_PASSWORD: "insecure" # !!! PLEASE CHANGE YOUR INITIAL "admin" PASSWORD !!! + PHOTOPRISM_SITE_URL: "http://localhost:2342/" # public server URL incl http:// or https:// and /path, :port is optional + PHOTOPRISM_ORIGINALS_LIMIT: 5000 # file size limit for originals in MB (increase for high-res video) + PHOTOPRISM_HTTP_COMPRESSION: "none" # improves transfer speed and bandwidth utilization (none or gzip) + PHOTOPRISM_WORKERS: 2 # limits the number of indexing workers to reduce system load + PHOTOPRISM_DEBUG: "false" # run in debug mode (shows additional log messages) + PHOTOPRISM_PUBLIC: "false" # no authentication required (disables password protection) + PHOTOPRISM_READONLY: "false" # don't modify originals directory (reduced functionality) + PHOTOPRISM_EXPERIMENTAL: "false" # enables experimental features + PHOTOPRISM_DISABLE_CHOWN: "false" # disables storage permission updates on startup + PHOTOPRISM_DISABLE_WEBDAV: "false" # disables built-in WebDAV server + PHOTOPRISM_DISABLE_SETTINGS: "false" # disables Settings in Web UI + PHOTOPRISM_DISABLE_TENSORFLOW: "false" # disables all features depending on TensorFlow + PHOTOPRISM_DISABLE_FACES: "false" # disables facial recognition + PHOTOPRISM_DISABLE_CLASSIFICATION: "false" # disables image classification + PHOTOPRISM_DARKTABLE_PRESETS: "true" # enables Darktable presets and disables concurrent RAW conversion + # PHOTOPRISM_FFMPEG_ENCODER: "h264_v4l2m2m" # FFmpeg AVC encoder for video transcoding (default: libx264) + # PHOTOPRISM_FFMPEG_BUFFERS: "64" # FFmpeg capture buffers (default: 32) + PHOTOPRISM_DETECT_NSFW: "false" # flag photos as private that MAY be offensive + PHOTOPRISM_UPLOAD_NSFW: "true" # allow uploads that MAY be offensive + # PHOTOPRISM_DATABASE_DRIVER: "sqlite" # SQLite is an embedded database that doesn't require a server + PHOTOPRISM_DATABASE_DRIVER: "mysql" # use MariaDB 10.5+ or MySQL 8+ instead of SQLite for improved performance + PHOTOPRISM_DATABASE_SERVER: "mariadb:3306" # MariaDB or MySQL database server (hostname:port) + PHOTOPRISM_DATABASE_NAME: "photoprism" # MariaDB or MySQL database schema name + PHOTOPRISM_DATABASE_USER: "photoprism" # MariaDB or MySQL database user name + PHOTOPRISM_DATABASE_PASSWORD: "insecure" # MariaDB or MySQL database user password + PHOTOPRISM_SITE_TITLE: "PhotoPrism" + PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App" + PHOTOPRISM_SITE_DESCRIPTION: "" + PHOTOPRISM_SITE_AUTHOR: "" + ## Run/install on first startup (options: update, gpu, tensorflow, davfs, clean): + # PHOTOPRISM_INIT: "update clean" + ## Run as a specific user, group, or with a custom umask (does not work together with "user:") + # PHOTOPRISM_UID: 1000 + # PHOTOPRISM_GID: 1000 + # PHOTOPRISM_UMASK: 0000 + HOME: "/photoprism" + ## Start as a non-root user (see https://docs.docker.com/engine/reference/run/#user) + # user: "1000:1000" + ## Share hardware devices with FFmpeg and TensorFlow (optional): + # devices: + # - "/dev/video11:/dev/video11" # Video4Linux (h264_v4l2m2m) + working_dir: "/photoprism" + ## Storage Folders: "~" is a shortcut for your home directory, "." for the current directory + volumes: + # "/host/folder:/photoprism/folder" # example + - "./pictures:/photoprism/originals" # original media files (photos and videos) + # - "/example/family:/photoprism/originals/family" # *additional* media folders can be mounted like this + # - "~/Import:/photoprism/import" # *optional* base folder from which files can be imported to originals + - "./storage:/photoprism/storage" # *writable* storage folder for cache, database, and sidecar files (never remove) + + ## Database Server (recommended) + ## see https://docs.photoprism.app/getting-started/faq/#should-i-use-sqlite-mariadb-or-mysql + mariadb: + ## If MariaDB gets stuck in a restart loop, this points to a memory or filesystem issue: + ## https://docs.photoprism.app/getting-started/troubleshooting/#fatal-server-errors + restart: unless-stopped + image: arm64v8/mariadb:10.6 # this mariadb image runs on ARM64-based devices only + security_opt: + - seccomp:unconfined + - apparmor:unconfined + command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120 + ## Never store database files on an unreliable device such as a USB flash drive, an SD card, or a shared network folder: + volumes: + - "./database:/var/lib/mysql" # important, don't remove + environment: + MYSQL_ROOT_PASSWORD: insecure + MYSQL_DATABASE: photoprism + MYSQL_USER: photoprism + MYSQL_PASSWORD: insecure + + ## Watchtower upgrades services automatically (optional) + ## see https://docs.photoprism.app/getting-started/updates/#watchtower + # + # watchtower: + # restart: unless-stopped + # image: containrrr/watchtower + # environment: + # WATCHTOWER_CLEANUP: "true" + # WATCHTOWER_POLL_INTERVAL: 7200 # checks for updates every two hours + # volumes: + # - "/var/run/docker.sock:/var/run/docker.sock" + # - "~/.docker/config.json:/config.json" # optional, for authentication if you have a Docker Hub account diff --git a/prism/pictures/.gitignore b/prism/pictures/.gitignore new file mode 100644 index 0000000..1e04ba0 --- /dev/null +++ b/prism/pictures/.gitignore @@ -0,0 +1,8 @@ +# .gitignore sample +################### + +# Ignore all files in this dir... +* + +# ... except for this one. +!.gitignore diff --git a/prism/storage/.gitignore b/prism/storage/.gitignore new file mode 100644 index 0000000..1e04ba0 --- /dev/null +++ b/prism/storage/.gitignore @@ -0,0 +1,8 @@ +# .gitignore sample +################### + +# Ignore all files in this dir... +* + +# ... except for this one. +!.gitignore diff --git a/prometheus/docker-compose.yml b/prometheus/docker-compose.yml new file mode 100644 index 0000000..d58b515 --- /dev/null +++ b/prometheus/docker-compose.yml @@ -0,0 +1,16 @@ +version: '3' + +services: + prometheus: + container_name: prometheus + image: prom/prometheus:v2.34.0 + ports: + - 9000:9090 + volumes: + - ./prometheus:/etc/prometheus + - prometheus-data:/prometheus + command: --web.enable-lifecycle --config.file=/etc/prometheus/prometheus.yml + + +volumes: + prometheus-data: diff --git a/prometheus/prometheus/alert.yml b/prometheus/prometheus/alert.yml new file mode 100644 index 0000000..a2a4817 --- /dev/null +++ b/prometheus/prometheus/alert.yml @@ -0,0 +1,6 @@ +groups: + - name: DemoAlerts + rules: + - alert: InstanceDown + expr: up{job="services"} < 1 + for: 5m \ No newline at end of file diff --git a/prometheus/prometheus/prometheus.yml b/prometheus/prometheus/prometheus.yml new file mode 100644 index 0000000..487befa --- /dev/null +++ b/prometheus/prometheus/prometheus.yml @@ -0,0 +1,16 @@ +global: + scrape_interval: 30s + scrape_timeout: 10s + +rule_files: + - alert.yml + +scrape_configs: + - job_name: services + metrics_path: /metrics + static_configs: + - targets: + - 'prometheus:9090' + - 'idonotexists:564' + - 'localhost:2015' + diff --git a/redis/data/.gitignore b/redis/data/.gitignore new file mode 100644 index 0000000..1e04ba0 --- /dev/null +++ b/redis/data/.gitignore @@ -0,0 +1,8 @@ +# .gitignore sample +################### + +# Ignore all files in this dir... +* + +# ... except for this one. +!.gitignore diff --git a/redis/docker-compose.yml b/redis/docker-compose.yml new file mode 100644 index 0000000..e96ccab --- /dev/null +++ b/redis/docker-compose.yml @@ -0,0 +1,14 @@ +version: '3.2' +# redis for arm7 +services: + + redis: + image: "arm32v7/redis" + command: redis-server --save 20 1 --loglevel warning + container_name: redis-test + ports: + - '6379:6379' + restart: unless-stopped + volumes: + - ./data:/data + \ No newline at end of file diff --git a/sonarqube/docker-compose.yml b/sonarqube/docker-compose.yml deleted file mode 100644 index 245166f..0000000 --- a/sonarqube/docker-compose.yml +++ /dev/null @@ -1,42 +0,0 @@ -version: "3" - -services: - sonarqube: - image: sonarqube - expose: - - 9005 - ports: - - "9005:9000" - networks: - - sonarnet - environment: - - SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar - - SONARQUBE_JDBC_USERNAME=sonar - - SONARQUBE_JDBC_PASSWORD=sonar - volumes: - - sonarqube_conf:/opt/sonarqube/conf - - sonarqube_data:/opt/sonarqube/data - - sonarqube_extensions:/opt/sonarqube/extensions - - sonarqube_bundled-plugins:/opt/sonarqube/lib/bundled-plugins - - db: - image: postgres - networks: - - sonarnet - environment: - - POSTGRES_USER=sonar - - POSTGRES_PASSWORD=sonar - volumes: - - postgresql:/var/lib/postgresql - - postgresql_data:/var/lib/postgresql/data - -networks: - sonarnet: - -volumes: - sonarqube_conf: - sonarqube_data: - sonarqube_extensions: - sonarqube_bundled-plugins: - postgresql: - postgresql_data: \ No newline at end of file diff --git a/sonarqube/readme.md b/sonarqube/readme.md deleted file mode 100644 index 982f8d8..0000000 --- a/sonarqube/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -requires - -sysctl vm.max_map_count=262144 \ No newline at end of file diff --git a/tiddlywiki/Dockerfile b/tiddlywiki/Dockerfile index b19d28a..a52a7e1 100644 --- a/tiddlywiki/Dockerfile +++ b/tiddlywiki/Dockerfile @@ -1,6 +1,6 @@ FROM node:12-alpine -RUN npm install -g tiddlywiki@5.2.0 +RUN npm install -g tiddlywiki@5.2.3 EXPOSE 8080 diff --git a/tiddlywiki/README.md b/tiddlywiki/README.md deleted file mode 100644 index 30e8d77..0000000 --- a/tiddlywiki/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# TiddlyWiki Docker -Run TiddlyWiki 5 via Docker and Docker Compose - -## QuickStart -You should install [Docker](https://www.docker.com/) and [Docker Compose](https://docs.docker.com/compose/) first. - -```shell -cp .env-example .env -docker-compose up -d -``` - -Now TiddlyWiki should be running on http://localhost:8080. - -## Data -The directory `./wiki-data` is used for all the data. - -## Auth -default: `user` / `wiki` -Modify `.env` file to customize - -## ToDo -- [ ] Backup Data Automatically: sync `./wiki-data` with Object Storage Service (Like Amazon S3) - -## Related Repo -* https://github.com/djmaze/tiddlywiki-docker diff --git a/tiddlywiki/data/.gitignore b/tiddlywiki/data/.gitignore new file mode 100644 index 0000000..1e04ba0 --- /dev/null +++ b/tiddlywiki/data/.gitignore @@ -0,0 +1,8 @@ +# .gitignore sample +################### + +# Ignore all files in this dir... +* + +# ... except for this one. +!.gitignore diff --git a/tiddlywiki/docker-compose.yml b/tiddlywiki/docker-compose.yml index 573ea1e..8e21b85 100644 --- a/tiddlywiki/docker-compose.yml +++ b/tiddlywiki/docker-compose.yml @@ -2,7 +2,7 @@ version: '3' services: tiddly: - image: tiddlywiki:5.2.0 + image: tiddlywiki:5.2.3 build: . container_name: tiddlywiki-docker restart: unless-stopped diff --git a/tiddlywiki/tiddly-backup.sh b/tiddlywiki/tiddly-backup.sh new file mode 100755 index 0000000..3dea73f --- /dev/null +++ b/tiddlywiki/tiddly-backup.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# tiddlywiki server backup management +set -e + +DATASTORE=/srv/dev-disk-by-uuid-45e2e732-9e00-4a82-a7cc-9c743e033671/datastore/tiddly/ + +XU4=root@192.168.1.5:/root/thedocks/tiddlywiki/data/ +N2=root@192.168.1.4:/mnt/drive/tiddly +PLUS=root@192.168.1.10:/home/odroid/thedocks/tiddlywiki/data + +sync(){ + rsync -av --delete $1 $2 +} +echo "XU4 ->DATASTORE" +sync $XU4 $DATASTORE + +echo "DATASTORE ->PLUS" +sync $DATASTORE $PLUS diff --git a/tvheadend/README.md b/tvheadend/README.md index cd489db..3cd83c8 100644 --- a/tvheadend/README.md +++ b/tvheadend/README.md @@ -1,4 +1,9 @@ # tvheadend setup +``` + - /mnt/media/recordings:/recordings +``` +HTS Tvheadend 4.3-1979~g8fc2dfa7e -HTS Tvheadend 4.3-1979~g8fc2dfa7e \ No newline at end of file +## Users +Jellyfin: jellyfin:jellyfin \ No newline at end of file diff --git a/wireguard/docker-compose.yml b/wireguard/docker-compose.yml index b27e1c5..815ac73 100644 --- a/wireguard/docker-compose.yml +++ b/wireguard/docker-compose.yml @@ -18,6 +18,7 @@ services: volumes: - ./config:/config - /lib/modules:/lib/modules + - /usr/src:/usr/src ports: - 51820:51820/udp sysctls: diff --git a/wireshark/config/.gitignore b/wireshark/config/.gitignore new file mode 100644 index 0000000..9c9c739 --- /dev/null +++ b/wireshark/config/.gitignore @@ -0,0 +1,3 @@ +# ignore +# ... except for this one. +!.gitignore diff --git a/wireshark/docker-compose.yml b/wireshark/docker-compose.yml new file mode 100644 index 0000000..ca6e3e9 --- /dev/null +++ b/wireshark/docker-compose.yml @@ -0,0 +1,16 @@ +version: "2.1" +services: + wireshark: + image: lscr.io/linuxserver/wireshark:latest + container_name: wireshark + cap_add: + - NET_ADMIN + environment: + - PUID=1000 + - PGID=1000 + - TZ=Europe/London + volumes: + - ./config:/config + ports: + - 4000:3000 #optional + restart: unless-stopped \ No newline at end of file