Compare commits

..

11 Commits

Author SHA1 Message Date
James Turland
2f8a30d715 guacamole 2025-06-27 23:35:50 +01:00
James Turland
690ea8e042 RustDesk 2025-06-19 15:34:19 +01:00
James Turland
1288dacb00 zigbee2mqtt 2025-06-11 16:25:58 +01:00
James Turland
c4f20395b3 omni-tools 2025-04-25 22:37:51 +01:00
James Turland
5e4b41c3c2 checkmate 2025-04-19 00:11:55 +01:00
James Turland
66ff3a82b3 Tinyauth 2025-04-11 12:28:39 +01:00
James Turland
56bf5f741c pocket-id 2025-04-09 12:53:51 +01:00
James Turland
b295a6e4cc cloudflare-https 2025-03-26 13:06:47 +00:00
James Turland
fe7e815482 Merge branch 'main' of https://github.com/JamesTurland/JimsGarage 2025-03-08 00:20:01 +00:00
James Turland
9d1f5e8f1c postiz 2025-03-08 00:19:58 +00:00
James
4ada5687d3
Update custom.list 2025-03-06 00:15:53 +00:00
18 changed files with 565 additions and 2 deletions

View File

@ -0,0 +1,72 @@
services:
client:
image: bluewaveuptime/uptime_client:latest
restart: always
environment:
UPTIME_APP_API_BASE_URL: "https://checkmate.jimsgarage.co.uk/api/v1"
#ports:
# - "80:80"
# - "443:443"
depends_on:
- server
networks:
- proxy
- checkmate
labels:
- "traefik.enable=true"
- "traefik.http.routers.checkmate.entrypoints=http"
- "traefik.http.routers.checkmate.rule=Host(`checkmate.jimsgarage.co.uk`)"
- "traefik.http.middlewares.checkmate-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.checkmate.middlewares=checkmate-https-redirect"
- "traefik.http.routers.checkmate-secure.entrypoints=https"
- "traefik.http.routers.checkmate-secure.rule=Host(`checkmate.jimsgarage.co.uk`)"
- "traefik.http.routers.checkmate-secure.tls=true"
- "traefik.http.routers.checkmate-secure.service=checkmate"
- "traefik.http.services.checkmate.loadbalancer.server.port=80"
- "traefik.docker.network=proxy"
server:
image: bluewaveuptime/uptime_server:latest
restart: always
ports:
- "5000:5000"
depends_on:
- redis
- mongodb
environment:
- DB_CONNECTION_STRING=mongodb://mongodb:27017/uptime_db
- REDIS_HOST=redis
- PAGESPEED_API_KEY=YOUR_API_KEY
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- checkmate
redis:
image: bluewaveuptime/uptime_redis:latest
restart: always
ports:
- "6379:6379"
volumes:
- ./redis/data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 10s
retries: 5
start_period: 5s
networks:
- checkmate
mongodb:
image: bluewaveuptime/uptime_database_mongo:latest
restart: always
volumes:
- ./mongo/data:/data/db
command: ["mongod", "--quiet"]
ports:
- "27017:27017"
networks:
- checkmate
networks:
checkmate:
proxy:
external: true

View File

@ -0,0 +1,14 @@
services:
tunnel:
container_name: cloudflared-tunnel
image: cloudflare/cloudflared
restart: unless-stopped
command: tunnel run
networks:
- proxy
environment:
- TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN}
networks:
proxy:
external: true

View File

@ -0,0 +1,26 @@
services:
nginx:
image: lscr.io/linuxserver/nginx:latest
container_name: nginx
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy"
- "traefik.http.routers.nginx.entrypoints=http"
- "traefik.http.routers.nginx.rule=Host(`nginx.jimsgarage-demos.co.uk`)"
- "traefik.http.middlewares.nginx-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.nginx.middlewares=nginx-https-redirect"
- "traefik.http.routers.nginx-secure.entrypoints=https"
- "traefik.http.routers.nginx-secure.rule=Host(`nginx.jimsgarage-demos.co.uk`)"
- "traefik.http.routers.nginx-secure.tls=true"
- "traefik.http.routers.nginx-secure.tls.certresolver=cloudflare"
- "traefik.http.routers.nginx-secure.service=nginx"
- "traefik.http.services.nginx.loadbalancer.server.port=80"
networks:
proxy:
external: true

0
Guacamole/.env Normal file
View File

