Compare commits

...

7 Commits

Author SHA1 Message Date
fcd4dc85bc Update caddy
Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2025-07-19 21:02:21 +02:00
840c6fa5b5 Update Makefile
Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2025-07-14 15:51:30 +02:00
628c6fe906 Add tools and fix deps
Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2025-07-07 23:38:20 +02:00
19a6c49949 Update minecraft-server
Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2025-07-03 00:17:45 +02:00
045d142e27 Update readme
Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2025-07-01 22:24:44 +02:00
e5e13b11e8 Update readme and Caddy 2025-06-30 23:17:40 +02:00
736959c540 Improve forgejo 2025-06-30 00:01:37 +02:00
15 changed files with 197 additions and 72 deletions

View File

@@ -44,6 +44,10 @@ start:
start-at:
$(DOCKER_COMPOSE_COMMAND) up
.PHONY: no-start
no-start:
$(DOCKER_COMPOSE_COMMAND) up --no-start
.PHONY: check
check:
$(DOCKER_COMPOSE_COMMAND) config
@@ -67,6 +71,10 @@ state:
$(DOCKER_COMPOSE_COMMAND) ps
$(DOCKER_COMPOSE_COMMAND) top
.PHONY: volumes
volumes:
$(DOCKER_COMPOSE_COMMAND) config --volumes
.PHONY: image-update
image-update:
$(DOCKER_COMPOSE_COMMAND) pull

View File

@@ -11,20 +11,26 @@
#// //
#//////////////////////////////////////////////////////////////
#BLOG_SERVICES := wordpress
#TORRENTS_SERVICES := qbittorrent transmission
#SHARING_SERVICES := psitransfer picoshare privatebin projectsend jellyfin dufs syncthing
ADMIN_SERVICES := openssh uptime-kuma yacht
BLOG_SERVICES := wordpress
7DAYS_TO_DIE_SERVICES := 7daystodie_server 7daystodie_backup
MINECRAFT_SERVICES := minecraft_server minecraft_backup
SATISFACTORY_SERVICES := satisfactory_server satisfactory_backup
GIT_SERVICES := forgejo forgejo-runner
ADMIN_SERVICES := yacht uptime-kuma openssh
# gitea
#UTILS_SERVICES := it-tools stirlingpdf omni-tools
#IA_SERVICES := open-webui
# gitea-runner
GAME_SERVICES :=
#mc-server mc-backup
# 7daystodie_server 7daystodie_backup satisfactory_server satisfactory_backup
# gitea gitea-runner
IA_SERVICES := open-webui
SHARING_SERVICES := psitransfer picoshare privatebin projectsend jellyfin dufs syncthing
TORRENTS_SERVICES := qbittorrent transmission
UTILS_SERVICES := it-tools stirlingpdf omni-tools
MAIN_SERVICES := main_infrastructure caddy homepage
PROJECT_DIRECTORY := infrastructure
DOCKER_PROFILES := main_infrastructure caddy homepage $(BLOG_SERVICES) $(SHARING_SERVICES) $(TORRENTS_SERVICES) $(ADMIN_SERVICES) $(UTILS_SERVICES) $(IA_SERVICES) $(GAME_SERVICES) $(GIT_SERVICES)
DOCKER_PROFILES := $(MAIN_SERVICES) \
$(ADMIN_SERVICES) $(BLOG_SERVICES) $(7DAYS_TO_DIE_SERVICES) $(MINECRAFT_SERVICES) \
$(SATISFACTORY_SERVICES) \
$(GIT_SERVICES) $(IA_SERVICES) $(SHARING_SERVICES) \
$(TORRENTS_SERVICES) $(UTILS_SERVICES)
include DockerCompose.mk

View File

