chore: delete scripts/unused — 19 shelved app templates

Dead weight: 19 app directories, 101 files, none referenced by any live
code path and already export-ignored so they never shipped in a release.
Several were actively misleading — the mailcow attempt in there is what
the mail-server discussion kept having to explain around, and none of
them would survive contact with the current conventions (tag sentinels,
port manager, backup labels, update policy).

Verified before deleting: nothing outside the tree references it, and
none of the 19 duplicates a live app in containers/. Git keeps the
history if any of them is ever wanted back.

Function manifest and source arrays regenerated — no entries pointed
into the deleted tree.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
librelad 2026-08-18 04:10:46 +01:00
parent b915e0731a
commit 183ba00690
101 changed files with 0 additions and 6640 deletions

View File

@ -1,31 +0,0 @@
#
# APP_NAME = name of the application for use in the scripts
# COMPOSE_FILE = default for no app_name in the docker compose file name, app if there is
# HOST NAME = subdomain name e.g test is the name for test.website.com
# DOMAIN = number of the domain from the general config, useful when using multiple domains
# PUBLIC = if true, application will be setup with the reverse proxy and accessible from the internet
# WHITELIST = if true only allow whitelisted ips (see general config), if false allow all
# HEALTHCHECK = if true, the default docker health checks for that container will be enabled
# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote
# PORTS = port number(s) that the application will be used (comma seperated)
# OPEN PORTS = port number(s) that the application will be used (comma seperated)
#
CFG_ANYSYNC_APP_NAME=anysync
CFG_ANYSYNC_BACKUP=true
CFG_ANYSYNC_COMPOSE_FILE=app
CFG_ANYSYNC_HOST_NAME=space
CFG_ANYSYNC_DOMAIN=1
CFG_ANYSYNC_PUBLIC=true
CFG_ANYSYNC_WHITELIST=false
CFG_ANYSYNC_HEALTHCHECK=true
CFG_ANYSYNC_HEADSCALE=false
CFG_ANYSYNC_PORTS=8001,8002,8003,8004,8005,8006,8081,8082
CFG_ANYSYNC_OPEN_PORTS=8001/tcp,8002/tcp,8003/tcp,8004/tcp,8005/tcp,8006/tcp,8081/tcp,8082/tcp
CFG_ANYSYNC_GIT="https://github.com/anyproto/any-sync-dockercompose"
# Application metadata
CFG_ANYSYNC_CATEGORY="Knowledge Management"
CFG_ANYSYNC_TITLE="Anysync"
CFG_ANYSYNC_DESCRIPTION="Personal Knowledge Base"
CFG_ANYSYNC_LONG_DESCRIPTION="Docker-compose for any-sync Self-host for a personal knowledge base and sync system with end-to-end encryption"
CFG_ANYSYNC_URL="https://github.com/anyproto"
CFG_ANYSYNC_ACTIONS="configure|install|restart|shutdown|uninstall"

View File