View File

@ -0,0 +1,100 @@
####################################################################################
# docker-compose file for Apache Guacamole
# created by PCFreak 2017-06-28
#
# https://github.com/boschkundendienst/guacamole-docker-compose
#
# Apache Guacamole is a clientless remote desktop gateway. It supports standard
# protocols like VNC, RDP, and SSH. We call it clientless because no plugins or
# client software are required. Thanks to HTML5, once Guacamole is installed on
# a server, all you need to access your desktops is a web browser.
####################################################################################
#
#
# The initial login to the guacamole webinterface is:
#
# Username: guacadmin
# Password: guacadmin
#
#####################################################################################
# services
services:
# guacd
guacd:
container_name: guacd
image: guacamole/guacd:latest
networks:
- guacnetwork
restart: always
volumes:
- ./drive:/drive:rw
- ./record:/record:rw
# mysql
mysql:
image: mysql:latest
container_name: mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: root_pass
MYSQL_DATABASE: guacamole_db
MYSQL_USER: guac_user
MYSQL_PASSWORD: guac_pass
volumes:
- ./init:/docker-entrypoint-initdb.d:z
- ./data:/var/lib/mysql
networks:
- guacnetwork
# guacamole
guacamole:
container_name: guacamole
image: guacamole/guacamole:latest
env_file:
- .env # store secrets e.g., password
group_add:
- "1000"
depends_on:
- guacd
- mysql
environment:
- GUACD_HOSTNAME=guacd
- MYSQL_HOSTNAME=mysql
- MYSQL_DATABASE=guacamole_db
- MYSQL_USER=guac_user
- MYSQL_PASSWORD=guac_pass
- MYSQL_ROOT_PASSWORD=rootpass
- RECORDING_SEARCH_PATH=/record
- WEBAPP_CONTEXT=ROOT # removes the need to use /guacamole in the URL
networks:
- proxy
- guacnetwork
volumes:
- ./record:/record:rw
ports:
## enable next line if not using nginx
- 8095:8080/tcp # Guacamole is on :8080/guacamole, not /.
## enable next line when using nginx
# - 8080/tcp
labels:
- "traefik.enable=true"
- "traefik.http.routers.guacamole.entrypoints=http"
- "traefik.http.routers.guacamole.rule=Host(`guacamole.jimsgarage.co.uk`)"
- "traefik.http.middlewares.guacamole-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.guacamole.middlewares=guacamole-https-redirect"
- "traefik.http.routers.guacamole-secure.entrypoints=https"
- "traefik.http.routers.guacamole-secure.rule=Host(`guacamole.jimsgarage.co.uk`)"
- "traefik.http.routers.guacamole-secure.tls=true"
- "traefik.http.routers.guacamole-secure.service=guacamole"
- "traefik.http.services.guacamole.loadbalancer.server.port=8080"
- "traefik.docker.network=proxy"
restart: always
# networks
# create a network 'guacnetwork' in mode 'bridged'
networks:
guacnetwork:
driver: bridge
proxy:
external: true

17
Guacamole/prepare.sh Normal file
View File

@ -0,0 +1,17 @@
#!/bin/sh
#
# check if docker is running
if ! (docker ps >/dev/null 2>&1)
then
echo "docker daemon not running, will exit here!"
exit
fi
echo "Preparing folder init and creating ./init/initdb.sql"
mkdir ./init >/dev/null 2>&1
chmod -R +x ./init
docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > ./init/initdb.sql
echo "done"
echo "Preparing folder record and set permissions"
mkdir ./record >/dev/null 2>&1
chmod -R 777 ./record
echo "done"

5
Links/affiliate.md Normal file
View File

@ -0,0 +1,5 @@
# Unifi
Store Link: https://store.ui.com/?a_aid=JimsGarage
#

View File

@ -0,0 +1,26 @@
services:
omni-tools:
image: iib0011/omni-tools:latest
container_name: omni-tools
restart: unless-stopped
#ports:
# - "8080:80"
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy"
- "traefik.http.routers.omni-tools.entrypoints=http"
- "traefik.http.routers.omni-tools.rule=Host(`omni-tools.jimsgarage.co.uk`)"
- "traefik.http.middlewares.omni-tools-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.omni-tools.middlewares=omni-tools-https-redirect"
- "traefik.http.routers.omni-tools-secure.entrypoints=https"
- "traefik.http.routers.omni-tools-secure.rule=Host(`omni-tools.jimsgarage.co.uk`)"
- "traefik.http.routers.omni-tools-secure.tls=true"
- "traefik.http.routers.omni-tools-secure.tls.certresolver=cloudflare"
- "traefik.http.routers.omni-tools-secure.service=omni-tools"
- "traefik.http.services.omni-tools.loadbalancer.server.port=80"
networks:
proxy:
external: true