@@ -15,6 +15,7 @@ If you have any **questions** or **suggestions**, feel free to open an issue or
- [x] Wordpress (Via FASTCGI/caddy)
- [x] Jellyfin (Media server)
- [x] Gitea (Git server)
- [x] Forgejo (Git server, fork of Gitea)
- [x] Uptime Kuma (Monitoring)
- [x] qbittorrent and transmission (Torrent client/server)
- [x] SyncThing (File synchronization)
@@ -45,9 +46,25 @@ The homepage is a dashboard with many widgets and services.
- [Docker Compose](https://docs.docker.com/compose/install/)
- [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
- [Web domain](https://www.ovh.com/world/domains/) (I use OVH)
- [Open port 80, 443, 22 and 2222 on your router](http://192.168.1.1/)
- [Open port 80, 443, 22, 2222 and 5555 on your router](http://192.168.1.1/)
- For games server, you need to open these ports (7777, 25565, 26900, 26901, 26903)
List of ports used by the services in this infrastructure:
| Port number | Service | Description |
| ----------- | ------------- | ----------------- |
| 80 | Caddy | HTTP traffic |
| 443 | Caddy | HTTPS traffic |
| 22 | Forgejo | Git/SSH access |
| 2222 | OpenSSH | Global SSH access |
| 5555 | Gitea | Git/SSH access |
| 7777 | Satisfactory | Game server port |
| 25565 | Minecraft | Game server port |
| 26900 | 7 Days to Die | Game server port |
| 26901 | 7 Days to Die | Game server port |
| 26903 | 7 Days to Die | Game server port |
**To avoid get rate limit from letsencrypt (10 certificates per 3 hours), you need to disable some certificates in the caddyfiles and enable them 3h later...**
### Clone
@@ -78,35 +95,36 @@ Check if all bensuperpc.* are replaced by your domain in [Caddyfile](caddy/servi
And then, caddy will generate the certificate for you and renew it automatically :D
| Domain name | Type | Description |
| --- | --- | --- |
| [bensuperpc.org](https://bensuperpc.org) | Main | Redirect to [www.bensuperpc.org](https://www.bensuperpc.org) |
| [www.bensuperpc.org](https://www.bensuperpc.org) | Main | Homepage |
| [open-webui.bensuperpc.org](https://open-webui.bensuperpc.org) | Sub | For local chatGPT |
| [wordpress.bensuperpc.org](https://wordpress.bensuperpc.org) | Sub | Wordpress website |
| [uptimekuma.bensuperpc.org](https://uptimekuma.bensuperpc.org) | Sub | Uptime Kuma for monitoring |
| [qbittorrent.bensuperpc.org](https://qbittorrent.bensuperpc.org) | Sub | Torrent client/server |
| [transmission.bensuperpc.org](https://transmission.bensuperpc.org) | Sub | Torrent client/server |
| [git.bensuperpc.org](https://git.bensuperpc.org) | Sub | Gitea for git |
| [forgejo.bensuperpc.org](https://forgejo.bensuperpc.org/) | Sub | Fork of Gitea for git |
| [link.bensuperpc.org](https://link.bensuperpc.org) | Sub | For link shortener |
| [jellyfin.bensuperpc.org](https://jellyfin.bensuperpc.org) | Sub | Jellyfin for media server |
| [syncthing.bensuperpc.org](https://syncthing.bensuperpc.org) | Sub | SyncThing for file synchronization |
| [psitransfer.bensuperpc.org](https://psitransfer.bensuperpc.org) | Sub | PsiTransfer for file sharing |
| [it-tools.bensuperpc.org](https://it-tools.bensuperpc.org) | Sub | Tools for IT |
| [omni-tools.bensuperpc.org](https://omni-tools.bensuperpc.org) | Sub | Tools for IT |
| [privatebin.bensuperpc.org](https://privatebin.bensuperpc.org) | Sub | Pastebin |
| [yacht.bensuperpc.org](https://yacht.bensuperpc.org) | Sub | Web interface for managing docker containers |
| [projectsend.bensuperpc.org](https://projectsend.bensuperpc.org) | Sub | ProjectSend for file sharing |
| [picoshare.bensuperpc.org](https://picoshare.bensuperpc.org) | Sub | Picoshare for file sharing |
| [dufs.bensuperpc.org](https://dufs.bensuperpc.org) | Sub | Dufs for file sharing |
| [public.bensuperpc.org](https://public.bensuperpc.org) | Sub | Caddy for file sharing |
| [memos.bensuperpc.org](https://memos.bensuperpc.org) | Sub | Caddy for file sharing |
| [stirlingpdf.bensuperpc.org](https://stirlingpdf.bensuperpc.org) | Sub | Stirling PDF tools |
| bensuperpc.com | Main | Redirect to [www.bensuperpc.org](https://www.bensuperpc.org) |
| bensuperpc.fr | Main | Redirect to [www.bensuperpc.org](https://www.bensuperpc.org) |
| bensuperpc.net | Main | Redirect to [www.bensuperpc.org](https://www.bensuperpc.org) |
| bensuperpc.ovh | Main | Redirect to [www.bensuperpc.org](https://www.bensuperpc.org) |
| Domain name | Type | Description |
| ------------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| [bensuperpc.org](https://bensuperpc.org) | Main | Redirect to [www.bensuperpc.org](https://www.bensuperpc.org) |
| [www.bensuperpc.org](https://www.bensuperpc.org) | Main | Homepage |
| [open-webui.bensuperpc.org](https://open-webui.bensuperpc.org) | Sub | For local chatGPT |
| [wordpress.bensuperpc.org](https://wordpress.bensuperpc.org) | Sub | Wordpress website |
| [uptimekuma.bensuperpc.org](https://uptimekuma.bensuperpc.org) | Sub | Uptime Kuma for monitoring |
| [qbittorrent.bensuperpc.org](https://qbittorrent.bensuperpc.org) | Sub | Torrent client/server |
| [transmission.bensuperpc.org](https://transmission.bensuperpc.org) | Sub | Torrent client/server |
| [gitea.bensuperpc.org](https://gitea.bensuperpc.org) | Sub | Gitea for git |
| [forgejo.bensuperpc.org](https://forgejo.bensuperpc.org/) | Sub | Fork of Gitea for git |
| [git.bensuperpc.org](https://git.bensuperpc.org) | Sub | Fork of Gitea for git |
| [link.bensuperpc.org](https://link.bensuperpc.org) | Sub | For link shortener |
| [jellyfin.bensuperpc.org](https://jellyfin.bensuperpc.org) | Sub | Jellyfin for media server |
| [syncthing.bensuperpc.org](https://syncthing.bensuperpc.org) | Sub | SyncThing for file synchronization |
| [psitransfer.bensuperpc.org](https://psitransfer.bensuperpc.org) | Sub | PsiTransfer for file sharing |
| [it-tools.bensuperpc.org](https://it-tools.bensuperpc.org) | Sub | Tools for IT |
| [omni-tools.bensuperpc.org](https://omni-tools.bensuperpc.org) | Sub | Tools for IT |
| [privatebin.bensuperpc.org](https://privatebin.bensuperpc.org) | Sub | Pastebin |
| [yacht.bensuperpc.org](https://yacht.bensuperpc.org) | Sub | Web interface for managing docker containers |
| [projectsend.bensuperpc.org](https://projectsend.bensuperpc.org) | Sub | ProjectSend for file sharing |
| [picoshare.bensuperpc.org](https://picoshare.bensuperpc.org) | Sub | Picoshare for file sharing |
| [dufs.bensuperpc.org](https://dufs.bensuperpc.org) | Sub | Dufs for file sharing |
| [public.bensuperpc.org](https://public.bensuperpc.org) | Sub | Caddy for file sharing |
| [memos.bensuperpc.org](https://memos.bensuperpc.org) | Sub | Caddy for file sharing |
| [stirlingpdf.bensuperpc.org](https://stirlingpdf.bensuperpc.org) | Sub | Stirling PDF tools |
| bensuperpc.com | Main | Redirect to [www.bensuperpc.org](https://www.bensuperpc.org) |
| bensuperpc.fr | Main | Redirect to [www.bensuperpc.org](https://www.bensuperpc.org) |
| bensuperpc.net | Main | Redirect to [www.bensuperpc.org](https://www.bensuperpc.org) |
| bensuperpc.ovh | Main | Redirect to [www.bensuperpc.org](https://www.bensuperpc.org) |
### Configure the infrastructure
@@ -324,10 +342,10 @@ main
This infrastructure uses docker volumes to store data, all configuration/data for each service are not shared between services for security and maintenance reasons, but **public_data** and **private_data** are shared between all services to store your data.
| Volume name | Description |
| --- | --- |
| public_data | Public data reachable on internet via [dufs.bensuperpc.org](https://dufs.bensuperpc.org), can be disabled. |
| private_data | Private data |
| Volume name | Description |
| ------------ | ---------------------------------------------------------------------------------------------------------- |
| public_data | Public data reachable on internet via [dufs.bensuperpc.org](https://dufs.bensuperpc.org), can be disabled. |
| private_data | Private data |
### SSH access

View File

@@ -1,5 +1,5 @@
{
email bensuperpc@gmail.com
email {$MAIL_DOMAIN}
key_type p384
log {

View File

@@ -87,17 +87,17 @@ transmission.{$MAIN_DOMAIN} {
}
gitea.{$MAIN_DOMAIN} {
redir https://git.{$MAIN_DOMAIN} permanent
}
git.{$MAIN_DOMAIN} {
reverse_proxy gitea:3000
}
forgejo.{$MAIN_DOMAIN} {
git.{$MAIN_DOMAIN} {
reverse_proxy forgejo:3000
}
forgejo.{$MAIN_DOMAIN} {
redir https://git.{$MAIN_DOMAIN}{uri} permanent
}
jellyfin.{$MAIN_DOMAIN} {
reverse_proxy jellyfin:8096
}

View File

@@ -1 +1,2 @@
MAIN_DOMAIN=bensuperpc.org
MAIL_DOMAIN=bensuperpc@gmail.com

View File

@@ -10,7 +10,7 @@ services:
- database_forgejo
- caddy
ports:
- "5555:5555"
- "22:22"
env_file:
- ./env/forgejo.env
volumes:
@@ -70,10 +70,8 @@ services:
docker-in-docker:
condition: service_started
container_name: 'forgejo_runner'
environment:
DOCKER_HOST: tcp://docker:2376
DOCKER_CERT_PATH: /certs/client
DOCKER_TLS_VERIFY: "1"
env_file:
- ./env/forgejo_runner.env
# user: 1001:1001
volumes:
# - ./config/forgejo_runner/config.yaml:/config.yaml:ro
@@ -81,8 +79,8 @@ services:
- forgejo_certs:/certs
restart: 'unless-stopped'
command: '/bin/sh -c "while : ; do sleep 1 ; done ;"'
# command: '/bin/sh -c "sleep 5; forgejo-runner -c /data/config.yml daemon"'
# command: '/bin/sh -c "while : ; do sleep 1 ; done ;"'
command: '/bin/sh -c "sleep 5; forgejo-runner -c /data/config.yml daemon"'
volumes:
forgejo_data:

View File

@@ -7,18 +7,18 @@ FORGEJO__database__USER=bensuperpc
FORGEJO__database__PASSWD=K7s5yoHknnEd7vsZoxb8I3dK9mjToF1j
FORGEJO__APP_NAME=The Homelab Git
FORGEJO__APP_SLOGAN=Personal Code, Mirrors, and More
FORGEJO__server__DOMAIN=forgejo.bensuperpc.org
FORGEJO__server__SSH_DOMAIN=forgejo.bensuperpc.org
FORGEJO__server__DOMAIN=git.bensuperpc.org
FORGEJO__server__SSH_DOMAIN=git.bensuperpc.org
FORGEJO__server__HTTP_PORT=3000
FORGEJO__server__SSH_LISTEN_PORT=5555
FORGEJO__server__SSH_PORT=5555
FORGEJO__server__ROOT_URL=https://forgejo.bensuperpc.org
FORGEJO__server__SSH_LISTEN_PORT=22
FORGEJO__server__SSH_PORT=22
FORGEJO__server__ROOT_URL=https://git.bensuperpc.org
FORGEJO__security__SECRET_KEY=ykcZt23an1E4lFHWvrCKdAyt16WAiK9c
#FORGEJO__security__INTERNAL_TOKEN=
#FORGEJO__security__INSTALL_LOCK=true
FORGEJO__security__MIN_PASSWORD_LENGTH=8
FORGEJO__actions__ENABLED=true
FORGEJO__actions__DEFAULT_ACTIONS_URL="https://forgejo.bensuperpc.org"
FORGEJO__actions__DEFAULT_ACTIONS_URL="https://git.bensuperpc.org"
#FORGEJO__log__LEVEL: "debug"
FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true
FORGEJO__repository__DEFAULT_PUSH_CREATE_PRIVATE=false

View File

@@ -0,0 +1,3 @@
DOCKER_HOST=tcp://docker:2376
DOCKER_CERT_PATH=/certs/client
DOCKER_TLS_VERIFY=1

View File

@@ -10,7 +10,7 @@ services:
- database_gitea
- caddy
ports:
- "22:22"
- "5555:5555"
env_file:
- ./env/gitea.env
volumes:

View File

@@ -10,6 +10,6 @@ GITEA__security__SECRET_KEY=ykcZt23an1E4lFHWvrCKdAyt16WAiK9c
GITEA__server__DOMAIN=git.bensuperpc.org
GITEA__server__SSH_DOMAIN=git.bensuperpc.org
GITEA__server__HTTP_PORT=3000
GITEA__server__SSH_LISTEN_PORT=22
GITEA__server__SSH_PORT=22
GITEA__server__SSH_LISTEN_PORT=5555
GITEA__server__SSH_PORT=5555
GITEA__server__ROOT_URL=https://git.bensuperpc.org

View File

@@ -5,8 +5,6 @@ services:
container_name: openssh
profiles:
- openssh
depends_on:
- caddy
restart: on-failure:5
env_file:
- ./env/openssh.env
@@ -32,6 +30,12 @@ services:
- minecraft_server_data:/minecraft_server_data:rw
- minecraft_proxy_data:/minecraft_proxy_data:rw
- minecraft_rcon_data:/minecraft_rcon_data:rw
- forgejo_data:/forgejo_data:rw
- forgejo_config:/forgejo_config:rw
- forgejo_db:/forgejo_db:rw
- gitea_data:/gitea_data:rw
- gitea_config:/gitea_config:rw
- gitea_db:/gitea_db:rw
networks:
- infra-network
@@ -78,4 +82,16 @@ volumes:
minecraft_rcon_data:
name: minecraft_rcon_data
# forgejo
forgejo_data:
name: forgejo_data
forgejo_config:
name: forgejo_config
forgejo_db:
name: forgejo_db
# gitea
gitea_data:
name: gitea_data
gitea_config:
name: gitea_config
gitea_db:
name: gitea_db

75
tools/docker_volumes_export.sh Executable file
View File

@@ -0,0 +1,75 @@
#!/usr/bin/env bash
set -euo pipefail
volumes=(
7daystodie_backup
7daystodie_server_save
7daystodie_server_config_lgsm
7daystodie_server_log
# 7daystodie_server_file
# satisfactory_server_config
forgejo_data
wordpress_db
minecraft_proxy_data
stirlingpdf_tessdata
wordpress
gitea_db
# wordpress_backup
projectsend_share
transmission_config
# public_data
projectsend_db
projectsend_config
open-webui
minecraft_rcon_data
jellyfin_cache
caddy_backup
# satisfactory_backup
homepage_log
syncthing_config
openssh_config
minecraft_server_backup
qbittorrent_config
gitea_runner
gitea_config
minecraft_server_data
ollama
caddy_data
forgejo_config
stirlingpdf_config
uptimekuma_data
# private_data
yacht_config
transmission_watch
forgejo_db
privatebin_data
caddy_config
psitransfer_data
forgejo_certs
forgejo_runner
gitea_data
jellyfin_config
picoshare_data
)
export_volume() {
local volume="$1"
echo "Exporting volume: $volume to $(pwd)/$volume.tar.gz"
docker run --rm -v "$volume:/source" -v "$(pwd):/dest" alpine sh -c 'apk add --no-cache tar && tar --numeric-owner -cpvzf /dest/"$0.tar.gz" -C /source .' "$volume"
}
import_volume() {
local volume="$1"
echo "Importing volume: $volume from $(pwd)/$volume.tar.gz"
docker run --rm -v "$volume:/dest" -v "$(pwd):/source" alpine sh -c 'apk add --no-cache tar && tar --numeric-owner -xpvzf /source/"$0.tar.gz" -C /dest' "$volume"
}
echo "Starting sync process..."
for ((i=0; i < ${#volumes[@]}; i++)); do
export_volume "${volumes[$i]}"
done
echo "Sync process completed."

View File

@@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
set -euo pipefail
if [ "$#" -ne 2 ]; then