@ -1,134 +0,0 @@
#!/bin/bash
# Category : Knowledge Management
# Description : Anysync - Personal Knowledge Base (c/u/s/r/i):
installAnysync()
{
local config_variables="$1"
if [[ "$anysync" == *[cCtTuUsSrRiI]* ]]; then
dockerConfigSetupToContainer silent anysync;
local app_name=$CFG_ANYSYNC_APP_NAME
initializeAppVariables $app_name;
fi
if [[ "$anysync" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$anysync" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$anysync" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$anysync" == *[rR]* ]]; then
dockerComposeRestart $app_name;
fi
if [[ "$anysync" == *[iI]* ]]; then
echo ""
echo "##########################################"
echo "### Install $app_name"
echo "##########################################"
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install folder and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install" "$config_variables";
isSuccessful "Install folders and Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Pulling $app_name Git repo"
echo ""
backupContainerFilesToTemp $app_name;
local result=$(sudo rm -rf $containers_dir$app_name)
checkSuccess "Removing $app_name install folder"
local result=$(sudo -u $docker_install_user git clone $CFG_ANYSYNC_GIT $containers_dir$app_name)
checkSuccess "Cloning $app_name Git"
backupContainerFilesRestore $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Generating the .env file file."
echo ""
cd $containers_dir$app_name
local result=$(docker buildx build --tag generateconfig-env --file Dockerfile-generateconfig-env .)
local result=$(docker run --rm --volume $containers_dir$app_name/:/code/ generateconfig-env)
((menu_number++))
echo ""
echo "---- $menu_number. Setting up the $app_name docker-compose.yml file."
echo ""
dockerComposeSetupFile $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start $app_name"
echo ""
dockerComposeUpdateAndStartApp $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Adding $app_name to the Apps Database table."
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
echo " You can now navigate to your new service using one of the options below : "
echo ""
menuShowFinalMessages $app_name;
menu_number=0
#sleep 3s
cd
fi
anysync=n
}

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><path d="M113.8 0h284.4C461.1 0 512 50.9 512 113.8v284.4C512 461 461.1 512 398.2 512H113.8C50.9 512 0 461.1 0 398.2V113.8C0 50.9 50.9 0 113.8 0"/><linearGradient id="anytype_svg__a" x1="177.352" x2="325.524" y1="346.31" y2="715.234" gradientTransform="translate(0 -278)" gradientUnits="userSpaceOnUse"><stop offset=".5" style="stop-color:#fff"/><stop offset=".664" style="stop-color:#ffedbe"/><stop offset=".839" style="stop-color:#ffbcc3"/></linearGradient><path d="M334.2 163.6v-64H135.3v64zm0 0v248.9h64V163.6zM202.7 412.4c56.9 0 103.1-46.2 103.1-103.1s-46.2-103.1-103.1-103.1S99.6 252.4 99.6 309.3s46.1 103.1 103.1 103.1" style="fill-rule:evenodd;clip-rule:evenodd;fill:url(#anytype_svg__a)"/></svg>

Before

Width:  |  Height:  |  Size: 787 B

View File

@ -1,75 +0,0 @@
# https://github.com/anyproto/any-sync-dockercompose
services:
any-sync-coordinator:
ports:
- "${ANY_SYNC_COORDINATOR_PORT}:${ANY_SYNC_COORDINATOR_PORT}"
- "${ANY_SYNC_COORDINATOR_QUIC_PORT}:${ANY_SYNC_COORDINATOR_QUIC_PORT}/udp"
- PORT5:8000
any-sync-filenode:
ports:
- "${ANY_SYNC_FILENODE_PORT}:${ANY_SYNC_FILENODE_PORT}"
- "${ANY_SYNC_FILENODE_QUIC_PORT}:${ANY_SYNC_FILENODE_QUIC_PORT}/udp"
- PORT4:8000
any-sync-node-1:
ports:
- "${ANY_SYNC_NODE_1_PORT}:${ANY_SYNC_NODE_1_PORT}"
- "${ANY_SYNC_NODE_1_QUIC_PORT}:${ANY_SYNC_NODE_1_QUIC_PORT}/udp"
- PORT7:8080
- PORT1:8000
any-sync-node-2:
ports:
- "${ANY_SYNC_NODE_2_PORT}:${ANY_SYNC_NODE_2_PORT}"
- "${ANY_SYNC_NODE_2_QUIC_PORT}:${ANY_SYNC_NODE_2_QUIC_PORT}/udp"
- PORT8:8080
- PORT2:8000
any-sync-node-3:
ports:
- "${ANY_SYNC_NODE_3_PORT}:${ANY_SYNC_NODE_3_PORT}"
- "${ANY_SYNC_NODE_3_QUIC_PORT}:${ANY_SYNC_NODE_3_QUIC_PORT}/udp"
- 8083:8080
- PORT3:8000
any-sync-consensusnode:
ports:
- "${ANY_SYNC_CONSENSUSNODE_PORT}:${ANY_SYNC_CONSENSUSNODE_PORT}"
- "${ANY_SYNC_CONSENSUSNODE_QUIC_PORT}:${ANY_SYNC_CONSENSUSNODE_QUIC_PORT}/udp"
- PORT6:8000
mongo-1:
command: --replSet ${MONGO_REPLICA_SET} --port ${MONGO_1_PORT}
ports:
- "${MONGO_1_PORT}:${MONGO_1_PORT}"
volumes:
- ./storage/mongo-1/:/data/db
healthcheck:
test: test $$(mongosh --port ${MONGO_1_PORT} --quiet --eval "try {rs.initiate({_id:'${MONGO_REPLICA_SET}',members:[{_id:0,host:\"mongo-1:${MONGO_1_PORT}\"}]})} catch(e) {rs.status().ok}") -eq 1
redis:
command: redis-server --port ${REDIS_PORT} --dir /data/ --appendonly yes --maxmemory 256mb --maxmemory-policy noeviction --protected-mode no --loadmodule /opt/redis-stack/lib/redisbloom.so
ports:
- "${REDIS_PORT}:${REDIS_PORT}"
healthcheck:
test: [ "CMD", "redis-cli", "--raw", "-p", "${REDIS_PORT}", "incr", "ping" ]
minio:
command: server /data --console-address ":${MINIO_WEB_PORT}" --address ":${MINIO_PORT}"
ports:
- "${EXTERNAL_MINIO_PORT}:${MINIO_PORT}"
- "${EXTERNAL_MINIO_WEB_PORT}:${MINIO_WEB_PORT}"
volumes:
- ./storage/minio:/data
healthcheck:
test: bash -c ':> /dev/tcp/127.0.0.1/${MINIO_PORT}' || exit 1
networks:
default:
aliases:
- "${MINIO_BUCKET}.minio" # <bucket-name>.<endpoint-name>
create-bucket:
environment:
MC_HOST_minio: http://${AWS_ACCESS_KEY_ID}:${AWS_SECRET_ACCESS_KEY}@minio:${MINIO_PORT}

View File

@ -1,30 +0,0 @@
#
# APP_NAME = name of the application for use in the scripts
# COMPOSE_FILE = default for no app_name in the docker compose file name, app if there is
# HOST NAME = subdomain name e.g test is the name for test.website.com
# DOMAIN = number of the domain from the general config, useful when using multiple domains
# PUBLIC = if true, application will be setup with the reverse proxy and accessible from the internet
# WHITELIST = if true only allow whitelisted ips (see general config), if false allow all
# HEALTHCHECK = if true, the default docker health checks for that container will be enabled
# AUTHELIA = if true, use Authelia authentication, if false turned off.
# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote
# PORTS = port number(s) that the application will be used (comma seperated)
#
CFG_BAIKAL_APP_NAME=baikal
CFG_BAIKAL_BACKUP=true
CFG_BAIKAL_COMPOSE_FILE=default
CFG_BAIKAL_HOST_NAME=calendar
CFG_BAIKAL_DOMAIN=1
CFG_BAIKAL_PUBLIC=true
CFG_BAIKAL_WHIELIST=false
CFG_BAIKAL_HEALTHCHECK=true
CFG_BAIKAL_AUTHELIA=false
CFG_BAIKAL_HEADSCALE=false
CFG_BAIKAL_PORTS=12324
# Application metadata
CFG_BAIKAL_CATEGORY="Knowledge Management"
CFG_BAIKAL_TITLE="Baikal"
CFG_BAIKAL_DESCRIPTION="CalDAV and CardDAV Server"
CFG_BAIKAL_LONG_DESCRIPTION="Baikal is a lightweight CalDAV+CardDAV server that allows you to sync your calendars and contacts with your mobile devices and desktop clients"
CFG_BAIKAL_URL="https://github.com/sabre-io/Baikal"
CFG_BAIKAL_ACTIONS="configure|install|restart|shutdown|uninstall"

View File

@ -1,122 +0,0 @@
#!/bin/bash
# Category : Knowledge Management
# Description : Baikal - CalDAV and CardDAV Server (c/u/s/r/i):
installBaikal()
{
local config_variables="$1"
if [[ "$baikal" == *[cCtTuUsSrRiI]* ]]; then
dockerConfigSetupToContainer silent baikal;
local app_name=$CFG_BAIKAL_APP_NAME
initializeAppVariables $app_name;
fi
if [[ "$baikal" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$baikal" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$baikal" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$baikal" == *[rR]* ]]; then
dockerComposeRestart $app_name;
fi
if [[ "$baikal" == *[iI]* ]]; then
echo ""
echo "##########################################"
echo "### Install $app_name"
echo "##########################################"
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install folder and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install" "$config_variables";
isSuccessful "Install folders and Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up the $app_name docker-compose.yml file."
echo ""
dockerComposeSetupFile $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start $app_name"
echo ""
dockerComposeUpdateAndStartApp $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. Adjusting $app_name Nginx docker system files for port changes."
echo ""
dockerCommandRun "docker exec -it $app_name /bin/bash -c 'sed -i "/^ *listen/s/[0-9]\\+/$usedport1/g" /etc/nginx/conf.d/default.conf'"
dockerComposeRestart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Adding $app_name to the Apps Database table."
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
echo " You can now navigate to your $app_name service using any of the options below : "
echo ""
menuShowFinalMessages $app_name;
menu_number=0
#sleep 3s
cd
fi
baikal=n
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 51 KiB

View File

@ -1,26 +0,0 @@
networks:
vpn:
external: true
name: vpn
services:
baikal:
container_name: baikal
image: ckulka/baikal:nginx
restart: always
ports:
- "PORT1:PORT1"
volumes:
- ./config:/var/www/baikal/config
- ./data:/var/www/baikal/Specific
#labels:
#traefik.enable: true
#traefik.http.routers.baikal.entrypoints: web,websecure
#traefik.http.routers.baikal.rule: Host(`DOMAINSUBNAMEHERE`)
#traefik.http.routers.baikal.tls: true
#traefik.http.routers.baikal.tls.certresolver: production
#traefik.http.services.baikal.loadbalancer.server.port: PORT1
#traefik.http.routers.baikal.middlewares:
networks:
vpn:
ipv4_address: IPADDRESSHERE

View File

@ -1,49 +0,0 @@
# https://github.com/tuxgasy/docker-dolibarr/blob/master/README.md
networks:
DOCKERNETWORKHERE:
external: true
dolibarr:
name: dolibarr
internal: true
services:
dolibarr:
container_name: dolibarr
image: tuxgasy/dolibarr:latest
environment:
- DOLI_DB_HOST=mysql
- DOLI_DB_USER=dolibarr
- DOLI_DB_PASSWORD=RANDOMIZEDPASSWORD1
- DOLI_DB_NAME=dolibarr
- DOLI_ADMIN_LOGIN=admin
- DOLI_ADMIN_PASSWORD=RANDOMIZEDPASSWORD2
- DOLI_URL_ROOT=https://DOMAINSUBNAMEHERE
#labels:
#traefik.enable: true
#traefik.http.routers.dolibarr.entrypoints: web,websecure
#traefik.http.routers.dolibarr.rule: Host(`DOMAINSUBNAMEHERE`)
#traefik.http.routers.dolibarr.tls: true
#traefik.http.routers.dolibarr.tls.certresolver: production
#traefik.http.services.dolibarr.loadbalancer.server.port: 80
#traefik.http.routers.dolibarr.middlewares:
#traefik.docker.network: DOCKERNETWORKHERE
volumes:
- ./dolibarr-docs:/var/www/documents
- ./dolibarr-custom:/var/www/html/custom
networks:
dolibarr:
DOCKERNETWORKHERE:
ipv4_address: IPADDRESSHERE
mysql:
image: library/mariadb:latest
environment:
- MYSQL_DATABASE=dolibarr
- MYSQL_USER=dolibarr
- MYSQL_PASSWORD=RANDOMIZEDPASSWORD1
- MYSQL_ROOT_PASSWORD=RANDOMIZEDPASSWORD2
volumes:
- ./mysql-data:/var/lib/mysql
networks:
- dolibarr

View File

@ -1,31 +0,0 @@
#
# APP_NAME = name of the application for use in the scripts
# COMPOSE_FILE = default for no app_name in the docker compose file name, app if there is
# HOST NAME = subdomain name e.g test is the name for test.website.com
# DOMAIN = number of the domain from the general config, useful when using multiple domains
# PUBLIC = if true, application will be setup with the reverse proxy and accessible from the internet
# WHITELIST = if true only allow whitelisted ips (see general config), if false allow all
# HEALTHCHECK = if true, the default docker health checks for that container will be enabled
# AUTHELIA = if true, use Authelia authentication, if false turned off.
# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote
# PORTS = port number(s) that the application will be used (comma seperated)
#
CFG_DOLIBARR_APP_NAME=dolibarr
CFG_DOLIBARR_BACKUP=true
CFG_DOLIBARR_COMPOSE_FILE=default
CFG_DOLIBARR_HOST_NAME=crm
CFG_DOLIBARR_DOMAIN=1
CFG_DOLIBARR_PUBLIC=true
CFG_DOLIBARR_WHIELIST=true
CFG_DOLIBARR_HEALTHCHECK=true
CFG_DOLIBARR_AUTHELIA=false
CFG_DOLIBARR_HEADSCALE=false
CFG_DOLIBARR_PORTS=3422
# Application metadata
CFG_DOLIBARR_CATEGORY="Productivity"
CFG_DOLIBARR_TITLE="Dolibarr"
CFG_DOLIBARR_DESCRIPTION="ERP and CRM"
CFG_DOLIBARR_LONG_DESCRIPTION="Dolibarr ERP CRM is a modern software package to manage your company's activity, from contacts to invoices, projects, and inventory"
CFG_DOLIBARR_URL="https://github.com/Dolibarr/dolibarr"
CFG_DOLIBARR_ACTIONS="configure|install|restart|shutdown|uninstall"

View File

@ -1,114 +0,0 @@
#!/bin/bash
# Category : Productivity
# Description : Dolibarr - ERP and CRM (c/u/s/r/i):
installDolibarr()
{
local config_variables="$1"
if [[ "$dolibarr" == *[cCtTuUsSrRiI]* ]]; then
dockerConfigSetupToContainer silent dolibarr;
local app_name=$CFG_DOLIBARR_APP_NAME
initializeAppVariables $app_name;
fi
if [[ "$dolibarr" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$dolibarr" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$dolibarr" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$dolibarr" == *[rR]* ]]; then
dockerComposeRestart $app_name;
fi
if [[ "$dolibarr" == *[iI]* ]]; then
echo ""
echo "##########################################"
echo "### Install $app_name"
echo "##########################################"
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install fuserer and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install" "$config_variables";
isSuccessful "Install fuserers and Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up the $app_name docker-compose.yml file."
echo ""
dockerComposeSetupFile $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start $app_name"
echo ""
dockerComposeUpdateAndStartApp $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Adding $app_name to the Apps Database table."
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
echo " You can now navigate to your $app_name service using any of the options below : "
echo ""
menuShowFinalMessages $app_name;
menu_number=0
#sleep 3s
cd
fi
dolibarr=n
}

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><path d="M162.8 148v363.7l-152.6-1.5v1.5V2H209c87.2 0 155.4 19.6 204.8 58.8 58.6 46.9 87.9 110.6 87.9 191 0 76.9-25.1 139.7-75.2 188.4S313.3 512 234.4 512c-9.3 0-26-.3-46.8-.3V362.4l42-.2c88.9-.4 115.8-36.7 115.8-110.4 0-69.2-43.7-103.9-131.1-103.9z" style="fill:#263c5c"/><ellipse cx="433" cy="64.5" rx="62.2" ry="64.5" style="fill:#60bbc1"/></svg>

Before

Width:  |  Height:  |  Size: 433 B

View File

@ -1,33 +0,0 @@
networks:
vpn:
external: true
services:
duplicati:
image: lscr.io/linuxserver/duplicati:latest
container_name: duplicati
environment:
- PUID=1000
- PGID=1000
- TZ=TIMEZONEHERE
#- CLI_ARGS= #optional
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro #SOCKETHERE
- ./duplicati-data/:/config
- ./duplicati-backups/:/backups
- ./duplicati-source/:/source
ports:
- 8200:8200
restart: unless-stopped
#labels:
#caddy.tls: "internal"
#traefik.enable: true
#traefik.http.routers.cozy.entrypoints: web,websecure
#traefik.http.routers.cozy.rule: Host(`DOMAINSUBNAMEHERE`)
#traefik.http.routers.cozy.tls: true
#traefik.http.routers.cozy.tls.certresolver: production
healthcheck:
disable: false #HEALTHCHECKHERE
networks:
vpn:
ipv4_address: IPADDRESSHERE

View File

@ -1,30 +0,0 @@
#
# APP_NAME = name of the application for use in the scripts
# COMPOSE_FILE = default for no app_name in the docker compose file name, app if there is
# HOST NAME = subdomain name e.g test is the name for test.website.com
# DOMAIN = number of the domain from the general config, useful when using multiple domains
# PUBLIC = if true, application will be setup with the reverse proxy and accessible from the internet
# WHITELIST = if true only allow whitelisted ips (see general config), if false allow all
# HEALTHCHECK = if true, the default docker health checks for that container will be enabled
# AUTHELIA = if true, use Authelia authentication, if false turned off.
# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote
# PORTS = port number(s) that the application will be used (comma seperated)
#
CFG_DUPLICATI_APP_NAME=duplicati
CFG_DUPLICATI_BACKUP=true
CFG_DUPLICATI_COMPOSE_FILE=default
CFG_DUPLICATI_HOST_NAME=backup
CFG_DUPLICATI_DOMAIN=1
CFG_DUPLICATI_PUBLIC=false
CFG_DUPLICATI_WHITELIST=false
CFG_DUPLICATI_HEALTHCHECK=true
CFG_DUPLICATI_AUTHELIA=false
CFG_DUPLICATI_HEADSCALE=false
CFG_DUPLICATI_PORTS=8200
# Application metadata
CFG_DUPLICATI_CATEGORY="Cloud Storage & File Sharing"
CFG_DUPLICATI_TITLE="Duplicati"
CFG_DUPLICATI_DESCRIPTION="Backup Service"
CFG_DUPLICATI_LONG_DESCRIPTION="Free backup client that securely stores encrypted, incremental, compressed backups on cloud storage services and remote file servers"
CFG_DUPLICATI_URL="https://github.com/duplicati/duplicati"
CFG_DUPLICATI_ACTIONS="configure|install|restart|shutdown|uninstall"

View File

@ -1,114 +0,0 @@
#!/bin/bash
# Category : Cloud Storage & File Sharing
# Description : Duplicati - Backup Service (c/u/s/r/i):
installDuplicati()
{
local config_variables="$1"
if [[ "$duplicati" == *[cCtTuUsSrRiI]* ]]; then
dockerConfigSetupToContainer silent duplicati;
local app_name=$CFG_DUPLICATI_APP_NAME
initializeAppVariables $app_name;
fi
if [[ "$duplicati" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$duplicati" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$duplicati" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$duplicati" == *[rR]* ]]; then
dockerComposeRestart $app_name;
fi
if [[ "$duplicati" == *[iI]* ]]; then
echo ""
echo "##########################################"
echo "### Install $app_name"
echo "##########################################"
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install folder and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install" "$config_variables";
isSuccessful "Install folders and Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up the $app_name docker-compose.yml file."
echo ""
dockerComposeSetupFile $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start $app_name"
echo ""
dockerComposeUpdateAndStartApp $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Adding $app_name to the Apps Database table."
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
echo " You can now navigate to your new service using one of the options below : "
echo ""
menuShowFinalMessages $app_name;
menu_number=0
#sleep 3s
cd
fi
duplicati=n
}

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><path d="M288 344v80c0 5.5-.7 10.9-2 16h82c27.2 0 48-20.8 48-48v-48z" style="fill:#65b1dd"/><path d="M64 280c-17.6 0-32 14.4-32 32v112c0 17.6 14.4 32 32 32h160c17.6 0 32-14.4 32-32v-80h-64c-35.2 0-64-28.8-64-64z" style="fill:#336697"/><path d="M448 56H192c-17.6 0-32 14.4-32 32v192c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V88c0-17.6-14.4-32-32-32" style="fill:#1d4775"/><path d="M448 24H192c-35.2 0-64 28.8-64 64v160H64c-35.2 0-64 28.8-64 64v112c0 35.2 28.8 64 64 64h160c23.6 0 44.2-12.9 55.3-32H368c35.2 0 64-28.8 64-64v-48h16c35.2 0 64-28.8 64-64V88c0-35.2-28.8-64-64-64M256 424c0 17.6-14.4 32-32 32H64c-17.6 0-32-14.4-32-32V312c0-17.6 14.4-32 32-32h64c0 35.2 28.8 64 64 64h64zm144-32c0 17.6-14.4 32-32 32h-80c0 1 0 1.9-.1 2.9 0-1 .1-1.9.1-2.9v-80h112zm-117.9 58.6c0-.1.1-.2.1-.2 0 .1 0 .1-.1.2m1.6-3.6c0-.1.1-.2.1-.3 0 .1-.1.2-.1.3m.7-1.9.3-.9zm1-3.2c.1-.4.3-.9.4-1.3-.1.4-.2.8-.4 1.3m.7-2.6c.1-.6.3-1.1.4-1.7-.1.6-.2 1.1-.4 1.7m.7-2.9c.1-.7.3-1.5.4-2.2-.1.7-.3 1.5-.4 2.2m.5-3.2.3-2.4zm.4-2.8c.1-.9.2-1.9.2-2.8-.1 1-.1 1.9-.2 2.8M480 280c0 17.6-14.4 32-32 32H192c-17.6 0-32-14.4-32-32V88c0-17.6 14.4-32 32-32h256c17.6 0 32 14.4 32 32z" style="fill:#fff"/></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -1,40 +0,0 @@
services:
fail2ban-service: #LIBREPORTAL|SERVICE_TAG_1|fail2ban-service
image: lscr.io/linuxserver/fail2ban:latest
container_name: fail2ban-service
cap_add:
- NET_ADMIN
- NET_RAW
network_mode: host
environment:
- PUID=1000
- PGID=1000
- TZ:TIMEZONE_DATA #LIBREPORTAL|TIMEZONE_TAG|TIMEZONE_DATA
- VERBOSITY=-vv #optional
volumes:
- SOCKET_DATA #LIBREPORTAL|SOCKET_TAG|SOCKET_DATA
- ./config/:/config
- ./logs/:/var/log:ro
#- ./logs/airsonic/:/remotelogs/airsonic:ro #optional
#- ./logs/apache2/log:/remotelogs/apache2:ro #optional
#- ./logs/authelia/log:/remotelogs/authelia:ro #optional
#- ./logs/emby/log:/remotelogs/emby:ro #optional
#- ./logs/filebrowser/log:/remotelogs/filebrowser:ro #optional
#- ./logs/homeassistant/log:/remotelogs/homeassistant:ro #optional
#- ./logs/lighttpd/log:/remotelogs/lighttpd:ro #optional
#- ./logs/nextcloud/log:/remotelogs/nextcloud:ro #optional
#- ./logs/nginx/log:/remotelogs/nginx:ro #optional
#- ./logs/nzbget/log:/remotelogs/nzbget:ro #optional
#- ./logs/overseerr/log:/remotelogs/overseerr:ro #optional
#- ./logs/prowlarr/log:/remotelogs/prowlarr:ro #optional
#- ./logs/radarr/log:/remotelogs/radarr:ro #optional
#- ./logs/sabnzbd/log:/remotelogs/sabnzbd:ro #optional
#- ./logs/sonarr/log:/remotelogs/sonarr:ro #optional
#- ./logs/unificontroller/log:/remotelogs/unificontroller:ro #optional
#- ./logs/vaultwarden/log:/remotelogs/vaultwarden:ro #optional
restart: unless-stopped
healthcheck:
disable: HEALTHCHECK_DATA #LIBREPORTAL|HEALTHCHECK_TAG|HEALTHCHECK_DATA
labels:
libreportal.category: "CATEGORY_DATA" #LIBREPORTAL|CATEGORY_TAG|CATEGORY_DATA
libreportal.title: "TITLE_DATA" #LIBREPORTAL|TITLE_TAG|TITLE_DATA

View File

@ -1,32 +0,0 @@
#
# =============================================================================
# GENERAL CONFIGURATION
# =============================================================================
# APP_NAME = name of application for use in scripts
# COMPOSE_FILE = default for no app_name in docker compose file name, app if there is
# BACKUP = if true, include this application in backup operations
# HEALTHCHECK = if true, default docker health checks for that container will be enabled
# ABUSEIPDB_APIKEY = API key for AbuseIPDB integration (optional)
#
CFG_FAIL2BAN_APP_NAME=fail2ban
CFG_FAIL2BAN_BACKUP=false
CFG_FAIL2BAN_COMPOSE_FILE=default
CFG_FAIL2BAN_HEALTHCHECK=true
CFG_FAIL2BAN_ABUSEIPDB_APIKEY=
#
# =============================================================================
# METADATA
# =============================================================================
# CATEGORY = application category for grouping
# TITLE = display name for the application
# DESCRIPTION = short description of the application
# LONG_DESCRIPTION = detailed description of the application
# URL = source repository or documentation URL
# ACTIONS = available actions for this application
#
CFG_FAIL2BAN_CATEGORY="Security"
CFG_FAIL2BAN_TITLE="Fail2Ban"
CFG_FAIL2BAN_DESCRIPTION="Intrusion Prevention"
CFG_FAIL2BAN_LONG_DESCRIPTION="Intrusion prevention software framework that protects computer servers from brute-force attacks by monitoring log files and banning malicious IPs"
CFG_FAIL2BAN_URL="https://github.com/fail2ban/fail2ban"
CFG_FAIL2BAN_ACTIONS="configure|install|restart|shutdown|uninstall"

View File

@ -1,158 +0,0 @@
#!/bin/bash
# Category : Security
# Description : Fail2Ban - Intrusion Prevention (c/u/s/r/i):
installFail2ban()
{
local config_variables="$1"
if [[ "$fail2ban" == *[cCtTuUsSrRiI]* ]]; then
dockerConfigSetupToContainer silent fail2ban;
local app_name=$CFG_FAIL2BAN_APP_NAME
initializeAppVariables $app_name;
fi
if [[ "$fail2ban" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$fail2ban" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$fail2ban" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$fail2ban" == *[rR]* ]]; then
dockerComposeRestart $app_name;
fi
if [[ "$fail2ban" == *[iI]* ]]; then
isHeader "Install $app_name"
((menu_number++))
echo ""
echo "---- $menu_number. Checking if $app_name can be installed."
echo ""
dockerCheckAllowedInstall "$app_name" || return 1
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install folder and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install" "$config_variables";
isSuccessful "Install folders and Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up the $app_name docker-compose.yml file."
echo ""
dockerComposeSetupFile $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Setting up AbuseIPDB for fail2ban if api key is provided"
echo ""
if [ -n "$CFG_FAIL2BAN_ABUSEIPDB_APIKEY" ]; then
checkSuccess "API key found, setting up the config file."
local result=$(createFolders "loud" $docker_install_user $containers_dir$app_name/logs)
checkSuccess "Creating logs folder"
local result=$(cd $containers_dir$app_name && createTouch $containers_dir$app_name/logs/auth.log $docker_install_user)
checkSuccess "Creating Auth.log file"
local result=$(createFolders "loud" $docker_install_user $containers_dir$app_name/config/$app_name $containers_dir$app_name/config/$app_name/action.d)
checkSuccess "Creating config and action.d folders"
# AbuseIPDB
local result=$(cd $containers_dir$app_name/config/$app_name/action.d/ && sudo curl -o abuseipdb.conf https://raw.githubusercontent.com/fail2ban/fail2ban/0.11/config/action.d/abuseipdb.conf)
checkSuccess "Downloading abuseipdb.conf from GitHub"
local result=$(sudo sed -i "s/abuseipdb_apikey =/abuseipdb_apikey =$CFG_FAIL2BAN_ABUSEIPDB_APIKEY/g" $containers_dir$app_name/config/$app_name/action.d/abuseipdb.conf)
checkSuccess "Setting up abuseipdb_apikey"
# Jail.local
local result=$(createFolders "loud" $docker_install_user $containers_dir$app_name/config/$app_name/)
checkSuccess "Creating $app_name folder"
local result=$(copyResource "$app_name" "jail.local" "config/$app_name" | sudo tee -a "$logs_dir/$docker_log_file" 2>&1)
checkSuccess "Coping over jail.local from Resources folder"
# Append abuseipdb action only when a key is set.
sudo tee -a "$containers_dir$app_name/config/$app_name/jail.local" >/dev/null <<EOF
[sshd]
action = %(action_)s
%(action_abuseipdb)s[abuseipdb_apikey="$CFG_FAIL2BAN_ABUSEIPDB_APIKEY", abuseipdb_category="5,14,15,18,19,21,22"]
EOF
checkSuccess "Appended AbuseIPDB action to jail.local"
else
isNotice "No API key found, please provide one if you want to use AbuseIPDB"
fi
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start $app_name"
echo ""
dockerComposeUpdateAndStartApp $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Adding $app_name to the Apps Database table."
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
echo " Your $app_name service is now online!"
echo ""
menu_number=0
#sleep 3s
cd
fi
fail2ban=n
}

View File

@ -1,122 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="136" height="136">
<path d="M0 0 C2.00924355 1.68259904 3.7887214 3.43207203 5.56640625 5.35546875 C6.10652344 5.88914062 6.64664063 6.4228125 7.203125 6.97265625 C15.05864655 15.24370917 17.39639933 24.71751157 17.19140625 35.85546875 C17.21074219 36.90605469 17.23007813 37.95664062 17.25 39.0390625 C17.18608337 49.38077277 13.70020296 57.97251258 6.578125 65.51171875 C0.32351399 71.2441001 -8.56814787 78.35546875 -17.43359375 78.35546875 C-18.0801693 81.7099795 -18.57391252 84.93384947 -18.43359375 88.35546875 C-16.22871116 90.81963009 -16.22871116 90.81963009 -13.43359375 92.35546875 C-12.96953125 93.37640625 -12.96953125 93.37640625 -12.49609375 94.41796875 C-11.49420407 96.68091983 -11.49420407 96.68091983 -8.43359375 97.85546875 C-5.08375477 99.53038824 -4.90030727 100.12869901 -3.43359375 103.35546875 C-0.89916969 105.58363861 -0.89916969 105.58363861 1.56640625 107.35546875 C0.96813648 110.96547213 0.69072379 111.26420765 -2.50390625 113.609375 C-3.8474218 114.3928707 -5.19945459 115.16189978 -6.55859375 115.91796875 C-7.50798828 116.49708008 -7.50798828 116.49708008 -8.4765625 117.08789062 C-22.70848105 125.13619139 -39.99031971 123.91431421 -55.78393555 123.91137695 C-59.72738849 123.91793763 -63.66831846 123.97255762 -67.61132812 124.02929688 C-86.78696444 124.15713647 -102.00058362 121.56275698 -118.43359375 111.35546875 C-118.43359375 107.35546875 -118.43359375 107.35546875 -116.55859375 105.41796875 C-115.85734375 104.73734375 -115.15609375 104.05671875 -114.43359375 103.35546875 C-113.72111643 101.70786495 -113.05958992 100.03783346 -112.43359375 98.35546875 C-109.43086524 91.84250831 -109.43086524 91.84250831 -105.74609375 90.04296875 C-104.98296875 89.81609375 -104.21984375 89.58921875 -103.43359375 89.35546875 C-102.93859375 88.36546875 -102.93859375 88.36546875 -102.43359375 87.35546875 C-101.77359375 87.35546875 -101.11359375 87.35546875 -100.43359375 87.35546875 C-101.42359375 77.12546875 -102.41359375 66.89546875 -103.43359375 56.35546875 C-107.88859375 57.34546875 -107.88859375 57.34546875 -112.43359375 58.35546875 C-115.49609375 58.48046875 -115.49609375 58.48046875 -117.43359375 58.35546875 C-117.0068984 52.23950211 -114.89883694 47.09306982 -112.58984375 41.44140625 C-110.37696552 35.53541367 -110.20746651 30.03889784 -110.18359375 23.79296875 C-110.179646 22.90488525 -110.17569824 22.01680176 -110.17163086 21.10180664 C-110.22593019 14.94806854 -110.97435422 9.45809076 -112.875 3.5703125 C-113.43359375 1.35546875 -113.43359375 1.35546875 -112.43359375 -1.64453125 C-111.42820557 -1.50015625 -110.42281738 -1.35578125 -109.38696289 -1.20703125 C-97.21855184 0.52433533 -85.19929185 1.83602431 -72.9128418 2.26318359 C-71.28855716 2.325208 -69.6647539 2.40128217 -68.04174805 2.49072266 C-55.80249844 3.35369561 -55.80249844 3.35369561 -45.20678711 -2.14892578 C-33.81113717 -11.76062226 -11.22757352 -7.58717248 0 0 Z " fill="#050702" transform="translate(118.43359375,9.64453125)"/>
<path d="M0 0 C1.25176025 0.01135986 1.25176025 0.01135986 2.52880859 0.02294922 C13.53403925 0.31576658 23.64451917 4.17427385 31.40234375 12.21484375 C33.00846512 14.21330011 34.35731519 16.24615508 35.6875 18.4375 C36.17476563 19.19289063 36.66203125 19.94828125 37.1640625 20.7265625 C42.35392085 30.09150242 42.13470367 41.50062433 39.98828125 51.7890625 C36.12326577 63.36780087 29.31248776 71.04401033 18.625 76.6875 C8.75542284 81.25146632 -1.9115006 82.29658996 -12.3125 78.6875 C-16.32180355 77.01793665 -19.84537415 75.07911969 -23.3125 72.4375 C-24.50359375 71.54224609 -24.50359375 71.54224609 -25.71875 70.62890625 C-34.53856012 63.17722933 -38.58215463 54.09782695 -39.65625 42.83203125 C-40.13950048 30.98031324 -36.93847003 21.58852605 -29.328125 12.47265625 C-20.97110481 4.03465718 -11.78836202 -0.15036785 0 0 Z " fill="#F40F10" transform="translate(92.3125,5.5625)"/>
<path d="M0 0 C1.32 0.33 2.64 0.66 4 1 C4 3.97 4 6.94 4 10 C6.20816406 9.98259766 6.20816406 9.98259766 8.4609375 9.96484375 C10.43229039 9.95545636 12.40364466 9.94635718 14.375 9.9375 C15.34050781 9.92912109 16.30601563 9.92074219 17.30078125 9.91210938 C21.81993041 9.89694444 26.24676951 9.96914529 30.73828125 10.48828125 C37.04936845 11.19125509 43.36908943 11.22247704 49.7121582 11.24023438 C51.7987463 11.24993605 53.88434469 11.2810634 55.97070312 11.3125 C64.65099678 11.37868835 72.61025403 10.38806551 81 8 C81.33 5.69 81.66 3.38 82 1 C88.67364017 4.22175732 88.67364017 4.22175732 89.8125 6.9375 C90.92415072 9.30706724 90.92415072 9.30706724 94 10.5 C97.34983898 12.17491949 97.53328648 12.77323026 99 16 C101.53442406 18.22816986 101.53442406 18.22816986 104 20 C103.40173023 23.61000338 103.12431754 23.9087389 99.9296875 26.25390625 C98.58617195 27.03740195 97.23413916 27.80643103 95.875 28.5625 C95.24207031 28.94857422 94.60914062 29.33464844 93.95703125 29.73242188 C79.7251127 37.78072264 62.44327404 36.55884546 46.6496582 36.5559082 C42.70620526 36.56246888 38.76527529 36.61708887 34.82226562 36.67382812 C15.64662931 36.80166772 0.43301013 34.20728823 -16 24 C-16 20 -16 20 -14.125 18.0625 C-13.073125 17.0415625 -13.073125 17.0415625 -12 16 C-11.28752268 14.3523962 -10.62599617 12.68236471 -10 11 C-6.99727149 4.48703956 -6.99727149 4.48703956 -3.3125 2.6875 C-2.549375 2.460625 -1.78625 2.23375 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z " fill="#41A744" transform="translate(16,97)"/>
<path d="M0 0 C0 0.99 0 1.98 0 3 C-0.66 3.66 -1.32 4.32 -2 5 C-2.33 5.99 -2.66 6.98 -3 8 C-1.68 8 -0.36 8 1 8 C1 7.34 1 6.68 1 6 C1.99 6.33 2.98 6.66 4 7 C3.34 8.65 2.68 10.3 2 12 C2.66 12.33 3.32 12.66 4 13 C3.67 13.66 3.34 14.32 3 15 C3.66 15 4.32 15 5 15 C4.505 16.485 4.505 16.485 4 18 C4 17.34 4 16.68 4 16 C3.34 16 2.68 16 2 16 C1.56300781 15.24074219 1.12601563 14.48148438 0.67578125 13.69921875 C-2.56020989 8.48693465 -8.59670271 6.07903144 -14.0625 3.625 C-23.67350038 1.5801063 -32.15032539 4.165141 -41 8 C-34.08850081 16.99729516 -34.08850081 16.99729516 -25 23 C-25 20.03 -25 17.06 -25 14 C-21 13 -21 13 -19 14 C-19 13.01 -19 12.02 -19 11 C-17.35 11.33 -15.7 11.66 -14 12 C-13.505 13.485 -13.505 13.485 -13 15 C-11.68 15 -10.36 15 -9 15 C-8.505 19.455 -8.505 19.455 -8 24 C-7.67 23.34 -7.34 22.68 -7 22 C-6.01 22 -5.02 22 -4 22 C-3.62735218 26.84442165 -4.72100176 30.33855417 -6.33203125 34.80859375 C-7.1811342 37.59424729 -7.22234499 40.10951509 -7 43 C-7.99 43.495 -7.99 43.495 -9 44 C-9 43.34 -9 42.68 -9 42 C-10.32 42.66 -11.64 43.32 -13 44 C-12.505 44.45375 -12.01 44.9075 -11.5 45.375 C-10 47 -10 47 -10 49 C-14.52953881 51.2647694 -18.03047769 51.31552523 -23 51 C-24.33333333 50.33333333 -25.66666667 49.66666667 -27 49 C-32.13204474 48.3454768 -32.13204474 48.3454768 -36.81640625 50.05078125 C-38.98949346 51.8259055 -40.73685603 53.47371206 -42 56 C-39.06279492 57.52299523 -36.0831351 58.80100302 -33 60 C-35.39509338 62.89932357 -37.31245243 63.50168276 -41 64 C-40.505 64.99 -40.505 64.99 -40 66 C-49.95027793 61.2890277 -55.4500197 53.3033583 -59.33056641 43.23193359 C-61.97768924 34.40626001 -60.98826461 25.19441541 -57 17 C-56.52691406 15.97003906 -56.05382813 14.94007812 -55.56640625 13.87890625 C-50.09238932 3.81818187 -41.90124738 -2.03277254 -31.125 -5.3125 C-19.64145713 -7.65983742 -10.35089918 -5.17544959 0 0 Z " fill="#F40B0D" transform="translate(115,13)"/>
<path d="M0 0 C0.928125 0.13277344 1.85625 0.26554688 2.8125 0.40234375 C18.47048645 2.46025054 34.2316421 2.64288197 50 3 C49.44570313 3.92941406 48.89140625 4.85882813 48.3203125 5.81640625 C47.58813369 7.06486499 46.85638579 8.31357652 46.125 9.5625 C45.76019531 10.17158203 45.39539062 10.78066406 45.01953125 11.40820312 C40.90478603 18.47808355 39.69470915 24.84521463 39.875 32.9375 C39.88402344 33.71673828 39.89304688 34.49597656 39.90234375 35.29882812 C39.92566309 37.19935447 39.96152414 39.09972008 40 41 C38.70751343 41.15819214 38.70751343 41.15819214 37.38891602 41.31958008 C34.15060813 41.72042644 30.91356709 42.1295928 27.67700195 42.54418945 C26.28385883 42.7209663 24.89030604 42.89454849 23.49633789 43.06469727 C12.94239868 44.35492132 12.94239868 44.35492132 2.76953125 47.35351562 C0.23578361 48.27920047 -2.33332425 48.65811849 -5 49 C-4.81824219 48.46632812 -4.63648438 47.93265625 -4.44921875 47.3828125 C-3.91139678 45.78865302 -3.38514165 44.19056872 -2.8671875 42.58984375 C-2.33587337 41.00308127 -1.76606564 39.42780919 -1.1328125 37.87890625 C3.17482952 26.37134827 1.59514286 11.96357145 0 0 Z " fill="#FBC907" transform="translate(12,14)"/>
<path d="M0 0 C3 5.75 3 5.75 3 8 C0.36 8 -2.28 8 -5 8 C-4.9285376 8.7125293 -4.8570752 9.42505859 -4.78344727 10.15917969 C-4.06728043 17.87751917 -3.87804118 25.50205896 -3.9375 33.25 C-3.94201172 34.38824219 -3.94652344 35.52648437 -3.95117188 36.69921875 C-3.96279786 39.46620409 -3.97913569 42.23307158 -4 45 C-12.67254919 44.39702691 -21.33850205 43.74558682 -30 43 C-32.34430121 29.59767419 -34.2375867 16.64803586 -34 3 C-22.62868856 0.45933823 -11.6368066 -0.16650439 0 0 Z " fill="#F6F6F6" transform="translate(54,60)"/>
<path d="M0 0 C0.33 0 0.66 0 1 0 C1 2.97 1 5.94 1 9 C3.20816406 8.98259766 3.20816406 8.98259766 5.4609375 8.96484375 C7.43229039 8.95545636 9.40364466 8.94635718 11.375 8.9375 C12.34050781 8.92912109 13.30601563 8.92074219 14.30078125 8.91210938 C18.81559069 8.89695901 23.23599851 8.96879896 27.72265625 9.4921875 C34.11278348 10.20580254 40.51060514 10.18604311 46.93188477 10.18530273 C49.06221206 10.1874997 51.19202865 10.20575339 53.32226562 10.22460938 C60.53946267 10.25248475 66.9944421 9.72769742 74 8 C76.23461914 8.44213867 76.23461914 8.44213867 78 9 C75.69596001 12.35451415 73.3549405 15.68104877 71 19 C70.39027344 19.88042969 69.78054687 20.76085937 69.15234375 21.66796875 C68.56582031 22.47878906 67.97929688 23.28960937 67.375 24.125 C66.84648438 24.87007812 66.31796875 25.61515625 65.7734375 26.3828125 C64 28 64 28 61.5390625 28.4296875 C58.5576165 27.9251351 57.31167897 26.90020012 55 25 C40.61869527 18.22740882 22.17152129 22.44201295 7.3984375 25.55859375 C3.29567923 26.31366164 -0.8448198 26.66404926 -5 27 C-3.28571429 9.28571429 -3.28571429 9.28571429 -1 7 C-0.63239269 4.67182036 -0.29758419 2.3381615 0 0 Z " fill="#318133" transform="translate(19,98)"/>
<path d="M0 0 C1.73689776 1.81399244 2.11042263 3.11111099 2.49609375 5.5625 C3.15609375 5.5625 3.81609375 5.5625 4.49609375 5.5625 C9.58421736 13.03568156 9.80621616 21.80782463 8.49609375 30.5625 C7.24862725 34.23583563 5.69226283 37.37021137 3.49609375 40.5625 C-1.09349926 39.81961687 -3.2290007 37.41455145 -6.14453125 33.95703125 C-8.15048193 30.42356066 -7.80602971 27.77350519 -7.1640625 23.859375 C-6.50709021 21.57357791 -5.58165157 19.67470769 -4.50390625 17.5625 C-4.12100163 15.57139599 -3.7778601 13.57149487 -3.50390625 11.5625 C-4.49390625 11.5625 -5.48390625 11.5625 -6.50390625 11.5625 C-6.99890625 13.0475 -6.99890625 13.0475 -7.50390625 14.5625 C-7.83390625 14.5625 -8.16390625 14.5625 -8.50390625 14.5625 C-8.99890625 9.6125 -8.99890625 9.6125 -9.50390625 4.5625 C-10.16390625 4.5625 -10.82390625 4.5625 -11.50390625 4.5625 C-12.49390625 6.0475 -12.49390625 6.0475 -13.50390625 7.5625 C-13.83390625 5.5825 -14.16390625 3.6025 -14.50390625 1.5625 C-15.82390625 1.2325 -17.14390625 0.9025 -18.50390625 0.5625 C-18.50390625 1.5525 -18.50390625 2.5425 -18.50390625 3.5625 C-20.15390625 3.5625 -21.80390625 3.5625 -23.50390625 3.5625 C-23.83390625 6.5325 -24.16390625 9.5025 -24.50390625 12.5625 C-28.27055017 11.62083902 -29.0139908 11.43119921 -31.51953125 8.91015625 C-32.04804687 8.38099609 -32.5765625 7.85183594 -33.12109375 7.30664062 C-33.65992187 6.75169922 -34.19875 6.19675781 -34.75390625 5.625 C-35.30820313 5.07392578 -35.8625 4.52285156 -36.43359375 3.95507812 C-40.50390625 -0.17037408 -40.50390625 -0.17037408 -40.50390625 -2.4375 C-38.9453887 -3.25761312 -37.38188909 -4.06826213 -35.81640625 -4.875 C-34.94628906 -5.32746094 -34.07617188 -5.77992187 -33.1796875 -6.24609375 C-21.16449663 -11.59592326 -10.00759451 -7.41004986 0 0 Z " fill="#FAEFEE" transform="translate(114.50390625,23.4375)"/>
<path d="M0 0 C0.928125 0.13277344 1.85625 0.26554688 2.8125 0.40234375 C18.47048645 2.46025054 34.2316421 2.64288197 50 3 C43.74618834 16.20627803 43.74618834 16.20627803 39.46484375 18.15234375 C37 18.375 37 18.375 33 18 C32.67 21.96 32.34 25.92 32 30 C31.34 30 30.68 30 30 30 C30 31.32 30 32.64 30 34 C29.34 34 28.68 34 28 34 C28.14166357 32.08302063 28.28849584 30.16642277 28.4375 28.25 C28.51871094 27.18265625 28.59992187 26.1153125 28.68359375 25.015625 C29 22 29 22 30 18 C27.36 18.66 24.72 19.32 22 20 C21.80664062 20.81984375 21.61328125 21.6396875 21.4140625 22.484375 C21.15367188 23.56203125 20.89328125 24.6396875 20.625 25.75 C20.24214844 27.35101563 20.24214844 27.35101563 19.8515625 28.984375 C19.12466459 31.55852722 18.2973776 33.67600186 17 36 C16.67 36 16.34 36 16 36 C16.96355353 25.44191344 16.96355353 25.44191344 18 21 C16.989375 21.495 15.97875 21.99 14.9375 22.5 C11.22011812 24.11592314 8.06043343 24.24859797 4 24 C3.67 24.66 3.34 25.32 3 26 C2.95101563 24.99839844 2.90203125 23.99679688 2.8515625 22.96484375 C2.77645921 21.62237241 2.70091474 20.2799257 2.625 18.9375 C2.55539062 17.62652344 2.48578125 16.31554687 2.4140625 14.96484375 C2.00982881 11.09411545 1.09892514 7.72115708 0 4 C0 2.68 0 1.36 0 0 Z " fill="#F7E9A8" transform="translate(12,14)"/>
<path d="M0 0 C0.495 0.99 0.495 0.99 1 2 C-0.30710938 2.03867188 -0.30710938 2.03867188 -1.640625 2.078125 C-15.17436203 2.67487494 -15.17436203 2.67487494 -26.98193359 8.69018555 C-34.88327838 15.27631178 -42.39071901 14.88235249 -52.125 14.5625 C-53.63017496 14.54448076 -55.13538933 14.52949077 -56.640625 14.51757812 C-81.64062946 14.17968527 -81.64062946 14.17968527 -88 11 C-87.67 12.2375 -87.34 13.475 -87 14.75 C-84.12947744 29.54261993 -84.37926543 47.06889815 -93 60 C-90.03 59.34 -87.06 58.68 -84 58 C-84 58.99 -84 59.98 -84 61 C-83.01 61 -82.02 61 -81 61 C-80.67 65.95 -80.34 70.9 -80 76 C-81.485 76.495 -81.485 76.495 -83 77 C-84.87824891 75.12175109 -84.39102397 71.96064724 -84.5625 69.4375 C-84.64628906 68.23996094 -84.73007813 67.04242188 -84.81640625 65.80859375 C-84.87699219 64.88175781 -84.93757813 63.95492187 -85 63 C-85.59167969 63.144375 -86.18335937 63.28875 -86.79296875 63.4375 C-90.92529941 64.40822694 -94.7229762 65.27593702 -99 65 C-98.57330465 58.88403336 -96.46524319 53.73760107 -94.15625 48.0859375 C-91.94337177 42.17994492 -91.77387276 36.68342909 -91.75 30.4375 C-91.74605225 29.5494165 -91.74210449 28.66133301 -91.73803711 27.74633789 C-91.79233644 21.59259979 -92.54076047 16.10262201 -94.44140625 10.21484375 C-95 8 -95 8 -94 5 C-92.99461182 5.144375 -91.98922363 5.28875 -90.95336914 5.4375 C-78.78495809 7.16886658 -66.7656981 8.48055556 -54.47924805 8.90771484 C-52.85496341 8.96973925 -51.23116015 9.04581342 -49.6081543 9.13525391 C-37.37293921 10.00065641 -37.37293921 10.00065641 -26.78540039 4.49560547 C-19.5640236 -1.55364302 -8.79011954 -0.3164443 0 0 Z " fill="#060402" transform="translate(100,3)"/>
<path d="M0 0 C0.66 0.33 1.32 0.66 2 1 C1.278125 1.9075 0.55625 2.815 -0.1875 3.75 C-7.82229355 14.65684793 -9.25855975 24.90502597 -7.62890625 37.9765625 C-5.73242676 47.05350571 0.36412348 54.70442484 7 61 C5.68 61.66 4.36 62.32 3 63 C2.96241577 64.1281311 2.96241577 64.1281311 2.92407227 65.27905273 C2.80849486 68.66539196 2.68559655 72.05142613 2.5625 75.4375 C2.52318359 76.62150391 2.48386719 77.80550781 2.44335938 79.02539062 C2.38051758 80.71245117 2.38051758 80.71245117 2.31640625 82.43359375 C2.27974854 83.47572021 2.24309082 84.51784668 2.20532227 85.59155273 C2 88 2 88 1 89 C-0.49738124 89.0979057 -1.99942892 89.12974864 -3.5 89.125 C-4.3146875 89.12757812 -5.129375 89.13015625 -5.96875 89.1328125 C-8 89 -8 89 -9 88 C-9.24640253 85.49338664 -9.42839051 83.01338261 -9.5625 80.5 C-9.6049585 79.74984619 -9.64741699 78.99969238 -9.69116211 78.22680664 C-10.10851555 70.15097551 -10.0910562 62.08376694 -10 54 C-8.02 54 -6.04 54 -4 54 C-4 53.34 -4 52.68 -4 52 C-6.97 52 -9.94 52 -13 52 C-13 51.67 -13 51.34 -13 51 C-10.36 51 -7.72 51 -5 51 C-5.495 50.05125 -5.99 49.1025 -6.5 48.125 C-8 45 -8 45 -8 43 C-11.79178481 43.31107669 -15.58340436 43.62412662 -19.375 43.9375 C-20.96634766 44.06801758 -20.96634766 44.06801758 -22.58984375 44.20117188 C-29.06739569 44.73765624 -35.53443236 45.33425046 -42 46 C-42 48.97 -42 51.94 -42 55 C-42.33 55 -42.66 55 -43 55 C-43 52.36 -43 49.72 -43 47 C-43.99 47 -44.98 47 -46 47 C-46 45.68 -46 44.36 -46 43 C-38.93405897 40.92178205 -31.93231767 39.61246214 -24.625 38.8125 C-23.86461426 38.72887207 -23.10422852 38.64524414 -22.32080078 38.55908203 C-18.19549111 38.13702065 -14.1529303 37.91430461 -10 38 C-10.15855469 37.29101562 -10.31710938 36.58203125 -10.48046875 35.8515625 C-12.5890747 24.27801105 -10.20562855 14.62644668 -3.8125 4.875 C-1.2994012 1.2994012 -1.2994012 1.2994012 0 0 Z " fill="#412E08" transform="translate(62,17)"/>
<path d="M0 0 C0.66 0 1.32 0 2 0 C2 1.65 2 3.3 2 5 C3.134375 4.9690625 4.26875 4.938125 5.4375 4.90625 C10.07926489 4.90625 14.45305409 5.62528423 19 6.5 C19.77472656 6.64308594 20.54945312 6.78617187 21.34765625 6.93359375 C23.23295579 7.28272329 25.11665939 7.64045316 27 8 C27.11396492 17.96675019 27.11396492 17.96675019 25 23 C18.34552717 27.57495007 6.71493602 26.13200461 -1 26 C-1.11624638 17.26860536 -0.89115181 8.68873018 0 0 Z " fill="#F5F5F5" transform="translate(68,80)"/>
<path d="M0 0 C3.76588717 0.41498081 5.52071108 2.16890906 8.109375 4.81640625 C8.86347656 5.58017578 9.61757812 6.34394531 10.39453125 7.13085938 C11.56048828 8.33452148 11.56048828 8.33452148 12.75 9.5625 C13.93916016 10.77196289 13.93916016 10.77196289 15.15234375 12.00585938 C17.10847046 13.99733778 19.05725719 15.99547721 21 18 C20.67 18.99 20.34 19.98 20 21 C19.401875 20.360625 18.80375 19.72125 18.1875 19.0625 C16.09189663 16.79689611 16.09189663 16.79689611 13 16 C13.33 18.64 13.66 21.28 14 24 C13.01 24 12.02 24 11 24 C11 21.36 11 18.72 11 16 C7.7 16 4.4 16 1 16 C1 16.66 1 17.32 1 18 C3.64 18 6.28 18 9 18 C9 19.98 9 21.96 9 24 C8.34 24 7.68 24 7 24 C6.67 23.34 6.34 22.68 6 22 C5.34 22 4.68 22 4 22 C4.33 23.98 4.66 25.96 5 28 C5.515625 27.505 6.03125 27.01 6.5625 26.5 C9.80680017 24.50350759 12.26217334 24.78435615 16 25 C16.66 26.98 17.32 28.96 18 31 C16.453125 31.061875 16.453125 31.061875 14.875 31.125 C10.45208506 32.12372273 9.16727725 33.37052576 6.359375 36.72265625 C5 38 5 38 2 38 C0.61328125 36.390625 0.61328125 36.390625 -0.6875 34.25 C-1.12449219 33.55390625 -1.56148438 32.8578125 -2.01171875 32.140625 C-3 30 -3 30 -3 26 C-2.34 25.67 -1.68 25.34 -1 25 C-1.226875 24.154375 -1.45375 23.30875 -1.6875 22.4375 C-2.09143364 17.99422997 -0.97302401 15.94604801 1 12 C0.01 12.495 0.01 12.495 -1 13 C-1.4683265 15.58605332 -1.4683265 15.58605332 -1.625 18.5625 C-1.69976562 19.57441406 -1.77453125 20.58632813 -1.8515625 21.62890625 C-1.90054688 22.41136719 -1.94953125 23.19382812 -2 24 C-2.99 24 -3.98 24 -5 24 C-5.48194844 15.45880267 -5.06653464 8.64312534 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z " fill="#EFEAEA" transform="translate(68,28)"/>
<path d="M0 0 C9.71850483 1.70973696 16.91656426 5.08362642 24 12 C24.5259375 12.51304688 25.051875 13.02609375 25.59375 13.5546875 C33.43489137 21.91590457 35.83150603 31.27983928 35.625 42.5 C35.64433594 43.55058594 35.66367188 44.60117187 35.68359375 45.68359375 C35.61967712 56.02530402 32.13379671 64.61704383 25.01171875 72.15625 C18.75710774 77.88863135 9.86544588 85 1 85 C-0.485 93.415 -0.485 93.415 -2 102 C-2.66 101.01 -3.32 100.02 -4 99 C-4.99 99 -5.98 99 -7 99 C-6.34 94.38 -5.68 89.76 -5 85 C-7.289375 84.814375 -7.289375 84.814375 -9.625 84.625 C-16.45473069 84.01059137 -23.22067358 83.01937317 -30 82 C-30 80.35 -30 78.7 -30 77 C-30.66 76.67 -31.32 76.34 -32 76 C-28.4985379 76 -26.7044969 76.93258154 -23.5625 78.4375 C-13.93635216 83.03447672 -3.9220865 83.53224917 6.375 80.375 C11.66287858 78.382364 15.79112432 75.7357468 20 72 C20.86625 71.29875 21.7325 70.5975 22.625 69.875 C31.3933067 59.260734 33.13302987 47.72906093 32.33447266 34.45019531 C31.32571946 27.06052593 27.251602 20.17080813 22 15 C22 14.34 22 13.68 22 13 C21.46375 12.73316406 20.9275 12.46632813 20.375 12.19140625 C18.62091628 11.31147938 16.87161286 10.42200822 15.125 9.52734375 C14.09375 9.00269531 13.0625 8.47804688 12 7.9375 C10.96875 7.41027344 9.9375 6.88304687 8.875 6.33984375 C4.02603277 4.0800669 -0.44553289 3.74333411 -5.75 3.4375 C-6.44738281 3.39431641 -7.14476563 3.35113281 -7.86328125 3.30664062 C-9.57531922 3.20110404 -11.28763561 3.1001009 -13 3 C-13 2.67 -13 2.34 -13 2 C-6.565 1.505 -6.565 1.505 0 1 C0 0.67 0 0.34 0 0 Z " fill="#171B18" transform="translate(100,3)"/>
<path d="M0 0 C1.25176025 0.01135986 1.25176025 0.01135986 2.52880859 0.02294922 C13.53403925 0.31576658 23.64451917 4.17427385 31.40234375 12.21484375 C33.00846512 14.21330011 34.35731519 16.24615508 35.6875 18.4375 C36.17476563 19.19289063 36.66203125 19.94828125 37.1640625 20.7265625 C42.35392085 30.09150242 42.13470367 41.50062433 39.98828125 51.7890625 C36.12326577 63.36780087 29.31248776 71.04401033 18.625 76.6875 C8.75542284 81.25146632 -1.9115006 82.29658996 -12.3125 78.6875 C-16.32180355 77.01793665 -19.84537415 75.07911969 -23.3125 72.4375 C-24.50359375 71.54224609 -24.50359375 71.54224609 -25.71875 70.62890625 C-34.53856012 63.17722933 -38.58215463 54.09782695 -39.65625 42.83203125 C-40.13950048 30.98031324 -36.93847003 21.58852605 -29.328125 12.47265625 C-20.97110481 4.03465718 -11.78836202 -0.15036785 0 0 Z M-28.625 14.8125 C-36.59208858 24.22382177 -38.57388753 33.98108571 -37.66357422 46.11523438 C-36.15413967 56.09975557 -29.77191117 65.48601578 -21.99609375 71.6640625 C-11.58286797 78.54558289 -1.81619479 79.82179168 10.4765625 78.03125 C19.59914458 75.83024607 28.17286887 69.51660429 33.40625 61.7578125 C38.12453377 53.21311567 40.78223033 45.21509143 39.6875 35.4375 C39.56181641 34.30054687 39.56181641 34.30054687 39.43359375 33.140625 C37.81117938 23.50860705 32.66598877 15.32662972 25.1953125 9.16015625 C7.47662903 -3.01108894 -13.94878896 -0.89267048 -28.625 14.8125 Z " fill="#EEC3BC" transform="translate(92.3125,5.5625)"/>
<path d="M0 0 C1.33333333 0.66666667 2.66666667 1.33333333 4 2 C9.41570046 2.27336169 9.41570046 2.27336169 14.625 1.125 C17 1 17 1 18.63671875 2.26953125 C20.16776316 3.79343793 21.60759776 5.34921383 23 7 C21.8687322 10.3938034 21.52469938 10.61089268 18.5 12.15625 C13.94681601 14.28269244 9.96915236 14.60175739 5 14.5 C3.86691406 14.52320312 3.86691406 14.52320312 2.7109375 14.546875 C-4.36905366 14.49821527 -9.21209068 11.85860621 -15 8 C-12.09934782 0.61652173 -7.27387658 -0.69275015 0 0 Z " fill="#FAF5F4" transform="translate(88,61)"/>
<path d="M0 0 C1.65 0.33 3.3 0.66 5 1 C5.33 1.99 5.66 2.98 6 4 C7.32 4 8.64 4 10 4 C10.33 6.97 10.66 9.94 11 13 C11.33 12.34 11.66 11.68 12 11 C12.99 11 13.98 11 15 11 C15.67012098 17.19861907 13.24947173 22.35623611 11 28 C7 28 7 28 4.78125 26.171875 C4.0284375 25.37265625 3.275625 24.5734375 2.5 23.75 C1.7471875 22.96109375 0.994375 22.1721875 0.21875 21.359375 C-0.5134375 20.58078125 -1.245625 19.8021875 -2 19 C-2.74765625 18.3709375 -3.4953125 17.741875 -4.265625 17.09375 C-6.63139025 14.23778114 -6.40875702 12.40141141 -6.25 8.75 C-6.21390625 7.67234375 -6.1778125 6.5946875 -6.140625 5.484375 C-6.09421875 4.66453125 -6.0478125 3.8446875 -6 3 C-2.25 1.875 -2.25 1.875 0 3 C0 2.01 0 1.02 0 0 Z " fill="#0C0808" transform="translate(96,24)"/>
<path d="M0 0 C0 5.28 0 10.56 0 16 C-7.71714751 16.72631977 -15.25011986 17.10197211 -23 17 C-23.33 12.05 -23.66 7.1 -24 2 C-15.87227689 0.72506304 -8.22035947 -0.2491018 0 0 Z " fill="#151616" transform="translate(46,68)"/>
<path d="M0 0 C3 5.75 3 5.75 3 8 C0.36 8 -2.28 8 -5 8 C-5 8.99 -5 9.98 -5 11 C-5.66 11 -6.32 11 -7 11 C-7 15.29 -7 19.58 -7 24 C-7.33 24 -7.66 24 -8 24 C-8 18.72 -8 13.44 -8 8 C-9.84464844 8.2165625 -9.84464844 8.2165625 -11.7265625 8.4375 C-13.35935464 8.62517726 -14.99216829 8.81266737 -16.625 9 C-17.43324219 9.09539062 -18.24148437 9.19078125 -19.07421875 9.2890625 C-23.40973739 9.78253617 -27.62737311 10.11320717 -32 10 C-31.835 10.99 -31.67 11.98 -31.5 13 C-30.91525483 17.02732942 -30.92867976 20.93474623 -31 25 C-31.66 25 -32.32 25 -33 25 C-33.79725902 17.63959083 -34.12886183 10.40239645 -34 3 C-22.62868856 0.45933823 -11.6368066 -0.16650439 0 0 Z " fill="#A7A6BF" transform="translate(54,60)"/>
<path d="M0 0 C3.3 0 6.6 0 10 0 C10 2.64 10 5.28 10 8 C10.99 8 11.98 8 13 8 C12.67 5.36 12.34 2.72 12 0 C15.35594497 0.5786112 16.64000861 1.64000861 19 4 C19.99 4 20.98 4 22 4 C23.6484375 5.35546875 23.6484375 5.35546875 25.375 7.1875 C25.98214844 7.82171875 26.58929688 8.4559375 27.21484375 9.109375 C27.80394531 9.73328125 28.39304687 10.3571875 29 11 C29.97551082 11.98280891 30.95413996 12.96254474 31.9375 13.9375 C32.618125 14.618125 33.29875 15.29875 34 16 C33 19 33 19 31 20 C26.05583721 20.23923368 23.37855294 20.18927647 19 18 C13.82884804 17.33001654 13.82884804 17.33001654 9.1484375 19.12109375 C7.30130092 20.62479785 7.30130092 20.62479785 5 23 C4.34 22.67 3.68 22.34 3 22 C8.75929978 15.13785558 8.75929978 15.13785558 13.9375 14.5625 C14.948125 14.706875 15.95875 14.85125 17 15 C16.34 13.02 15.68 11.04 15 9 C10.94393835 9.46800711 7.53411321 9.87953208 4 12 C2 9 2 9 2.375 6.8125 C2.58125 6.214375 2.7875 5.61625 3 5 C3.99 5.33 4.98 5.66 6 6 C6 6.66 6 7.32 6 8 C6.66 8 7.32 8 8 8 C8 6.02 8 4.04 8 2 C5.36 2 2.72 2 0 2 C0 1.34 0 0.68 0 0 Z " fill="#100908" transform="translate(69,44)"/>
<path d="M0 0 C7.6796875 -0.2265625 7.6796875 -0.2265625 10.5625 1.8125 C12.74303734 6.64760455 12.06745589 10.88983881 11 16 C9.625 19.125 9.625 19.125 8 22 C7.19233895 24.36728239 6.45704972 26.74656112 5.74609375 29.14453125 C5 31 5 31 3 32 C2.34 31.67 1.68 31.34 1 31 C-1.25863626 21.17706305 -0.08837999 10.02621842 0 0 Z " fill="#806547" transform="translate(53,72)"/>
<path d="M0 0 C2 2 2 2 3.1875 5.0625 C5.69610324 11.19892946 10.26030549 16.43370894 15 21 C13.02 21.99 13.02 21.99 11 23 C10.96241577 24.1281311 10.96241577 24.1281311 10.92407227 25.27905273 C10.80849486 28.66539196 10.68559655 32.05142613 10.5625 35.4375 C10.52318359 36.62150391 10.48386719 37.80550781 10.44335938 39.02539062 C10.38051758 40.71245117 10.38051758 40.71245117 10.31640625 42.43359375 C10.27974854 43.47572021 10.24309082 44.51784668 10.20532227 45.59155273 C10 48 10 48 9 49 C7.50261876 49.0979057 6.00057108 49.12974864 4.5 49.125 C3.6853125 49.12757812 2.870625 49.13015625 2.03125 49.1328125 C0 49 0 49 -1 48 C-1.07258946 45.81360547 -1.08373783 43.62499611 -1.0625 41.4375 C-1.05347656 40.23996094 -1.04445313 39.04242188 -1.03515625 37.80859375 C-1.02355469 36.88175781 -1.01195313 35.95492187 -1 35 C-0.67 35 -0.34 35 0 35 C0 38.63 0 42.26 0 46 C0.99 46 1.98 46 3 46 C3.18175781 45.41992188 3.36351563 44.83984375 3.55078125 44.2421875 C4.69977963 40.67145406 5.77276526 37.40203069 7.625 34.125 C9.60481459 29.62542139 10.34153326 24.91510915 10 20 C8.88668198 17.65067365 8.88668198 17.65067365 7 16 C4.9683434 15.31149171 4.9683434 15.31149171 2.8125 15.25 C1.554375 15.1675 0.29625 15.085 -1 15 C-1 20.28 -1 25.56 -1 31 C-1.33 31 -1.66 31 -2 31 C-2 25.39 -2 19.78 -2 14 C-0.02 14 1.96 14 4 14 C4 13.34 4 12.68 4 12 C1.03 12 -1.94 12 -5 12 C-5 11.67 -5 11.34 -5 11 C-2.36 11 0.28 11 3 11 C2.505 10.05125 2.01 9.1025 1.5 8.125 C0 5 0 5 0 3 C-10.89 3.495 -10.89 3.495 -22 4 C-22 3.67 -22 3.34 -22 3 C-14.66236293 1.82597807 -7.41834582 1.90622877 0 2 C0 1.34 0 0.68 0 0 Z " fill="#5D4833" transform="translate(54,57)"/>
<path d="M0 0 C9.71850483 1.70973696 16.91656426 5.08362642 24 12 C24.5259375 12.51304688 25.051875 13.02609375 25.59375 13.5546875 C33.5113239 21.99740661 35.8161752 31.36810118 35.5625 42.6875 C35.57345703 43.76322266 35.58441406 44.83894531 35.59570312 45.94726562 C35.53373921 52.69307001 34.71704076 57.31313002 31 63 C30.01 63.33 29.02 63.66 28 64 C28.20496094 63.39671875 28.40992188 62.7934375 28.62109375 62.171875 C28.89050781 61.37265625 29.15992188 60.5734375 29.4375 59.75 C29.70433594 58.96109375 29.97117188 58.1721875 30.24609375 57.359375 C33.40280742 47.48033326 34.09858752 35.34790232 29.640625 25.81201172 C27.478733 21.70198037 25.30298722 18.25217203 22 15 C22 14.34 22 13.68 22 13 C21.46375 12.73316406 20.9275 12.46632813 20.375 12.19140625 C18.62091628 11.31147938 16.87161286 10.42200822 15.125 9.52734375 C14.09375 9.00269531 13.0625 8.47804688 12 7.9375 C10.96875 7.41027344 9.9375 6.88304687 8.875 6.33984375 C4.02603277 4.0800669 -0.44553289 3.74333411 -5.75 3.4375 C-6.44738281 3.39431641 -7.14476563 3.35113281 -7.86328125 3.30664062 C-9.57531922 3.20110404 -11.28763561 3.1001009 -13 3 C-13 2.67 -13 2.34 -13 2 C-6.565 1.505 -6.565 1.505 0 1 C0 0.67 0 0.34 0 0 Z " fill="#151413" transform="translate(100,3)"/>
<path d="M0 0 C0.33 0 0.66 0 1 0 C1.50508972 3.89519106 2.00317733 7.79124657 2.5 11.6875 C2.64308594 12.79029297 2.78617188 13.89308594 2.93359375 15.02929688 C3.06894531 16.09599609 3.20429688 17.16269531 3.34375 18.26171875 C3.46943359 19.24100342 3.59511719 20.22028809 3.72460938 21.22924805 C4 24 4 24 4 29 C7.96 29 11.92 29 16 29 C13.50105514 31.49894486 11.89013198 32.93559103 8.30078125 33.1953125 C6.82158203 33.16050781 6.82158203 33.16050781 5.3125 33.125 C4.31863281 33.10695312 3.32476562 33.08890625 2.30078125 33.0703125 C1.16189453 33.03550781 1.16189453 33.03550781 0 33 C-0.09087891 32.04287109 -0.09087891 32.04287109 -0.18359375 31.06640625 C-0.26738281 30.24011719 -0.35117187 29.41382812 -0.4375 28.5625 C-0.55931641 27.32693359 -0.55931641 27.32693359 -0.68359375 26.06640625 C-0.78930815 24.01337975 -0.78930815 24.01337975 -2 23 C-2.91696124 17.29446341 -3.12022642 11.77086794 -3 6 C-2.01 5.67 -1.02 5.34 0 5 C0 3.35 0 1.7 0 0 Z " fill="#0B110D" transform="translate(20,74)"/>
<path d="M0 0 C13.75998638 -0.62153013 25.03265289 0.7496544 36 10 C38.38849724 12.47554953 40.21741007 15.06336341 42 18 C42.73089844 19.13308594 42.73089844 19.13308594 43.4765625 20.2890625 C48.68830609 29.69349367 48.4806438 41.21308957 46.23046875 51.52734375 C44.58078105 56.42382716 42.8251031 59.47222634 39 63 C39.92730236 60.14081772 40.86882191 57.31542823 42.0234375 54.5390625 C45.83951437 45.09359564 46.39927841 35.70755468 43 26 C38.13681723 14.70589791 31.70513114 8.77278515 20.515625 3.9453125 C15.88794285 2.20633877 11.6994588 1.75829826 6.75 1.4375 C5.48671875 1.35371094 4.2234375 1.26992187 2.921875 1.18359375 C1.95765625 1.12300781 0.9934375 1.06242188 0 1 C0 0.67 0 0.34 0 0 Z " fill="#F4CBCD" transform="translate(86,6)"/>
<path d="M0 0 C0.969375 0.86625 1.93875 1.7325 2.9375 2.625 C14.55378357 12.53162893 23.55806857 16.1474896 39 15 C49.11930426 13.56243867 57.06353244 7.2107 64 0 C64 3 64 3 61.8125 5.4375 C51.80460855 14.5558011 42.27163226 18.52425835 28.578125 18.3203125 C20.83320568 17.62699003 14.16699698 14.69866436 8 10 C7.113125 9.34 6.22625 8.68 5.3125 8 C3.14455628 6.12502165 1.53031117 4.4162808 0 2 C0 1.34 0 0.68 0 0 Z " fill="#E2C2BE" transform="translate(61,68)"/>
<path d="M0 0 C2.78686181 0.28829605 4.04666941 1.0375948 6.25 2.8125 C8 5 8 5 8 9 C5.36 9.33 2.72 9.66 0 10 C-1.33583899 14.84241633 -2.25328119 18.93437617 -2 24 C-2.99 24 -3.98 24 -5 24 C-5.48194844 15.45880267 -5.06653464 8.64312534 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z " fill="#FDEFEC" transform="translate(68,28)"/>
<path d="M0 0 C0.33 0 0.66 0 1 0 C1.33 4.62 1.66 9.24 2 14 C3.32 14.33 4.64 14.66 6 15 C5.62956667 16.94251626 5.22763135 18.87904293 4.8125 20.8125 C4.59207031 21.89144531 4.37164062 22.97039063 4.14453125 24.08203125 C2.74095141 27.66044128 1.33267631 28.27038318 -2 30 C-3.34689915 32.57099402 -3.34689915 32.57099402 -4 35 C-3.01 34.505 -3.01 34.505 -2 34 C-0.45976004 33.93049459 1.08334988 33.91547643 2.625 33.9375 C3.85089844 33.95103516 3.85089844 33.95103516 5.1015625 33.96484375 C5.72804688 33.97644531 6.35453125 33.98804688 7 34 C7 34.33 7 34.66 7 35 C5.23050388 35.50471197 3.45934777 36.00360685 1.6875 36.5 C0.70136719 36.7784375 -0.28476563 37.056875 -1.30078125 37.34375 C-4 38 -4 38 -7 38 C-6.81824219 37.46632812 -6.63648438 36.93265625 -6.44921875 36.3828125 C-5.91166132 34.78943714 -5.38393621 33.19272825 -4.86328125 31.59375 C-4.33237363 29.99862484 -3.77318202 28.41219001 -3.16796875 26.84375 C-0.08271514 18.2111192 -0.2699921 9.0680105 0 0 Z " fill="#D7B92F" transform="translate(14,25)"/>
<path d="M0 0 C0 0.99 0 1.98 0 3 C-0.99 3.33 -1.98 3.66 -3 4 C-3 2.68 -3 1.36 -3 0 C-3.515625 -0.12375 -4.03125 -0.2475 -4.5625 -0.375 C-6.41427368 -0.84981377 -8.24524819 -1.40661165 -10.0625 -2 C-14.48383088 -3.26785196 -18.86197923 -3.44802579 -23.4375 -3.625 C-24.67790039 -3.68300781 -24.67790039 -3.68300781 -25.94335938 -3.7421875 C-27.96191073 -3.83553092 -29.98092331 -3.91880961 -32 -4 C-32 -4.33 -32 -4.66 -32 -5 C-20.14668396 -7.61975463 -10.75930671 -5.37965335 0 0 Z M-13 3 C-11.35333797 3.1135629 -9.70763918 3.24117381 -8.0625 3.375 C-7.14597656 3.44460937 -6.22945313 3.51421875 -5.28515625 3.5859375 C-4.15400391 3.79089844 -4.15400391 3.79089844 -3 4 C-2.67 4.66 -2.34 5.32 -2 6 C-2.33 6.66 -2.66 7.32 -3 8 C-1.68 8 -0.36 8 1 8 C1 7.34 1 6.68 1 6 C1.99 6.33 2.98 6.66 4 7 C3.34 8.65 2.68 10.3 2 12 C2.66 12.33 3.32 12.66 4 13 C3.67 13.66 3.34 14.32 3 15 C3.66 15 4.32 15 5 15 C4.67 15.99 4.34 16.98 4 18 C4 17.34 4 16.68 4 16 C3.34 16 2.68 16 2 16 C1.56816406 15.24074219 1.13632813 14.48148438 0.69140625 13.69921875 C-1.24778661 10.60457148 -2.89065673 9.5549117 -6.0625 7.8125 C-10.85430464 5.14569536 -10.85430464 5.14569536 -13 3 Z " fill="#EA2326" transform="translate(115,13)"/>
<path d="M0 0 C2 2 2 2 3.1875 5.0625 C5.69610324 11.19892946 10.26030549 16.43370894 15 21 C13.02 21.99 13.02 21.99 11 23 C10.525625 22.030625 10.05125 21.06125 9.5625 20.0625 C8.29806053 17.19522563 8.29806053 17.19522563 7 16 C5.65252916 15.76924918 4.29622435 15.58846937 2.9375 15.4375 C1.638125 15.293125 0.33875 15.14875 -1 15 C-1 20.28 -1 25.56 -1 31 C-1.33 31 -1.66 31 -2 31 C-2 25.39 -2 19.78 -2 14 C-0.02 14 1.96 14 4 14 C4 13.34 4 12.68 4 12 C1.03 12 -1.94 12 -5 12 C-5 11.67 -5 11.34 -5 11 C-2.36 11 0.28 11 3 11 C2.505 10.05125 2.01 9.1025 1.5 8.125 C0 5 0 5 0 3 C-10.89 3.495 -10.89 3.495 -22 4 C-22 3.67 -22 3.34 -22 3 C-14.66236293 1.82597807 -7.41834582 1.90622877 0 2 C0 1.34 0 0.68 0 0 Z " fill="#382D23" transform="translate(54,57)"/>
<path d="M0 0 C0.680625 0.680625 1.36125 1.36125 2.0625 2.0625 C2.51496094 2.51109375 2.96742187 2.9596875 3.43359375 3.421875 C4.56623557 4.56299045 5.68134455 5.72159904 6.78515625 6.890625 C7.39230469 7.52484375 7.99945313 8.1590625 8.625 8.8125 C9.19476563 9.41707031 9.76453125 10.02164063 10.3515625 10.64453125 C12.03050932 12.31756483 12.03050932 12.31756483 15 12 C15.33 13.32 15.66 14.64 16 16 C15.34 16.33 14.68 16.66 14 17 C14 16.34 14 15.68 14 15 C12.02 15.99 12.02 15.99 10 17 C10.495 17.45375 10.99 17.9075 11.5 18.375 C13 20 13 20 13 22 C12.01 21.67 11.02 21.34 10 21 C9.690625 20.195625 9.38125 19.39125 9.0625 18.5625 C7.75647741 15.41268082 6.95258091 15.45235061 4 14 C2.078125 12.2734375 2.078125 12.2734375 0.25 10.375 C-0.36359375 9.74335937 -0.9771875 9.11171875 -1.609375 8.4609375 C-2.29773438 7.73777344 -2.29773438 7.73777344 -3 7 C0 7 0 7 1.6875 8.5 C2.120625 8.995 2.55375 9.49 3 10 C3.33 9.01 3.66 8.02 4 7 C3.34 7 2.68 7 2 7 C1.34 4.69 0.68 2.38 0 0 Z " fill="#CF1013" transform="translate(92,40)"/>
<path d="M0 0 C4.56030824 3.80475422 8.85089392 7.74969621 13 12 C12.67 12.99 12.34 13.98 12 15 C11.401875 14.360625 10.80375 13.72125 10.1875 13.0625 C8.09189663 10.79689611 8.09189663 10.79689611 5 10 C5.33 12.64 5.66 15.28 6 18 C5.01 18 4.02 18 3 18 C3 15.36 3 12.72 3 10 C2.34 10 1.68 10 1 10 C0.67 9.01 0.34 8.02 0 7 C-1.87387216 6.19787372 -1.87387216 6.19787372 -4.0625 5.8125 C-4.79597656 5.65394531 -5.52945313 5.49539062 -6.28515625 5.33203125 C-6.85105469 5.22246094 -7.41695313 5.11289062 -8 5 C-4.91190305 3.23537317 -3.76687864 3 0 3 C0 2.01 0 1.02 0 0 Z " fill="#EFD7D7" transform="translate(76,34)"/>
<path d="M0 0 C0.99 0.33 1.98 0.66 3 1 C2.72285156 1.57105469 2.44570312 2.14210938 2.16015625 2.73046875 C-0.99736794 9.79837876 -1.75871045 16.30286333 -2 24 C-1.01 24 -0.02 24 1 24 C0.690625 22.700625 0.690625 22.700625 0.375 21.375 C-0.04047622 17.63571398 0.60333724 15.45057859 2 12 C2.99 12 3.98 12 5 12 C4.77183594 12.60328125 4.54367188 13.2065625 4.30859375 13.828125 C4.02113281 14.62734375 3.73367187 15.4265625 3.4375 16.25 C3.14746094 17.03890625 2.85742188 17.8278125 2.55859375 18.640625 C1.95477163 21.19103452 2.1526068 22.55322229 3 25 C2.01 25.33 1.02 25.66 0 26 C0.33 27.98 0.66 29.96 1 32 C0.01 31.67 -0.98 31.34 -2 31 C-5.20835146 23.73899406 -5.26834993 14.41716651 -3.1015625 6.87109375 C-2.15819632 4.51936885 -1.16173059 2.25085301 0 0 Z " fill="#E51817" transform="translate(65,28)"/>
<path d="M0 0 C-3.49822564 10.09238098 -12.94926618 15.50104033 -22.0859375 20.03515625 C-24.89215468 21.30801847 -26.88897453 22 -30 22 C-29.505 20.515 -29.505 20.515 -29 19 C-26.99609375 18.04296875 -26.99609375 18.04296875 -24.4375 17.1875 C-15.82822035 13.96516962 -10.05207889 8.28362625 -3.8125 1.6875 C-2 0 -2 0 0 0 Z " fill="#171513" transform="translate(131,66)"/>
<path d="M0 0 C1.65 0.33 3.3 0.66 5 1 C5 6.61 5 12.22 5 18 C-1 13 -1 13 -1.62109375 9.921875 C-1.56050781 8.87515625 -1.49992187 7.8284375 -1.4375 6.75 C-1.39496094 5.69296875 -1.35242188 4.6359375 -1.30859375 3.546875 C-1 1 -1 1 0 0 Z " fill="#110F11" transform="translate(91,26)"/>
<path d="M0 0 C0.495 0.99 0.495 0.99 1 2 C-0.30710937 2.03867188 -0.30710937 2.03867188 -1.640625 2.078125 C-14.1700538 2.67476447 -23.94656027 5.38375778 -34 13 C-33.44300536 8.437222 -33.44300536 8.437222 -31.50390625 6.5234375 C-21.12702364 0.3849999 -11.87743623 -0.4275877 0 0 Z " fill="#181312" transform="translate(100,3)"/>
<path d="M0 0 C0.66 0.33 1.32 0.66 2 1 C0.9171875 2.36125 0.9171875 2.36125 -0.1875 3.75 C-8.15794942 15.22744716 -8.63588958 25.49087924 -8 39 C-10.86177057 40.43088528 -12.93375773 39.59991697 -16 39 C-16 38.67 -16 38.34 -16 38 C-14.02 38 -12.04 38 -10 38 C-10.15855469 37.29101562 -10.31710938 36.58203125 -10.48046875 35.8515625 C-12.5890747 24.27801105 -10.20562855 14.62644668 -3.8125 4.875 C-1.2994012 1.2994012 -1.2994012 1.2994012 0 0 Z " fill="#4B3A0B" transform="translate(62,17)"/>
<path d="M0 0 C0.66 0 1.32 0 2 0 C2 5.61 2 11.22 2 17 C2.99 16.67 3.98 16.34 5 16 C5.66 16.66 6.32 17.32 7 18 C6.34 18.33 5.68 18.66 5 19 C5 20.98 5 22.96 5 25 C-0.67327847 21.39176507 -0.67327847 21.39176507 -1.51123047 17.82226562 C-1.62629369 15.27553289 -1.57298385 12.79556973 -1.4375 10.25 C-1.41880859 9.37472656 -1.40011719 8.49945313 -1.38085938 7.59765625 C-1.19728277 1.19728277 -1.19728277 1.19728277 0 0 Z " fill="#060504" transform="translate(97,25)"/>
<path d="M0 0 C6.99246571 1.230156 14.11876173 2.75860695 19 8.25 C19.33 8.8275 19.66 9.405 20 10 C15.6671643 9.44092443 12.09322641 7.78051574 8.18359375 5.9375 C3.62898796 3.98203419 -0.84000669 3.72059035 -5.75 3.4375 C-6.44738281 3.39431641 -7.14476563 3.35113281 -7.86328125 3.30664062 C-9.57531922 3.20110404 -11.28763561 3.1001009 -13 3 C-13 2.67 -13 2.34 -13 2 C-6.565 1.505 -6.565 1.505 0 1 C0 0.67 0 0.34 0 0 Z " fill="#302A2B" transform="translate(100,3)"/>
<path d="M0 0 C0.99 0.33 1.98 0.66 3 1 C2.34 9.91 1.68 18.82 1 28 C0.67 28 0.34 28 0 28 C-0.09087891 27.04287109 -0.09087891 27.04287109 -0.18359375 26.06640625 C-0.26738281 25.24011719 -0.35117188 24.41382812 -0.4375 23.5625 C-0.51871094 22.73878906 -0.59992188 21.91507813 -0.68359375 21.06640625 C-0.78930815 19.01337975 -0.78930815 19.01337975 -2 18 C-1.93516246 15.3387139 -1.8084675 12.71589873 -1.625 10.0625 C-1.58117187 9.32064453 -1.53734375 8.57878906 -1.4921875 7.81445312 C-1.1295539 2.25910779 -1.1295539 2.25910779 0 0 Z " fill="#070202" transform="translate(66,78)"/>
<path d="M0 0 C0.66 0 1.32 0 2 0 C2.33 1.65 2.66 3.3 3 5 C1.73742767 6.17560179 0.46462916 7.34022865 -0.8125 8.5 C-1.52019531 9.1496875 -2.22789063 9.799375 -2.95703125 10.46875 C-5 12 -5 12 -8 12 C-8.33 10.35 -8.66 8.7 -9 7 C-8.01 7 -7.02 7 -6 7 C-5.731875 6.360625 -5.46375 5.72125 -5.1875 5.0625 C-4 3 -4 3 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z " fill="#F7F3F1" transform="translate(78,54)"/>
<path d="M0 0 C2.31 0 4.62 0 7 0 C7 2.31 7 4.62 7 7 C6.34 7 5.68 7 5 7 C4.86722656 7.62648438 4.73445313 8.25296875 4.59765625 8.8984375 C4.33275391 10.12433594 4.33275391 10.12433594 4.0625 11.375 C3.88847656 12.18710937 3.71445312 12.99921875 3.53515625 13.8359375 C3 16 3 16 2 18 C1.34 18 0.68 18 0 18 C0.59015185 12.49191603 1.56663769 7.35121931 3 2 C2.01 1.34 1.02 0.68 0 0 Z " fill="#FDDC52" transform="translate(16,38)"/>
<path d="M0 0 C-3.07692746 2.6815279 -5.19734663 3.42087807 -9.25 3.6875 C-10.14203125 3.75324219 -11.0340625 3.81898437 -11.953125 3.88671875 C-12.62859375 3.92410156 -13.3040625 3.96148437 -14 4 C-14 6.97 -14 9.94 -14 13 C-14.33 13 -14.66 13 -15 13 C-15 10.36 -15 7.72 -15 5 C-15.99 5 -16.98 5 -18 5 C-18 3.68 -18 2.36 -18 1 C-11.93303301 0.22959149 -6.11485027 -0.09706112 0 0 Z " fill="#171419" transform="translate(34,59)"/>
<path d="M0 0 C0.969375 0.86625 1.93875 1.7325 2.9375 2.625 C11.47379142 9.90494207 19.751818 14.82831438 31 16 C31 16.33 31 16.66 31 17 C21.59745963 18.12331234 14.68323441 14.91908699 7.01171875 9.62890625 C4.23805783 7.41961306 1.87189718 5.01583435 0 2 C0 1.34 0 0.68 0 0 Z " fill="#EBC8C4" transform="translate(61,68)"/>
<path d="M0 0 C3.3 0 6.6 0 10 0 C10 2.64 10 5.28 10 8 C7.03 7.67 4.06 7.34 1 7 C1.020625 6.21625 1.04125 5.4325 1.0625 4.625 C1.18684063 2.01885039 1.18684063 2.01885039 0 0 Z " fill="#353641" transform="translate(36,68)"/>
<path d="M0 0 C0.33 0 0.66 0 1 0 C1.33 3.63 1.66 7.26 2 11 C5.96 11 9.92 11 14 11 C11.33684806 13.66315194 9.34655932 13.94426493 5.640625 14.09765625 C4.85171875 14.08605469 4.0628125 14.07445313 3.25 14.0625 C2.45078125 14.05347656 1.6515625 14.04445313 0.828125 14.03515625 C0.22484375 14.02355469 -0.3784375 14.01195313 -1 14 C-1.042721 12.33388095 -1.04063832 10.66617115 -1 9 C-0.67 8.67 -0.34 8.34 0 8 C0.07148199 6.64756083 0.08399454 5.29165633 0.0625 3.9375 C0.041875 2.638125 0.02125 1.33875 0 0 Z " fill="#252927" transform="translate(22,92)"/>
<path d="M0 0 C0 1.65 0 3.3 0 5 C-6.0381926 7.13852654 -11.18954814 7.78220087 -17.23828125 4.953125 C-17.81964844 4.63859375 -18.40101562 4.3240625 -19 4 C-18.11957031 3.87882812 -17.23914063 3.75765625 -16.33203125 3.6328125 C-15.17058594 3.46523437 -14.00914063 3.29765625 -12.8125 3.125 C-11.66394531 2.96257812 -10.51539062 2.80015625 -9.33203125 2.6328125 C-6.35393503 2.06721861 -2.92636928 0 0 0 Z " fill="#0A130A" transform="translate(97,101)"/>
<path d="M0 0 C0.33 0 0.66 0 1 0 C1.32613618 4.67461851 0.70582788 7.16674383 -2 11 C-1.34 11.33 -0.68 11.66 0 12 C-5.28 12.66 -10.56 13.32 -16 14 C-15 12 -15 12 -13.375 11.375 C-10.2339425 10.87904355 -7.17398169 10.93896189 -4 11 C-4 8.69 -4 6.38 -4 4 C-2.68 4 -1.36 4 0 4 C0 2.68 0 1.36 0 0 Z " fill="#F2C726" transform="translate(42,44)"/>
<path d="M0 0 C1.32 0 2.64 0 4 0 C4.06058594 0.62648438 4.12117188 1.25296875 4.18359375 1.8984375 C4.26738281 2.71570313 4.35117187 3.53296875 4.4375 4.375 C4.55931641 5.59316406 4.55931641 5.59316406 4.68359375 6.8359375 C4.89090114 9.04272805 4.89090114 9.04272805 6 11 C5.01 11 4.02 11 3 11 C3 11.66 3 12.32 3 13 C2.01 13 1.02 13 0 13 C0 8.71 0 4.42 0 0 Z " fill="#FEECBB" transform="translate(20,24)"/>
<path d="M0 0 C-0.99 0 -1.98 0 -3 0 C-3.33 3.96 -3.66 7.92 -4 12 C-4.66 12 -5.32 12 -6 12 C-6 13.32 -6 14.64 -6 16 C-6.66 16 -7.32 16 -8 16 C-7.85833643 14.08302063 -7.71150416 12.16642277 -7.5625 10.25 C-7.48128906 9.18265625 -7.40007813 8.1153125 -7.31640625 7.015625 C-7.05745157 4.54756308 -6.82426229 2.3363196 -6 0 C-3.50907189 -1.24546405 -2.58919267 -0.7767578 0 0 Z " fill="#FEDF66" transform="translate(48,32)"/>
<path d="M0 0 C2.65517241 3.98275862 2.65517241 3.98275862 3 7 C2.34641919 9.00431449 1.67863055 11.0040278 1 13 C0.83201531 16.25044709 0.83201531 16.25044709 1 19 C0.01 19 -0.98 19 -2 19 C-2.05451714 16.95863605 -2.09302485 14.91684144 -2.125 12.875 C-2.14820313 11.73804688 -2.17140625 10.60109375 -2.1953125 9.4296875 C-1.99672109 5.94242233 -1.2524801 3.2446138 0 0 Z " fill="#F8E2DE" transform="translate(65,33)"/>
<path d="M0 0 C0.89203125 0.42152344 1.7840625 0.84304687 2.703125 1.27734375 C3.87359375 1.82519531 5.0440625 2.37304688 6.25 2.9375 C7.41015625 3.48277344 8.5703125 4.02804688 9.765625 4.58984375 C12.23044777 5.66448266 14.38065227 6.48780081 17 7 C17 7.66 17 8.32 17 9 C11.72 8.34 6.44 7.68 1 7 C1 5.35 1 3.7 1 2 C0.34 1.67 -0.32 1.34 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z " fill="#26231E" transform="translate(69,78)"/>
<path d="M0 0 C2.05422055 2.05422055 2.68137592 3.33009024 3.6875 6 C3.95949219 6.70125 4.23148438 7.4025 4.51171875 8.125 C5 10 5 10 4 12 C1.03 12 -1.94 12 -5 12 C-5 11.67 -5 11.34 -5 11 C-2.36 11 0.28 11 3 11 C2.505 10.05125 2.01 9.1025 1.5 8.125 C0 5 0 5 0 3 C-10.89 3.495 -10.89 3.495 -22 4 C-22 3.67 -22 3.34 -22 3 C-14.66236293 1.82597807 -7.41834582 1.90622877 0 2 C0 1.34 0 0.68 0 0 Z " fill="#484556" transform="translate(54,57)"/>
<path d="M0 0 C0.66 1.98 1.32 3.96 2 6 C0.35 6 -1.3 6 -3 6 C-3.33 4.35 -3.66 2.7 -4 1 C-4.66 1 -5.32 1 -6 1 C-6.33 1.99 -6.66 2.98 -7 4 C-8.98 4.33 -10.96 4.66 -13 5 C-12.34 3.68 -11.68 2.36 -11 1 C-11 1.66 -11 2.32 -11 3 C-10.484375 2.505 -9.96875 2.01 -9.4375 1.5 C-6.19319983 -0.49649241 -3.73782666 -0.21564385 0 0 Z " fill="#CCCCCC" transform="translate(84,53)"/>
<path d="M0 0 C3.24577225 1.57370776 5.31244985 3.91438527 7.0625 7 C7.73991811 9.73421656 7.91584226 12.16461694 8.0625 15 C7.0725 15 6.0825 15 5.0625 15 C5.0625 12.36 5.0625 9.72 5.0625 7 C4.4025 7 3.7425 7 3.0625 7 C2.7325 6.01 2.4025 5.02 2.0625 4 C0.18862784 3.19787372 0.18862784 3.19787372 -2 2.8125 C-2.73347656 2.65394531 -3.46695313 2.49539062 -4.22265625 2.33203125 C-4.78855469 2.22246094 -5.35445313 2.11289062 -5.9375 2 C-3.87474414 0.74761251 -2.43703105 0 0 0 Z " fill="#939491" transform="translate(73.9375,37)"/>
<path d="M0 0 C0.33 0 0.66 0 1 0 C1.08115993 3.06303578 1.14057409 6.12390815 1.1875 9.1875 C1.21263672 10.05181641 1.23777344 10.91613281 1.26367188 11.80664062 C1.31937772 16.65304882 1.31364514 20.14566685 -2 24 C-2.99 24.33 -3.98 24.66 -5 25 C-4.54625 23.845 -4.0925 22.69 -3.625 21.5 C-1.272814 14.55492001 -0.75671778 7.2555881 0 0 Z " fill="#373637" transform="translate(133,42)"/>
<path d="M0 0 C1.98 0 3.96 0 6 0 C6 1.32 6 2.64 6 4 C7.32 4.66 8.64 5.32 10 6 C6.37 6 2.74 6 -1 6 C-0.67 4.02 -0.34 2.04 0 0 Z " fill="#303128" transform="translate(24,79)"/>
<path d="M0 0 C2.97 0.495 2.97 0.495 6 1 C4.68 1.33 3.36 1.66 2 2 C2 3.65 2 5.3 2 7 C4.64 7.33 7.28 7.66 10 8 C10 9.65 10 11.3 10 13 C9.34 12.01 8.68 11.02 8 10 C4.93443402 9.26656572 4.93443402 9.26656572 2 9 C1.67 9.99 1.34 10.98 1 12 C0.01751476 7.9472484 -0.08159574 4.16138263 0 0 Z " fill="#1C1E17" transform="translate(22,70)"/>
<path d="M0 0 C2.475 0.495 2.475 0.495 5 1 C5.89316269 6.93609666 5.97040422 12.06975197 5 18 C4.34 18 3.68 18 3 18 C3 12.39 3 6.78 3 1 C2.01 1.33 1.02 1.66 0 2 C0 1.34 0 0.68 0 0 Z " fill="#565655" transform="translate(96,24)"/>
<path d="M0 0 C0.99 0.33 1.98 0.66 3 1 C3 4.3 3 7.6 3 11 C1.68 11 0.36 11 -1 11 C-1.02688151 9.35425434 -1.04634123 7.70838587 -1.0625 6.0625 C-1.07410156 5.14597656 -1.08570312 4.22945312 -1.09765625 3.28515625 C-1 1 -1 1 0 0 Z " fill="#FEEEBE" transform="translate(31,23)"/>
<path d="M0 0 C0.66 0 1.32 0 2 0 C2 5.61 2 11.22 2 17 C0.02 15.35 -1.96 13.7 -4 12 C-3.67 11.01 -3.34 10.02 -3 9 C-2.01 9.99 -1.02 10.98 0 12 C0 8.04 0 4.08 0 0 Z " fill="#5C4549" transform="translate(94,27)"/>
<path d="M0 0 C-0.33 3.3 -0.66 6.6 -1 10 C-1.33 10 -1.66 10 -2 10 C-2 7.36 -2 4.72 -2 2 C-3.1446875 3.2065625 -3.1446875 3.2065625 -4.3125 4.4375 C-7 7 -7 7 -10 8 C-9.67 6.02 -9.34 4.04 -9 2 C-2.25 0 -2.25 0 0 0 Z " fill="#F9CE1E" transform="translate(42,32)"/>
<path d="M0 0 C0.66 0.33 1.32 0.66 2 1 C1.278125 1.94875 0.55625 2.8975 -0.1875 3.875 C-2.93278345 7.68096115 -4.9163506 11.71213061 -6.88671875 15.9609375 C-8 18 -8 18 -10 19 C-8.11362269 12.00054734 -5.21770177 5.21770177 0 0 Z " fill="#4D4428" transform="translate(62,17)"/>
<path d="M0 0 C0.66 0.33 1.32 0.66 2 1 C0.6875 3 0.6875 3 -1 5 C-1.99 5 -2.98 5 -4 5 C-4.1546875 5.9590625 -4.1546875 5.9590625 -4.3125 6.9375 C-4.539375 7.618125 -4.76625 8.29875 -5 9 C-5.99 9.33 -6.98 9.66 -8 10 C-9.22445284 11.62948064 -9.22445284 11.62948064 -10.1875 13.5625 C-10.785625 14.696875 -11.38375 15.83125 -12 17 C-12.66 16.67 -13.32 16.34 -14 16 C-10.57718637 9.29128528 -6.29955212 4.19970141 0 0 Z " fill="#E92025" transform="translate(73,12)"/>
<path d="M0 0 C0.99 0 1.98 0 3 0 C4.4606285 2.64738916 5 3.89448334 5 7 C5.66 7 6.32 7 7 7 C6.67 8.32 6.34 9.64 6 11 C0.24303305 6.71289695 0.24303305 6.71289695 -0.9375 3.25 C-0.958125 2.5075 -0.97875 1.765 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z " fill="#F50308" transform="translate(89,40)"/>
<path d="M0 0 C0.70189453 0.00451172 1.40378906 0.00902344 2.12695312 0.01367188 C3.85550538 0.02543073 5.58401365 0.04336546 7.3125 0.0625 C7.6425 0.7225 7.9725 1.3825 8.3125 2.0625 C1.7125 2.3925 -4.8875 2.7225 -11.6875 3.0625 C-9.53214726 -1.24820549 -4.20651089 -0.05105942 0 0 Z " fill="#0A0909" transform="translate(92.6875,2.9375)"/>
<path d="M0 0 C2.64 0 5.28 0 8 0 C7.67 0.99 7.34 1.98 7 3 C6.360625 3.309375 5.72125 3.61875 5.0625 3.9375 C2.54531085 5.2342338 2.03113052 6.4221737 1 9 C0.67 9 0.34 9 0 9 C0 6.03 0 3.06 0 0 Z " fill="#897251" transform="translate(53,72)"/>
<path d="M0 0 C3.79588866 0.54226981 5.47211993 2.20127563 8 5 C1.375 6.125 1.375 6.125 -2 5 C-1.34 3.35 -0.68 1.7 0 0 Z " fill="#F80301" transform="translate(69,69)"/>
<path d="M0 0 C1.0326802 2.78823655 1.04509293 3.8677274 0.0625 6.75 C-0.288125 7.4925 -0.63875 8.235 -1 9 C-0.34 8.67 0.32 8.34 1 8 C2.54023996 7.93049459 4.08334988 7.91547643 5.625 7.9375 C6.85089844 7.95103516 6.85089844 7.95103516 8.1015625 7.96484375 C9.04128906 7.98224609 9.04128906 7.98224609 10 8 C10 8.33 10 8.66 10 9 C8.23050388 9.50471197 6.45934777 10.00360685 4.6875 10.5 C3.70136719 10.7784375 2.71523437 11.056875 1.69921875 11.34375 C-1 12 -1 12 -4 12 C-2.66666667 8 -1.33333333 4 0 0 Z " fill="#C2A422" transform="translate(11,51)"/>
<path d="M0 0 C0 0.99 0 1.98 0 3 C-4.95 3 -9.9 3 -15 3 C-14.67 2.34 -14.34 1.68 -14 1 C-9.31604754 -0.14242743 -4.78644729 -0.08252495 0 0 Z " fill="#080707" transform="translate(54,56)"/>
<path d="M0 0 C1.32970606 2.65941212 0.78286673 3.98811384 0.1875 6.875 C-0.06966797 8.17050781 -0.06966797 8.17050781 -0.33203125 9.4921875 C-0.9687727 11.88276065 -1.80949471 13.8400115 -3 16 C-3.33 16 -3.66 16 -4 16 C-2.92039018 4.17023285 -2.92039018 4.17023285 -2 1 C-1.34 0.67 -0.68 0.34 0 0 Z " fill="#FDE363" transform="translate(32,34)"/>
<path d="M0 0 C-0.33 3.3 -0.66 6.6 -1 10 C-1.66 9.67 -2.32 9.34 -3 9 C-3 7.35 -3 5.7 -3 4 C-3.99 4 -4.98 4 -6 4 C-6.33 4.66 -6.66 5.32 -7 6 C-6.67 4.35 -6.34 2.7 -6 1 C-3.92446352 0.4465236 -2.15634036 0 0 0 Z " fill="#F8CC24" transform="translate(30,35)"/>
<path d="M0 0 C-2.66666667 1.33333333 -5.33333333 2.66666667 -8 4 C-8.68578125 4.37382813 -9.3715625 4.74765625 -10.078125 5.1328125 C-12 6 -12 6 -15 6 C-14 3 -14 3 -11.85546875 1.796875 C-10.97503906 1.45140625 -10.09460938 1.1059375 -9.1875 0.75 C-8.31480469 0.39421875 -7.44210938 0.0384375 -6.54296875 -0.328125 C-3.86358764 -1.03604136 -2.56787877 -0.9337741 0 0 Z " fill="#090B0A" transform="translate(116,82)"/>
<path d="M0 0 C0.97533063 2.63339271 1.019574 3.92348347 0.3125 6.6875 C-1 9 -1 9 -3.0625 9.875 C-3.701875 9.91625 -4.34125 9.9575 -5 10 C-6 9 -6 9 -6.0625 6.4375 C-6.041875 5.633125 -6.02125 4.82875 -6 4 C-4.68 4.33 -3.36 4.66 -2 5 C-1.34 3.35 -0.68 1.7 0 0 Z " fill="#FBCE1E" transform="translate(31,44)"/>
<path d="M0 0 C0.66 0.33 1.32 0.66 2 1 C1.77183594 1.60328125 1.54367188 2.2065625 1.30859375 2.828125 C1.02113281 3.62734375 0.73367187 4.4265625 0.4375 5.25 C0.14746094 6.03890625 -0.14257812 6.8278125 -0.44140625 7.640625 C-1.04522837 10.19103452 -0.8473932 11.55322229 0 14 C-0.99 14.33 -1.98 14.66 -3 15 C-3.73323796 17.01508358 -3.73323796 17.01508358 -4 19 C-4 17.02 -4 15.04 -4 13 C-3.34 13 -2.68 13 -2 13 C-2.309375 11.700625 -2.309375 11.700625 -2.625 10.375 C-3.04278569 6.61492881 -2.44740241 4.45768353 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z " fill="#523F40" transform="translate(68,39)"/>
<path d="M0 0 C1.65 0 3.3 0 5 0 C4.67 1.65 4.34 3.3 4 5 C4.99 5.33 5.98 5.66 7 6 C4.69 6 2.38 6 0 6 C-0.33 6.66 -0.66 7.32 -1 8 C-1.125 2.25 -1.125 2.25 0 0 Z " fill="#FDEBA9" transform="translate(16,32)"/>
<path d="M0 0 C1.30062431 3.81516464 0.89369853 7.27561763 0.5625 11.25 C0.46066406 12.51328125 0.35882813 13.7765625 0.25390625 15.078125 C0.17011719 16.04234375 0.08632812 17.0065625 0 18 C-0.33 18 -0.66 18 -1 18 C-1.09087891 17.04287109 -1.09087891 17.04287109 -1.18359375 16.06640625 C-1.26738281 15.24011719 -1.35117188 14.41382812 -1.4375 13.5625 C-1.51871094 12.73878906 -1.59992188 11.91507813 -1.68359375 11.06640625 C-1.78930815 9.01337975 -1.78930815 9.01337975 -3 8 C-3.04080783 6.00041636 -3.04254356 3.99954746 -3 2 C-2.34 2 -1.68 2 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z " fill="#191A16" transform="translate(67,88)"/>
<path d="M0 0 C3.3 0 6.6 0 10 0 C10 2.64 10 5.28 10 8 C9.34 7.67 8.68 7.34 8 7 C8 5.35 8 3.7 8 2 C5.36 2 2.72 2 0 2 C0 1.34 0 0.68 0 0 Z " fill="#4A4A4A" transform="translate(69,44)"/>
<path d="M0 0 C0.99 0.66 1.98 1.32 3 2 C3.1875 5.125 3.1875 5.125 3 8 C1.68 8.33 0.36 8.66 -1 9 C-2.60031344 5.79937313 -1.03173691 3.27728194 0 0 Z " fill="#FFF1BD" transform="translate(43,23)"/>
<path d="M0 0 C0.33 1.98 0.66 3.96 1 6 C-0.65 6.66 -2.3 7.32 -4 8 C-4.33 6.02 -4.66 4.04 -5 2 C-2 0 -2 0 0 0 Z " fill="#130B06" transform="translate(12,14)"/>
<path d="M0 0 C1.98 0 3.96 0 6 0 C6 1.65 6 3.3 6 5 C4.02 5 2.04 5 0 5 C0 3.35 0 1.7 0 0 Z " fill="#76796B" transform="translate(39,77)"/>
<path d="M0 0 C1.98 0.495 1.98 0.495 4 1 C3.34 3.64 2.68 6.28 2 9 C1.01 9 0.02 9 -1 9 C-1.09765625 2.84765625 -1.09765625 2.84765625 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z " fill="#F8CB15" transform="translate(16,39)"/>
<path d="M0 0 C0.99 0.495 0.99 0.495 2 1 C2.31241371 3.54941373 2.51303421 6.00361513 2.625 8.5625 C2.66367187 9.27341797 2.70234375 9.98433594 2.7421875 10.71679688 C2.83671783 12.47742425 2.91945817 14.23867728 3 16 C2.01 15.67 1.02 15.34 0 15 C0 10.05 0 5.1 0 0 Z " fill="#EDCA30" transform="translate(49,39)"/>
<path d="M0 0 C2.97 0 5.94 0 9 0 C9 0.66 9 1.32 9 2 C6.36 2.33 3.72 2.66 1 3 C1 5.64 1 8.28 1 11 C0.67 11 0.34 11 0 11 C0 7.37 0 3.74 0 0 Z " fill="#110F1E" transform="translate(49,69)"/>
<path d="M0 0 C2 3.75 2 3.75 2 6 C0.02 6 -1.96 6 -4 6 C-4 4.35 -4 2.7 -4 1 C-2.68 0.67 -1.36 0.34 0 0 Z " fill="#83877D" transform="translate(28,71)"/>
<path d="M0 0 C2.28459758 2.28459758 2.97129748 4.12537344 4.125 7.125 C4.47820313 8.03507812 4.83140625 8.94515625 5.1953125 9.8828125 C5.46085937 10.58148438 5.72640625 11.28015625 6 12 C5.01 12.495 5.01 12.495 4 13 C1.39203496 9.3825001 -0.62404224 6.51149317 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z " fill="#EEA7A5" transform="translate(56,56)"/>
<path d="M0 0 C0.33 0 0.66 0 1 0 C1.23560076 3.37694418 1.11643983 5.70243155 -0.125 8.875 C-2 11 -2 11 -5.1875 11.3125 C-6.115625 11.209375 -7.04375 11.10625 -8 11 C-7.67 10.34 -7.34 9.68 -7 9 C-6.01 9.33 -5.02 9.66 -4 10 C-3.71125 9.278125 -3.4225 8.55625 -3.125 7.8125 C-2.08333333 5.20833333 -1.04166667 2.60416667 0 0 Z " fill="#E91817" transform="translate(122,54)"/>
<path d="M0 0 C0 0.33 0 0.66 0 1 C-0.77085938 1.20496094 -1.54171875 1.40992188 -2.3359375 1.62109375 C-3.33882812 1.89050781 -4.34171875 2.15992188 -5.375 2.4375 C-6.37273437 2.70433594 -7.37046875 2.97117187 -8.3984375 3.24609375 C-10.95417701 3.90184356 -10.95417701 3.90184356 -13 5 C-13.66 4.34 -14.32 3.68 -15 3 C-13.4447088 2.29634398 -11.88035173 1.61270622 -10.3125 0.9375 C-9.44238281 0.55464844 -8.57226562 0.17179688 -7.67578125 -0.22265625 C-4.67786136 -1.0935848 -2.96719847 -0.85006226 0 0 Z " fill="#E1BBB9" transform="translate(88,7)"/>
<path d="M0 0 C1.3622412 0.27517727 2.72073491 0.5754364 4.0625 0.9375 C4.0625 1.2675 4.0625 1.5975 4.0625 1.9375 C2.268125 2.0303125 2.268125 2.0303125 0.4375 2.125 C-4.34480383 2.68662287 -6.54257231 4.62744551 -9.9375 7.9375 C-10.5975 7.6075 -11.2575 7.2775 -11.9375 6.9375 C-5.98424502 -0.73856189 -5.98424502 -0.73856189 0 0 Z " fill="#4D4B49" transform="translate(83.9375,59.0625)"/>
<path d="M0 0 C0.99 0.33 1.98 0.66 3 1 C3 1.66 3 2.32 3 3 C3.66 3 4.32 3 5 3 C4.34 4.32 3.68 5.64 3 7 C2.34 7 1.68 7 1 7 C-1 4 -1 4 -0.625 1.8125 C-0.41875 1.214375 -0.2125 0.61625 0 0 Z " fill="#292929" transform="translate(72,49)"/>
<path d="M0 0 C1.32 0.33 2.64 0.66 4 1 C4.33 2.32 4.66 3.64 5 5 C4.01 5.33 3.02 5.66 2 6 C1.34 4.02 0.68 2.04 0 0 Z M-1 6 C-0.01 6 0.98 6 2 6 C2.33 7.65 2.66 9.3 3 11 C1 9.625 1 9.625 -1 8 C-1 7.34 -1 6.68 -1 6 Z " fill="#E7262F" transform="translate(86,35)"/>
<path d="M0 0 C1.65 0 3.3 0 5 0 C5 1.65 5 3.3 5 5 C3.35 5 1.7 5 0 5 C0 3.35 0 1.7 0 0 Z " fill="#828371" transform="translate(32,78)"/>
<path d="M0 0 C3.8359375 0.78125 3.8359375 0.78125 5.3125 2.75 C6.1568112 5.51320029 5.76443018 7.24805136 5 10 C2.90217213 7.90217213 2.3490604 6.6200793 1.375 3.875 C1.11460937 3.15054687 0.85421875 2.42609375 0.5859375 1.6796875 C0.39257812 1.12539063 0.19921875 0.57109375 0 0 Z " fill="#1B1B1B" transform="translate(128,25)"/>
<path d="M0 0 C1.98 0 3.96 0 6 0 C6 1.32 6 2.64 6 4 C4.02 4 2.04 4 0 4 C0 2.68 0 1.36 0 0 Z " fill="#919588" transform="translate(38,71)"/>
<path d="M0 0 C2 3.75 2 3.75 2 6 C2.99 6.33 3.98 6.66 5 7 C5 7.33 5 7.66 5 8 C3.02 8 1.04 8 -1 8 C-1.04241723 5.66705225 -1.04092937 3.33297433 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z " fill="#FEEE9B" transform="translate(47,23)"/>
<path d="M0 0 C2.64 0.33 5.28 0.66 8 1 C8 1.33 8 1.66 8 2 C6.35 2 4.7 2 3 2 C2.67 4.64 2.34 7.28 2 10 C1.67 10 1.34 10 1 10 C0.67 6.7 0.34 3.4 0 0 Z " fill="#D2C690" transform="translate(12,14)"/>
<path d="M0 0 C1.32 0 2.64 0 4 0 C4.33 1.65 4.66 3.3 5 5 C3.35 5 1.7 5 0 5 C0 3.35 0 1.7 0 0 Z " fill="#83867D" transform="translate(31,71)"/>
<path d="M0 0 C0 0.66 0 1.32 0 2 C-0.99 2 -1.98 2 -3 2 C-2.67 2.99 -2.34 3.98 -2 5 C-2.99 6.485 -2.99 6.485 -4 8 C-5.5 6.625 -5.5 6.625 -7 5 C-7 4.34 -7 3.68 -7 3 C-2.61538462 0 -2.61538462 0 0 0 Z " fill="#FEC2BF" transform="translate(81,18)"/>
<path d="M0 0 C1.32 0 2.64 0 4 0 C4 1.65 4 3.3 4 5 C2.35 5 0.7 5 -1 5 C-0.67 3.35 -0.34 1.7 0 0 Z " fill="#3BAA3E" transform="translate(10,120)"/>
<path d="M0 0 C1.32 0.33 2.64 0.66 4 1 C2.38405168 3.04119788 0.7143618 5.04072937 -1 7 C-1.66 7 -2.32 7 -3 7 C-3.33 6.01 -3.66 5.02 -4 4 C-2.68 4 -1.36 4 0 4 C0 2.68 0 1.36 0 0 Z " fill="#E92120" transform="translate(120,68)"/>
<path d="M0 0 C-0.33 2.31 -0.66 4.62 -1 7 C-1.33 7 -1.66 7 -2 7 C-2 5.35 -2 3.7 -2 2 C-3.65 2 -5.3 2 -7 2 C-7.33 2.99 -7.66 3.98 -8 5 C-8 3.68 -8 2.36 -8 1 C-5.07175348 0.02391783 -3.04386724 -0.08226668 0 0 Z " fill="#F3CA33" transform="translate(53,31)"/>
<path d="M0 0 C0.66 0 1.32 0 2 0 C2 2.97 2 5.94 2 9 C1.01 9 0.02 9 -1 9 C-0.67 6.03 -0.34 3.06 0 0 Z " fill="#FFF4C6" transform="translate(21,28)"/>
<path d="M0 0 C1.98 0 3.96 0 6 0 C6.33 0.99 6.66 1.98 7 3 C4.36 3 1.72 3 -1 3 C-0.67 2.01 -0.34 1.02 0 0 Z " fill="#F8F8F7" transform="translate(70,40)"/>
<path d="M0 0 C1.65 0 3.3 0 5 0 C5 1.32 5 2.64 5 4 C3.35 4 1.7 4 0 4 C0 2.68 0 1.36 0 0 Z " fill="#9A9E88" transform="translate(25,79)"/>
<path d="M0 0 C1.98 0.495 1.98 0.495 4 1 C4.33 2.32 4.66 3.64 5 5 C4.01 5.33 3.02 5.66 2 6 C2 5.01 2 4.02 2 3 C1.01 3 0.02 3 -1 3 C-0.67 2.01 -0.34 1.02 0 0 Z " fill="#F50400" transform="translate(98,49)"/>
<path d="M0 0 C0.33 0 0.66 0 1 0 C1.66 4.29 2.32 8.58 3 13 C2.01 13 1.02 13 0 13 C0 8.71 0 4.42 0 0 Z " fill="#FCBFB9" transform="translate(63,39)"/>
<path d="M0 0 C-0.33 3.3 -0.66 6.6 -1 10 C-1.33 10 -1.66 10 -2 10 C-2 7.36 -2 4.72 -2 2 C-3.98 2 -5.96 2 -8 2 C-8 1.67 -8 1.34 -8 1 C-2.25 0 -2.25 0 0 0 Z " fill="#F5CF2D" transform="translate(42,32)"/>
<path d="M0 0 C0.66 0 1.32 0 2 0 C2 2.97 2 5.94 2 9 C1.01 9 0.02 9 -1 9 C-0.67 6.03 -0.34 3.06 0 0 Z " fill="#FEF3CB" transform="translate(31,25)"/>
<path d="M0 0 C2.97 0.495 2.97 0.495 6 1 C4.68 1.33 3.36 1.66 2 2 C1.67 3.65 1.34 5.3 1 7 C0.67 7 0.34 7 0 7 C0 4.69 0 2.38 0 0 Z " fill="#211F39" transform="translate(22,70)"/>
<path d="M0 0 C1.65 0.33 3.3 0.66 5 1 C5.33 2.32 5.66 3.64 6 5 C5.01 5.495 5.01 5.495 4 6 C4 5.34 4 4.68 4 4 C2.35 4.33 0.7 4.66 -1 5 C-0.67 3.35 -0.34 1.7 0 0 Z " fill="#D6241F" transform="translate(102,51)"/>
<path d="M0 0 C1.65 0 3.3 0 5 0 C3.68 2.31 2.36 4.62 1 7 C0.01 6.67 -0.98 6.34 -2 6 C-2 5.34 -2 4.68 -2 4 C-1.01 4 -0.02 4 1 4 C0.67 2.68 0.34 1.36 0 0 Z " fill="#F2E6B5" transform="translate(56,18)"/>
<path d="M0 0 C1.875 0.125 1.875 0.125 4 1 C5.25 4.0625 5.25 4.0625 6 7 C3.00675737 5.9024777 2.15389099 5.32317108 0.75 2.375 C0.5025 1.59125 0.255 0.8075 0 0 Z " fill="#080609" transform="translate(125,19)"/>
<path d="M0 0 C1.14926266 0.95421808 2.29430541 1.91352045 3.4375 2.875 C4.07558594 3.40867187 4.71367188 3.94234375 5.37109375 4.4921875 C7 6 7 6 8 8 C4.82461668 7.65978036 3.97723135 6.97533396 1.75 4.5625 C0 2 0 2 0 0 Z " fill="#F0CCC4" transform="translate(61,68)"/>
<path d="M0 0 C1.65 1.32 3.3 2.64 5 4 C4.67 4.99 4.34 5.98 4 7 C3.34 7 2.68 7 2 7 C2 6.34 2 5.68 2 5 C0.54166642 3.37485532 0.54166642 3.37485532 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z " fill="#FEE9E6" transform="translate(106,64)"/>
<path d="M0 0 C2.88437779 1.29299694 4.87219421 2.65941363 7 5 C5.02 5.99 5.02 5.99 3 7 C2.01 4.69 1.02 2.38 0 0 Z " fill="#2D2017" transform="translate(62,73)"/>
<path d="M0 0 C0.66 0.33 1.32 0.66 2 1 C2 1.66 2 2.32 2 3 C3.32 3.33 4.64 3.66 6 4 C5.67 4.66 5.34 5.32 5 6 C3 5 1 4 -1 3 C-0.67 2.01 -0.34 1.02 0 0 Z " fill="#FBD5D0" transform="translate(74,66)"/>
<path d="M0 0 C2.475 0.495 2.475 0.495 5 1 C5.33 2.65 5.66 4.3 6 6 C3.97945196 4.35830472 1.97956942 2.69088222 0 1 C0 0.67 0 0.34 0 0 Z " fill="#440000" transform="translate(96,44)"/>
<path d="M0 0 C0.66 0 1.32 0 2 0 C2.66 1.98 3.32 3.96 4 6 C3.01 6 2.02 6 1 6 C0.34 4.35 -0.32 2.7 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z " fill="#FD0306" transform="translate(84,35)"/>
<path d="" fill="#539B59" transform="translate(0,0)"/>
</svg>

Before

Width:  |  Height:  |  Size: 61 KiB

View File

@ -1,12 +0,0 @@
# banaction must be defined for any %(action_*)s shortcut to resolve.
[DEFAULT]
banaction = iptables-multiport
banaction_allports = iptables-allports
[sshd]
enabled = true
mode = normal
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
ignoreip = ips_whitelist

View File

@ -1,52 +0,0 @@
networks:
vpn:
external: true
services:
firefly:
image: fireflyiii/core:latest
hostname: firefly
container_name: firefly
restart: always
volumes:
- ./firefly_iii_upload:/var/www/html/storage/upload
env_file: .env
ports:
- PORT1:8080
depends_on:
- firefly_iii_db
#labels:
#traefik.enable: true
#traefik.http.routers.firefly.entrypoints: web,websecure
#traefik.http.routers.firefly.rule: Host(`DOMAINSUBNAMEHERE`)
#traefik.http.routers.firefly.tls: true
#traefik.http.routers.firefly.tls.certresolver: production
#traefik.http.routers.firefly.service: firefly
#traefik.http.services.firefly.loadbalancer.server.port: PORT1
#traefik.http.routers.firefly.middlewares:
healthcheck:
disable: false #HEALTHCHECKHERE
networks:
vpn:
ipv4_address: IPADDRESSHERE
firefly_iii_db:
image: mariadb
hostname: firefly_iii_db
container_name: firefly_iii_db
restart: always
env_file: .db.env
volumes:
- ./firefly_iii_db:/var/lib/mysql
networks:
vpn:
ipv4_address: 10.100.0.124
firefly_iii_cron:
image: alpine
restart: always
container_name: firefly_iii_cron
command: sh -c "echo \"0 3 * * * wget -qO- http://firefly:PORT1/api/v1/cron/REPLACEME\" | crontab - && crond -f -L /dev/stdout"
networks:
vpn:
ipv4_address: 10.100.0.125

View File

@ -1,30 +0,0 @@
#
# APP_NAME = name of the application for use in the scripts
# COMPOSE_FILE = default for no app_name in the docker compose file name, app if there is
# HOST NAME = subdomain name e.g test is the name for test.website.com
# DOMAIN = number of the domain from the general config, useful when using multiple domains
# PUBLIC = if true, application will be setup with the reverse proxy and accessible from the internet
# WHITELIST = if true only allow whitelisted ips (see general config), if false allow all
# HEALTHCHECK = if true, the default docker health checks for that container will be enabled
# AUTHELIA = if true, use Authelia authentication, if false turned off.
# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote
# PORTS = port number(s) that the application will be used (comma seperated)
#
CFG_FIREFLY_APP_NAME=firefly
CFG_FIREFLY_BACKUP=true
CFG_FIREFLY_COMPOSE_FILE=default
CFG_FIREFLY_HOST_NAME=budget
CFG_FIREFLY_DOMAIN=1
CFG_FIREFLY_PUBLIC=true
CFG_FIREFLY_WHITELIST=false
CFG_FIREFLY_HEALTHCHECK=true
CFG_FIREFLY_AUTHELIA=false
CFG_FIREFLY_HEADSCALE=false
CFG_FIREFLY_PORTS=5006
# Application metadata
CFG_FIREFLY_CATEGORY="Productivity"
CFG_FIREFLY_TITLE="Firefly III"
CFG_FIREFLY_DESCRIPTION="Personal Finance Manager"
CFG_FIREFLY_LONG_DESCRIPTION="Firefly III is a self-hosted financial manager for personal finance management that helps you track expenses and manage your budget"
CFG_FIREFLY_URL="https://github.com/firefly-iii/firefly-iii"
CFG_FIREFLY_ACTIONS="configure|install|restart|shutdown|uninstall"

View File

@ -1,141 +0,0 @@
#!/bin/bash
# Category : Productivity
# Description : Firefly III - Personal Finance Manager (c/u/s/r/i):
installFirefly()
{
local config_variables="$1"
if [[ "$firefly" == *[cCtTuUsSrRiI]* ]]; then
dockerConfigSetupToContainer silent firefly;
local app_name=$CFG_FIREFLY_APP_NAME
initializeAppVariables $app_name;
fi
if [[ "$firefly" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$firefly" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$firefly" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$firefly" == *[rR]* ]]; then
dockerComposeRestart $app_name;
fi
if [[ "$firefly" == *[iI]* ]]; then
echo ""
echo "##########################################"
echo "### Install $app_name"
echo "##########################################"
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install folder and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install" "$config_variables";
isSuccessful "Install folders and Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up the $app_name docker-compose.yml file."
echo ""
dockerComposeSetupFile $app_name;
result=$(rm -rf "$containers_dir$app_name/resources/.env")
checkSuccess "Removing old .env file"
result=$(rm -rf "$containers_dir$app_name/resources/.db.env")
checkSuccess "Removing old .db.env file"
local result=$(copyResource "$app_name" ".env" "")
checkSuccess "Copying the .env for $app_name"
local result=$(copyResource "$app_name" ".db.env" "")
checkSuccess "Copying the .db.env for $app_name"
configSetupFileWithData $app_name ".env";
configSetupFileWithData $app_name ".db.env";
local APP_KEY=$(head /dev/urandom | LC_ALL=C tr -dc 'A-Za-z0-9' | head -c 32 && echo)
result=$(sudo sed -i "s|SomeRandomStringOf32CharsExactly|${APP_KEY}|" "$containers_dir$app_name/.db.env")
checkSuccess "Enabling environment in the docker compose file."
local random_password=$(openssl rand -base64 12 | tr -d '+/=')
result=$(sudo sed -i "s|secret_firefly_password|${random_password}|" "$containers_dir$app_name/.env")
checkSuccess "Updating the MYSQL password in .env."
result=$(sudo sed -i "s|secret_firefly_password|${random_password}|" "$containers_dir$app_name/.db.env")
checkSuccess "Updating the MYSQL password in .db.env."
if [[ $public == "true" ]]; then
result=$(sudo sed -i "s|APP_URL=http://localhost|APP_URL=https://$host_setup|" "$containers_dir$app_name/.env")
checkSuccess "Enabling environment in the docker compose file."
result=$(sudo sed -i "s|TRUSTED_PROXIES=|TRUSTED_PROXIES=*|" "$containers_dir$app_name/.env")
checkSuccess "Enabling TRUSTED_PROXIES in the .env file."
fi
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start $app_name"
echo ""
dockerComposeUpdateAndStartApp $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Adding $app_name to the Apps Database table."
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
echo " You can now navigate to your new service using one of the options below : "
echo ""
menuShowFinalMessages $app_name;
menu_number=0
#sleep 3s
cd
fi
firefly=n
}

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><linearGradient id="firefly-iii_svg__a" x1="-99.78" x2="-99.78" y1="1.223" y2="2.014" gradientTransform="matrix(436.1719 0 0 647.181 43777.23 -791.588)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#ffa284"/><stop offset=".5" style="stop-color:#cd5029"/></linearGradient><path d="M215.6 0s19.5 66.2-18 104.7-33.5 81.1-18.3 101.4 14.2 35.5 2 46.7-22.3 19.3-29.4 1-15.2-18.3-18.3-27.4-9.1-25.4-9.1-25.4-19.3 30.4-31.4 48.7-12.2 46.7-4.1 61.9 5.1 33.5-1 58.8c-6.1 25.4 2 63.9 30.4 79.1s62.9 27.4 78.1 41.6 50.7 27.4 96.4 17.2c45.6-10.1 103.5-56.8 113.6-88.2 0 0 26.4-29.4 21.3-68-5.1-38.5-23.3-37.5-31.4-66.9s17.6-22.2-4.1-72.7c0 0-9.6-24-46.2-41.4-23.5-11.1-7.5-61.5-49.1-112.2S215.6 0 215.6 0" style="fill:url(#firefly-iii_svg__a)"/><path d="m200.9 251.5 1.8 41.9s-31.7 23.4-36 53.8l-12.7 1s-9.1 2-9.1 11.2v29.4s3 9.1 10.1 9.1l13-.3s6.3 24.1 28.9 40v20.2s-1.6 6.7 12.3 8.7c13.8 2 32.2 1.8 35.2-1.2s3-3.6 3-7.1c0 0 16.8 4 47.7 0v4s2.8 5.5 22.9 5.5 26.1-2.4 29.7-9.5v-19.8s29.3-28.7 28.3-72.6c-.9-37.8-12.6-50.9-28.3-65.6-17.9-16.8-55.3-24.7-93.3-20.1-.1 0-19.3-34.8-53.5-28.6" style="fill:#fff"/><circle cx="197" cy="358.8" r="7.5" style="fill:#03394d"/><path d="m376.6 349.3-1.9-9.3s-14.4-6.9-32.2 3.2c0 0-21.1-7.1-32.4 2.1-11.7 9.5-12.9 20.7-12.3 33.8 0 0 10.2-34.7 35.8-25.8 0 0-18.2 32 10.1 37.6 0 0 6.7 0 12.2-3.4 5.3-3.2 9.4-9 7.7-19.6 0 0-3.4-10.6-12.3-16.9 0 0 8.7-6.2 25.3-1.7m-25.2 18.5c5.5 9-3.9 13.5-3.9 13.5-17.6 1.4-4.4-23.5-4.4-23.5s2.7.6 8.3 10" style="fill:#cd5029"/></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -1,4 +0,0 @@
MYSQL_RANDOM_ROOT_PASSWORD=yes
MYSQL_USER=firefly
MYSQL_PASSWORD=secret_firefly_password
MYSQL_DATABASE=firefly

View File

@ -1,341 +0,0 @@
# You can leave this on "local". If you change it to production most console commands will ask for extra confirmation.
# Never set it to "testing".
APP_ENV=local
# Set to true if you want to see debug information in error screens.
APP_DEBUG=false
# This should be your email address.
# If you use Docker or similar, you can set this variable from a file by using SITE_OWNER_FILE
# The variable is used in some errors shown to users who aren't admin.
SITE_OWNER=EMAILHERE
# The encryption key for your sessions. Keep this very secure.
# Change it to a string of exactly 32 chars or use something like `php artisan key:generate` to generate it.
# If you use Docker or similar, you can set this variable from a file by using APP_KEY_FILE
#
# Avoid the "#" character in your APP_KEY, it may break things.
#
APP_KEY=SomeRandomStringOf32CharsExactly
# Firefly III will launch using this language (for new users and unauthenticated visitors)
# For a list of available languages: https://github.com/firefly-iii/firefly-iii/tree/main/resources/lang
#
# If text is still in English, remember that not everything may have been translated.
DEFAULT_LANGUAGE=en_US
# The locale defines how numbers are formatted.
# by default this value is the same as whatever the language is.
DEFAULT_LOCALE=equal
# Change this value to your preferred time zone.
# Example: Europe/Amsterdam
# For a list of supported time zones, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
TZ=TIMEZONEHERE
# TRUSTED_PROXIES is a useful variable when using Docker and/or a reverse proxy.
# Set it to ** and reverse proxies work just fine.
TRUSTED_PROXIES=
# The log channel defines where your log entries go to.
# Several other options exist. You can use 'single' for one big fat error log (not recommended).
# Also available are 'syslog', 'errorlog' and 'stdout' which will log to the system itself.
# A rotating log option is 'daily', creates 5 files that (surprise) rotate.
# A cool option is 'papertrail' for cloud logging
# Default setting 'stack' will log to 'daily' and to 'stdout' at the same time.
LOG_CHANNEL=stack
# Log level. You can set this from least severe to most severe:
# debug, info, notice, warning, error, critical, alert, emergency
# If you set it to debug your logs will grow large, and fast. If you set it to emergency probably
# nothing will get logged, ever.
APP_LOG_LEVEL=notice
# Audit log level.
# The audit log is used to log notable Firefly III events on a separate channel.
# These log entries may contain sensitive financial information.
# The audit log is disabled by default.
#
# To enable it, set AUDIT_LOG_LEVEL to "info"
# To disable it, set AUDIT_LOG_LEVEL to "emergency"
AUDIT_LOG_LEVEL=emergency
#
# If you want, you can redirect the audit logs to another channel.
# Set 'audit_stdout', 'audit_syslog', 'audit_errorlog' to log to the system itself.
# Use audit_daily to log to a rotating file.
# Use audit_papertrail to log to papertrail.
#
# If you do this, the audit logs may be mixed with normal logs because the settings for these channels
# are often the same as the settings for the normal logs.
AUDIT_LOG_CHANNEL=
#
# Used when logging to papertrail:
# Also used when audit logs log to papertrail:
#
PAPERTRAIL_HOST=
PAPERTRAIL_PORT=
# Database credentials. Make sure the database exists. I recommend a dedicated user for Firefly III
# For other database types, please see the FAQ: https://docs.firefly-iii.org/firefly-iii/faq/self-hosted/#i-want-to-use-sqlite
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
# Use "pgsql" for PostgreSQL
# Use "mysql" for MySQL and MariaDB.
# Use "sqlite" for SQLite.
DB_CONNECTION=mysql
DB_HOST=firefly_iii_db
DB_PORT=3306
DB_DATABASE=firefly
DB_USERNAME=firefly
DB_PASSWORD=secret_firefly_password
# leave empty or omit when not using a socket connection
DB_SOCKET=
# MySQL supports SSL. You can configure it here.
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
MYSQL_USE_SSL=false
MYSQL_SSL_VERIFY_SERVER_CERT=true
# You need to set at least of these options
MYSQL_SSL_CAPATH=/etc/ssl/certs/
MYSQL_SSL_CA=
MYSQL_SSL_CERT=
MYSQL_SSL_KEY=
MYSQL_SSL_CIPHER=
# PostgreSQL supports SSL. You can configure it here.
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
PGSQL_SSL_MODE=prefer
PGSQL_SSL_ROOT_CERT=null
PGSQL_SSL_CERT=null
PGSQL_SSL_KEY=null
PGSQL_SSL_CRL_FILE=null
# more PostgreSQL settings
PGSQL_SCHEMA=public
# If you're looking for performance improvements, you could install memcached or redis
CACHE_DRIVER=file
SESSION_DRIVER=file
# If you set either of the options above to 'redis', you might want to update these settings too
# If you use Docker or similar, you can set REDIS_HOST_FILE, REDIS_PASSWORD_FILE or
# REDIS_PORT_FILE to set the value from a file instead of from an environment variable
# can be tcp, unix or http
REDIS_SCHEME=tcp
# use only when using 'unix' for REDIS_SCHEME. Leave empty otherwise.
REDIS_PATH=
# use only when using 'tcp' or 'http' for REDIS_SCHEME. Leave empty otherwise.
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
# Use only with Redis 6+ with proper ACL set. Leave empty otherwise.
REDIS_USERNAME=
REDIS_PASSWORD=
# always use quotes and make sure redis db "0" and "1" exists. Otherwise change accordingly.
REDIS_DB="0"
REDIS_CACHE_DB="1"
# Cookie settings. Should not be necessary to change these.
# If you use Docker or similar, you can set COOKIE_DOMAIN_FILE to set
# the value from a file instead of from an environment variable
# Setting samesite to "strict" may give you trouble logging in.
COOKIE_PATH="/"
COOKIE_DOMAIN=
COOKIE_SECURE=false
COOKIE_SAMESITE=lax
# If you want Firefly III to email you, update these settings
# For instructions, see: https://docs.firefly-iii.org/firefly-iii/advanced-installation/email/#email
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
MAIL_MAILER=log
MAIL_HOST=null
MAIL_PORT=2525
MAIL_FROM=changeme@example.com
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_SENDMAIL_COMMAND=
# Other mail drivers:
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
MAILGUN_DOMAIN=
MAILGUN_SECRET=
# If you are on EU region in mailgun, use api.eu.mailgun.net, otherwise use api.mailgun.net
# If you use Docker or similar, you can set this variable from a file by appending it with _FILE
MAILGUN_ENDPOINT=api.mailgun.net
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
MANDRILL_SECRET=
SPARKPOST_SECRET=
# Firefly III can send you the following messages.
SEND_ERROR_MESSAGE=true
# These messages contain (sensitive) transaction information:
SEND_REPORT_JOURNALS=true
# Set this value to true if you want to set the location of certain things, like transactions.
# Since this involves an external service, it's optional and disabled by default.
ENABLE_EXTERNAL_MAP=false
# Set this value to true if you want Firefly III to download currency exchange rates
# from the internet. These rates are hosted by the creator of Firefly III inside
# an Azure Storage Container.
# Not all currencies may be available. Rates may be wrong.
ENABLE_EXTERNAL_RATES=false
# The map will default to this location:
MAP_DEFAULT_LAT=51.983333
MAP_DEFAULT_LONG=5.916667
MAP_DEFAULT_ZOOM=6
#
# Some objects have room for an URL, like transactions and webhooks.
# By default, the following protocols are allowed:
# http, https, ftp, ftps, mailto
#
# To change this, set your preferred comma separated set below.
# Be sure to include http, https and other default ones if you need to.
#
VALID_URL_PROTOCOLS=
#
# Firefly III authentication settings
#
#
# Firefly III supports a few authentication methods:
# - 'web' (default, uses built in DB)
# - 'remote_user_guard' for Authelia etc
# Read more about these settings in the documentation.
# https://docs.firefly-iii.org/firefly-iii/advanced-installation/authentication
#
# LDAP is no longer supported :(
#
AUTHENTICATION_GUARD=web
#
# Remote user guard settings
#
AUTHENTICATION_GUARD_HEADER=REMOTE_USER
AUTHENTICATION_GUARD_EMAIL=
#
# Firefly III generates a basic keypair for your OAuth tokens.
# If you want, you can overrule the key with your own (secure) value.
# It's also possible to set PASSPORT_PUBLIC_KEY_FILE or PASSPORT_PRIVATE_KEY_FILE
# if you're using Docker secrets or similar solutions for secret management
#
PASSPORT_PRIVATE_KEY=
PASSPORT_PUBLIC_KEY=
#
# Extra authentication settings
#
CUSTOM_LOGOUT_URL=
# You can disable the X-Frame-Options header if it interferes with tools like
# Organizr. This is at your own risk. Applications running in frames run the risk
# of leaking information to their parent frame.
DISABLE_FRAME_HEADER=false
# You can disable the Content Security Policy header when you're using an ancient browser
# or any version of Microsoft Edge / Internet Explorer (which amounts to the same thing really)
# This leaves you with the risk of not being able to stop XSS bugs should they ever surface.
# This is at your own risk.
DISABLE_CSP_HEADER=false
# If you wish to track your own behavior over Firefly III, set valid analytics tracker information here.
# Nobody uses this except for me on the demo site. But hey, feel free to use this if you want to.
# Do not prepend the TRACKER_URL with http:// or https://
# The only tracker supported is Matomo.
# You can set the following variables from a file by appending them with _FILE:
TRACKER_SITE_ID=
TRACKER_URL=
#
# Firefly III supports webhooks. These are security sensitive and must be enabled manually first.
#
ALLOW_WEBHOOKS=false
#
# The static cron job token can be useful when you use Docker and wish to manage cron jobs.
# 1. Set this token to any 32-character value (this is important!).
# 2. Use this token in the cron URL instead of a user's command line token that you can find in /profile
#
# For more info: https://docs.firefly-iii.org/firefly-iii/advanced-installation/cron/
#
# You can set this variable from a file by appending it with _FILE
#
STATIC_CRON_TOKEN=
# You can fine tune the start-up of a Docker container by editing these environment variables.
# Use this at your own risk. Disabling certain checks and features may result in lots of inconsistent data.
# However if you know what you're doing you can significantly speed up container start times.
# Set each value to true to enable, or false to disable.
# Set this to true to build all locales supported by Firefly III.
# This may take quite some time (several minutes) and is generally not recommended.
# If you wish to change or alter the list of locales, start your Docker container with
# `docker run -v locale.gen:/etc/locale.gen -e DKR_BUILD_LOCALE=true`
# and make sure your preferred locales are in your own locale.gen.
DKR_BUILD_LOCALE=false
# Check if the SQLite database exists. Can be skipped if you're not using SQLite.
# Won't significantly speed up things.
DKR_CHECK_SQLITE=true
# Run database creation and migration commands. Disable this only if you're 100% sure the DB exists
# and is up to date.
DKR_RUN_MIGRATION=true
# Run database upgrade commands. Disable this only when you're 100% sure your DB is up-to-date
# with the latest fixes (outside of migrations!)
DKR_RUN_UPGRADE=true
# Verify database integrity. Includes all data checks and verifications.
# Disabling this makes Firefly III assume your DB is intact.
DKR_RUN_VERIFY=true
# Run database reporting commands. When disabled, Firefly III won't go over your data to report current state.
# Disabling this should have no impact on data integrity or safety but it won't warn you of possible issues.
DKR_RUN_REPORT=true
# Generate OAuth2 keys.
# When disabled, Firefly III won't attempt to generate OAuth2 Passport keys. This won't be an issue, IFF (if and only if)
# you had previously generated keys already and they're stored in your database for restoration.
DKR_RUN_PASSPORT_INSTALL=true
# Leave the following configuration vars as is.
# Unless you like to tinker and know what you're doing.
APP_NAME=FireflyIII
BROADCAST_DRIVER=log
QUEUE_DRIVER=sync
CACHE_PREFIX=firefly
PUSHER_KEY=
IPINFO_TOKEN=
PUSHER_SECRET=
PUSHER_ID=
DEMO_USERNAME=
DEMO_PASSWORD=
FIREFLY_III_LAYOUT=v1
#
# If you have trouble configuring your Firefly III installation, DON'T BOTHER setting this variable.
# It won't work. It doesn't do ANYTHING. Don't believe the lies you read online. I'm not joking.
# This configuration value WILL NOT HELP.
#
# Notable exception to this rule is Synology, which, according to some users, will use APP_URL to rewrite stuff.
#
# This variable is ONLY used in some of the emails Firefly III sends around. Nowhere else.
# So when configuring anything WEB related this variable doesn't do anything. Nothing
#
# If you're stuck I understand you get desperate but look SOMEWHERE ELSE.
#
APP_URL=http://localhost

View File

@ -1,54 +0,0 @@
networks:
vpn:
external: true
services:
killbill:
image: killbill/killbill:0.24.0
container_name: killbill
ports:
- "8788:8080"
environment:
- KILLBILL_DAO_URL=jdbc:mysql://db:3306/killbill
- KILLBILL_DAO_USER=root
- KILLBILL_DAO_PASSWORD=killbill
- KILLBILL_CATALOG_URI=SpyCarAdvanced.xml
networks:
vpn:
ipv4_address: 10.100.0.111
kaui:
image: killbill/kaui:2.0.11
container_name: killbill_ui
ports:
- "PORT1:8080"
environment:
- KAUI_CONFIG_DAO_URL=jdbc:mysql://db:3306/kaui
- KAUI_CONFIG_DAO_USER=root
- KAUI_CONFIG_DAO_PASSWORD=killbill
- KAUI_KILLBILL_URL=http://killbill:8080
#labels:
#traefik.enable: true
#traefik.http.routers.killbill.entrypoints: web,websecure
#traefik.http.routers.killbill.rule: Host(`DOMAINSUBNAMEHERE`)
#traefik.http.routers.killbill.tls: true
#traefik.http.routers.killbill.tls.certresolver: production
#traefik.http.routers.killbill.middlewares:
healthcheck:
disable: false #HEALTHCHECKHERE
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro #SOCKETHERE
networks:
vpn:
ipv4_address: IPADDRESSHERE
db:
image: killbill/mariadb:0.24
container_name: killbill_db
volumes:
- ./data:/var/lib/mysql
expose:
- "3306"
environment:
- MYSQL_ROOT_PASSWORD=killbill
networks:
vpn:
ipv4_address: 10.100.0.112

View File

@ -1,30 +0,0 @@
#
# APP_NAME = name of the application for use in the scripts
# COMPOSE_FILE = default for no app_name in the docker compose file name, app if there is
# HOST NAME = subdomain name e.g test is the name for test.website.com
# DOMAIN = number of the domain from the general config, useful when using multiple domains
# PUBLIC = if true, application will be setup with the reverse proxy and accessible from the internet
# WHITELIST = if true only allow whitelisted ips (see general config), if false allow all
# HEALTHCHECK = if true, the default docker health checks for that container will be enabled
# AUTHELIA = if true, use Authelia authentication, if false turned off.
# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote
# PORTS = port number(s) that the application will be used (comma seperated)
#
CFG_KILLBILL_APP_NAME=killbill
CFG_KILLBILL_BACKUP=true
CFG_KILLBILL_COMPOSE_FILE=default
CFG_KILLBILL_HOST_NAME=payment
CFG_KILLBILL_DOMAIN=1
CFG_KILLBILL_PUBLIC=true
CFG_KILLBILL_WHITELIST=false
CFG_KILLBILL_HEALTHCHECK=true
CFG_KILLBILL_AUTHELIA=false
CFG_KILLBILL_HEADSCALE=false
CFG_KILLBILL_PORTS=9090
# Application metadata
CFG_KILLBILL_CATEGORY="Productivity"
CFG_KILLBILL_TITLE="Killbill"
CFG_KILLBILL_DESCRIPTION="Payment Processing"
CFG_KILLBILL_LONG_DESCRIPTION="Open-Source Subscription Billing and Payment Platform for businesses that need to manage subscriptions and payments"
CFG_KILLBILL_URL="https://github.com/killbill/killbill"
CFG_KILLBILL_ACTIONS="configure|install|restart|shutdown|uninstall"

View File

@ -1,114 +0,0 @@
#!/bin/bash
# Category : Productivity
# Description : Killbill - Payment Processing (c/u/s/r/i):
installKillbill()
{
local config_variables="$1"
if [[ "$killbill" == *[cCtTuUsSrRiI]* ]]; then
dockerConfigSetupToContainer silent killbill;
local app_name=$CFG_KILLBILL_APP_NAME
initializeAppVariables $app_name;
fi
if [[ "$killbill" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$killbill" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$killbill" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$killbill" == *[rR]* ]]; then
dockerComposeRestart $app_name;
fi
if [[ "$killbill" == *[iI]* ]]; then
echo ""
echo "##########################################"
echo "### Install $app_name"
echo "##########################################"
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install folder and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install" "$config_variables";
isSuccessful "Install folders and Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up the $app_name docker-compose.yml file."
echo ""
dockerComposeSetupFile $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start $app_name"
echo ""
dockerComposeUpdateAndStartApp $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Adding $app_name to the Apps Database table."
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
echo " You can now navigate to your new service using one of the options below : "
echo ""
menuShowFinalMessages $app_name;
menu_number=0
#sleep 3s
cd
fi
killbill=n
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 64 KiB

View File

@ -1,104 +0,0 @@
networks:
vpn:
external: true
name: vpn
services:
kimai: # This is the latest FPM image of kimai
image: kimai/kimai2:fpm-dev
container_name: kimai
environment:
- ADMINMAIL=EMAILHERE
- ADMINPASS=RANDOMIZEDPASSWORD1
- DATABASE_URL=mysql://kimaiuser:kimaipassword@sqldb/kimai
- TRUSTED_HOSTS=IPADDRESSHERE,DOMAINSUBNAMEHERE
- memory_limit=500
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro #SOCKETHERE
- ./kimai-public/:/opt/kimai/public
# - var:/opt/kimai/var
# - ./ldap.conf:/etc/openldap/ldap.conf:z
# - ./ROOT-CA.pem:/etc/ssl/certs/ROOT-CA.pem:z
restart: unless-stopped
networks:
vpn:
ipv4_address: 10.100.0.101
sqldb:
image: mysql:5.7
container_name: kimai-sqldb
environment:
- MYSQL_DATABASE=kimai
- MYSQL_USER=kimaiuser
- MYSQL_PASSWORD=kimaipassword
- MYSQL_ROOT_PASSWORD=RANDOMIZEDPASSWORD2
ports:
- 3336:3306
volumes:
- ./kimai-mysql/:/var/lib/mysql
command: --default-storage-engine innodb
restart: unless-stopped
healthcheck:
test: mysqladmin -p$$MYSQL_ROOT_PASSWORD ping -h localhost
interval: 20s
start_period: 10s
timeout: 10s
retries: 3
networks:
vpn:
ipv4_address: 10.100.0.102
phpmyadmin:
container_name: kimai-phpmyadmin
image: phpmyadmin
restart: always
ports:
- PORT2:80
environment:
- PMA_ARBITRARY=1
networks:
vpn:
ipv4_address: 10.100.0.103
swagger:
container_name: kimai-swagger
image: swaggerapi/swagger-ui
ports:
- PORT3:8080
volumes:
- ./swagger.json:/swagger.json
environment:
- SWAGGER_JSON=/swagger.json
networks:
vpn:
ipv4_address: 10.100.0.104
kimai-nginx:
container_name: kimai-nginx
image: tobybatch/nginx-fpm-reverse-proxy
ports:
- PORT1:80
volumes:
- ./kimai-public:/opt/kimai/public:ro
restart: unless-stopped
depends_on:
- kimai
healthcheck:
test: wget --spider http://kimai-nginx/health || exit 1
interval: 20s
start_period: 10s
timeout: 10s
retries: 3
disable: false #HEALTHCHECKHERE
#labels:
#traefik.enable: true
#traefik.http.routers.kimai-nginx.entrypoints: web,websecure
#traefik.http.routers.kimai-nginx.rule: Host(`DOMAINSUBNAMEHERE`)
#traefik.http.routers.kimai-nginx.tls: true
#traefik.http.routers.kimai-nginx.tls.certresolver: production
#traefik.http.services.kimai-nginx.loadbalancer.server.port: 80
#traefik.http.routers.kimai-nginx.middlewares:
networks:
vpn:
ipv4_address: IPADDRESSHERE

View File

@ -1,30 +0,0 @@
#
# APP_NAME = name of the application for use in the scripts
# COMPOSE_FILE = default for no app_name in the docker compose file name, app if there is
# HOST NAME = subdomain name e.g test is the name for test.website.com
# DOMAIN = number of the domain from the general config, useful when using multiple domains
# PUBLIC = if true, application will be setup with the reverse proxy and accessible from the internet
# WHITELIST = if true only allow whitelisted ips (see general config), if false allow all
# HEALTHCHECK = if true, the default docker health checks for that container will be enabled
# AUTHELIA = if true, use Authelia authentication, if false turned off.
# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote
# PORTS = port number(s) that the application will be used (comma seperated)
#
CFG_KIMAI_APP_NAME=kimai
CFG_KIMAI_BACKUP=true
CFG_KIMAI_COMPOSE_FILE=default
CFG_KIMAI_HOST_NAME=client
CFG_KIMAI_DOMAIN=1
CFG_KIMAI_PUBLIC=true
CFG_KIMAI_WHITELIST=false
CFG_KIMAI_HEALTHCHECK=true
CFG_KIMAI_AUTHELIA=false
CFG_KIMAI_HEADSCALE=false
CFG_KIMAI_PORTS=8001,8002,8003
# Application metadata
CFG_KIMAI_CATEGORY="Productivity"
CFG_KIMAI_TITLE="Kimai"
CFG_KIMAI_DESCRIPTION="Time Tracking"
CFG_KIMAI_LONG_DESCRIPTION="Kimai is a web-based, open source time-tracking application that helps you track work time and generate reports for billing and productivity"
CFG_KIMAI_URL="https://github.com/kimai/kimai"
CFG_KIMAI_ACTIONS="configure|install|restart|shutdown|uninstall"

View File

@ -1,129 +0,0 @@
#!/bin/bash
# Category : Productivity
# Description : Kimai - Time Tracking (c/u/s/r/i):
installKimai()
{
local config_variables="$1"
if [[ "$kimai" == *[cCtTuUsSrRiI]* ]]; then
dockerConfigSetupToContainer silent kimai;
local app_name=$CFG_KIMAI_APP_NAME
initializeAppVariables $app_name;
fi
if [[ "$kimai" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$kimai" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$kimai" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$kimai" == *[rR]* ]]; then
dockerComposeRestart $app_name;
fi
if [[ "$kimai" == *[iI]* ]]; then
echo ""
echo "##########################################"
echo "### Install $app_name"
echo "##########################################"
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install folder and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install" "$config_variables";
isSuccessful "Install folders and Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Pulling a default Kimai docker-compose.yml file."
echo ""
dockerComposeSetupFile $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start Kimai"
echo ""
dockerComposeUpdateAndStartApp $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Fix memory limit issue"
echo ""
# Run the health check loop with timings
dockerCheckContainerHealthLoop "kimai" 180 15
# If container is healthy
if dockerCheckContainerHealth "kimai"; then
dockerCommandRun "docker exec kimai /bin/bash -c "php -d memory_limit=1G /opt/kimai/bin/console kimai:reload --env=prod" && exit"
else
isNotice "It has not been possible to change the memory limit, this may cause issues"
fi
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Adding $app_name to the Apps Database table."
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
echo " You can now navigate to your new service using one of the options below : "
echo ""
menuShowFinalMessages $app_name;
menu_number=0
#sleep 3s
cd
fi
kimai=n
}

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><linearGradient id="kimai_svg__a" x1="934.777" x2="934.108" y1="690.901" y2="286.126" gradientTransform="translate(-831.23 -279.94)scale(1.1636)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#f2f2f2"/><stop offset="1" style="stop-color:#f2f2f2"/></linearGradient><circle cx="256" cy="256" r="256" style="fill:url(#kimai_svg__a)"/><radialGradient id="kimai_svg__b" cx="875.876" cy="396.261" r="188.047" gradientTransform="matrix(1.3584 0 0 1.652 -933.757 -397.458)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#01fd00"/><stop offset="1" style="stop-color:#009d39"/></radialGradient><circle cx="256" cy="256" r="226.7" style="fill:url(#kimai_svg__b)"/><path d="M256 484.4c-61 0-118.4-23.8-161.5-66.9S27.6 317 27.6 256 51.4 137.6 94.5 94.5c43.1-43.2 100.5-67 161.5-67s118.4 23.8 161.5 66.9 66.9 100.5 66.9 161.5-23.8 118.4-66.9 161.5c-43.1 43.3-100.4 67-161.5 67M256 31C132 31 31 131.9 31 256s100.9 225 225 225c124 0 225-100.9 225-225S380.1 31 256 31" style="fill:#fff"/><radialGradient id="kimai_svg__c" cx="892.004" cy="354.041" r="65.314" gradientTransform="matrix(2.2453 -1.2963 1.344 2.3279 -2265.712 670.932)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#f9f9f9"/><stop offset="1" style="stop-color:#fff"/></radialGradient><path d="m201.6 351.9 150-87.3-150-87.3z" style="fill-rule:evenodd;clip-rule:evenodd;fill:url(#kimai_svg__c)"/><path d="M347 126.5c-4.4-2.9-5.6-8.8-2.7-13.2l13.5-20.5c2.9-4.4 8.8-5.6 13.2-2.7s5.6 8.8 2.7 13.2l-13.5 20.5c-2.9 4.4-8.8 5.6-13.2 2.7m50.8 56.6c-2.4-4.7-.6-10.4 4.1-12.9l21.8-11.2c4.7-2.4 10.4-.6 12.9 4.1 2.4 4.7.6 10.4-4.1 12.9l-21.9 11.3c-4.7 2.4-10.4.5-12.8-4.2m5.1 75c0-6.8 5.5-12.3 12.3-12.3h31.4c6.8 0 12.3 5.5 12.3 12.3s-5.5 12.3-12.3 12.3h-31.4c-6.8 0-12.3-5.5-12.3-12.3m-8.2 77.1c2.5-4.6 8.3-6.4 12.9-3.9l21.6 11.6c4.6 2.5 6.4 8.3 3.9 12.9s-8.3 6.4-12.9 3.9l-21.6-11.6c-4.7-2.5-6.4-8.3-3.9-12.9m-31.9 95.3c-4.5 2.8-10.4 1.4-13.1-3.1l-12.9-20.9c-2.8-4.5-1.4-10.4 3.1-13.1 4.5-2.8 10.4-1.4 13.1 3.1l12.9 20.9c2.8 4.4 1.4 10.3-3.1 13.1m-106.4 30c-6.8 0-12.3-5.5-12.3-12.3v-31.4c0-6.8 5.5-12.3 12.3-12.3s12.3 5.5 12.3 12.3v31.4c-.1 6.8-5.6 12.3-12.3 12.3m-113.9-33.2c-4.4-2.9-5.7-8.8-2.8-13.2l13.3-20.6c2.9-4.4 8.8-5.7 13.2-2.8s5.7 8.8 2.8 13.2l-13.3 20.6c-2.9 4.4-8.8 5.6-13.2 2.8m-70.1-77.5c-2.4-4.7-.6-10.4 4.1-12.9l21.8-11.2c4.7-2.4 10.4-.6 12.9 4.1 2.4 4.7.6 10.4-4.1 12.9l-21.8 11.2c-4.8 2.4-10.5.6-12.9-4.1m-21-91.7c0-6.8 5.5-12.3 12.3-12.3h31.4c6.8 0 12.3 5.5 12.3 12.3s-5.5 12.3-12.3 12.3H63.7c-6.8 0-12.3-5.5-12.3-12.3m25.7-102.7c2.5-4.6 8.3-6.4 12.9-3.9l21.6 11.6c4.6 2.5 6.4 8.3 3.9 12.9s-8.3 6.4-12.9 3.9L81 168.3c-4.7-2.5-6.4-8.2-3.9-12.9m94.1-35.9c-4.5 2.8-10.4 1.4-13.1-3.1l-13-20.8c-2.8-4.5-1.4-10.4 3.1-13.1 4.5-2.8 10.4 1.4 13.1 3.1l13 20.8c2.8 4.4 1.4 10.3-3.1 13.1m102.5-9.5c-6.8 0-12.3-5.5-12.3-12.3V66.3c0-6.8 5.5-12.3 12.3-12.3S286 59.5 286 66.3v31.4c0 6.8-5.5 12.3-12.3 12.3m-35.8 0c-6.8 0-12.3-5.5-12.3-12.3V66.3c0-6.8 5.5-12.3 12.3-12.3s12.3 5.5 12.3 12.3v31.4c0 6.8-5.5 12.3-12.3 12.3" style="opacity:.5;fill-rule:evenodd;clip-rule:evenodd;fill:#c7efc4"/></svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -1,34 +0,0 @@
networks:
vpn:
external: true
services:
nginx-mailcow:
container_name: mailcow
networks:
vpn:
ipv4_address: IPADDRESSHERE
#labels:
#traefik.enable: true
#traefik.http.routers.moo.rule: Host(`${MAILCOW_HOSTNAME}`)
#traefik.http.routers.moo.tls: true
#traefik.http.routers.moo.tls.certresolver: production
#traefik.http.services.moo.loadbalancer.server.port: PORT1
#traefik.http.routers.moo.entrypoints: websecure
#traefik.docker.network: DOCKERNETWORKHERE
#traefik.http.routers.moo.middlewares:
healthcheck:
disable: false #HEALTHCHECKHERE
certdumper:
image: humenius/traefik-certs-dumper
command: --restart-containers ${COMPOSE_PROJECT_NAME}-postfix-mailcow-1,${COMPOSE_PROJECT_NAME}-nginx-mailcow-1,${COMPOSE_PROJECT_NAME}-dovecot-mailcow-1
#network_mode: none
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro #SOCKETHERE
- /docker/containers/traefik/etc/certs:/traefik:ro
- ./data/assets/ssl/:/output:rw
restart: always
environment:
# only change this, if you're using another domain for mailcow's web frontend compared to the standard config
- DOMAIN=${MAILCOW_HOSTNAME}

View File

@ -1,32 +0,0 @@
#
# APP_NAME = name of the application for use in the scripts
# COMPOSE_FILE = default for no app_name in the docker compose file name, app if there is
# HOST NAME = subdomain name e.g test is the name for test.website.com
# DOMAIN = number of the domain from the general config, useful when using multiple domains
# PUBLIC = if true, application will be setup with the reverse proxy and accessible from the internet
# WHITELIST = if true only allow whitelisted ips (see general config), if false allow all
# HEALTHCHECK = if true, the default docker health checks for that container will be enabled
# AUTHELIA = if true, use Authelia authentication, if false turned off.
# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote
# PORTS = port number(s) that the application will be used (comma seperated)
#
CFG_MAILCOW_APP_NAME=mailcow
CFG_MAILCOW_BACKUP=true
CFG_MAILCOW_COMPOSE_FILE=app
CFG_MAILCOW_HOST_NAME=mail
CFG_MAILCOW_DOMAIN=1
CFG_MAILCOW_PUBLIC=true
CFG_MAILCOW_WHITELIST=false
CFG_MAILCOW_HEALTHCHECK=true
CFG_MAILCOW_AUTHELIA=false
CFG_MAILCOW_HEADSCALE=false
CFG_MAILCOW_PORTS=8022,4432,25,110,143,465,587,993,995,4190
CFG_MAILCOW_OPEN_PORTS=8022/tcp,4432/tcp,25/tcp,110/tcp,143/tcp,465/tcp,587/tcp,993/tcp,995/tcp,4190/tcp
# Application metadata
CFG_MAILCOW_CATEGORY="Communication & Collaboration Tools"
CFG_MAILCOW_TITLE="Mailcow"
CFG_MAILCOW_DESCRIPTION="Mail Server"
CFG_MAILCOW_LONG_DESCRIPTION="Mailcow is a comprehensive mail server suite that provides a complete email solution with webmail, antispam, and antivirus protection"
CFG_MAILCOW_URL="https://github.com/mailcow/mailcow-dockerized"
CFG_MAILCOW_ACTIONS="configure|install|restart|shutdown|uninstall"
CFG_MAILCOW_ACTIONS="configure|install|restart|shutdown|uninstall"

View File

@ -1,214 +0,0 @@
#!/bin/bash
# Category : Communication & Collaboration Tools
# Description : Mailcow - Mail Server *UNFINISHED* (c/u/s/r/i):
installMailcow()
{
local config_variables="$1"
if [[ "$mailcow" == *[cCtTuUsSrRiI]* ]]; then
dockerConfigSetupToContainer silent mailcow;
local app_name=$CFG_MAILCOW_APP_NAME
local easy_setup=$CFG_MAILCOW_EASY_SETUP
initializeAppVariables $app_name;
fi
if [[ "$mailcow" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$mailcow" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$mailcow" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$mailcow" == *[rR]* ]]; then
dockerComposeRestart $app_name;
fi
if [[ "$mailcow" == *[iI]* ]]; then
echo ""
echo "##########################################"
echo "### Install $app_name"
echo "##########################################"
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Checking if $app_name can be installed."
echo ""
dockerCheckAllowedInstall "$app_name"
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install folder and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install" "$config_variables";
isSuccessful "Install folders and Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Pulling Mailcow GitHub repo into the $containers_dir$app_name folder"
echo ""
mailcowSetupGit()
{
# Define the paths
local mailcow_source_dir="$containers_dir$app_name" # Directory with existing content
local mailcow_backup_dir="/tmp/mailcow_backup" # Temporary backup directory
# Create a backup of the existing content
if [ -d "$mailcow_source_dir" ]; then
result=$(sudo mv "$mailcow_source_dir" "$mailcow_backup_dir")
checkSuccess "Backup of existing content created"
fi
# Clone the Git repository
local result=$(sudo rm -rf "$mailcow_source_dir")
checkSuccess "Deleting mailcow directory git."
local result=$(sudo -u $docker_install_user git clone https://github.com/mailcow/mailcow-dockerized "$mailcow_source_dir" && sudo -u $docker_install_user git config --global --add safe.directory $containers_dir$app_name)
checkSuccess "Cloning Mailcow Dockerized GitHub repo"
# Restore the backup content
if [ -d "$mailcow_backup_dir" ]; then
result=$(sudo rsync -a "$mailcow_backup_dir/" "$mailcow_source_dir/")
checkSuccess "Restored existing content from backup"
local result=$(sudo rm -rf "$mailcow_backup_dir")
checkSuccess "Deleting backup directory."
fi
}
if [ -f "$containers_dir$app_name/mailcow.conf" ]; then
while true; do
echo ""
isNotice "Mailcow install already found."
echo ""
isQuestion "Would you like to reinstall $app_name? *THIS WILL WIPE ALL DATA* (y/n): "
read -p "" reinstall_choice
if [[ -n "$reinstall_choice" ]]; then
break
fi
isNotice "Please provide a valid input."
done
if [[ "$reinstall_choice" == [yY] ]]; then
mailcowSetupGit;
fi
else
mailcowSetupGit;
fi
((menu_number++))
echo ""
echo "---- $menu_number. Pulling a $app_name docker-compose.yml file."
echo ""
dockerComposeSetupFile $app_name;
local result=$(cd $containers_dir$app_name && sudo -u $docker_install_user ./generate_config.sh)
checkSuccess "Running Mailcow config generation script"
((menu_number++))
echo ""
echo "---- $menu_number. Running configuration edits to mailserver.conf"
echo ""
if [ -e "$containers_dir$app_name/mailcow.conf" ]; then
local result=$(sudo sed -i 's/HTTP_PORT=80/HTTP_PORT='$usedport1'/' $containers_dir$app_name/mailcow.conf)
checkSuccess "Updating the mailserver.conf to custom http port"
local result=$(sudo sed -i 's/HTTPS_PORT=443/HTTPS_PORT='$usedport2'/' $containers_dir$app_name/mailcow.conf)
checkSuccess "Updating the mailserver.conf to custom https port"
while true; do
isQuestion "Would you like to disable Lets Encrypt? *RECOMMENDED* (y/n): "
read -p "" lets_encrypt_choice
if [[ -n "$lets_encrypt_choice" ]]; then
break
fi
isNotice "Please provide a valid input."
done
if [[ "$lets_encrypt_choice" == [yY] ]]; then
local result=$(sudo sed -i 's/SKIP_LETS_ENCRYPT=n/SKIP_LETS_ENCRYPT=y/' $containers_dir$app_name/mailcow.conf)
checkSuccess "Updating the mailserver.conf to disable SSL install"
fi
while true; do
isQuestion "Would you like to disable ClamD Antivirus? *Resource Reduction* (y/n): "
read -p "" clamd_antivirus_choice
if [[ -n "$clamd_antivirus_choice" ]]; then
break
fi
isNotice "Please provide a valid input."
done
if [[ "$clamd_antivirus_choice" == [yY] ]]; then
local result=$(sudo sed -i 's/SKIP_CLAMD=n/SKIP_CLAMD=y/' $containers_dir$app_name/mailcow.conf)
checkSuccess "Updating the mailserver.conf to disable ClamD Antivirus"
fi
else
isError "The file $mailcow_conf_file does not exist. Config generation has failed, please reinstall mailcow and try again."
fi
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start $app_name"
echo ""
dockerComposeUpdateAndStartApp $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Adding $app_name to the Apps Database table."
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
echo " You can now navigate to your $app_name service using any of the options below : "
echo ""
menuShowFinalMessages $app_name;
menu_number=0
#sleep 3s
cd
fi
mailcow=n
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.4 KiB

View File

@ -1,15 +0,0 @@
#!/bin/bash
MD5SUM_CURRENT_CERT=($(md5sum /docker/mailcow/data/assets/ssl/cert.pem))
MD5SUM_NEW_CERT=($(md5sum /docker/caddy/caddy_data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/DOMAINNAMEHERE/DOMAINNAMEHERE.crt))
if [ $MD5SUM_CURRENT_CERT != $MD5SUM_NEW_CERT ]; then
cp /docker/caddy/caddy_data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/DOMAINNAMEHERE/DOMAINNAMEHERE.crt /docker/mailcow/data/assets/ssl/cert.pem
cp /docker/caddy/caddy_data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/DOMAINNAMEHERE/DOMAINNAMEHERE.key /docker/mailcow/data/assets/ssl/key.pem
postfix_c=$(docker ps -qaf name=postfix-mailcow)
dovecot_c=$(docker ps -qaf name=dovecot-mailcow)
nginx_c=$(docker ps -qaf name=nginx-mailcow)
docker restart ${postfix_c} ${dovecot_c} ${nginx_c}
else
echo "Certs not copied from Caddy (Not needed)"
fi

View File

@ -1,32 +0,0 @@
#
# APP_NAME = name of the application for use in the scripts
# COMPOSE_FILE = default for no app_name in the docker compose file name, app if there is
# HOST NAME = subdomain name e.g test is the name for test.website.com
# DOMAIN = number of the domain from the general config, useful when using multiple domains
# PUBLIC = if true, application will be setup with the reverse proxy and accessible from the internet
# WHITELIST = if true only allow whitelisted ips (see general config), if false allow all
# HEALTHCHECK = if true, the default docker health checks for that container will be enabled
# AUTHELIA = if true, use Authelia authentication, if false turned off.
# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote
# PORTS = port number(s) that the application will be used (comma seperated)
#
CFG_MATTERMOST_APP_NAME=mattermost
CFG_MATTERMOST_BACKUP=true
CFG_MATTERMOST_COMPOSE_FILE=default
CFG_MATTERMOST_HOST_NAME=project
CFG_MATTERMOST_DOMAIN=1
CFG_MATTERMOST_PUBLIC=true
CFG_MATTERMOST_WHITELIST=false
CFG_MATTERMOST_HEALTHCHECK=true
CFG_MATTERMOST_AUTHELIA=false
CFG_MATTERMOST_HEADSCALE=false
CFG_MATTERMOST_PORTS=8011,4431
# Application metadata
CFG_MATTERMOST_CATEGORY="Communication & Collaboration Tools"
CFG_MATTERMOST_TITLE="Mattermost"
CFG_MATTERMOST_DESCRIPTION="Team Communication"
CFG_MATTERMOST_LONG_DESCRIPTION="Mattermost is an open source, self-hosted online chat service that functions as an internal chat for organizations"
CFG_MATTERMOST_URL="https://github.com/mattermost/mattermost-server"
CFG_MATTERMOST_ACTIONS="configure|install|restart|shutdown|uninstall|tools"
CFG_MATTERMOST_ACTIONS="configure|install|restart|shutdown|uninstall|tools"
CFG_MATTERMOST_ACTIONS="configure|install|restart|shutdown|uninstall|tools"

View File

@ -1,255 +0,0 @@
#!/bin/bash
# Category : Communication & Collaboration Tools
# Description : Mattermost - Team Communication (c/u/s/r/i/t):
installMattermost()
{
local config_variables="$1"
if [[ "$mattermost" == *[cCtTuUsSrRiI]* ]]; then
local DCN=docker-compose.nginx.yml
local DCWN=docker-compose.without-nginx.yml
dockerConfigSetupToContainer silent mattermost;
local app_name=$CFG_MATTERMOST_APP_NAME
local easy_setup=$CFG_MATTERMOST_EASY_SETUP
initializeAppVariables $app_name;
fi
if [[ "$mattermost" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$mattermost" == *[tT]* ]]; then
mattermostToolsMenu;
fi
if [[ "$mattermost" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$mattermost" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$mattermost" == *[rR]* ]]; then
status=$(dockerCheckAppInstalled "traefik" "docker")
if [ "$status" == "installed" ]; then
dockerComposeDown "$app_name" "$DCN";
dockerComposeDown "$app_name" "$DCWN";
dockerComposeUp "$app_name" "$DCWN";
fi
if [ "$status" == "not_installed" ]; then
while true; do
isNotice "No Reverse Proxy has been found"
isNotice "Traefik is RECOMMENDED to use before installing Mattermost"
echo ""
isQuestion "Are you using the Reverse Proxy that comes with Mattermost? (y/n): "
read -rp "" acceptproxymattermost
if [[ "$acceptproxymattermost" =~ ^[yYnN]$ ]]; then
break
fi
isNotice "Please provide a valid input (y/n)."
done
if [[ "$MATN" == [nN] ]]; then
dockerComposeDown "$app_name" "$DCWN";
dockerComposeDown "$app_name" "$DCN";
dockerComposeUp "$app_name" "$DCN";
fi
if [[ "$MATN" == [yY] ]]; then
dockerComposeDown "$app_name" "$DCN";
dockerComposeDown "$app_name" "$DCWN";
dockerComposeUp "$app_name" "$DCWN";
fi
fi
fi
if [[ "$mattermost" == *[iI]* ]]; then
echo ""
echo "##########################################"
echo "### Install $app_name"
echo "##########################################"
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install folder and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install" "$config_variables";
isSuccessful "Install folders and Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Pulling Mattermost GitHub repo"
echo ""
backupContainerFilesToTemp $app_name;
local result=$(sudo rm -rf $containers_dir$app_name)
checkSuccess "Removing $app_name install folder"
local result=$(sudo -u $docker_install_user git clone https://github.com/mattermost/docker $containers_dir$app_name)
checkSuccess "Cloning Mattermost GitHub"
backupContainerFilesRestore $app_name;
local result=$(copyFile "loud" $containers_dir$app_name/env.example $containers_dir$app_name/.env $docker_install_user)
checkSuccess "Copying example .env file for setup"
local result=$(createFolders "loud" $docker_install_user $containers_dir$app_name/volumes/app/mattermost/{config,data,logs,plugins,client/plugins,bleve-indexes})
checkSuccess "Creating folders needed for $app_name"
if [[ $CFG_DOCKER_INSTALL_TYPE == "rootless" ]]; then
#local docker_rootless_user_id=$(id -u "$sudo_user_name")
#local result=$(sudo chown -R $docker_rootless_user_id:$docker_rootless_user_id $containers_dir$app_name/volumes/app/mattermost)
#checkSuccess "Setting folder permissions for $app_name folders"
# Issue with Rootless - https://github.com/mattermost/docker/issues/106
local result=$(sudo chmod -R 777 /docker/containers/mattermost/volumes/app/mattermost/)
checkSuccess "Setting folder permissions for $app_name folders"
else
local result=$(sudo chown -R 2000:2000 $containers_dir$app_name/volumes/app/mattermost)
checkSuccess "Setting folder permissions for $app_name folders"
fi
local result=$(sudo sed -i "s/DOMAIN=mm.example.com/DOMAIN=$host_setup/g" $containers_dir$app_name/.env)
checkSuccess "Updating .env file with Domain $host_setup"
local result=$(sudo sed -i 's/HTTP_PORT=80/HTTP_PORT='$usedport1'/' $containers_dir$app_name/.env)
checkSuccess "Updating .env file HTTP_PORT to $usedport1"
local result=$(sudo sed -i 's/HTTPS_PORT=443/HTTPS_PORT='$usedport2'/' $containers_dir$app_name/.env)
checkSuccess "Updating .env file HTTPS_PORT to $usedport2"
configSetupFileWithData $app_name ".env";
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start Mattermost"
echo ""
mattermostAddToYMLFile()
{
local file_path="$1"
sudo tee -a "$file_path" <<EOF
container_name: mattermost
#labels:
#traefik.enable: true
#traefik.http.routers.mattermost.entrypoints: web,websecure
#traefik.http.routers.mattermost.rule: Host(\`DOMAINSUBNAMEHERE\`)
#traefik.http.routers.mattermost.tls: true
#traefik.http.routers.mattermost.tls.certresolver: production
#traefik.http.routers.mattermost.middlewares:
healthcheck:
disable: false #HEALTHCHECKHERE
networks:
vpn:
ipv4_address: IPADDRESSHERE
postgres:
networks:
vpn:
ipv4_address: 10.100.0.105
networks:
vpn:
external: true
EOF
}
status=$(dockerCheckAppInstalled "traefik" "docker")
if [ "$status" == "installed" ]; then
if [[ "$OS_TYPE" == "Ubuntu" || "$OS_TYPE" == "Debian" ]]; then
if sudo grep -q "vpn:" $containers_dir$app_name/$DCWN; then
isError "The Compose file already contains custom edits. Please reinstalled $app_name"
else
removeEmptyLineAtFileEnd "$containers_dir$app_name/$DCWN";
mattermostAddToYMLFile "$containers_dir$app_name/$DCWN";
configSetupFileWithData "$app_name" "$DCWN";
dockerComposeDown "$app_name" "$DCWN";
dockerComposeUp "$app_name" "$DCWN";
fi
fi
fi
if [ "$status" == "not_installed" ]; then
isNotice "No Reverse Proxy has been found"
isNotice "Traefik is RECOMMENDED to use before installing Mattermost"
echo ""
isQuestion "Do you want to install the Reverse Proxy that comes with Mattermost? (y/n): "
read -rp "" MATN
if [[ "$MATN" == [nN] ]]; then
dockerComposeDown "$app_name" "$DCWN";
dockerComposeDown "$app_name" "$DCN";
dockerComposeUp "$app_name" "$DCN";
fi
if [[ "$MATN" == [yY] ]]; then
if [[ "$OS_TYPE" == "Ubuntu" || "$OS_TYPE" == "Debian" ]]; then
if sudo grep -q "vpn:" $containers_dir$app_name/$DCWN; then
isError "The Compose file already contains custom edits. Please reinstalled $app_name"
else
removeEmptyLineAtFileEnd "$containers_dir$app_name/$DCWN";
mattermostAddToYMLFile "$containers_dir$app_name/$DCWN";
configSetupFileWithData "$app_name" "$DCWN";
dockerComposeDown "$app_name" "$DCWN";
dockerComposeUp "$app_name" "$DCWN";
fi
fi
fi
fi
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Adding $app_name to the Apps Database table."
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
echo " You can now navigate to your new service using one of the options below : "
echo ""
menuShowFinalMessages $app_name;
menu_number=0
#sleep 3s
cd
fi
mattermost=n
}

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><path d="m406.4 48.9 2.7 54.3c44 48.7 61.4 117.6 39.5 182.4-32.7 96.7-140.6 147.5-241 113.5C107.1 365.1 52.3 259.2 85 162.5c22-65 78-109.3 142.8-121l35-41.4C153.6-2.9 50.5 65 13.6 173.9-31.7 307.8 40.1 453.1 174 498.4S453.2 471.9 498.5 338c36.7-108.7-3.8-225-92.1-289.1m-62.7 160.3-1.9-76-1.5-43.7-1-37.9s.2-18.3-.4-22.6c-.1-.9-.4-1.6-.8-2.3l-.1-.3-.1-.2c-.7-1.2-1.8-2.2-3.2-2.7-1.5-.5-3-.4-4.3.2h-.1l-.5.2c-.6.3-1.3.7-1.9 1.3-3.1 3-14 17.7-14 17.7l-23.8 29.5-27.7 33.8-47.6 59.2s-21.9 27.3-17 60.8c4.8 33.6 29.8 49.9 49.1 56.5 19.4 6.6 49.1 8.7 73.3-15 24.3-23.6 23.5-58.5 23.5-58.5" style="fill-rule:evenodd;clip-rule:evenodd;fill:#22315b"/></svg>

Before

Width:  |  Height:  |  Size: 733 B

View File

@ -1,60 +0,0 @@
#!/bin/bash
_mattermostMmctl() {
runFileOp docker exec -i mattermost mmctl --local "$@" 2>&1
}
authAdapter_mattermost_setPassword() {
local user="$1" password="$2"
[[ -z "$user" ]] && { isError "Username/email is required."; return 1; }
[[ -z "$password" ]] && password=$(generateRandomPassword)
local out; out=$(_mattermostMmctl user change-password "$user" --password "$password")
if [[ $? -ne 0 ]]; then isError "Mattermost reset failed: $out"; return 1; fi
if [[ "$user" == "${CFG_MATTERMOST_ADMIN_USER:-}" ]]; then
authPersistCfg mattermost ADMIN_PASSWORD "$password"
fi
isSuccessful "Mattermost password set for $user — New password: $password"
}
authAdapter_mattermost_createUser() {
local user="$1" password="$2" email="$3" isAdmin="$4"
[[ -z "$user" || -z "$email" ]] && { isError "Username and email are required."; return 1; }
[[ -z "$password" ]] && password=$(generateRandomPassword)
local args=(user create --username "$user" --email "$email" --password "$password")
[[ "$isAdmin" == "true" ]] && args+=(--system-admin)
local out; out=$(_mattermostMmctl "${args[@]}")
if [[ $? -ne 0 ]]; then isError "Mattermost create failed: $out"; return 1; fi
if [[ "$isAdmin" == "true" && -z "${CFG_MATTERMOST_ADMIN_USER:-}" ]]; then
authPersistCfg mattermost ADMIN_USER "$user"
authPersistCfg mattermost ADMIN_PASSWORD "$password"
fi
isSuccessful "Mattermost user created — User: $user — Email: $email — Password: $password"
}
authAdapter_mattermost_listUsers() {
_mattermostMmctl user list --json 2>/dev/null \
| jq -r '.[] | "EZ_USER\t\(.email)\t\(.username)\t\(if .roles | test("system_admin") then "admin" else "user" end)"' 2>/dev/null \
|| _mattermostMmctl user list | awk 'NF>=2 {printf "EZ_USER\t-\t%s\t-\n", $1}'
}
authAdapter_mattermost_deleteUser() {
local user="$1"
[[ -z "$user" ]] && { isError "Username/email is required."; return 1; }
local out; out=$(_mattermostMmctl user delete "$user" --confirm)
[[ $? -ne 0 ]] && { isError "Mattermost delete failed: $out"; return 1; }
isSuccessful "Mattermost user '$user' deleted."
}
authAdapter_mattermost_setAdmin() {
local user="$1" isAdmin="$2"
[[ -z "$user" ]] && { isError "Username/email is required."; return 1; }
local sub
if [[ "$isAdmin" == "true" ]]; then sub="roles system user system_admin"; else sub="roles system user"; fi
local out; out=$(_mattermostMmctl user $sub "$user" 2>&1)
[[ $? -ne 0 ]] && { isError "Mattermost role change failed: $out"; return 1; }
isSuccessful "Mattermost user '$user' admin → $isAdmin."
}

View File

@ -1,6 +0,0 @@
#!/bin/bash
appMattermostCreateAccount() {
local args="$1"
authAdapterCall mattermost createUser "$(authToolArg "$args" username)" "$(authToolArg "$args" password)" "$(authToolArg "$args" email)" "$(authToolArg "$args" admin)"
}

View File

@ -1,6 +0,0 @@
#!/bin/bash
appMattermostDeleteUser() {
local args="$1"
authAdapterCall mattermost deleteUser "$(authToolArg "$args" username)"
}

View File

@ -1,5 +0,0 @@
#!/bin/bash
appMattermostListUsers() {
authAdapterCall mattermost listUsers
}

View File

@ -1,8 +0,0 @@
#!/bin/bash
appMattermostResetPassword() {
local args="$1"
authAdapterCall mattermost setPassword \
"$(authToolArg "$args" username)" \
"$(authToolArg "$args" password)"
}

View File

@ -1,6 +0,0 @@
#!/bin/bash
appMattermostSetAdmin() {
local args="$1"
authAdapterCall mattermost setAdmin "$(authToolArg "$args" username)" "$(authToolArg "$args" admin)"
}

View File

@ -1,38 +0,0 @@
networks:
vpn:
external: true
services:
nextcloud_hpb:
image: ghcr.io/nextcloud-releases/aio-talk:latest
container_name: nextcloud_hpb
restart: unless-stopped
init: true
ports:
- PORT1:3478/tcp
- PORT1:3478/udp
- PORT2:8081/tcp
environment:
- NC_DOMAIN=NEXTCLOUDDOMAINHERE
- TALK_HOST=DOMAINSUBNAMEHERE
- TURN_SECRET=SECRET1HERE
- SIGNALING_SECRET=SECRET2HERE
- TZ=TIMEZONEHERE
- TALK_PORT=PORT2
- INTERNAL_SECRET=SECRET3HERE
- REDIS_HOST=nextcloud_hpb_redis
- REDIS_PORT=PORT3
volumes:
- ./data:/data
networks:
vpn:
ipv4_address: IPADDRESSHERE
nextcloud_hpb_redis:
image: redis:alpine
container_name: nextcloud_hpb_redis
restart: always
ports:
- "PORT3:6379"
networks:
vpn:
ipv4_address: 10.100.0.137

View File

@ -1,30 +0,0 @@
#
# APP_NAME = name of the application for use in the scripts
# COMPOSE_FILE = default for no app_name in the docker compose file name, app if there is
# HOST NAME = subdomain name e.g test is the name for test.website.com
# DOMAIN = number of the domain from the general config, useful when using multiple domains
# PUBLIC = if true, application will be setup with the reverse proxy and accessible from the internet
# WHITELIST = if true only allow whitelisted ips (see general config), if false allow all
# HEALTHCHECK = if true, the default docker health checks for that container will be enabled
# AUTHELIA = if true, use Authelia authentication, if false turned off.
# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote
# PORTS = port number(s) that the application will be used (comma seperated)
#
CFG_NEXTCLOUD_HPB_APP_NAME=nextcloud_hpb
CFG_NEXTCLOUD_HPB_BACKUP=true
CFG_NEXTCLOUD_HPB_COMPOSE_FILE=default
CFG_NEXTCLOUD_HPB_HOST_NAME=talk
CFG_NEXTCLOUD_HPB_DOMAIN=1
CFG_NEXTCLOUD_HPB_PUBLIC=true
CFG_NEXTCLOUD_HPB_WHIELIST=true
CFG_NEXTCLOUD_HPB_HEALTHCHECK=true
CFG_NEXTCLOUD_HPB_AUTHELIA=false
CFG_NEXTCLOUD_HPB_HEADSCALE=false
CFG_NEXTCLOUD_HPB_PORTS=34711,8081,6380
# Application metadata
CFG_NEXTCLOUD_HPB_CATEGORY="Cloud Storage & File Sharing"
CFG_NEXTCLOUD_HPB_TITLE="Nextcloud HPB"
CFG_NEXTCLOUD_HPB_DESCRIPTION="High-Performance Backend"
CFG_NEXTCLOUD_HPB_LONG_DESCRIPTION="Nextcloud High Performance Backend for scalable file sharing with optimized database and caching configurations"
CFG_NEXTCLOUD_HPB_URL="https://github.com/nextcloud/spaces"
CFG_NEXTCLOUD_HPB_ACTIONS="configure|install|restart|shutdown|uninstall"

View File

@ -1,157 +0,0 @@
#!/bin/bash
# Category : Cloud Storage & File Sharing
# Description : Nextcloud HPB - High-Performance Backend (c/u/s/r/i):
installNextcloud_hpb()
{
local config_variables="$1"
if [[ "$nextcloud_hpb" == *[cCtTuUsSrRiI]* ]]; then
dockerConfigSetupToContainer silent nextcloud_hpb;
local app_name=$CFG_NEXTCLOUD_HPB_APP_NAME
initializeAppVariables $app_name;
fi
if [[ "$nextcloud_hpb" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$nextcloud_hpb" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$nextcloud_hpb" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$nextcloud_hpb" == *[rR]* ]]; then
dockerComposeRestart $app_name;
fi
if [[ "$nextcloud_hpb" == *[iI]* ]]; then
echo ""
echo "##########################################"
echo "### Install $app_name"
echo "##########################################"
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install Nextcloud HPD and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install" "$config_variables";
isSuccessful "Install folders and Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up the $app_name docker-compose.yml file."
echo ""
dockerComposeSetupFile $app_name;
local random_secret_1=$(openssl rand -hex 32)
result=$(sudo sed -i "s|SECRET1HERE|${random_secret_1}|" "$containers_dir$app_name/docker-compose.yml")
checkSuccess "Updating the TURN_SECRET in docker-compose.yml."
local random_secret_2=$(openssl rand -hex 32)
result=$(sudo sed -i "s|SECRET2HERE|${random_secret_2}|" "$containers_dir$app_name/docker-compose.yml")
checkSuccess "Updating the SIGNALING_SECRET in docker-compose.yml."
local random_secret_3=$(openssl rand -hex 32)
result=$(sudo sed -i "s|SECRET3HERE|${random_secret_3}|" "$containers_dir$app_name/docker-compose.yml")
checkSuccess "Updating the INTERNAL_SECRET in docker-compose.yml."
# Ask user for nextcloud domain
local nextcloud_domain=""
while [[ -z "$nextcloud_domain" ]]; do
isQuestion "Enter your Nextcloud domain e.g (nextcloud.yourdomain.com): "
read -p "" nextcloud_domain
if [[ -z "$nextcloud_domain" ]]; then
echo "Please enter a valid domain."
fi
done
result=$(sudo sed -i "s|NEXTCLOUDDOMAINHERE|${nextcloud_domain}|" "$containers_dir$app_name/docker-compose.yml")
checkSuccess "Updating the NEXTCLOUD_URL in docker-compose.yml."
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start $app_name"
echo ""
dockerComposeUpdateAndStartApp $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Adding $app_name to the Apps Database table."
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
echo " You can now navigate to your $app_name service using any of the options below : "
echo ""
# Lets output the nextcloud talk config based on the scructure below
#echo ""
#echo "Please add the following to your Nextcloud config.php file :"
#echo ""
#echo " 'talk' => ["
#echo " 'hpb' => ["
#echo " 'url' => 'http://$host_setup:$usedport3',"
#echo " 'jwt_secret' => '$random_secret_1',"
#echo " 'jwt_issuer' => '$random_secret_2',"
#echo " 'jwt_audience' => '$random_secret_3',"
#echo " ],"
#echo " ],"
#echo "";
echo "";
echo " TURN_SECRET=$random_secret_1"
echo " SIGNALING_SECRET=$random_secret_2"
echo " INTERNAL_SECRET=$random_secret_3"
echo " TALK_PORT=$usedport1"
echo "";
menuShowFinalMessages $app_name;
menu_number=0
#sleep 3s
cd
fi
nextcloud_hpb=n
}

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><path d="M512 80v352c0 44.2-35.8 80-80 80H80c-44.2 0-80-35.8-80-80V80C0 35.8 35.8 0 80 0h352c44.2 0 80 35.8 80 80" style="fill-rule:evenodd;clip-rule:evenodd;fill:#0082c9"/><path d="M256 167.2c-40.3 0-74.5 27.2-85.3 64.2-9.3-19.4-29-33-51.8-33-31.6-.1-57.6 25.9-57.6 57.6s26 57.6 57.6 57.6c22.8 0 42.5-13.6 51.8-33 10.8 36.9 45 64.2 85.3 64.2s74.5-27.2 85.3-64.2c9.3 19.4 29 33 51.8 33 31.6 0 57.6-26 57.6-57.6s-25.8-57.7-57.5-57.7c-22.8 0-42.5 13.6-51.8 33-10.9-36.9-45.1-64.1-85.4-64.1m0 34.2c30.3 0 54.5 24.2 54.5 54.5s-24.2 54.5-54.5 54.5-54.5-24.2-54.5-54.5 24.2-54.5 54.5-54.5m-137 31.2c13.1 0 23.3 10.2 23.3 23.3s-10.2 23.3-23.3 23.3S95.5 269 95.5 256s10.3-23.4 23.5-23.4m274.1 0c13.1 0 23.3 10.2 23.3 23.3s-10.2 23.3-23.3 23.3-23.3-10.2-23.3-23.2 10.2-23.4 23.3-23.4" style="fill:#fff"/></svg>

Before

Width:  |  Height:  |  Size: 885 B

View File

@ -1,30 +0,0 @@
networks:
vpn:
external: true
services:
nextcloud_record:
image: ghcr.io/nextcloud-releases/aio-talk-recording:latest
container_name: nextcloud_record
restart: always
ports:
- "PORT1:1234"
environment:
ALLOW_ALL: "true"
HPB_DOMAIN: "HPBDOMAINHERE"
NC_DOMAIN: "NEXTCLOUDDOMAINHERE"
TZ: "TIMEZONEHERE"
RECORDING_SECRET: "SECRET1HERE"
INTERNAL_SECRET: "SECRET2HERE"
healthcheck:
disable: false #HEALTHCHECKHERE
shm_size: 2147483648
volumes:
- ./nextcloud-talk-recordings:/var/nextcloud/data
cap_drop:
- NET_RAW
networks:
vpn:
ipv4_address: IPADDRESSHERE
volumes:
nextcloud-talk-recordings:

View File

@ -1,31 +0,0 @@
#
# APP_NAME = name of the application for use in the scripts
# COMPOSE_FILE = default for no app_name in the docker compose file name, app if there is
# HOST NAME = subdomain name e.g test is the name for test.website.com
# DOMAIN = number of the domain from the general config, useful when using multiple domains
# PUBLIC = if true, application will be setup with the reverse proxy and accessible from the internet
# WHITELIST = if true only allow whitelisted ips (see general config), if false allow all
# HEALTHCHECK = if true, the default docker health checks for that container will be enabled
# AUTHELIA = if true, use Authelia authentication, if false turned off.
# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote
# PORTS = port number(s) that the application will be used (comma seperated)
#
CFG_NEXTCLOUD_RECORD_APP_NAME=nextcloud_record
CFG_NEXTCLOUD_RECORD_BACKUP=true
CFG_NEXTCLOUD_RECORD_COMPOSE_FILE=default
CFG_NEXTCLOUD_RECORD_HOST_NAME=record
CFG_NEXTCLOUD_RECORD_DOMAIN=1
CFG_NEXTCLOUD_RECORD_PUBLIC=true
CFG_NEXTCLOUD_RECORD_WHIELIST=true
CFG_NEXTCLOUD_RECORD_HEALTHCHECK=true
CFG_NEXTCLOUD_RECORD_AUTHELIA=false
CFG_NEXTCLOUD_RECORD_HEADSCALE=false
CFG_NEXTCLOUD_RECORD_PORTS=1234
# Application metadata
CFG_NEXTCLOUD_RECORD_CATEGORY="Cloud Storage & File Sharing"
CFG_NEXTCLOUD_RECORD_TITLE="Nextcloud Record"
CFG_NEXTCLOUD_RECORD_DESCRIPTION="Talk Recording Backend"
CFG_NEXTCLOUD_RECORD_LONG_DESCRIPTION="Nextcloud Record is a comprehensive recording and screen capture solution integrated with Nextcloud for multimedia workflows"
CFG_NEXTCLOUD_RECORD_URL="https://github.com/nextcloud/talk-recording"
CFG_NEXTCLOUD_RECORD_ACTIONS="configure|install|restart|shutdown|uninstall"

View File

@ -1,148 +0,0 @@
#!/bin/bash
# Category : Cloud Storage & File Sharing
# Description : Nextcloud Record - Talk Recording Backend (c/u/s/r/i):
installNextcloud_record()
{
local config_variables="$1"
if [[ "$nextcloud_record" == *[cCtTuUsSrRiI]* ]]; then
dockerConfigSetupToContainer silent nextcloud_record;
local app_name=$CFG_NEXTCLOUD_RECORD_APP_NAME
initializeAppVariables $app_name;
fi
if [[ "$nextcloud_record" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$nextcloud_record" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$nextcloud_record" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$nextcloud_record" == *[rR]* ]]; then
dockerComposeRestart $app_name;
fi
if [[ "$nextcloud_record" == *[iI]* ]]; then
echo ""
echo "##########################################"
echo "### Install $app_name"
echo "##########################################"
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install folders and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install" "$config_variables";
isSuccessful "Install folders and Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up the $app_name docker-compose.yml file."
echo ""
dockerComposeSetupFile $app_name;
local random_secret_1=$(openssl rand -hex 32)
result=$(sudo sed -i "s|SECRET1HERE|${random_secret_1}|" "$containers_dir$app_name/docker-compose.yml")
checkSuccess "Updating the RECORDING_SECRET in docker-compose.yml."
local random_secret_2=$(openssl rand -hex 32)
result=$(sudo sed -i "s|SECRET2HERE|${random_secret_2}|" "$containers_dir$app_name/docker-compose.yml")
checkSuccess "Updating the INTERNAL_SECRET in docker-compose.yml."
local nextcloud_domain=""
while [[ -z "$nextcloud_domain" ]]; do
isQuestion "Enter your Nextcloud domain e.g (nextcloud.yourdomain.com): "
read -p "" nextcloud_domain
if [[ -z "$nextcloud_domain" ]]; then
echo "Please enter a valid domain."
fi
done
result=$(sudo sed -i "s|NEXTCLOUDDOMAINHERE|${nextcloud_domain}|" "$containers_dir$app_name/docker-compose.yml")
checkSuccess "Updating the NEXTCLOUD_URL in docker-compose.yml."
local hpb_domain=""
while [[ -z "$hpb_domain" ]]; do
isQuestion "Enter your High-Performance Backend domain e.g (talk.yourdomain.com): "
read -p "" hpb_domain
if [[ -z "$hpb_domain" ]]; then
echo "Please enter a valid domain."
fi
done
result=$(sudo sed -i "s|HPBDOMAINHERE|${hpb_domain}|" "$containers_dir$app_name/docker-compose.yml")
checkSuccess "Updating the HPB_DOMAIN in docker-compose.yml."
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start $app_name"
echo ""
dockerComposeUpdateAndStartApp $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Adding $app_name to the Apps Database table."
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
echo " You can now navigate to your $app_name service using any of the options below : "
echo ""
echo "";
echo " RECORDING_SECRET=$random_secret_1"
echo " INTERNAL_SECRET=$random_secret_2"
echo "";
menuShowFinalMessages $app_name;
menu_number=0
#sleep 3s
cd
fi
nextcloud_record=n
}

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><path d="M512 80v352c0 44.2-35.8 80-80 80H80c-44.2 0-80-35.8-80-80V80C0 35.8 35.8 0 80 0h352c44.2 0 80 35.8 80 80" style="fill-rule:evenodd;clip-rule:evenodd;fill:#0082c9"/><path d="M256 167.2c-40.3 0-74.5 27.2-85.3 64.2-9.3-19.4-29-33-51.8-33-31.6-.1-57.6 25.9-57.6 57.6s26 57.6 57.6 57.6c22.8 0 42.5-13.6 51.8-33 10.8 36.9 45 64.2 85.3 64.2s74.5-27.2 85.3-64.2c9.3 19.4 29 33 51.8 33 31.6 0 57.6-26 57.6-57.6s-25.8-57.7-57.5-57.7c-22.8 0-42.5 13.6-51.8 33-10.9-36.9-45.1-64.1-85.4-64.1m0 34.2c30.3 0 54.5 24.2 54.5 54.5s-24.2 54.5-54.5 54.5-54.5-24.2-54.5-54.5 24.2-54.5 54.5-54.5m-137 31.2c13.1 0 23.3 10.2 23.3 23.3s-10.2 23.3-23.3 23.3S95.5 269 95.5 256s10.3-23.4 23.5-23.4m274.1 0c13.1 0 23.3 10.2 23.3 23.3s-10.2 23.3-23.3 23.3-23.3-10.2-23.3-23.2 10.2-23.4 23.3-23.4" style="fill:#fff"/></svg>

Before

Width:  |  Height:  |  Size: 885 B

View File

@ -1,37 +0,0 @@
networks:
DOCKERNETWORK_DATA: #LIBREPORTAL|DOCKERNETWORK_TAG|DOCKERNETWORK_DATA
external: true
services:
nginx-service: #LIBREPORTAL|SERVICE_TAG_1|nginx-service
container_name: nginx-service
image: nginx
restart: unless-stopped
hostname: nginx
# GLUETUN_OFF_BEGIN
ports:
- "PORTS_DATA_1" #LIBREPORTAL|PORTS_TAG_1|PORTS_DATA_1
# GLUETUN_OFF_END
labels:
libreportal.category: "CATEGORY_DATA" #LIBREPORTAL|CATEGORY_TAG|CATEGORY_DATA
libreportal.title: "TITLE_DATA" #LIBREPORTAL|TITLE_TAG|TITLE_DATA
traefik.enable: TRAEFIK_ENABLE_DATA #LIBREPORTAL|TRAEFIK_ENABLE_TAG|TRAEFIK_ENABLE_DATA
traefik.http.routers.nginx-service.entrypoints: web,websecure
traefik.http.routers.nginx-service.rule: Host(`DOMAINSUBNAME_DATA`) #LIBREPORTAL|DOMAINSUBNAME_TAG|DOMAINSUBNAME_DATA
traefik.http.routers.nginx-service.tls: true
traefik.http.routers.nginx-service.tls.certresolver: production
traefik.http.services.nginx-service.loadbalancer.server.port: PORT_INTERNAL_DATA_1 #LIBREPORTAL|PORT_INTERNAL_TAG_1|PORT_INTERNAL_DATA_1
traefik.http.routers.nginx-service.middlewares: MIDDLEWARE_DATA #LIBREPORTAL|MIDDLEWARE_TAG|MIDDLEWARE_DATA
healthcheck:
disable: HEALTHCHECK_DATA #LIBREPORTAL|HEALTHCHECK_TAG|HEALTHCHECK_DATA
volumes:
- SOCKET_DATA #LIBREPORTAL|SOCKET_TAG|SOCKET_DATA
- "./html:/usr/share/nginx/html"
# GLUETUN_OFF_BEGIN
networks:
DOCKERNETWORK_DATA: #LIBREPORTAL|DOCKERNETWORK_TAG|DOCKERNETWORK_DATA
ipv4_address: IP_DATA_1 #LIBREPORTAL|IP_TAG_1|IP_DATA_1
# GLUETUN_OFF_END
# GLUETUN_ON_BEGIN
# network_mode: "container:gluetun-service"
# GLUETUN_ON_END

View File

@ -1,64 +0,0 @@
#
# =============================================================================
# GENERAL CONFIGURATION
# =============================================================================
# APP_NAME = name of application for use in scripts
# COMPOSE_FILE = default for no app_name in docker compose file name, app if there is
# BACKUP = if true, include this application in backup operations
# HEALTHCHECK = if true, default docker health checks for that container will be enabled
# AUTHELIA = if true, use Authelia authentication, if false turned off.
# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote
#
CFG_NGINX_APP_NAME=nginx
CFG_NGINX_BACKUP=false
CFG_NGINX_COMPOSE_FILE=default
CFG_NGINX_HEALTHCHECK=true
CFG_NGINX_AUTHELIA=false
CFG_NGINX_HEADSCALE=false
#
# =============================================================================
# METADATA
# =============================================================================
# CATEGORY = application category for grouping
# TITLE = display name for the application
# DESCRIPTION = short description of the application
# LONG_DESCRIPTION = detailed description of the application
# URL = source repository or documentation URL
# ACTIONS = available actions for this application
#
CFG_NGINX_CATEGORY="web"
CFG_NGINX_TITLE="Nginx"
CFG_NGINX_DESCRIPTION="Web Server"
CFG_NGINX_LONG_DESCRIPTION="Nginx is a high-performance web server and reverse proxy that can also be used as a load balancer, HTTP cache, and mail proxy"
CFG_NGINX_URL="https://github.com/nginx/nginx"
CFG_NGINX_ACTIONS="configure|install|restart|shutdown|uninstall"
#
# =============================================================================
# NETWORK CONFIGURATION
# =============================================================================
# DOMAIN = number of domain from the general config, useful when using multiple domains
# HOST_NAME = subdomain name e.g test is the name for test.website.com
# WHITELIST = if true only allow whitelisted ips on traefik, if false allow all
# PUBLIC = if true, app is publicly accessible, if false, only accessible on local network
#
CFG_NGINX_DOMAIN=1
CFG_NGINX_WHITELIST=false
CFG_NGINX_HOST_NAME=web
CFG_NGINX_NETWORK=default
CFG_NGINX_PUBLIC=true
#
# =============================================================================
# PORT CONFIGURATION
# =============================================================================
# PORT_ = port configuration: app|name|external:internal|access|protocol|login|traefik|webui|description
# - app: application name
# - name: service identifier (webui, dns, ssh, etc.)
# - external:internal: port mapping (external can be 'random' for auto-allocation)
# - access: 'public' (internet accessible), 'private' (local network only), 'disabled' (not running)
# - protocol: 'tcp' or 'udp'
# - login: if true, this port requires basic-auth via Traefik (only meaningful when traefik=true)
# - traefik: if true, Traefik handles this port (reverse proxy)
# - webui: if true, this port serves the main web interface
# - description: human-readable description of the service
#
CFG_NGINX_PORT_1="nginx-service|webui|random:80|private|tcp|false|true|true|Web Interface|"

View File

@ -1,112 +0,0 @@
#!/bin/bash
# Category : Web Servers & Hosting
# Description : Nginx - Web Server (c/u/s/r/i):
installNginx()
{
local config_variables="$1"
if [[ "$nginx" == *[cCtTuUsSrRiI]* ]]; then
dockerConfigSetupToContainer silent nginx;
local app_name=$CFG_NGINX_APP_NAME
initializeAppVariables $app_name;
fi
if [[ "$nginx" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$nginx" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$nginx" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$nginx" == *[rR]* ]]; then
dockerComposeRestart $app_name;
fi
if [[ "$nginx" == *[iI]* ]]; then
isHeader "Installing $app_name"
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install folder and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install" "$config_variables";
isSuccessful "Install folders and Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up the $app_name docker-compose.yml file."
echo ""
dockerComposeSetupFile $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start $app_name"
echo ""
dockerComposeUpdateAndStartApp $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Setting up database records"
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
echo " You can now navigate to your $app_name service using any of the options below : "
echo ""
echo " NOTE - The password to login in defined in the yml install file that was installed"
echo ""
menuShowFinalMessages $app_name;
menu_number=0
#sleep 3s
cd
fi
nginx=n
}

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><path d="M255 0h1.2c6.1 2.9 12 6.1 17.8 9.7 66.2 38.1 132.4 76.1 198.6 114.2 5.2 2.8 8.2 8.5 7.6 14.4-.1 80.3 0 160.5-.1 240.7-.9 3.8-3.2 7.2-6.5 9.3L262.4 509.8c-3.5 2.7-8.2 2.9-12 .7-70.5-40.4-140.9-80.9-211.3-121.5-4.7-2.2-7.6-7-7.3-12.2V136.1c-.4-5.1 2.4-10 7.1-12.3 66.1-37.9 132.2-76 198.3-114 5.9-3.4 11.7-6.9 17.8-9.8" style="fill:#019639"/><path d="M123.7 156.1v198.6c-.2 7.4 2.6 14.6 7.8 19.9 10.1 10 25.8 11.5 37.7 3.8 7.8-5.3 12.5-14.2 12.5-23.6 0-47.9-.1-95.8 0-143.7 43.7 52.3 87.5 104.5 131.3 156.7 12.4 12.5 30.3 17.9 47.5 14.3 12.3-2.4 21.6-12.6 22.9-25.1.1-67.6.1-135.1 0-202.6-1.4-15.9-15.4-27.7-31.3-26.3-14 1.2-25.1 12.3-26.3 26.3 0 48.7-.3 97.3 0 146-42.9-50.6-85.3-101.6-128-152.4-11.5-14.7-30-22.1-48.4-19.2-14.2 1.4-25.1 13.1-25.7 27.3" style="fill:#fff"/></svg>

Before

Width:  |  Height:  |  Size: 871 B

View File

@ -1,13 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NGINX Webserver Default</title>
</head>
<body>
<h1>NGINX Webserver Default</h1>
</body>
</html>

View File

@ -1,28 +0,0 @@
networks:
vpn:
external: true
name: vpn
services:
olivetin:
container_name: olivetin
image: jamesread/olivetin:latest-3k
user: root
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro #SOCKETHERE
- ./config:/config # replace host path or volume as needed
- ./ssh:/home/olivetin/.ssh
ports:
- "PORT1:1337"
restart: unless-stopped
#labels:
#traefik.enable: true
#traefik.http.routers.olivetin.entrypoints: web,websecure
#traefik.http.routers.olivetin.rule: Host(`DOMAINSUBNAMEHERE`)
#traefik.http.routers.olivetin.tls: true
#traefik.http.routers.olivetin.tls.certresolver: production
#traefik.http.services.olivetin.loadbalancer.server.port: PORT1
#traefik.http.routers.olivetin.middlewares:
networks:
vpn:
ipv4_address: IPADDRESSHERE

View File

@ -1,32 +0,0 @@
#
# APP_NAME = name of the application for use in the scripts
# COMPOSE_FILE = default for no app_name in the docker compose file name, app if there is
# HOST NAME = subdomain name e.g test is the name for test.website.com
# DOMAIN = number of the domain from the general config, useful when using multiple domains
# PUBLIC = if true, application will be setup with the reverse proxy and accessible from the internet
# WHITELIST = if true only allow whitelisted ips (see general config), if false allow all
# HEALTHCHECK = if true, the default docker health checks for that container will be enabled
# AUTHELIA = if true, use Authelia authentication, if false turned off.
# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote
# PORTS = port number(s) that the application will be used (comma seperated)
#
CFG_OLIVETIN_APP_NAME=olivetin
CFG_OLIVETIN_BACKUP=true
CFG_OLIVETIN_COMPOSE_FILE=default
CFG_OLIVETIN_HOST_NAME=olivetin
CFG_OLIVETIN_DOMAIN=1
CFG_OLIVETIN_PUBLIC=false
CFG_OLIVETIN_WHIELIST=true
CFG_OLIVETIN_HEALTHCHECK=true
CFG_OLIVETIN_AUTHELIA=false
CFG_OLIVETIN_HEADSCALE=false
CFG_OLIVETIN_PORTS=1337
# Application metadata
CFG_OLIVETIN_CATEGORY="Miscellaneous"
CFG_OLIVETIN_TITLE="Olivetin"
CFG_OLIVETIN_DESCRIPTION="Web Interface for Linux"
CFG_OLIVETIN_LONG_DESCRIPTION="Web-based graphical user interface for Linux commands that provides a simple way to manage server operations"
CFG_OLIVETIN_URL="https://github.com/OliveTin/OliveTin"
CFG_OLIVETIN_ACTIONS="configure|install|restart|shutdown|uninstall"
CFG_OLIVETIN_ACTIONS="configure|install|restart|shutdown|uninstall"

View File

@ -1,149 +0,0 @@
#!/bin/bash
# Category : system
# Description : Olivetin - Web Interface for Linux (c/u/s/r/i):
installOlivetin()
{
if [[ "$olivetin" == *[cCtTuUsSrRiI]* ]]; then
dockerConfigSetupToContainer silent olivetin;
local app_name=$CFG_OLIVETIN_APP_NAME
initializeAppVariables $app_name;
fi
if [[ "$olivetin" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$olivetin" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$olivetin" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$olivetin" == *[rR]* ]]; then
dockerComposeRestart $app_name;
fi
if [[ "$olivetin" == *[iI]* ]]; then
echo ""
echo "##########################################"
echo "### Install $app_name"
echo "##########################################"
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install";
isSuccessful "Install Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up the $app_name docker-compose.yml file."
echo ""
dockerComposeSetupFile $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Setting up $app_name config.yaml"
echo ""
result=$(rm -rf "$containers_dir$app_name/config/config.yaml")
checkSuccess "Removing old config.yaml file"
local result=$(copyResource "$app_name" "config.yaml" "config")
checkSuccess "Copying the config.yaml for $app_name"
configSetupFileWithData $app_name "/config/config.yaml";
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start $app_name"
echo ""
dockerComposeUpdateAndStartApp $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. Setting up LibrePortal SSH Connectivity"
echo ""
if [[ $CFG_SSHKEY_LIBREPORTAL_ENABLED == "true" ]]; then
local ed_ssh_file_path=$(find $ssh_dir/public -name "*libreportal.pub" -print -quit)
local result=$(copyFile "loud" "$ed_ssh_file_path" "$containers_dir$app_name/ssh" "$docker_install_user")
checkSuccess "Copying LibrePortal SSH Key to $app_name"
dockerCommandRun "docker exec $app_name mkdir /opt/OliveTinSshKeys"
checkSuccess "Creating SSK Key folder in docker container for $app_name"
else
dockerCommandRun "docker exec $app_name dnf install -y sshpass"
checkSuccess "Installing SSHPass as not using SSH Keys for $app_name"
# Access to CLI
updateConfigOption "CFG_DOCKER_MANAGER_ENABLED" "true"
installDockerManagerUser;
fi
dockerComposeRestart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Adding $app_name to the Apps Database table."
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
echo " You can now navigate to your $app_name service using any of the options below : "
echo ""
menuShowFinalMessages $app_name;
menu_number=0
#sleep 3s
cd
fi
olivetin=n
}

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><path d="m128 212.7 125.4 13.9L382 212.7v111s-2 23.1-128.2 24.2c-126 .9-126-24.2-126-24.2v-111z" style="fill:#fff"/><path d="M382.8 451.9s-2 32-128.2 33.3c-126 1.3-126-33.3-126-33.3l-.7-127.8c4.1 6.4 25.5 24.5 125.9 23.8 126.2-1.1 128.4-24.2 128.4-24.2M127.8 79.4v133.5s0 30.1 126 29C380 240.8 382.1 213 382.1 213L382 79.4 253.4 96 128 79.4z" style="fill:#72b7f4"/><ellipse cx="256.6" cy="291.7" rx="101.2" ry="71.8" style="fill:#588000" transform="rotate(-64.081 256.613 291.73)"/><ellipse cx="301.3" cy="217.9" rx="17.9" ry="29.8" style="fill:#a00" transform="rotate(-55.257 301.259 217.89)"/><ellipse cx="256" cy="49.4" rx="140.9" ry="34.2" style="fill:#e6e6e6"/><path d="M412.1 49C411.3 2.4 282 0 256 0S100.7 2.4 99.9 49l-.2 409.6.5 1.9c2.3 8.7 20.2 51.5 154.4 51.5 2 0 4.1 0 6.3-.1 58.6-.5 101.1-8.1 126.3-22.5 22.8-13 25.1-27.9 25.3-32.1zM256 30.4c67.8 0 110 11.2 122.9 19-12.9 7.7-55.2 19-122.9 19-67.8 0-110-11.2-122.9-19 12.9-7.8 55.2-19 122.9-19m126.8 421.5s-.1.9-.7 2.3l-.1.2c-.1.2-.2.5-.4.8-4.6 8.3-26.1 28.9-127 29.9-126 1.3-126-33.3-126-33.3l-.8-128.2c-1-1.6 0 0 0 0V80.4C167.5 97.6 237.6 98.8 256 98.8c18.1 0 86.1-1.2 126.1-17.5v217zm-77.3-260.6c-20.4-9.9-44.6-8.2-68.2 4.7-22.5 12.3-41.8 33.6-54.6 59.8s-17.5 54.6-13.3 79.8c4.4 26.5 18 46.6 38.4 56.5 8.8 4.3 18.3 6.4 28.1 6.4 13 0 26.7-3.7 40.1-11.1 22.5-12.3 41.8-33.6 54.6-59.8s17.5-54.6 13.3-79.8c-4.4-26.5-18-46.6-38.4-56.5m6.2 127.2c-10.9 22.3-27.1 40.3-45.8 50.5-17.5 9.5-34.9 11.1-49 4.2-14.1-6.8-23.6-21.4-26.9-41.1-3.4-21 .6-44.8 11.5-67.2s27.1-40.3 45.8-50.5c8.8-4.8 17.5-7.5 25.8-8.2-.3 3.3.3 7 2.1 10.9 2.8 6.2 8.1 12.3 14.9 17 7.8 5.4 16 8.1 23 8.1 2.8 0 5.3-.5 7.6-1.3 1 3.3 1.9 6.8 2.5 10.4 3.4 21-.6 44.8-11.5 67.2m12.6-84.5c-5.1 7.3-19.6 6.1-32.3-2.7-6.3-4.3-11.1-9.9-13.7-15.6-2.4-5.4-2.5-10.3-.1-13.7 2.2-3.1 6.2-4.8 11.3-4.8.5 0 1.1 0 1.6.1 6.2.4 13.1 3 19.4 7.4 12.7 8.8 18.9 21.9 13.8 29.3M178.4 38.2c-4.8.2-12.5 2.6-15.3 4.1-.5.3-1 .5-1.5.8-3.1 1.7-6.4 3.5-5.7 6.6.7 2.9 3.9 3.8 7 4.6.8.2 1.8.5 2.7.8 3.4 1.1 10.9 3.6 15.7 3.6.4 0 .7 0 .9-.1 4.9-.3 8.3-1.7 10.2-4.1 1.6-2 2-4.6 1.4-7.7-1.2-6.3-6.3-9.1-15.4-8.6m11.7 14.4c-1.3 1.7-4 2.7-8 2.9-4.1.4-12.4-2.4-15.5-3.4-1-.3-1.9-.5-2.9-.8-2.2-.6-4.6-1.2-4.8-2.3-.2-.9 2.2-2.2 4.2-3.2.5-.3 1-.5 1.5-.8 2.5-1.3 9.7-3.5 14-3.7.6-.1 1.3-.1 1.9-.1 8.1 0 9.8 3.3 10.4 6.1.5 2.3.2 4-.8 5.3"/></svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -1,64 +0,0 @@
# There is a built-in micro proxy that will host the webui and REST API all on
# one port (this is called the "Single HTTP Frontend") and means you just need
# one open port in the container/firewalls/etc.
#
# Listen on all addresses available, port 1337
listenAddressSingleHTTPFrontend: 0.0.0.0:1337
# Choose from INFO (default), WARN and DEBUG
# Docs: https://docs.olivetin.app/advanced_configuration/logs.html
logLevel: "INFO"
# Security - Authentication
# This setting effectively enables or disables guests.
# If set to "true", then users will have to login to do anything.
authRequireGuestsToLogin: false
authLocalUsers:
enabled: true
# users:
# - username: alice
# usergroup: admins
# password: "$argon2id$v=19$m=65536,t=4,p=2$puyxA0s555TSFx7hnFLCXA$PyhLGpZtvpMMvc2DgMWkM8OJMKO55euwV5gm//1iwx4"
# Security - Access Control
# Policies affect the whole app (eg: ability to view the log list).
# Docs: https://docs.olivetin.app/security/acl.html
defaultPolicy:
showDiagnostics: true
showLogList: true
# Permissions affect actions (eg: ability to view a specific log).
# Docs: https://docs.olivetin.app/security/acl.html
defaultPermissions:
view: true
exec: true
logs: true
# OliveTin uses access control lists to match up policy and permissions to users.
# Docs: https://docs.olivetin.app/security/acl.html
accessControlLists:
- name: admin_acl
matchUsergroups: ["admins"]
policy:
showDiagnostics: true
permissions:
view: true
exec: true
logs: true
# Actions are commands that are executed by OliveTin, and normally show up as
# buttons on the WebUI.
#
# Docs: https://docs.olivetin.app/action_execution/create_your_first.html
actions:
# This is the most simple action, it just runs the command and flashes the
# button to indicate status.
#
# If you are running OliveTin in a container remember to pass through the
# docker socket! https://docs.olivetin.app/solutions/container-control-panel/index.html
- title: Ping the Internet
shell: ping -c 3 1.1.1.1
icon: ping
popupOnStart: execution-dialog-stdout-only

View File

@ -1,85 +0,0 @@
networks:
vpn:
external: true
services:
pipedfrontend:
container_name: piped-frontend
image: 1337kavin/piped-frontend:latest
restart: unless-stopped
depends_on:
- piped
entrypoint: ash -c 'sed -i s/pipedapi.kavin.rocks/BACKEND_HOSTNAME/g /usr/share/nginx/html/assets/* && /docker-entrypoint.sh && piped-nginx -g "daemon off;"'
networks:
vpn:
ipv4_address: 10.100.0.126
piped-proxy:
container_name: piped-proxy
image: 1337kavin/piped-proxy:latest
restart: unless-stopped
environment:
- UDS=1
volumes:
- ./piped-proxy:/app/socket
networks:
vpn:
ipv4_address: 10.100.0.127
piped:
container_name: piped-backend
image: 1337kavin/piped:latest
restart: unless-stopped
volumes:
- ./config/config.properties:/app/config.properties:ro
depends_on:
- piped-postgres
networks:
vpn:
ipv4_address: 10.100.0.128
piped-nginx:
container_name: piped-nginx
image: nginx:mainline-alpine
restart: unless-stopped
ports:
- "PORT1:80"
volumes:
- ./config/nginx.conf:/etc/nginx/nginx.conf:ro
- ./config/pipedapi.conf:/etc/nginx/conf.d/pipedapi.conf:ro
- ./config/pipedproxy.conf:/etc/nginx/conf.d/pipedproxy.conf:ro
- ./config/pipedfrontend.conf:/etc/nginx/conf.d/pipedfrontend.conf:ro
- ./config/ytproxy.conf:/etc/nginx/snippets/ytproxy.conf:ro
- ./piped-proxy:/var/run/ytproxy
depends_on:
- piped
- piped-proxy
- pipedfrontend
#labels:
#traefik.enable: true
#traefik.http.routers.piped.entrypoints: web,websecure
#traefik.http.routers.piped.rule: Host(`FRONTEND_HOSTNAME`, `BACKEND_HOSTNAME`, `PROXY_HOSTNAME`)"
#traefik.http.routers.piped.service: piped
#traefik.http.routers.piped.tls: true
#traefik.http.routers.piped.tls.certresolver: production
#traefik.http.services.piped.loadbalancer.server.port: PORT1
#traefik.http.routers.piped.middlewares:
healthcheck:
disable: false #HEALTHCHECKHERE
networks:
vpn:
ipv4_address: IPADDRESSHERE
piped-postgres:
container_name: piped-postgres
image: postgres:15
restart: unless-stopped
volumes:
- ./data/db:/var/lib/piped-postgresql/data
environment:
- postgres_DB=piped
- postgres_USER=piped
- postgres_PASSWORD=RANDOMIZEDPASSWORD1
networks:
vpn:
ipv4_address: 10.100.0.129

View File

@ -1,31 +0,0 @@
#
# APP_NAME = name of the application for use in the scripts
# COMPOSE_FILE = default for no app_name in the docker compose file name, app if there is
# HOST NAME = subdomain name e.g test is the name for test.website.com
# DOMAIN = number of the domain from the general config, useful when using multiple domains
# PUBLIC = if true, application will be setup with the reverse proxy and accessible from the internet
# WHITELIST = if true only allow whitelisted ips (see general config), if false allow all
# HEALTHCHECK = if true, the default docker health checks for that container will be enabled
# AUTHELIA = if true, use Authelia authentication, if false turned off.
# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote
# PORTS = port number(s) that the application will be used (comma seperated)
#
CFG_PIPED_APP_NAME=piped
CFG_PIPED_BACKUP=false
CFG_PIPED_COMPOSE_FILE=default
CFG_PIPED_HOST_NAME=piped
CFG_PIPED_DOMAIN=1
CFG_PIPED_PUBLIC=true
CFG_PIPED_WHITELIST=false
CFG_PIPED_HEALTHCHECK=true
CFG_PIPED_AUTHELIA=false
CFG_PIPED_HEADSCALE=false
CFG_PIPED_PORTS=8025
# Application metadata
CFG_PIPED_CATEGORY="Media & Streaming"
CFG_PIPED_TITLE="Piped"
CFG_PIPED_DESCRIPTION="Privacy-focused YouTube Proxy"
CFG_PIPED_LONG_DESCRIPTION="Piped is an alternative privacy-friendly YouTube frontend which is efficient and extensible with a focus on user experience"
CFG_PIPED_URL="https://github.com/TeamPiped/Piped"
CFG_PIPED_ACTIONS="configure|install|restart|shutdown|uninstall"
CFG_PIPED_ACTIONS="configure|install|restart|shutdown|uninstall"

View File

@ -1,118 +0,0 @@
#!/bin/bash
# Category : Media & Streaming
# Description : Piped - Privacy-focused YouTube Proxy (c/u/s/r/i/t):
installPiped()
{
local config_variables="$1"
if [[ "$piped" == *[cCtTuUsSrRiI]* ]]; then
dockerConfigSetupToContainer silent piped;
local app_name=$CFG_PIPED_APP_NAME
initializeAppVariables $app_name;
fi
if [[ "$piped" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$piped" == *[tT]* ]]; then
pipedToolsMenu;
fi
if [[ "$piped" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$piped" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$piped" == *[rR]* ]]; then
dockerComposeRestart $app_name;
fi
if [[ "$piped" == *[iI]* ]]; then
echo ""
echo "##########################################"
echo "### Install $app_name"
echo "##########################################"
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install folder and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install" "$config_variables";
isSuccessful "Install folders and Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up the $app_name docker-compose.yml file."
echo ""
dockerComposeSetupFile $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start $app_name"
echo ""
dockerComposeUpdateAndStartApp $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Adding $app_name to the Apps Database table."
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
echo " You can now navigate to your $app_name service using any of the options below : "
echo ""
menuShowFinalMessages $app_name;
menu_number=0
#sleep 3s
cd
fi
piped=n
}

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><linearGradient id="piped_svg__a" x1="-6.776" x2="233.682" y1="534.821" y2="488.08" gradientTransform="translate(0 -256)" gradientUnits="userSpaceOnUse"><stop offset=".16" style="stop-color:#8b1010"/><stop offset="1" style="stop-color:#f84330"/></linearGradient><path d="M97.3 16.8s4.6-3.4 12.7-8c4.6-2 10.3-4 16.8-5.8 6.8-1.4 14.4-2.5 22.3-3.1 8 0 16.1.5 23.8 1.5C180.4 3 187.4 5 193.3 7c11.4 5.3 18.5 9.8 18.5 9.8v469.4H97.4V37c-.1-12.8-.1-20.2-.1-20.2" style="fill:url(#piped_svg__a)"/><linearGradient id="piped_svg__b" x1="162.891" x2="142.908" y1="705.793" y2="799.808" gradientTransform="translate(0 -256)" gradientUnits="userSpaceOnUse"><stop offset=".174" style="stop-color:#493b32"/><stop offset=".61" style="stop-color:#dbccc4"/></linearGradient><path d="M154.6 512c-31.8 0-57.6-10.4-57.6-23.2s25.7-23.2 57.6-23.2 57.6 10.4 57.6 23.2-25.7 23.2-57.6 23.2" style="fill:url(#piped_svg__b)"/><linearGradient id="piped_svg__c" x1="92.319" x2="443.546" y1="446.078" y2="377.806" gradientTransform="translate(0 -256)" gradientUnits="userSpaceOnUse"><stop offset=".16" style="stop-color:#8b1010"/><stop offset="1" style="stop-color:#f84330"/></linearGradient><path d="M248.6 101.7s0-6-.1-13.9c-.1-3.5-.2-7.4-.3-11.4-.1-3.9-.3-8.1-.4-12.4-.1-4.6-.1-9.7 0-14.9.2-5.8.4-11.9.7-17.6.9-13.3 1.7-23.6 1.7-23.6s9.1-.8 24.6-.9c3.7.2 7.8.6 12.1 1.2 4.3.5 9 1.3 13.9 2.2 4.7 1.2 9.6 2.7 14.6 4.4s10.2 3.8 15.5 6.1c5 2.7 10 5.7 15.1 9.1 5 3.3 10.1 7 15.1 11 4.7 4.3 9.3 8.9 13.8 13.9q6.45 7.65 12.3 16.2 5.55 8.85 10.5 18.3c3 6.5 5.8 13.2 8.3 20 2.2 7 4.1 14 5.8 21.2 1.3 7.2 2.3 14.6 3 21.9.4 7.3.4 14.7.2 21.9-.6 7.2-1.5 14.4-2.7 21.4-1.6 6.9-3.4 13.7-5.6 20.3-2.5 6.5-5.3 12.7-8.3 18.7-3.4 5.8-7 11.4-10.8 16.7q-6.15 7.65-12.9 14.4c-4.9 4.2-9.9 8-14.9 11.6-5.1 3.5-10.2 6.8-15.4 9.7-5.6 2.5-11.2 4.7-16.6 6.7-5.5 2-10.8 3.6-16 5-5.5 1.1-10.8 2-15.8 2.7s-9.7 1.3-14 1.7c-9.1.3-16.4.3-21.4.3s-7.7-.1-7.7-.1.2-6 .5-14.5c.1-4 .2-8.6.3-13.5s.1-10.2.1-15.7c-.1-5.8-.2-11.9-.3-18-.2-6.6-.5-13.2-.8-19.3-.7-13.4-1.4-23.5-1.4-23.5s4.3.3 11.6.3c3.5-.1 7.6-.5 12.1-1 4.3-.8 9-1.8 13.7-3.3 4.5-1.7 8.9-3.8 13.3-6.3 2-1.4 4-2.8 5.9-4.4q2.7-2.4 5.1-5.1c1.5-1.9 2.9-3.8 4.1-5.8 1.1-2.1 2.2-4.2 3-6.4s1.4-4.5 1.8-6.7c.3-2.3.5-4.6.6-7-.1-2.3-.3-4.7-.7-7-.5-2.3-1.2-4.6-2-6.9-.9-2.2-2-4.4-3.2-6.6-1.3-2.1-2.7-4.1-4.3-6.1-1.7-1.9-3.4-3.8-5.3-5.5-2-1.7-4-3.3-6.1-4.8-4.5-2.8-9.1-5.3-13.7-7.3-4.9-1.8-9.7-3.3-14.2-4.4-4.7-.9-8.9-1.6-12.5-2-7.4-.8-11.9-1-11.9-1" style="fill:url(#piped_svg__c)"/><linearGradient id="piped_svg__d" x1="267.425" x2="236.737" y1="216.765" y2="410.524" gradientTransform="translate(0 -256)" gradientUnits="userSpaceOnUse"><stop offset=".174" style="stop-color:#493b32"/><stop offset=".61" style="stop-color:#dbccc4"/></linearGradient><path d="M252.5 102.7c-14.1 0-25.4-21.3-25.4-47.7s11.4-47.7 25.4-47.7c14.1 0 25.4 21.3 25.4 47.7s-11.4 47.7-25.4 47.7" style="fill:url(#piped_svg__d)"/><linearGradient id="piped_svg__e" x1="269.882" x2="236.076" y1="402.965" y2="616.406" gradientTransform="translate(0 -256)" gradientUnits="userSpaceOnUse"><stop offset=".174" style="stop-color:#493b32"/><stop offset=".61" style="stop-color:#dbccc4"/></linearGradient><path d="M253.4 303.6c-14.1 0-25.4-23.5-25.4-52.6s11.4-52.6 25.4-52.6c14.1 0 25.4 23.5 25.4 52.6s-11.3 52.6-25.4 52.6" style="fill:url(#piped_svg__e)"/></svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -1,38 +0,0 @@
networks:
DOCKERNETWORK_DATA: #LIBREPORTAL|DOCKERNETWORK_TAG|DOCKERNETWORK_DATA
external: true
services:
portainer-service: #LIBREPORTAL|SERVICE_TAG_1|portainer-service
container_name: portainer-service
image: portainer/portainer-ce
restart: unless-stopped
hostname: portainer
# GLUETUN_OFF_BEGIN
ports:
- "PORTS_DATA_1" #LIBREPORTAL|PORTS_TAG_1|PORTS_DATA_1
- "PORTS_DATA_2" #LIBREPORTAL|PORTS_TAG_2|PORTS_DATA_2
# GLUETUN_OFF_END
labels:
libreportal.category: "CATEGORY_DATA" #LIBREPORTAL|CATEGORY_TAG|CATEGORY_DATA
libreportal.title: "TITLE_DATA" #LIBREPORTAL|TITLE_TAG|TITLE_DATA
traefik.enable: TRAEFIK_ENABLE_DATA #LIBREPORTAL|TRAEFIK_ENABLE_TAG|TRAEFIK_ENABLE_DATA
traefik.http.routers.portainer-service.entrypoints: web,websecure
traefik.http.routers.portainer-service.rule: Host(`DOMAINSUBNAME_DATA`) #LIBREPORTAL|DOMAINSUBNAME_TAG|DOMAINSUBNAME_DATA
traefik.http.routers.portainer-service.tls: true
traefik.http.routers.portainer-service.tls.certresolver: production
traefik.http.services.portainer-service.loadbalancer.server.port: PORT_INTERNAL_DATA_1 #LIBREPORTAL|PORT_INTERNAL_TAG_1|PORT_INTERNAL_DATA_1
traefik.http.routers.portainer-service.middlewares: MIDDLEWARE_DATA #LIBREPORTAL|MIDDLEWARE_TAG|MIDDLEWARE_DATA
healthcheck:
disable: HEALTHCHECK_DATA #LIBREPORTAL|HEALTHCHECK_TAG|HEALTHCHECK_DATA
volumes:
- SOCKET_DATA #LIBREPORTAL|SOCKET_TAG|SOCKET_DATA
- "./portainer-data/:/data"
# GLUETUN_OFF_BEGIN
networks:
DOCKERNETWORK_DATA: #LIBREPORTAL|DOCKERNETWORK_TAG|DOCKERNETWORK_DATA
ipv4_address: IP_DATA_1 #LIBREPORTAL|IP_TAG_1|IP_DATA_1
# GLUETUN_OFF_END
# GLUETUN_ON_BEGIN
# network_mode: "container:gluetun-service"
# GLUETUN_ON_END

View File

@ -1,65 +0,0 @@
#
# =============================================================================
# GENERAL CONFIGURATION
# =============================================================================
# APP_NAME = name of application for use in scripts
# COMPOSE_FILE = default for no app_name in docker-compose file name, app if there is
# BACKUP = if true, include this application in backup operations
# HEALTHCHECK = if true, default docker health checks for that container will be enabled
# AUTHELIA = if true, use Authelia authentication, if false turned off.
# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote
#
CFG_PORTAINER_APP_NAME=portainer
CFG_PORTAINER_BACKUP=true
CFG_PORTAINER_COMPOSE_FILE=default
CFG_PORTAINER_HEALTHCHECK=true
CFG_PORTAINER_AUTHELIA=false
CFG_PORTAINER_HEADSCALE=false
#
# =============================================================================
# METADATA
# =============================================================================
# CATEGORY = application category for grouping
# TITLE = display name for the application
# DESCRIPTION = short description of the application
# LONG_DESCRIPTION = detailed description of the application
# URL = source repository or documentation URL
# ACTIONS = available actions for this application
#
CFG_PORTAINER_CATEGORY="Development"
CFG_PORTAINER_TITLE="Portainer"
CFG_PORTAINER_DESCRIPTION="Docker Management"
CFG_PORTAINER_LONG_DESCRIPTION="Portainer is a lightweight management UI for Docker, Docker Swarm, and Kubernetes that allows you to manage your containers easily"
CFG_PORTAINER_URL="https://github.com/portainer/portainer"
CFG_PORTAINER_ACTIONS="configure|install|restart|shutdown|uninstall"
#
# =============================================================================
# NETWORK CONFIGURATION
# =============================================================================
# DOMAIN = number of domain from the general config, useful when using multiple domains
# HOST_NAME = subdomain name e.g test is the name for test.website.com
# WHITELIST = if true only allow whitelisted ips on traefik, if false allow all
# PUBLIC = if true, app is publicly accessible, if false, only accessible on local network
#
CFG_PORTAINER_DOMAIN=1
CFG_PORTAINER_WHITELIST=false
CFG_PORTAINER_HOST_NAME=portainer
CFG_PORTAINER_NETWORK=default
CFG_PORTAINER_PUBLIC=true
#
# =============================================================================
# PORT CONFIGURATION
# =============================================================================
# PORT_ = port configuration: app|name|external:internal|access|protocol|login|traefik|webui|description
# - app: application name
# - name: service identifier (webui, api, ssh, etc.)
# - external:internal: port mapping (external can be 'random' for auto-allocation)
# - access: 'public' (internet accessible), 'private' (local network only), 'disabled' (not running)
# - protocol: 'tcp' or 'udp'
# - login: if true, this port requires basic-auth via Traefik (only meaningful when traefik=true)
# - traefik: if true, Traefik handles this port (reverse proxy)
# - webui: if true, this port serves the main web interface
# - description: human-readable description of the service
#
CFG_PORTAINER_PORT_1="portainer-service|webui|random:9000|public|tcp|false|true|true|Web Interface|"
CFG_PORTAINER_PORT_2="portainer-service|agent-edge|random:8000|disabled|tcp|false|false|false|Edge Agent|"

View File

@ -1,111 +0,0 @@
#!/bin/bash
# Category : Development & Version Control
# Description : Portainer - Docker Management (c/u/s/r/i):
installPortainer()
{
local config_variables="$1"
if [[ "$portainer" == *[cCtTuUsSrRiI]* ]]; then
dockerConfigSetupToContainer silent portainer;
local app_name=$CFG_PORTAINER_APP_NAME
initializeAppVariables $app_name;
fi
if [[ "$portainer" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$portainer" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$portainer" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$portainer" == *[rR]* ]]; then
dockerComposeRestart $app_name;
fi
if [[ "$portainer" == *[iI]* ]]; then
isHeader "Installing $app_name"
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install folder and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install" "$config_variables";
isSuccessful "Install folders and Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up the $app_name docker-compose.yml file."
echo ""
dockerComposeSetupFile $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start $app_name"
echo ""
dockerComposeUpdateAndStartApp $app_name install;
dockerComposeRestart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Adding $app_name to the Apps Database table."
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
echo " You can now navigate to your new service using one of the options below : "
echo ""
menuShowFinalMessages $app_name;
menu_number=0
#sleep 3s
cd
fi
portainer=n
}

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><path d="M412 96.8 282.7 22V0h-16v21.8l-.2-.3-130.2 75.3H73.1v16h114.2v77.5h41.4v-77.5h38V335c.6 0 11.6-.2 16 1.9V112.8h11.4v226.3c6.2 3.1 11.7 6.6 16 11.5V112.8h128.8v-16zm-191.1 51.9h-25.8v-35.9h25.8zm-52.6-51.9 98.4-56.9v56.9zm114.4-56.3L380 96.8h-97.3zM82.6 304.7c0 26.2 12.9 49.2 32.4 63.7 5.1-1.4 10.2-2.2 15.4-2.4 2.2 0 3.5.2 5.7.4 6-25.4 29.5-42.4 56.8-42.4 15.4 0 30.7 4.3 41 14.3 4.8-10.2 6.4-21.5 6.4-33.6 0-13.9-3.5-27.6-10.5-39.5H93.1c-6.8 11.9-10.5 25.6-10.5 39.5m11.5-87.4h41.4v41.6H94.1zm46.7-46.3h41.4v41.6h-41.4zm-46.7 0h41.4v41.6H94.1zm46.7 46.3h41.4v41.6h-41.4zm46.5 0h41.4v41.6h-41.4zm135.6 179.4c0-30.1-24.4-54.5-54.5-54.5-11.5 0-22 3.5-30.8 9.6-10.2-11.8-25-19.2-41.6-19.2-25.8 0-47.4 18-53.1 42-1.9-.4-3.9-.4-5.9-.1-30.3 0-54.7 24.4-54.7 54.5s24.6 54.5 54.7 54.5c3.9 0 7.6-.4 11.3-1.2 9.2 17.6 27.5 29.7 48.6 29.7 18.3 0 34.5-9.2 44.5-23.1 9.4 7.8 21.5 12.5 34.8 12.5 30.1 0 54.5-24.4 54.5-54.5 0-12.1-4.1-23.4-10.7-32.4 1.9-5.7 2.9-11.5 2.9-17.8" style="fill-rule:evenodd;clip-rule:evenodd;fill:#13bef9"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,61 +0,0 @@
networks:
vpn:
external: true
services:
seafile:
image: seafileltd/seafile-mc:12.0-latest
container_name: seafile
ports:
- "PORT1:80"
# - "443:443" # If https is enabled, cancel the comment.
volumes:
- ./seafile-data:/shared # Requested, specifies the path to Seafile data persistent store.
environment:
- DB_HOST=seafile-mysql
- DB_ROOT_PASSWD=RANDOMIZEDPASSWORD1 # Requested, the value should be root's password of MySQL service.
- TIME_ZONE=TIMEZONEHERE # Optional, default is UTC. Should be uncommented and set to your local time zone.
- SEAFILE_ADMIN_EMAIL=EMAILHERE # Specifies Seafile admin user, default is 'me@example.com'.
- SEAFILE_ADMIN_PASSWORD=RANDOMIZEDPASSWORD2 # Specifies Seafile admin password, default is 'asecret'.
- SEAFILE_SERVER_LETSENCRYPT=false # Whether to use https or not.
- SEAFILE_SERVER_HOSTNAME=DOMAINSUBNAMEHERE # Specifies your host name if https is enabled.
- JWT_PRIVATE_KEY=RANDOMIZEDPASSWORD3
- CSRF_TRUSTED_ORIGINS=https://DOMAINSUBNAMEHERE
- ALLOWED_HOSTS=DOMAINSUBNAMEHERE
- SECURE_PROXY_SSL_HEADER=('HTTP_X_FORWARDED_PROTO', 'https')
#labels:
#traefik.enable: true
#traefik.http.routers.seafile.entrypoints: web,websecure
#traefik.http.routers.seafile.rule: Host(`DOMAINSUBNAMEHERE`)
#traefik.http.routers.seafile.tls: true
#traefik.http.routers.seafile.tls.certresolver: production
#traefik.http.routers.seafile.middlewares:
healthcheck:
disable: false #HEALTHCHECKHERE
depends_on:
- seafile-mysql
- seafile-memcached
networks:
vpn:
ipv4_address: IPADDRESSHERE
seafile-mysql:
image: mariadb:10.11
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=RANDOMIZEDPASSWORD1 # Requested, set the root's password of MySQL service.
- MYSQL_LOG_CONSOLE=true
- MARIADB_AUTO_UPGRADE=1
volumes:
- ./seafile-mysql/db:/var/lib/mysql # Requested, specifies the path to MySQL data persistent store.
networks:
vpn:
ipv4_address: 10.100.0.132
seafile-memcached:
image: memcached:1.6.18
container_name: seafile-memcached
entrypoint: memcached -m 256 -p PORT2
networks:
vpn:
ipv4_address: 10.100.0.133

View File

@ -1,341 +0,0 @@
# You can leave this on "local". If you change it to production most console commands will ask for extra confirmation.
# Never set it to "testing".
APP_ENV=local
# Set to true if you want to see debug information in error screens.
APP_DEBUG=false
# This should be your email address.
# If you use Docker or similar, you can set this variable from a file by using SITE_OWNER_FILE
# The variable is used in some errors shown to users who aren't admin.
SITE_OWNER=EMAILHERE
# The encryption key for your sessions. Keep this very secure.
# Change it to a string of exactly 32 chars or use something like `php artisan key:generate` to generate it.
# If you use Docker or similar, you can set this variable from a file by using APP_KEY_FILE
#
# Avoid the "#" character in your APP_KEY, it may break things.
#
APP_KEY=SomeRandomStringOf32CharsExactly
# Firefly III will launch using this language (for new users and unauthenticated visitors)
# For a list of available languages: https://github.com/firefly-iii/firefly-iii/tree/main/resources/lang
#
# If text is still in English, remember that not everything may have been translated.
DEFAULT_LANGUAGE=en_US
# The locale defines how numbers are formatted.
# by default this value is the same as whatever the language is.
DEFAULT_LOCALE=equal
# Change this value to your preferred time zone.
# Example: Europe/Amsterdam
# For a list of supported time zones, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
TZ=TIMEZONEHERE
# TRUSTED_PROXIES is a useful variable when using Docker and/or a reverse proxy.
# Set it to ** and reverse proxies work just fine.
TRUSTED_PROXIES=
# The log channel defines where your log entries go to.
# Several other options exist. You can use 'single' for one big fat error log (not recommended).
# Also available are 'syslog', 'errorlog' and 'stdout' which will log to the system itself.
# A rotating log option is 'daily', creates 5 files that (surprise) rotate.
# A cool option is 'papertrail' for cloud logging
# Default setting 'stack' will log to 'daily' and to 'stdout' at the same time.
LOG_CHANNEL=stack
# Log level. You can set this from least severe to most severe:
# debug, info, notice, warning, error, critical, alert, emergency
# If you set it to debug your logs will grow large, and fast. If you set it to emergency probably
# nothing will get logged, ever.
APP_LOG_LEVEL=notice
# Audit log level.
# The audit log is used to log notable Firefly III events on a separate channel.
# These log entries may contain sensitive financial information.
# The audit log is disabled by default.
#
# To enable it, set AUDIT_LOG_LEVEL to "info"
# To disable it, set AUDIT_LOG_LEVEL to "emergency"
AUDIT_LOG_LEVEL=emergency
#
# If you want, you can redirect the audit logs to another channel.
# Set 'audit_stdout', 'audit_syslog', 'audit_errorlog' to log to the system itself.
# Use audit_daily to log to a rotating file.
# Use audit_papertrail to log to papertrail.
#
# If you do this, the audit logs may be mixed with normal logs because the settings for these channels
# are often the same as the settings for the normal logs.
AUDIT_LOG_CHANNEL=
#
# Used when logging to papertrail:
# Also used when audit logs log to papertrail:
#
PAPERTRAIL_HOST=
PAPERTRAIL_PORT=
# Database credentials. Make sure the database exists. I recommend a dedicated user for Firefly III
# For other database types, please see the FAQ: https://docs.firefly-iii.org/firefly-iii/faq/self-hosted/#i-want-to-use-sqlite
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
# Use "pgsql" for PostgreSQL
# Use "mysql" for MySQL and MariaDB.
# Use "sqlite" for SQLite.
DB_CONNECTION=mysql
DB_HOST=firefly_iii_db
DB_PORT=3306
DB_DATABASE=firefly
DB_USERNAME=firefly
DB_PASSWORD=secret_firefly_password
# leave empty or omit when not using a socket connection
DB_SOCKET=
# MySQL supports SSL. You can configure it here.
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
MYSQL_USE_SSL=false
MYSQL_SSL_VERIFY_SERVER_CERT=true
# You need to set at least of these options
MYSQL_SSL_CAPATH=/etc/ssl/certs/
MYSQL_SSL_CA=
MYSQL_SSL_CERT=
MYSQL_SSL_KEY=
MYSQL_SSL_CIPHER=
# PostgreSQL supports SSL. You can configure it here.
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
PGSQL_SSL_MODE=prefer
PGSQL_SSL_ROOT_CERT=null
PGSQL_SSL_CERT=null
PGSQL_SSL_KEY=null
PGSQL_SSL_CRL_FILE=null
# more PostgreSQL settings
PGSQL_SCHEMA=public
# If you're looking for performance improvements, you could install memcached or redis
CACHE_DRIVER=file
SESSION_DRIVER=file
# If you set either of the options above to 'redis', you might want to update these settings too
# If you use Docker or similar, you can set REDIS_HOST_FILE, REDIS_PASSWORD_FILE or
# REDIS_PORT_FILE to set the value from a file instead of from an environment variable
# can be tcp, unix or http
REDIS_SCHEME=tcp
# use only when using 'unix' for REDIS_SCHEME. Leave empty otherwise.
REDIS_PATH=
# use only when using 'tcp' or 'http' for REDIS_SCHEME. Leave empty otherwise.
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
# Use only with Redis 6+ with proper ACL set. Leave empty otherwise.
REDIS_USERNAME=
REDIS_PASSWORD=
# always use quotes and make sure redis db "0" and "1" exists. Otherwise change accordingly.
REDIS_DB="0"
REDIS_CACHE_DB="1"
# Cookie settings. Should not be necessary to change these.
# If you use Docker or similar, you can set COOKIE_DOMAIN_FILE to set
# the value from a file instead of from an environment variable
# Setting samesite to "strict" may give you trouble logging in.
COOKIE_PATH="/"
COOKIE_DOMAIN=
COOKIE_SECURE=false
COOKIE_SAMESITE=lax
# If you want Firefly III to email you, update these settings
# For instructions, see: https://docs.firefly-iii.org/firefly-iii/advanced-installation/email/#email
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
MAIL_MAILER=log
MAIL_HOST=null
MAIL_PORT=2525
MAIL_FROM=changeme@example.com
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_SENDMAIL_COMMAND=
# Other mail drivers:
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
MAILGUN_DOMAIN=
MAILGUN_SECRET=
# If you are on EU region in mailgun, use api.eu.mailgun.net, otherwise use api.mailgun.net
# If you use Docker or similar, you can set this variable from a file by appending it with _FILE
MAILGUN_ENDPOINT=api.mailgun.net
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
MANDRILL_SECRET=
SPARKPOST_SECRET=
# Firefly III can send you the following messages.
SEND_ERROR_MESSAGE=true
# These messages contain (sensitive) transaction information:
SEND_REPORT_JOURNALS=true
# Set this value to true if you want to set the location of certain things, like transactions.
# Since this involves an external service, it's optional and disabled by default.
ENABLE_EXTERNAL_MAP=false
# Set this value to true if you want Firefly III to download currency exchange rates
# from the internet. These rates are hosted by the creator of Firefly III inside
# an Azure Storage Container.
# Not all currencies may be available. Rates may be wrong.
ENABLE_EXTERNAL_RATES=false
# The map will default to this location:
MAP_DEFAULT_LAT=51.983333
MAP_DEFAULT_LONG=5.916667
MAP_DEFAULT_ZOOM=6
#
# Some objects have room for an URL, like transactions and webhooks.
# By default, the following protocols are allowed:
# http, https, ftp, ftps, mailto
#
# To change this, set your preferred comma separated set below.
# Be sure to include http, https and other default ones if you need to.
#
VALID_URL_PROTOCOLS=
#
# Firefly III authentication settings
#
#
# Firefly III supports a few authentication methods:
# - 'web' (default, uses built in DB)
# - 'remote_user_guard' for Authelia etc
# Read more about these settings in the documentation.
# https://docs.firefly-iii.org/firefly-iii/advanced-installation/authentication
#
# LDAP is no longer supported :(
#
AUTHENTICATION_GUARD=web
#
# Remote user guard settings
#
AUTHENTICATION_GUARD_HEADER=REMOTE_USER
AUTHENTICATION_GUARD_EMAIL=
#
# Firefly III generates a basic keypair for your OAuth tokens.
# If you want, you can overrule the key with your own (secure) value.
# It's also possible to set PASSPORT_PUBLIC_KEY_FILE or PASSPORT_PRIVATE_KEY_FILE
# if you're using Docker secrets or similar solutions for secret management
#
PASSPORT_PRIVATE_KEY=
PASSPORT_PUBLIC_KEY=
#
# Extra authentication settings
#
CUSTOM_LOGOUT_URL=
# You can disable the X-Frame-Options header if it interferes with tools like
# Organizr. This is at your own risk. Applications running in frames run the risk
# of leaking information to their parent frame.
DISABLE_FRAME_HEADER=false
# You can disable the Content Security Policy header when you're using an ancient browser
# or any version of Microsoft Edge / Internet Explorer (which amounts to the same thing really)
# This leaves you with the risk of not being able to stop XSS bugs should they ever surface.
# This is at your own risk.
DISABLE_CSP_HEADER=false
# If you wish to track your own behavior over Firefly III, set valid analytics tracker information here.
# Nobody uses this except for me on the demo site. But hey, feel free to use this if you want to.
# Do not prepend the TRACKER_URL with http:// or https://
# The only tracker supported is Matomo.
# You can set the following variables from a file by appending them with _FILE:
TRACKER_SITE_ID=
TRACKER_URL=
#
# Firefly III supports webhooks. These are security sensitive and must be enabled manually first.
#
ALLOW_WEBHOOKS=false
#
# The static cron job token can be useful when you use Docker and wish to manage cron jobs.
# 1. Set this token to any 32-character value (this is important!).
# 2. Use this token in the cron URL instead of a user's command line token that you can find in /profile
#
# For more info: https://docs.firefly-iii.org/firefly-iii/advanced-installation/cron/
#
# You can set this variable from a file by appending it with _FILE
#
STATIC_CRON_TOKEN=
# You can fine tune the start-up of a Docker container by editing these environment variables.
# Use this at your own risk. Disabling certain checks and features may result in lots of inconsistent data.
# However if you know what you're doing you can significantly speed up container start times.
# Set each value to true to enable, or false to disable.
# Set this to true to build all locales supported by Firefly III.
# This may take quite some time (several minutes) and is generally not recommended.
# If you wish to change or alter the list of locales, start your Docker container with
# `docker run -v locale.gen:/etc/locale.gen -e DKR_BUILD_LOCALE=true`
# and make sure your preferred locales are in your own locale.gen.
DKR_BUILD_LOCALE=false
# Check if the SQLite database exists. Can be skipped if you're not using SQLite.
# Won't significantly speed up things.
DKR_CHECK_SQLITE=true
# Run database creation and migration commands. Disable this only if you're 100% sure the DB exists
# and is up to date.
DKR_RUN_MIGRATION=true
# Run database upgrade commands. Disable this only when you're 100% sure your DB is up-to-date
# with the latest fixes (outside of migrations!)
DKR_RUN_UPGRADE=true
# Verify database integrity. Includes all data checks and verifications.
# Disabling this makes Firefly III assume your DB is intact.
DKR_RUN_VERIFY=true
# Run database reporting commands. When disabled, Firefly III won't go over your data to report current state.
# Disabling this should have no impact on data integrity or safety but it won't warn you of possible issues.
DKR_RUN_REPORT=true
# Generate OAuth2 keys.
# When disabled, Firefly III won't attempt to generate OAuth2 Passport keys. This won't be an issue, IFF (if and only if)
# you had previously generated keys already and they're stored in your database for restoration.
DKR_RUN_PASSPORT_INSTALL=true
# Leave the following configuration vars as is.
# Unless you like to tinker and know what you're doing.
APP_NAME=FireflyIII
BROADCAST_DRIVER=log
QUEUE_DRIVER=sync
CACHE_PREFIX=firefly
PUSHER_KEY=
IPINFO_TOKEN=
PUSHER_SECRET=
PUSHER_ID=
DEMO_USERNAME=
DEMO_PASSWORD=
FIREFLY_III_LAYOUT=v1
#
# If you have trouble configuring your Firefly III installation, DON'T BOTHER setting this variable.
# It won't work. It doesn't do ANYTHING. Don't believe the lies you read online. I'm not joking.
# This configuration value WILL NOT HELP.
#
# Notable exception to this rule is Synology, which, according to some users, will use APP_URL to rewrite stuff.
#
# This variable is ONLY used in some of the emails Firefly III sends around. Nowhere else.
# So when configuring anything WEB related this variable doesn't do anything. Nothing
#
# If you're stuck I understand you get desperate but look SOMEWHERE ELSE.
#
APP_URL=http://localhost

View File

@ -1,31 +0,0 @@
#
# APP_NAME = name of the application for use in the scripts
# COMPOSE_FILE = default for no app_name in the docker compose file name, app if there is
# HOST NAME = subdomain name e.g test is the name for test.website.com
# DOMAIN = number of the domain from the general config, useful when using multiple domains
# PUBLIC = if true, application will be setup with the reverse proxy and accessible from the internet
# WHITELIST = if true only allow whitelisted ips (see general config), if false allow all
# HEALTHCHECK = if true, the default docker health checks for that container will be enabled
# AUTHELIA = if true, use Authelia authentication, if false turned off.
# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote
# PORTS = port number(s) that the application will be used (comma seperated)
#
CFG_SEAFILE_APP_NAME=seafile
CFG_SEAFILE_BACKUP=true
CFG_SEAFILE_COMPOSE_FILE=default
CFG_SEAFILE_HOST_NAME=files
CFG_SEAFILE_DOMAIN=1
CFG_SEAFILE_PUBLIC=true
CFG_SEAFILE_WHIELIST=false
CFG_SEAFILE_HEALTHCHECK=true
CFG_SEAFILE_AUTHELIA=false
CFG_SEAFILE_HEADSCALE=false
CFG_SEAFILE_PORTS=9844,11212
# Application metadata
CFG_SEAFILE_CATEGORY="Cloud Storage & File Sharing"
CFG_SEAFILE_TITLE="Seafile"
CFG_SEAFILE_DESCRIPTION="File Syncing and Sharing"
CFG_SEAFILE_LONG_DESCRIPTION="Open source file hosting and sharing solution with high performance and reliability for teams and individuals"
CFG_SEAFILE_URL="https://github.com/haiwen/seafile"
CFG_SEAFILE_ACTIONS="configure|install|restart|shutdown|uninstall"

View File

@ -1,146 +0,0 @@
#!/bin/bash
# Category : Cloud Storage & File Sharing
# Description : Seafile - File Syncing and Sharing (c/u/s/r/i):
installSeafile()
{
local config_variables="$1"
if [[ "$seafile" == *[cCtTuUsSrRiI]* ]]; then
dockerConfigSetupToContainer silent seafile;
local app_name=$CFG_SEAFILE_APP_NAME
initializeAppVariables $app_name;
fi
if [[ "$seafile" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$seafile" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$seafile" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$seafile" == *[rR]* ]]; then
dockerComposeRestart $app_name;
fi
if [[ "$seafile" == *[iI]* ]]; then
echo ""
echo "##########################################"
echo "### Install $app_name"
echo "##########################################"
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install folders and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install" "$config_variables";
isSuccessful "Install folders and Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up the $app_name docker-compose.yml file."
echo ""
dockerComposeSetupFile $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start $app_name"
echo ""
dockerComposeUpdateAndStartApp $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. Updating defaul redis port and restarting $app_name"
echo ""
local seafile_timeout=180
local seafile_counter=0
local seafile_settings="$containers_dir$app_name/seafile-data/seafile/conf/seahub_settings.py"
local check_interval=15 # Print status every 15 seconds
while [ ! -f "$seafile_settings" ]; do
if [ "$seafile_counter" -ge "$seafile_timeout" ]; then
isNotice "File seahub_settings.py not found after $seafile_timeout seconds. Exiting..."
break
fi
# Only print message every $check_interval seconds
if (( seafile_counter % check_interval == 0 )); then
isNotice "Waiting for seahub_settings.py to appear... (Checked for $seafile_counter seconds)"
fi
sleep 1 # Wait for 1 second
((seafile_counter++))
done
# Check if the file was found or if we timed out
if [ -f "$seafile_settings" ]; then
isNotice "File found! Updating the default Redis port..."
sudo sed -i "s/11211/$PORT2/g" "$seafile_settings"
checkSuccess "Updated default Redis port for $app_name"
dockerComposeRestart "$app_name"
fi
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Adding $app_name to the Apps Database table."
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
echo " You can now navigate to your $app_name service using any of the options below : "
echo ""
menuShowFinalMessages $app_name;
menu_number=0
#sleep 3s
cd
fi
seafile=n
}

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><linearGradient id="seafile_svg__a" x1="-98.665" x2="-96.529" y1="-.51" y2="-.51" gradientTransform="rotate(90 -7577.286 7754.519)scale(154.4688)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#fad956"/><stop offset="1" style="stop-color:#ffa10f"/></linearGradient><path d="M0 235.2c0-8.5 6.9-15.4 15.5-15.4 4.1 0 7.7 1.6 10.5 4.2-.1-1.4-.2-2.7-.2-4.1 0-28.5 23.1-51.6 51.6-51.6 7.4 0 14.4 1.5 20.8 4.4-.1-1.5-.2-2.9-.2-4.3 0-42.7 34.6-77.3 77.3-77.3 42.4 0 76.8 34.2 77.3 76.5-14 12.3-25.1 27.8-32.3 45.3-13.8-8.6-30.1-13.8-47.6-13.8-36 0-67 20.4-81.5 51.3H15.5c-8.6 0-15.5-6.7-15.5-15.2M407.1 189c-19.1-19.1-45.5-31-74.7-31-53.3 0-97.4 39.4-104.6 90.8-13.1-17.5-34.1-28.9-57.7-28.9-39.9 0-72.2 32.4-72.2 72.2 0 11.6 2.8 22.5 7.6 32.3-25.1 5.1-43.7 24.5-43.7 47.7 0 27.1 25.4 49 56.7 49 13.8 0 26.5-4.3 36.4-11.4l116-114.1c12.8-11.8 29.9-18.9 48.6-18.9 39.2 0 71.1 31.3 72.2 70.2 0 0 0-.1-.1-.1.6 11.5-5.4 23.1-16.4 29.5-15.5 8.9-34.8 4.2-43.3-10.5-8.5-14.8-2.9-33.9 12.5-42.8 3.6-2.1 7.4-3.4 11.2-4.1-3.3-.7-6.8-1-10.3-1-28.4 0-51.6 23.1-51.6 51.6s23.1 51.6 51.6 51.6c1.2 0 2.5-.1 3.8-.2l-.1-.2 1.5-.2h101.2v.4c31-1.4 60.2-29.9 60.2-64.6 0-35.6-30.4-64.6-66-64.6h-.2c-5.8 10.3-12.8 16.3-20.7 22.7 8.3-15.1 13.1-32.4 13.1-50.8 0-29.2-11.9-55.5-31-74.6" style="fill:url(#seafile_svg__a)"/></svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -1,25 +0,0 @@
networks:
vpn:
external: true
services:
sshdownload:
image: httpd:latest
container_name: sshdownload
ports:
- 'PORT1:80'
volumes:
- /docker/ssh/private:/usr/local/apache2/htdocs
#labels:
#traefik.enable: true
#traefik.http.routers.sshdownload.entrypoints: web,websecure
#traefik.http.routers.sshdownload.rule: Host(`DOMAINSUBNAMEHERE`)
#traefik.http.routers.sshdownload.tls: true
#traefik.http.routers.sshdownload.tls.certresolver: production
#traefik.http.services.sshdownload.loadbalancer.server.port: PORT1
#traefik.http.routers.sshdownload.middlewares:
healthcheck:
disable: false #HEALTHCHECKHERE
networks:
vpn:
ipv4_address: IPADDRESSHERE

View File

@ -1,25 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Downloadable SSH Keys</title>
</head>
<body>
<h1>Downloadable SSH Keys</h1>
<div id="link1">
<!--LINK1-->
</div>
<div id="link2">
<!--LINK2-->
</div>
<div id="link3">
<!--LINK3-->
</div>
</body>
</html>

View File

@ -1,31 +0,0 @@
#
# APP_NAME = name of the application for use in the scripts
# COMPOSE_FILE = default for no app_name in the docker compose file name, app if there is
# HOST NAME = subdomain name e.g test is the name for test.website.com
# DOMAIN = number of the domain from the general config, useful when using multiple domains
# PUBLIC = if true, application will be setup with the reverse proxy and accessible from the internet
# WHITELIST = if true only allow whitelisted ips (see general config), if false allow all
# HEALTHCHECK = if true, the default docker health checks for that container will be enabled
# AUTHELIA = if true, use Authelia authentication, if false turned off.
# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote
# PORTS = port number(s) that the application will be used (comma seperated)
#
CFG_SSHDOWNLOAD_APP_NAME=sshdownload
CFG_SSHDOWNLOAD_BACKUP=false
CFG_SSHDOWNLOAD_COMPOSE_FILE=default
CFG_SSHDOWNLOAD_HOST_NAME=sshdownload
CFG_SSHDOWNLOAD_DOMAIN=1
CFG_SSHDOWNLOAD_PUBLIC=false
CFG_SSHDOWNLOAD_WHITELIST=false
CFG_SSHDOWNLOAD_HEALTHCHECK=true
CFG_SSHDOWNLOAD_AUTHELIA=false
CFG_SSHDOWNLOAD_LOGIN_REQUIRED=true
CFG_SSHDOWNLOAD_HEADSCALE=false
CFG_SSHDOWNLOAD_PORTS=3131
# Application metadata
CFG_SSHDOWNLOAD_CATEGORY="Miscellaneous"
CFG_SSHDOWNLOAD_TITLE="SSH Download"
CFG_SSHDOWNLOAD_DESCRIPTION="Web Server for Local SSH Files"
CFG_SSHDOWNLOAD_LONG_DESCRIPTION="SSH Download is a secure file transfer service that allows downloading files via SSH with web interface access"
CFG_SSHDOWNLOAD_URL="https://github.com/sciactive/sshdownload"
CFG_SSHDOWNLOAD_ACTIONS="configure|install|restart|shutdown|uninstall"

View File

@ -1,178 +0,0 @@
#!/bin/bash
# Category : Miscellaneous
# Description : SSH Download - Web Server for Local SSH Files (c/u/s/r/i):
installSshdownload()
{
local config_variables="$1"
if [[ "$sshdownload" == *[cCtTuUsSrRiI]* ]]; then
dockerConfigSetupToContainer silent sshdownload;
local app_name=$CFG_SSHDOWNLOAD_APP_NAME
initializeAppVariables $app_name;
fi
if [[ "$sshdownload" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$sshdownload" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$sshdownload" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$sshdownload" == *[rR]* ]]; then
dockerComposeRestart $app_name;
fi
if [[ "$sshdownload" == *[iI]* ]]; then
echo ""
echo "##########################################"
echo "### Installing $app_name"
echo "##########################################"
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Checking public status for security purposes."
echo ""
if [[ "$public" == "true" ]]; then
echo ""
isNotice "!!!!!!!!!! PROCEED WITH CAUTION !!!!!!!!!!"
isNotice "Public access is not fully recommended for security reasons."
if [[ "$login_required" == "false" ]]; then
isNotice "NO PASSWORD PROTECTION FOUND."
isNotice "Anyone with an internet connection will be able to download your SSH Keys"
fi
echo ""
while true; do
isQuestion "Are you sure you want to allow sshdownload to the public? (y/n): "
read -p "" sshdownload_public
if [[ "$sshdownload_public" == [yY] ]]; then
break
else
isNotice "Please confirm the setup or provide a valid input."
fi
done
fi
if [[ $sshdownload_public == [yY] ]]; then
isError "Setup is not wanted due to public security access, setup is cancelling..."
else
isSuccessful "Accepting of public security risks, setup is continuing..."
fi
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install folder and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install" "$config_variables";
isSuccessful "Install folders and Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up the $app_name docker-compose.yml file."
echo ""
dockerComposeSetupFile $app_name;
result=$(sudo cp -r $install_containers_dir$app_name/resources/index.html "${ssh_dir}private/index.html")
checkSuccess "Copying over index.html file for SSH Downloader."
updateSSHHTMLSSHKeyLinks;
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start $app_name"
echo ""
dockerComposeUpdateAndStartApp $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Adding $app_name to the Apps Database table."
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
isNotice "Your SSH Key(s) are available to download using the link below."
echo ""
echo " URL : http://$ip_setup/"
echo ""
isNotice "TIP - Public SSH Keys are stored at /docker/ssh/public/"
echo ""
while true; do
isQuestion "Have you followed the instructions above? (y/n): "
read -p "" sshdownload_instructions
if [[ "$sshdownload_instructions" == 'y' || "$sshdownload_instructions" == 'Y' ]]; then
break
else
isNotice "Please confirm the setup or provide a valid input."
fi
done
((menu_number++))
echo ""
echo "---- $menu_number. Destroying $app_name service as SSH keys have been downloaded."
echo ""
dockerUninstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Outro Message."
echo ""
isNotice "The service has been destroyed for safety reasons"
isNotice "You can reinstall this service at anytime in the System install menu under the sshinstall option."
echo ""
if [[ "$CFG_REQUIREMENT_CONTINUE_PROMPT" == "true" ]]; then
read -p "Press Enter to continue."
fi
menu_number=0
#sleep 3s
cd
fi
sshdownload=n
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 170 KiB

View File

@ -1,90 +0,0 @@
networks:
vpn:
external: true
services:
proxy:
ports:
- "PORT1:80" # specify port forewarding
#labels:
#traefik.enable: true
#traefik.http.routers.tiledesk.entrypoints: web,websecure
#traefik.http.routers.tiledesk.rule: Host(`DOMAINSUBNAMEHERE`)
#traefik.http.routers.tiledesk.tls: true
#traefik.http.routers.tiledesk.tls.certresolver: production
#traefik.http.routers.tiledesk.middlewares:
healthcheck:
disable: false #HEALTHCHECKHERE
networks:
vpn:
ipv4_address: IPADDRESSHERE
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro #SOCKETHERE
mongo:
volumes:
- ./tiledesk-datadb:/data/db
dashboard:
environment:
- "WIDGET_LOCATION=${EXTERNAL_BASE_URL:-http://localhost:8081}/widget/"
- "API_BASEIMAGE_URL=${EXTERNAL_BASE_URL:-http://localhost:8081}/api/"
ports:
- "4500:80" #use expose if you want to block external access
webwidget:
image: chat21/chat21-web-widget:5.0.70
container_name: chat21-web-widget
ports:
- "4200:80" # specify port forewarding
environment:
- "MQTT_ENDPOINT=${EXTERNAL_MQTT_BASE_URL:-ws://localhost:8081}/mqws/ws"
- "MQTT_APIENDPOINT=${EXTERNAL_BASE_URL:-http://localhost:8081}/chatapi/api"
- "API_URL=${EXTERNAL_BASE_URL:-http://localhost:8081}/api/"
- "TRANSLATIONS_URL=${EXTERNAL_BASE_URL:-http://localhost:8081}/api/"
- "API_BASEIMAGE_URL=${EXTERNAL_BASE_URL:-http://localhost:8081}/api/"
ionic:
image: chat21/chat21-ionic:3.0.101
container_name: chat21-ionic
ports:
- "8082:80" #use expose if you want to block external access
environment:
- "MQTT_ENDPOINT=${EXTERNAL_MQTT_BASE_URL:-ws://localhost:8081}/mqws/ws"
server:
image: tiledesk/tiledesk-server:2.4.67
- CHAT21_URL=http://chat21httpserver:8004
- "EMAIL_BASEURL=${EXTERNAL_BASE_URL:-http://localhost:8081}/dashboard"
- "WEBHOOK_ORIGIN=${EXTERNAL_BASE_URL:-http://localhost:8081}/api/"
- "WIDGET_LOCATION=${EXTERNAL_BASE_URL:-http://localhost:8081}/widget/launch.js"
- "WIDGET_TEST_LOCATION=${EXTERNAL_BASE_URL:-http://localhost:8081}/widget/assets/test_widget_page/index.html"
- CACHE_REDIS_PORT=6379
ports:
- "3000:3000"
chat21httpserver:
environment:
- RABBITMQ_URI=amqp://ignored:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiMjM1OTFmZS05N2FhLTRmNWQtOGVlOS0yNjQ2NzljYmM0M2YiLCJzdWIiOiIxMDAtQVBJQURNSU4iLCJzY29wZSI6WyJyYWJiaXRtcS5yZWFkOiovKi8qIiwicmFiYml0bXEud3JpdGU6Ki8qLyoiLCJyYWJiaXRtcS5jb25maWd1cmU6Ki8qLyoiXSwiY2xpZW50X2lkIjoiMTAwLUFQSUFETUlOIiwiY2lkIjoiMTAwLUFQSUFETUlOIiwiYXpwIjoiMTAwLUFQSUFETUlOIiwidXNlcl9pZCI6IjEwMC1BUElBRE1JTiIsImFwcF9pZCI6InRpbGVjaGF0IiwiaWF0IjoxNjk2NDkyMjg3LCJleHAiOjIwMDc1MzIyODcsImF1ZCI6WyJyYWJiaXRtcSIsIjEwMC1BUElBRE1JTiJdLCJraWQiOiJ0aWxlZGVzay1rZXkiLCJ0aWxlZGVza19hcGlfcm9sZXMiOiJhZG1pbiJ9.Ee-TpAPsoC7Dm7qsbUojeHud3E4OCtJZkpupu_R0Aic@rabbitmq:5672?heartbeat=60
- PUSH_WH_NOTIFY_URL=http://localhost:8004/api/tilechat/notify
- CONTACTS_LOOKUP_ENDPOINT=http://server:3000/users_util
ports:
- "8004:8004"
chat21server:
environment:
- WEBHOOK_ENDPOINTS=http://server:3000/chat21/requests,http://chat21httpserver:8004/api/tilechat/push/webhook/endpoint/WHFyAhecCMkYsvldLFWbSrJt7lAZFAmrp7O5QVMvGQsLVn9SkfT
depends_on:
- mongo
- rabbitmq
- server
rabbitmq:
ports:
- 5672:5672
- 15672:15672
- 1883:1883
- 15675:15675
redis:
ports:
- "6379:6379"

View File

@ -1,31 +0,0 @@
#
# APP_NAME = name of the application for use in the scripts
# COMPOSE_FILE = default for no app_name in the docker compose file name, app if there is
# HOST NAME = subdomain name e.g test is the name for test.website.com
# DOMAIN = number of the domain from the general config, useful when using multiple domains
# PUBLIC = if true, application will be setup with the reverse proxy and accessible from the internet
# WHITELIST = if true only allow whitelisted ips (see general config), if false allow all
# HEALTHCHECK = if true, the default docker health checks for that container will be enabled
# AUTHELIA = if true, use Authelia authentication, if false turned off.
# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote
# PORTS = port number(s) that the application will be used (comma seperated)
#
CFG_TILEDESK_APP_NAME=tiledesk
CFG_TILEDESK_BACKUP=true
CFG_TILEDESK_COMPOSE_FILE=app
CFG_TILEDESK_HOST_NAME=livechat
CFG_TILEDESK_DOMAIN=1
CFG_TILEDESK_PUBLIC=true
CFG_TILEDESK_WHITELIST=false
CFG_TILEDESK_HEALTHCHECK=true
CFG_TILEDESK_AUTHELIA=false
CFG_TILEDESK_HEADSCALE=false
CFG_TILEDESK_PORTS=8081
# Application metadata
CFG_TILEDESK_CATEGORY="Communication & Collaboration Tools"
CFG_TILEDESK_TITLE="Tiledesk"
CFG_TILEDESK_DESCRIPTION="Helpdesk/Live Chat"
CFG_TILEDESK_LONG_DESCRIPTION="Tiledesk is an open source live chat and conversational AI platform that helps you engage with customers in real-time"
CFG_TILEDESK_URL="https://github.com/Tiledesk/tiledesk"
CFG_TILEDISK_ACTIONS="configure|install|restart|shutdown|uninstall"
CFG_TILEDESK_ACTIONS="configure|install|restart|shutdown|uninstall"

View File

@ -1,146 +0,0 @@
#!/bin/bash
# Category : Communication & Collaboration Tools
# Description : Tiledesk - Helpdesk/Live Chat (c/u/s/r/i):
installTiledesk()
{
local config_variables="$1"
if [[ "$tiledesk" == *[cCtTuUsSrRiI]* ]]; then
dockerConfigSetupToContainer silent tiledesk;
local app_name=$CFG_TILEDESK_APP_NAME
initializeAppVariables $app_name;
fi
if [[ "$tiledesk" == *[cC]* ]]; then
editAppConfig $app_name;
fi
if [[ "$tiledesk" == *[uU]* ]]; then
dockerUninstallApp $app_name;
fi
if [[ "$tiledesk" == *[sS]* ]]; then
dockerComposeDown $app_name;
fi
if [[ "$tiledesk" == *[rR]* ]]; then
dockerComposeRestart $app_name;
fi
if [[ "$tiledesk" == *[iI]* ]]; then
echo ""
echo "##########################################"
echo "### Install $app_name"
echo "##########################################"
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up install folder and config file for $app_name."
echo ""
dockerConfigSetupToContainer "loud" "$app_name" "install" "$config_variables";
isSuccessful "Install folders and Config files have been setup for $app_name."
((menu_number++))
echo ""
((menu_number++))
echo ""
echo "---- $menu_number. Setting up the $app_name docker-compose.yml file."
echo ""
dockerComposeSetupFile $app_name;
local result=$(cd $containers_dir$app_name && sudo curl https://raw.githubusercontent.com/Tiledesk/tiledesk-deployment/master/docker-compose/docker-compose.yml --output docker-compose.yml)
checkSuccess "Downloading docker-compose.yml from $app_name GitHub"
((menu_number++))
echo ""
echo "---- $menu_number. Updating file permissions before starting."
echo ""
fixPermissionsBeforeStart $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start $app_name"
echo ""
dockerComposeUpdateAndStartApp $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. Running the docker-compose.yml to install and start $app_name"
echo ""
if [[ "$OS_TYPE" == "Ubuntu" || "$OS_TYPE" == "Debian" ]]; then
if [[ $CFG_DOCKER_INSTALL_TYPE == "rootless" ]]; then
local result=$(dockerCommandRunInstallUser "docker compose -f docker-compose.yml -f docker-compose.$app_name.yml down")
checkSuccess "Shutting down docker-compose.$app_name.yml"
if [[ "$public" == "true" ]]; then
local result=$(dockerCommandRunInstallUser "EXTERNAL_BASE_URL="https://$domain_full" EXTERNAL_MQTT_BASE_URL="wss://$domain_full" docker compose -f docker-compose.yml -f docker-compose.$app_name.yml up -d")
checkSuccess "Starting public docker-compose.$app_name.yml"
else
local result=$(dockerCommandRunInstallUser "docker compose -f docker-compose.yml -f docker-compose.$app_name.yml up -d")
checkSuccess "Starting standard docker-compose.$app_name.yml"
fi
elif [[ $CFG_DOCKER_INSTALL_TYPE == "rooted" ]]; then
local result=$(sudo docker compose -f docker-compose.yml -f docker-compose.$app_name.yml down)
checkSuccess "Shutting down docker-compose.$app_name.yml"
if [[ "$public" == "true" ]]; then
local result=$(EXTERNAL_BASE_URL="https://$domain_full" EXTERNAL_MQTT_BASE_URL="wss://$domain_full" sudo docker compose -f docker-compose.yml -f docker-compose.$app_name.yml up -d)
checkSuccess "Starting public docker-compose.$app_name.yml"
else
local result=$(sudo docker compose -f docker-compose.yml -f docker-compose.$app_name.yml up -d)
checkSuccess "Starting standard docker-compose.$app_name.yml"
fi
fi
fi
((menu_number++))
echo ""
echo "---- $menu_number. Running Application specific updates (if required)"
echo ""
appUpdateSpecifics $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Running Headscale setup (if required)"
echo ""
setupHeadscale $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Adding $app_name to the Apps Database table."
echo ""
databaseInstallApp $app_name;
((menu_number++))
echo ""
echo "---- $menu_number. Updating WebUI config file."
echo ""
webuiContainerSetup $app_name install;
((menu_number++))
echo ""
echo "---- $menu_number. You can find $app_name files at $containers_dir$app_name"
echo ""
echo " You can now navigate to your new service using one of the options below : "
echo ""
menuShowFinalMessages $app_name;
menu_number=0
#sleep 3s
cd
fi
tiledesk=n
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 11 KiB

View File

@ -1,14 +0,0 @@
#!/bin/bash
checkWireguardRequirement()
{
if [[ $CFG_REQUIREMENT_WIREGUARD == "true" ]]; then
# Check if WireGuard is already installed and load params
if [[ -e /etc/wireguard/params ]]; then
isSuccessful "Wireguard is installed."
else
isNotice "Wireguard is not installed."
((preinstallneeded++))
fi
fi
}

View File

@ -1,42 +0,0 @@
#!/bin/bash
wireguardManageMenu()
{
# Enable input
stty echo
while true; do
isHeader "Wireguard Manager"
echo "Built from: https://github.com/angristan/wireguard-install"
echo ""
isOption "1. Add a new user"
isOption "2. List all users"
isOption "3. Revoke existing user"
isOption "4. Uninstall WireGuard"
isOption "x. Exit"
echo ""
isQuestion "What is your choice: "
read -rp "" wireguard_menu_option
case "${wireguard_menu_option}" in
1)
wireguardNewClient
;;
2)
wireguardListClients
;;
3)
wireguardRevokeClient
;;
4)
wireguardUninstall
;;
x)
resetToMenu;
;;
*)
isNotice "Invalid choice. Please select a valid option."
;;
esac
done
}

View File

@ -1,14 +0,0 @@
#!/bin/bash
checkManagerRequirement()
{
if [[ $CFG_DOCKER_MANAGER_ENABLED == "true" ]]; then
### Docker Manager User Creation
if userExists "$CFG_DOCKER_MANAGER_USER"; then
isSuccessful "The Docker Manager User appears to be setup."
else
isNotice "The Docker Manager User is not setup."
((preinstallneeded++))
fi
fi
}

View File

@ -1,77 +0,0 @@
#!/bin/bash
installDockerManagerUser()
{
if [[ "$CFG_DOCKER_MANAGER_ENABLED" == "true" ]]; then
if [[ "$OS_TYPE" == "Ubuntu" || "$OS_TYPE" == "Debian" ]]; then
if ! userExists "$CFG_DOCKER_MANAGER_USER"; then
isHeader "Installing $CFG_DOCKER_MANAGER_USER"
isNotice "User '$CFG_DOCKER_MANAGER_USER' does not exist, starting creation..."
# Create the User Account
local result=$(runSystem useradd -m -s /bin/bash "$CFG_DOCKER_MANAGER_USER")
checkSuccess "Adding user via useradd command"
local result=$(echo "$CFG_DOCKER_MANAGER_USER:$CFG_DOCKER_MANAGER_PASS" | sudo chpasswd)
checkSuccess "Setting up login password"
local result=$(sudo -u "$CFG_DOCKER_MANAGER_USER" mkdir -p /home/$CFG_DOCKER_MANAGER_USER/.ssh/)
checkSuccess "Creating /home/$CFG_DOCKER_MANAGER_USER/.ssh folder"
local result=$(sudo -u "$CFG_DOCKER_MANAGER_USER" ssh-keygen -t ed25519 -b 4096 -f "/home/$CFG_DOCKER_MANAGER_USER/.ssh/ssh_key_${CFG_INSTALL_NAME}_${CFG_DOCKER_MANAGER_USER}" -N "passphrase")
checkSuccess "Setting up SSH-Keygen in /home/$CFG_DOCKER_MANAGER_USER/.ssh"
# SSH configuration directory
config_file="/home/$CFG_DOCKER_MANAGER_USER/.ssh/config"
# Check if the config file already exists
if [ -f "$config_file" ]; then
isNotice "The config file already exists. Updating the existing file..."
else
local result=$(createTouch "$config_file" $docker_install_user)
checkSuccess "Creating config file"
local result=$(sudo chmod 600 "$config_file")
checkSuccess "Changing permissions to config file"
fi
# Add the ServerAliveInterval option to the config file
if sudo grep -q "ServerAliveInterval" "$config_file"; then
isNotice "ServerAliveInterval is already configured in the config file."
else
local result=$(echo -e "Host *\n ServerAliveInterval 60" | sudo tee -a "$config_file" >/dev/null)
checkSuccess "Adding ServerAliveInterval to the config file."
fi
local result=$(source ~/.bashrc)
checkSuccess "Reloading .bashrc"
# Marker-guard the append (matching the rootless .bashrc pattern)
# so a re-run or a user delete+recreate can't duplicate the block.
if sudo grep -q "### LibrePortal Manager User Start" "$sshd_config"; then
isNotice "Manager-user SSH server config already present — skipping."
else
local result=$(sudo bash -c "cat >> $sshd_config <<EOL
### LibrePortal Manager User Start
Match User $CFG_DOCKER_MANAGER_USER
ChrootDirectory /home/$CFG_DOCKER_MANAGER_USER/
ForceCommand internal-sftp -d /home/$CFG_DOCKER_MANAGER_USER/
X11Forwarding no
AllowTcpForwarding no
PubkeyAuthentication yes
PasswordAuthentication yes
### LibrePortal Manager User End
EOL")
checkSuccess "Updating SSH Server Configuration for the Manager User."
# Reload SSH Service
local result=$(runSystem service ssh reload)
checkSuccess "Reloading SSH Service"
fi
isSuccessful "User '$CFG_DOCKER_MANAGER_USER' with restricted SFTP access to '/home/$CFG_DOCKER_MANAGER_USER' has been set up."
fi
fi
fi
}

View File

@ -1,21 +0,0 @@
#!/bin/bash
uninstallDockerManagerUser()
{
isHeader "Removing $CFG_DOCKER_MANAGER_USER"
if [[ "$toolsremovedockermanageruser" == [yY] ]]; then
if [[ "$OS_TYPE" == "Ubuntu" || "$OS_TYPE" == "Debian" ]]; then
# Remove the User Account and capture the exit status and output
local result=$(sudo userdel -r "$CFG_DOCKER_MANAGER_USER" 2>&1)
checkSuccess "Removing the '$CFG_DOCKER_MANAGER_USER' user"
# Remove the Docker Manager User specific block from $sshd_config
local result=$(sudo sed -i '/### LibrePortal Manager User Start/,/### LibrePortal Manager User End/d' $sshd_config)
checkSuccess "Removing the Docker Manager User from $sshd_config."
# Restart SSH Service
local result=$(runSystem service ssh restart)
checkSuccess "Restarting SSH Service"
fi
fi
}

View File

@ -1,278 +0,0 @@
#!/bin/bash
# Used for Sending SSH keys to remote hosts
installSSHRemoteList()
{
if [[ "$CFG_REQUIREMENT_SSHREMOTE" == "true" ]]; then
if [[ "$setupSSHRemoteKeys" == true ]]; then
local app_name="$1"
echo ""
echo "############################################"
echo "###### Remote SSH Install ######"
echo "############################################"
echo ""
# Check if sqlite3 is available
if ! command -v sqlite3 &> /dev/null; then
isNotice "sqlite3 command not found. Make sure it's installed."
fi
# Check if database file is available
if [ ! -f "$docker_dir/$db_file" ] ; then
isNotice "Database file not found. Make sure it's installed."
fi
# Check if SSH hosts are configured (configs should already be loaded)
if [[ -z "$CFG_IPS_SSH_SETUP" ]]; then
echo "No hosts found in the configuration."
echo ""
else
# Use the CFG_IPS_SSH_SETUP variable directly
IFS=',' read -ra ip_addresses <<< "$CFG_IPS_SSH_SETUP"
for ip in "${ip_addresses[@]}"; do
results=$(sqlite3 "$docker_dir/$db_file" "SELECT COUNT(*) FROM ssh WHERE ip = '$ip';")
if [ "$results" -eq 0 ]; then
isNotice "Copying SSH public key to $ip..."
installSSHKeyToHost "$ip"
databaseSSHInsert $ip;
else
if [[ "$toolinstallremotesshlist" == [yY] ]]; then
while true; do
isNotice "Make sure you have the host setup and ready with the LibrePortal preinstallation before doing this!"
isQuestion "Is $ip prepared with the LibrePortal pre-installation? (y/n): "
read -rp "" ishostsetupprompt
if [[ -n "$ishostsetupprompt" ]]; then
break
fi
isNotice "Please provide a valid input."
done
if [[ "$ishostsetupprompt" == [yY] ]]; then
while true; do
isQuestion "Record found for $ip. Do you want to reinstall? (y/n): "
read -rp "" toolreinstallremotessh
if [[ -n "$toolreinstallremotessh" ]]; then
break
fi
isNotice "Please provide a valid input."
done
if [[ "$toolreinstallremotessh" == [yY] ]]; then
## Start copy
isNotice "Copying SSH public key to $ip..."
installSSHKeyToHost "$ip"
databaseSSHInsert $ip;
fi
else
isError "Please setup your host $ip with the LibrePortal pre-installation"
fi
else
isNotice "All SSH Keys are already setup."
isNotice "'Install Remote SSH Keys' option in the tools list if you want to reinstall any keys."
fi
fi
done
# Random note - Not sure how secure having all passwords saved for SSH, so not adding
fi
fi
fi
}
installSSHKeyToHost()
{
local host=$1
local ssh_key_file="$ssh_dir$CFG_DOCKER_MANAGER_USER/ssh_key_${CFG_INSTALL_NAME}_${CFG_DOCKER_MANAGER_USER}.pub"
# Check if the specified SSH key file exists
if [ ! -f "$ssh_key_file" ]; then
isError "The SSH key file '$ssh_key_file' does not exist."
fi
# Copy the SSH public key to the remote directory using sftp
local result=$(sftp -oBatchMode=no -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null "$CFG_DOCKER_MANAGER_USER@$host" <<EOF
cd "ssh/$CFG_DOCKER_MANAGER_USER"
put "$ssh_key_file"
EOF
)
checkSuccess "Transfering the SSH key to $host."
isNotice "It will take time for the new SSH Key to be installed into the authorized_keys."
isNotice "This depends entirely on the setup of LibrePortal on the host, but usually is 5 minutes"
}
# Function to update the authorized_keys file and the database
updateAuthorizedKeysAndDatabase()
{
if [[ "$CFG_REQUIREMENT_SSHREMOTE" == "true" ]]; then
local ssh_directory="$ssh_dir$CFG_DOCKER_MANAGER_USER" # Define ssh_directory here
# Create an array to keep track of processed keys
local processed_keys=()
# Loop through the key files in the directory
for key_file in "$ssh_directory"/*.pub; do
if [ -f "$key_file" ]; then
# Get the filename without the path
key_filename=$(basename "$key_file")
# Check if the key has already been processed
if printf '%s\n' "${processed_keys[@]}" | grep -q -F "$key_filename"; then
continue # Skip processing this key as it has already been processed
fi
#echo "DEBUG: Adding key from file: $key_file"
#echo "DEBUG: Key filename: $key_filename"
# Add the key to authorized_keys and the database
addSSHKeyToAuthorizedKeysAndDatabase "$key_file" "$ssh_directory"
# Add the key filename to the processed_keys array
processed_keys+=("$key_filename")
fi
done
# Check for keys in the database that are no longer present in the directory
# and remove them from the database and authorized_keys file
while IFS= read -r db_key_filename; do
if ! ls "$ssh_directory"/*.pub | grep -q -F "$db_key_filename"; then
# Remove the key from the database and authorized_keys file
removeSSHKeyFromAuthorizedKeysAndDatabase "$db_key_filename" "$ssh_directory"
fi
done < <(sqlite3 "$docker_dir/$db_file" "SELECT name FROM ssh_keys;")
fi
}
# Function to scan the folder for missing .pub keys and process them
databaseSSHScanForKeys()
{
echo ""
echo "############################################"
echo "###### SSH Key Scan ######"
echo "############################################"
echo ""
local ssh_directory="$ssh_dir$CFG_DOCKER_MANAGER_USER"
# Check if sqlite3 is available
if ! command -v sqlite3 &> /dev/null; then
isNotice "sqlite3 command not found. Make sure it's installed."
fi
# Check if database file is available
if [ ! -f "$docker_dir/$db_file" ] ; then
isNotice "Database file not found. Make sure it's installed."
fi
# Remove old keys from the authorized_keys file and the database
updateAuthorizedKeysAndDatabase "$ssh_directory"
updateSSHPermissions
# Reloading SSH Service
local result=$(sudo service ssh reload)
checkSuccess "Reloading the SSH Service"
isSuccessful "SSH Key Scan completed successfully."
}
# Function to add an SSH public key from a file to the authorized_keys file and the database
addSSHKeyToAuthorizedKeysAndDatabase()
{
local key_file="$1"
local ssh_directory="$2"
local auth_key_file="$ssh_directory/authorized_keys" # Define auth_key_file here
# Get the filename without the path
local key_filename=$(basename "$key_file")
#echo "DEBUG: Adding SSH public key from $key_filename to authorized_keys file."
# Check if the specified SSH public key file exists
if [ -f "$key_file" ]; then
# Ensure the authorized_keys file is empty or create it if it doesn't exist
if [ ! -f "$auth_key_file" ]; then
createTouch "$auth_key_file" $docker_install_user
fi
# Check if the key already exists in the file
local ssh_public_key=$(cat "$key_file")
local key_file_name=$(basename "$key_file")
local auth_key_file_name=$(basename "$auth_key_file")
if ! grep -Fxq "$ssh_public_key" "$auth_key_file"; then
#echo "DEBUG: Adding key from file: $key_file"
#echo "DEBUG: Key filename: $key_filename"
# Add the key to the authorized_keys file
echo "$ssh_public_key" >> "$auth_key_file"
checkSuccess "SSH public key from $key_filename added to $auth_key_file_name."
#else
#echo "NOTICE: SSH Key already exists in the authorized_keys file. Skipping..."
fi
# Hash the public key content
local ssh_public_key_hash=$(echo "$ssh_public_key" | sha256sum | cut -d' ' -f1)
# Check if the key already exists in the database
local key_in_db=$(sqlite3 "$docker_dir/$db_file" "SELECT COUNT(*) FROM ssh_keys WHERE name = '$key_filename';")
if [ "$key_in_db" -eq 0 ]; then
# Key doesn't exist in the database, insert it
local result=$(sqlite3 "$docker_dir/$db_file" "INSERT INTO ssh_keys (name, hash, date, time) VALUES ('$key_filename', '$ssh_public_key_hash', '$current_date', '$current_time');")
checkSuccess "SSH public key from $key_filename added to the database."
else
# Key exists in the database, check if its content has changed
local db_key_hash=$(sqlite3 "$docker_dir/$db_file" "SELECT hash FROM ssh_keys WHERE name = '$key_filename';")
if [ "$db_key_hash" != "$ssh_public_key_hash" ]; then
# Key content has changed, update the record
local result=$(sqlite3 "$docker_dir/$db_file" "UPDATE ssh_keys SET hash = '$ssh_public_key_hash', date = '$current_date', time = '$current_time' WHERE name = '$key_filename';")
checkSuccess "SSH Key content from $key_filename updated in the database."
#else
#echo "NOTICE: SSH Key content from $key_filename already exists in the database. Skipping update..."
fi
fi
else
isError "SSH public key file not found: $key_filename"
fi
}
# Function to remove an SSH public key from the authorized_keys file and the database
removeSSHKeyFromAuthorizedKeysAndDatabase()
{
if [[ "$CFG_REQUIREMENT_SSHREMOTE" == "true" ]]; then
local key_filename="$1"
local ssh_directory="$2" # Define ssh_directory here
local auth_key_file="$ssh_directory/authorized_keys" # Define auth_key_file here
# Remove the key from the authorized_keys file
local result=$(sudo sed -i "/$key_filename/d" "$auth_key_file")
checkSuccess "SSH public key '$key_filename' removed from authorized_keys file."
# Remove the key from the database
db_query="DELETE FROM ssh_keys WHERE name = '$key_filename';"
local result=$(sqlite3 "$docker_dir/$db_file" "$db_query")
checkSuccess "SSH public key '$key_filename' removed from the database."
fi
}
updateSSHPermissions()
{
local result=$(sudo chmod 700 $ssh_dir$CFG_DOCKER_MANAGER_USER/)
checkSuccess "Adjusting permissions for $ssh_dir$CFG_DOCKER_MANAGER_USER"
# SSH configuration directory
auth_key="$ssh_dir$CFG_DOCKER_MANAGER_USER/authorized_keys"
# Check if the config file already exists
if [ -f "$auth_key" ]; then
local result=$(sudo chmod 600 $auth_key)
checkSuccess "Adjusting permissions for authorized_keys"
fi
local result=$(sudo chmod +rx $ssh_dir $ssh_dir$CFG_DOCKER_MANAGER_USER)
checkSuccess "Adding read and write permissions for ssh folders"
local result=$(sudo chown -R $CFG_DOCKER_MANAGER_USER:$CFG_DOCKER_MANAGER_USER $ssh_dir$CFG_DOCKER_MANAGER_USER)
checkSuccess "Adding chown to $CFG_DOCKER_MANAGER_USER user for ssh folders"
local result=$(sudo find $ssh_dir$CFG_DOCKER_MANAGER_USER -type f -name "*.pub" -exec sudo chmod 600 {} \;)
checkSuccess "Updating all permissions of keys to 600"
}

View File

@ -1,12 +0,0 @@
#!/bin/bash
wireguardCheckClients()
{
local WIREGUARD_NUMBER_OF_CLIENTS=$(grep -c -E "^### Client" "/etc/wireguard/${CFG_WG_SERVER_NIC}.conf")
if [[ ${WIREGUARD_NUMBER_OF_CLIENTS} == '0' ]]; then
echo ""
isError "You have no existing clients!"
echo ""
wireguardManageMenu;
fi
}

View File

@ -1,10 +0,0 @@
#!/bin/bash
wireguardListClients()
{
isHeader "Wireguard Client List"
wireguardCheckClients;
runSystem grep -E "^### Client" "/etc/wireguard/${CFG_WG_SERVER_NIC}.conf" | cut -d ' ' -f 3 | nl -s ') '
}

View File

@ -1,31 +0,0 @@
#!/bin/bash
wireguardRevokeClient()
{
isHeader "Wireguard Client Removal"
wireguardCheckClients;
echo ""
echo "Select the existing client you want to revoke"
runSystem grep -E "^### Client" "/etc/wireguard/${CFG_WG_SERVER_NIC}.conf" | cut -d ' ' -f 3 | nl -s ') '
until [[ ${WIREGUARD_CLIENT_NUMBER} -ge 1 && ${WIREGUARD_CLIENT_NUMBER} -le ${WIREGUARD_NUMBER_OF_CLIENTS} ]]; do
if [[ ${WIREGUARD_CLIENT_NUMBER} == '1' ]]; then
read -rp "Select one client [1]: " WIREGUARD_CLIENT_NUMBER
else
read -rp "Select one client [1-${WIREGUARD_NUMBER_OF_CLIENTS}]: " WIREGUARD_CLIENT_NUMBER
fi
done
# match the selected number to a client name
local WIREGUARD_CLIENT_NAME=$(runSystem grep -E "^### Client" "/etc/wireguard/${CFG_WG_SERVER_NIC}.conf" | cut -d ' ' -f 3 | sed -n "${WIREGUARD_CLIENT_NUMBER}"p)
result=$(runSystem sed -i "/^### Client ${WIREGUARD_CLIENT_NAME}\$/,/^$/d" "/etc/wireguard/${CFG_WG_SERVER_NIC}.conf")
checkSuccess "Removed [Peer] block matching $WIREGUARD_CLIENT_NAME"
result=$(runSystem rm -f "${CFG_WG_HOME_DIR}/${CFG_WG_SERVER_NIC}-client-${WIREGUARD_CLIENT_NAME}.conf")
checkSuccess "Removed generated client file for $WIREGUARD_CLIENT_NAME"
result=$(runSystem wg syncconf "${CFG_WG_SERVER_NIC}" <(runSystem wg-quick strip "${CFG_WG_SERVER_NIC}"))
checkSuccess "Restart wireguard to apply changes"
}

View File

@ -1,7 +0,0 @@
# Wireguard - No need to configure unless you know what you are doing.
CFG_WG_HOME_DIR="/docker/wireguard/"
CFG_WG_SERVER_NIC="wg0"
CFG_WG_SERVER_IPV4="10.8.0.1"
CFG_WG_SERVER_PORT="52180"
CFG_WG_ALLOWED_IPS="0.0.0.0/0"
CFG_WG_DEFAULT_CLIENT="user"

View File

@ -1,255 +0,0 @@
#!/bin/bash
# Secure WireGuard server installer
# Adapted from : https://github.com/angristan/wireguard-install
installStandaloneWireGuard()
{
if [[ $CFG_REQUIREMENT_WIREGUARD == "true" ]]; then
# Check if WireGuard is already installed and load params
if [[ ! -e /etc/wireguard/params ]]; then
isHeader "Wireguard Installer"
echo "Based on : https://github.com/angristan/wireguard-install"
echo ""
local WG_CAN_INSTALL="true"
local WG_CHECK_VIRTUALIZATION=$(systemd-detect-virt)
if [ "$WG_CHECK_VIRTUALIZATION" == "openvz" ]; then
echo "OpenVZ is not supported"
local WG_CAN_INSTALL="false"
fi
if [ "$WG_CHECK_VIRTUALIZATION" == "lxc" ]; then
echo "LXC is not supported (yet)."
echo "WireGuard can technically run in an LXC container,"
echo "but the kernel module has to be installed on the host,"
echo "the container has to be run with some specific parameters"
echo "and only the tools need to be installed in the container."
local WG_CAN_INSTALL="false"
fi
if [[ $WG_CAN_INSTALL == 'true' ]]; then
# Install WireGuard tools and module
if [[ "$OS_TYPE" == "Ubuntu" || "$OS_TYPE" == "Debian" ]]; then
# All the privileged work (apt, /etc/wireguard keys + server
# config, sysctl ip_forward, wg-quick service) runs in the
# root-owned libreportal-wg helper, which reads + validates the
# CFG_WG_* settings itself.
runWg install "$server_nic" "$public_ip_v4" >/dev/null
checkSuccess "Installed standalone WireGuard server (/etc/wireguard/${CFG_WG_SERVER_NIC}.conf)"
# Update DNS after the helper apt-installed resolvconf
updateDNS "" standalonewireguard;
portUse wireguardstandalone $CFG_WG_SERVER_PORT install;
portOpenwireguardstandalone $CFG_WG_SERVER_PORT/udp install;
wireguardNewClient install;
# Check if WireGuard is running
systemctl is-active --quiet "wg-quick@${CFG_WG_SERVER_NIC}"
WIREGUARD_RUNNING=$?
# WireGuard might not work if we updated the kernel. Tell the user to reboot
if [[ ${WIREGUARD_RUNNING} -ne 0 ]]; then
isNotice "***WARNING*** WireGuard does not seem to be running."
isNotice "You can check if WireGuard is running with: systemctl status wg-quick@${CFG_WG_SERVER_NIC}${NC}"
isNotice "If you get something like 'Cannot find device ${CFG_WG_SERVER_NIC}', please reboot!"
else # WireGuard is running
isSuccessful "WireGuard is running."
isSuccessful "You can check the status of WireGuard with: systemctl status wg-quick@${CFG_WG_SERVER_NIC}"
isNotice "If you don't have internet connectivity from your client, try to reboot the server."
fi
fi
fi
#else
#isNotice "Wireguard is already installed, no need to install."
fi
fi
}
wireguardNewClient()
{
local type="$1"
isHeader "Wireguard Client Creation"
isNotice "The client name must consist of alphanumeric character(s)."
isNotice "It may also include underscores or dashes and can't exceed 15 chars."
echo ""
until [[ ${WIREGUARD_CLIENT_NAME} =~ ^[a-zA-Z0-9_-]+$ && ${WIREGUARD_CLIENT_EXISTS} == '0' && ${#WIREGUARD_CLIENT_NAME} -lt 16 ]]; do
if [[ $type == "install" ]]; then
WIREGUARD_CLIENT_NAME="$CFG_WG_DEFAULT_CLIENT"
else
read -rp "Client name: " -e WIREGUARD_CLIENT_NAME
fi
local WIREGUARD_CLIENT_EXISTS=$(runSystem grep -c -E "^### Client ${WIREGUARD_CLIENT_NAME}\$" "/etc/wireguard/${CFG_WG_SERVER_NIC}.conf")
if [[ ${WIREGUARD_CLIENT_EXISTS} != 0 ]]; then
echo ""
isNotice "A client with the specified name was already created, please choose another name."
echo ""
fi
done
for WIREGUARD_DOT_IP in {2..254}; do
local WIREGUARD_DOT_EXISTS=$(runSystem grep -c "${CFG_WG_SERVER_IPV4::-1}${WIREGUARD_DOT_IP}" "/etc/wireguard/${CFG_WG_SERVER_NIC}.conf")
if [[ ${WIREGUARD_DOT_EXISTS} == '0' ]]; then
break
fi
done
if [[ ${WIREGUARD_DOT_EXISTS} == '1' ]]; then
echo ""
isNotice "The subnet configured supports only 253 clients."
echo ""
fi
# Generate key pair for the client
local WIREGUARD_CLIENT_PRIV_KEY=$(runSystem wg genkey)
local WIREGUARD_CLIENT_PUB_KEY=$(echo "${WIREGUARD_CLIENT_PRIV_KEY}" | runSystem wg pubkey)
local WIREGUARD_CLIENT_PRE_SHARED_KEY=$(runSystem wg genpsk)
local WIREGUARD_ENDPOINT="${public_ip_v4}:${CFG_WG_SERVER_PORT}"
# Create client file
createTouch "${CFG_WG_HOME_DIR}/${CFG_WG_SERVER_NIC}-client-${WIREGUARD_CLIENT_NAME}.conf" $sudo_user_name
# Create client file and add the server as a peer
echo "[Interface]
PrivateKey = ${WIREGUARD_CLIENT_PRIV_KEY}
Address = ${CFG_WG_SERVER_IPV4}/32
DNS = ${CFG_DNS_SERVER_1},${CFG_DNS_SERVER_2}
[Peer]
PublicKey = ${SERVER_PUB_KEY}
PresharedKey = ${WIREGUARD_CLIENT_PRE_SHARED_KEY}
Endpoint = ${WIREGUARD_ENDPOINT}
AllowedIPs = ${CFG_WG_ALLOWED_IPS}" | runSystem tee "${CFG_WG_HOME_DIR}/${CFG_WG_SERVER_NIC}-client-${WIREGUARD_CLIENT_NAME}.conf" >/dev/null
# Add the client as a peer to the server
echo -e "\n### Client ${WIREGUARD_CLIENT_NAME}
[Peer]
PublicKey = ${WIREGUARD_CLIENT_PUB_KEY}
PresharedKey = ${WIREGUARD_CLIENT_PRE_SHARED_KEY}
AllowedIPs = ${CFG_WG_ALLOWED_IPS}" | runSystem tee -a "/etc/wireguard/${CFG_WG_SERVER_NIC}.conf" >/dev/null
#result=$(runSystem wg syncconf ${CFG_WG_SERVER_NIC} /etc/wireguard/${CFG_WG_SERVER_NIC}.conf)
#checkSuccess "Syncing config file for $CFG_WG_SERVER_NIC"
#result=$(runSystem systemctl stop "wg-quick@${CFG_WG_SERVER_NIC}")
#checkSuccess "Stopped wg-quick@${CFG_WG_SERVER_NIC} service."
#result=$(runSystem systemctl start "wg-quick@${CFG_WG_SERVER_NIC}")
#checkSuccess "Started wg-quick@${CFG_WG_SERVER_NIC} service."
# Generate QR code if qrencode is installed
if command -v qrencode &>/dev/null; then
isNotice "Here is your client config file as a QR Code:"
runSystem qrencode -t ansiutf8 -l L <"${CFG_WG_HOME_DIR}/${CFG_WG_SERVER_NIC}-client-${WIREGUARD_CLIENT_NAME}.conf"
echo ""
fi
isSuccessful "Your client config file is in ${CFG_WG_HOME_DIR}/${CFG_WG_SERVER_NIC}-client-${WIREGUARD_CLIENT_NAME}.conf"
}
wireguardListClients()
{
isHeader "Wireguard Client List"
wireguardCheckClients;
runSystem grep -E "^### Client" "/etc/wireguard/${CFG_WG_SERVER_NIC}.conf" | cut -d ' ' -f 3 | nl -s ') '
}
wireguardRevokeClient()
{
isHeader "Wireguard Client Removal"
wireguardCheckClients;
echo ""
echo "Select the existing client you want to revoke"
runSystem grep -E "^### Client" "/etc/wireguard/${CFG_WG_SERVER_NIC}.conf" | cut -d ' ' -f 3 | nl -s ') '
until [[ ${WIREGUARD_CLIENT_NUMBER} -ge 1 && ${WIREGUARD_CLIENT_NUMBER} -le ${WIREGUARD_NUMBER_OF_CLIENTS} ]]; do
if [[ ${WIREGUARD_CLIENT_NUMBER} == '1' ]]; then
read -rp "Select one client [1]: " WIREGUARD_CLIENT_NUMBER
else
read -rp "Select one client [1-${WIREGUARD_NUMBER_OF_CLIENTS}]: " WIREGUARD_CLIENT_NUMBER
fi
done
# match the selected number to a client name
local WIREGUARD_CLIENT_NAME=$(runSystem grep -E "^### Client" "/etc/wireguard/${CFG_WG_SERVER_NIC}.conf" | cut -d ' ' -f 3 | sed -n "${WIREGUARD_CLIENT_NUMBER}"p)
result=$(runSystem sed -i "/^### Client ${WIREGUARD_CLIENT_NAME}\$/,/^$/d" "/etc/wireguard/${CFG_WG_SERVER_NIC}.conf")
checkSuccess "Removed [Peer] block matching $WIREGUARD_CLIENT_NAME"
result=$(runSystem rm -f "${CFG_WG_HOME_DIR}/${CFG_WG_SERVER_NIC}-client-${WIREGUARD_CLIENT_NAME}.conf")
checkSuccess "Removed generated client file for $WIREGUARD_CLIENT_NAME"
result=$(runSystem wg syncconf "${CFG_WG_SERVER_NIC}" <(runSystem wg-quick strip "${CFG_WG_SERVER_NIC}"))
checkSuccess "Restart wireguard to apply changes"
}
wireguardCheckClients()
{
local WIREGUARD_NUMBER_OF_CLIENTS=$(grep -c -E "^### Client" "/etc/wireguard/${CFG_WG_SERVER_NIC}.conf")
if [[ ${WIREGUARD_NUMBER_OF_CLIENTS} == '0' ]]; then
echo ""
isError "You have no existing clients!"
echo ""
wireguardManageMenu;
fi
}
wireguardUninstall()
{
isHeader "Wireguard Uninstaller"
isNotice "***WARNING*** This will uninstall WireGuard and remove all the configuration files!"
isNotice "Please backup the /etc/wireguard directory if you want to keep your configuration files."
echo ""
isQuestion "Do you really want to remove WireGuard? (y/n): "
read -p "" WIREGUARD_REMOVE
if [[ $WIREGUARD_REMOVE == [yY] ]]; then
if [[ "$OS_TYPE" == "Ubuntu" || "$OS_TYPE" == "Debian" ]]; then
result=$(runSystem systemctl stop "wg-quick@${CFG_WG_SERVER_NIC}")
checkSuccess "Stopped wg-quick@${CFG_WG_SERVER_NIC} service."
result=$(runSystem systemctl disable "wg-quick@${CFG_WG_SERVER_NIC}")
checkSuccess "Disabled wg-quick@${CFG_WG_SERVER_NIC} service."
if [[ "$OS_TYPE" == "Ubuntu" || "$OS_TYPE" == "Debian" ]]; then
result=$(runSystem apt-get remove -y wireguard wireguard-tools qrencode)
checkSuccess "Removed wireguard wireguard-tools qrencode"
fi
result=$(runSystem rm -rf /etc/wireguard)
checkSuccess "Deleted /etc/wireguard folder."
result=$(runSystem rm -f /etc/sysctl.d/wg.conf)
checkSuccess "Delete /etc/sysctl.d/wg.conf file."
result=$(runSystem sysctl --system)
checkSuccess "Reloaded sysctl"
portUnuse wireguardstandalone $CFG_WG_SERVER_PORT install;
portClose wireguardstandalone $CFG_WG_SERVER_PORT/udp install;
# Check if WireGuard is running
systemctl is-active --quiet "wg-quick@${CFG_WG_SERVER_NIC}"
WIREGUARD_RUNNING=$?
if [[ ${WIREGUARD_RUNNING} -eq 0 ]]; then
isError "WireGuard failed to uninstall properly."
wireguardManageMenu;
else
isSuccessful "WireGuard uninstalled successfully."
wireguardManageMenu;
fi
fi
else
echo ""
isNotice "Removal aborted!"
fi
}

Some files were not shown because too many files have changed in this diff Show More