6
Pocket-ID/.env Normal file
View File

@ -0,0 +1,6 @@
# See the documentation for more information: https://pocket-id.org/docs/configuration/environment-variables
PUBLIC_APP_URL=https://pocket-id.jimsgarage.co.uk
TRUST_PROXY=true
MAXMIND_LICENSE_KEY=
PUID=1000
PGID=1000

View File

@ -0,0 +1,34 @@
services:
pocket-id:
image: ghcr.io/pocket-id/pocket-id
restart: unless-stopped
env_file: .env
ports:
- 3000:80
volumes:
- "./data:/app/backend/data"
# Optional healthcheck
healthcheck:
test: "curl -f http://localhost/health"
interval: 1m30s
timeout: 5s
retries: 2
start_period: 10s
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.pocket-id.entrypoints=http"
- "traefik.http.routers.pocket-id.rule=Host(`pocket-id.jimsgarage.co.uk`)"
- "traefik.http.middlewares.pocket-id-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.pocket-id.middlewares=pocket-id-https-redirect"
- "traefik.http.routers.pocket-id-secure.entrypoints=https"
- "traefik.http.routers.pocket-id-secure.rule=Host(`pocket-id.jimsgarage.co.uk`)"
- "traefik.http.routers.pocket-id-secure.tls=true"
- "traefik.http.routers.pocket-id-secure.service=pocket-id"
- "traefik.http.services.pocket-id.loadbalancer.server.port=80"
- "traefik.docker.network=proxy"
networks:
proxy:
external: true

View File

@ -1,2 +1,2 @@
192.168.200.118 traefik.jimsgarge.co.uk 192.168.200.118 traefik.jimsgarage.co.uk
192.168.200.118 portainer.jimsgarge.co.uk 192.168.200.118 portainer.jimsgarage.co.uk

35
Postiz/.env Normal file
View File

@ -0,0 +1,35 @@
###############################################################################################################
###############################################################################################################
# GENERAL
###############################################################################################################
###############################################################################################################
# Docker machine username
HOST_USER=ubuntu
# Where container data will be stored (note user above)
WORKING_DIR=/home/${HOST_USER}/docker
# Your domain, including TLD (e.g., jimgarage.co.uk - not just jimsgarage)
DOMAIN=jimsgarage.co.uk
###############################################################################################################
###############################################################################################################
# OPEN AI CREDENTIALS
###############################################################################################################
###############################################################################################################
# Add key to integrate with OpenAI - generate images and text etc
OPENAI_API_KEY="XXXXXXXXXXXXXXXXXXX"
###############################################################################################################
###############################################################################################################
# SOCIAL MEDIA CREDENTIALS
###############################################################################################################
###############################################################################################################
X_API_KEY="XXXXXXXXXXXXXXXXXXXXXXXX"
X_API_SECRET="XXXXXXXXXXXXXXXXXXXXXXXXX"
# Must add avatar to bot otherwise you will receive a 404
DISCORD_CLIENT_ID="XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
DISCORD_CLIENT_SECRET="XXXXXXXXXXXXXXXXXXXX"
DISCORD_BOT_TOKEN_ID="XXXXXXXXXXXXXXXXXXX"
YOUTUBE_CLIENT_ID="XXXXXXXXXXXXXXXXX"
YOUTUBE_CLIENT_SECRET="XXXXXXXXXXXXXX"

107
Postiz/docker-compose.yaml Normal file
View File

@ -0,0 +1,107 @@
services:
postiz:
image: ghcr.io/gitroomhq/postiz-app:latest
container_name: postiz
restart: always
env_file:
- .env
environment:
# You must change these. Replace `postiz.your-server.com` with your DNS name - this needs to be exactly the URL you're accessing Postiz on.
# Be sure to add the domain to your local domain resolver e.g., Pi-Hole
MAIN_URL: "https://postiz.${DOMAIN}"
FRONTEND_URL: "https://postiz.${DOMAIN}"
NEXT_PUBLIC_BACKEND_URL: "https://postiz.${DOMAIN}/api"
JWT_SECRET: "sdfjhkj34sdkfhsdkfhsdkjfhsdf"
# These defaults are probably fine, but if you change your user/password, update it in the
# postiz-postgres or postiz-redis services below.
DATABASE_URL: "postgresql://postiz-user:postiz-password@postiz-postgres:5432/postiz-db-local"
REDIS_URL: "redis://postiz-redis:6379"
BACKEND_INTERNAL_URL: "http://localhost:3000"
IS_GENERAL: "true" # Required for self-hosting.
# The container images are pre-configured to use /uploads for file storage.
# You probably should not change this unless you have a really good reason!
STORAGE_PROVIDER: "local"
UPLOAD_DIRECTORY: "/uploads"
NEXT_PUBLIC_UPLOAD_DIRECTORY: "/uploads"
volumes:
- ${WORKING_DIR}/postiz/config:/config/
- ${WORKING_DIR}/postiz/uploads:/uploads/
# if you prefer volumes
# - postiz-config:/config/
# - postiz-uploads:/uploads/
# ports:
# - 5000:5000
networks:
- proxy
- postiz-network
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy"
- "traefik.http.routers.postiz.entrypoints=http"
- "traefik.http.routers.postiz.rule=Host(`postiz.${DOMAIN}`)"
- "traefik.http.middlewares.postiz-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.postiz.middlewares=postiz-https-redirect"
- "traefik.http.routers.postiz-secure.entrypoints=https"
- "traefik.http.routers.postiz-secure.rule=Host(`postiz.${DOMAIN}`)"
- "traefik.http.routers.postiz-secure.tls=true"
- "traefik.http.routers.postiz-secure.tls.certresolver=cloudflare"
- "traefik.http.routers.postiz-secure.service=postiz"
- "traefik.http.services.postiz.loadbalancer.server.port=5000"
depends_on:
postiz-postgres:
condition: service_healthy
postiz-redis:
condition: service_healthy
postiz-postgres:
image: postgres:17-alpine
container_name: postiz-postgres
restart: always
environment:
POSTGRES_PASSWORD: postiz-password
POSTGRES_USER: postiz-user
POSTGRES_DB: postiz-db-local
volumes:
- ${WORKING_DIR}/postiz/postgres:/var/lib/postgresql/data
# if you prefer volumes
# - postgres-volume:/var/lib/postgresql/data
networks:
- postiz-network
healthcheck:
test: pg_isready -U postiz-user -d postiz-db-local
interval: 10s
timeout: 3s
retries: 3
postiz-redis:
image: redis:7.2
container_name: postiz-redis
restart: always
healthcheck:
test: redis-cli ping
interval: 10s
timeout: 3s
retries: 3
volumes:
- ${WORKING_DIR}/postiz/redis:/data
# if you prefer volumes
# - postiz-redis-data:/data
networks:
- postiz-network
# if you prefer volumes
# volumes:
# postgres-volume:
# external: false
# postiz-redis-data:
# external: false
# postiz-config:
# external: false
# postiz-uploads:
# external: false
networks:
proxy:
external: true
postiz-network:
external: false

View File

@ -0,0 +1,39 @@
services:
hbbs:
container_name: hbbs
image: rustdesk/rustdesk-server:latest
command: hbbs
volumes:
- ./data:/root
# network_mode: "host" # Uncomment this line if you want to use host networking
networks:
- rustdesk
ports:
# If you do not need web client support, the corresponding ports 21118, 21119 can be disabled.
# - "21114:21114/tcp" # (TCP): used for web console, only available in Pro version.
- "21115:21115" # used for the NAT type test
- "21116:21116" # should be enabled both for TCP and UDP. is used for the ID registration and heartbeat service. 21116/TCP is used for TCP hole punching and connection service
- "21116:21116/udp" # should be enabled both for TCP and UDP. is used for the ID registration and heartbeat service. 21116/TCP is used for TCP hole punching and connection service
- "21118:21118" # used to support web clients
depends_on:
- hbbr
restart: unless-stopped
hbbr:
container_name: hbbr
image: rustdesk/rustdesk-server:latest
command: hbbr
volumes:
- ./data:/root
# network_mode: "host" # Uncomment this line if you want to use host networking
networks:
- rustdesk
ports:
# If you do not need web client support, the corresponding ports 21118, 21119 can be disabled.
- "21117:21117" # used for the relay service
- "21119:21119" # used to support web clients
restart: unless-stopped
networks:
rustdesk:

9
Tinyauth/.env Normal file
View File

@ -0,0 +1,9 @@
# generate with openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | head -c 32
SECRET=5vvAGg1lfdsDO3lPtkj5CRv3RXEk44HN
USERS=alice:$$2y$$05$$y/TnBJ.Zal5PM2Xu43NCRu0hP.STmZzb0vFiqr6LPRBc4cG0jwJr.,bob:$$2y$$05$$44DactVuy2Sqzd329hIehOp1T6JYhcnDF1r.I7TxSA8MQUwygkqV. # pw = password
# Important to set this when using OAuth otherwise anyone with an account can use it to log in
OAUTH_WHITELIST=your@email.com
GITHUB_CLIENT_ID=XXXXXXXXXXXXXXX
GITHUB_CLIENT_SECRET=XXXXXXXXXXXXXXXX

View File

@ -0,0 +1,37 @@
services:
tinyauth:
image: ghcr.io/steveiliop56/tinyauth:v3
container_name: tinyauth
restart: unless-stopped
environment:
# generate with openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | head -c 32
- SECRET=${SECRET}
- APP_URL=https://tinyauth.jimsgarage.co.uk
# generate with "echo $(htpasswd -nB user) | sed -e s/\\$/\\$\\$/g" - substitute the user with what you want, or use a file
# - USERS=${USERS}
- USERS_FILE=users_file # add a file with multiple users in the above format if necessary
- LOG_LEVEL=0
- GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID}
- GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET}
- OAUTH_WHITELIST=${OAUTH_WHITELIST}
volumes:
- ./users:/tinyauth/users_file
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy"
- "traefik.http.routers.tinyauth.entrypoints=http"
- "traefik.http.routers.tinyauth.rule=Host(`tinyauth.jimsgarage.co.uk`)"
- "traefik.http.middlewares.tinyauth-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.tinyauth.middlewares=tinyauth-https-redirect"
- "traefik.http.routers.tinyauth-secure.entrypoints=https"
- "traefik.http.routers.tinyauth-secure.rule=Host(`tinyauth.jimsgarage.co.uk`)"
- "traefik.http.routers.tinyauth-secure.tls=true"
- "traefik.http.routers.tinyauth-secure.tls.certresolver=cloudflare"
- "traefik.http.routers.tinyauth-secure.service=tinyauth"
- "traefik.http.services.tinyauth.loadbalancer.server.port=3000"
- "traefik.http.middlewares.tinyauth.forwardauth.address=http://tinyauth:3000/api/auth/traefik"
networks:
proxy:
external: true

3
Tinyauth/users Normal file
View File

@ -0,0 +1,3 @@
alice:$2y$10$k0YEfRqPD4Cgu1Bu2BR5je4s6HSqhBRqr7wW4VfYIeYn5bVaUX5lq:XAP2AEQMCO2OHGU56AT5Y5PW3UA6CKXR
bob:$2y$10$5OABhZc49FA0mVWo.a8tmeNd/FGf/d3..hcqwJL0w3lXJozIVIwtq
ADD GITHUB OAUTH HERE

View File

@ -0,0 +1,33 @@
services:
zigbee2mqtt:
container_name: zigbee2mqtt
image: ghcr.io/koenkk/zigbee2mqtt
restart: unless-stopped
volumes:
- /home/ubuntu/docker/zigbee2mqtt/data:/app/data # persistent data storage
ports:
# Frontend port
- 8080:8080
environment:
- TZ=Europe/London
#devices:
# Make sure this matched your adapter location
# not required as we'll be connecting via Network - however USB devices can be used this way
# - /dev/serial/by-id/usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0018ED3DDF-if00:/dev/ttyACM0
# Uncomment the following lines if you want to use Mosquitto as a broker
# mosquitto:
# container_name: mosquitto
# image: eclipse-mosquitto:latest
# restart: always
# deploy:
# resources:
# limits:
# memory: 256M
# ports:
# - "1883:1883"
# - "9001:9001"
# volumes:
# - /home/ubuntu/docker/mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf
# - /home/ubuntu/docker/mosquitto/data:/mosquitto/data
# - /home/ubuntu/docker/mosquitto/log:/mosquitto/log