From 879d596740445b76d6aa1c2b583253eca4e91f6b Mon Sep 17 00:00:00 2001 From: Basti SK Date: Thu, 27 Mar 2025 18:59:31 +0100 Subject: [PATCH] initial commit --- Readme.md | 3 + bookstack/bookstack_db_data/custom.cnf | 196 +++++++++++++++++++++++++ bookstack/docker-compose.yml | 36 +++++ dashy/config.yml | 25 ++++ dashy/docker-compose.yml | 22 +++ gitea/docker-compose.yml | 24 +++ grafana/docker-compose.yml | 18 +++ grafana/grafana/grafana.ini | 2 + gramps/docker-compose.yml | 47 ++++++ jenkins/docker-compose.yml | 15 ++ kanboard/docker-compose.yml | 10 ++ keycloak/docker-compose.yml | 49 +++++++ mediawiki/docker-compose.yml | 28 ++++ nextcloud/docker-compose.yml | 11 ++ offen/docker-compose.yml | 13 ++ offen/offen.env | 1 + offen/setup.sh | 8 + 17 files changed, 508 insertions(+) create mode 100644 Readme.md create mode 100644 bookstack/bookstack_db_data/custom.cnf create mode 100644 bookstack/docker-compose.yml create mode 100644 dashy/config.yml create mode 100644 dashy/docker-compose.yml create mode 100644 gitea/docker-compose.yml create mode 100644 grafana/docker-compose.yml create mode 100644 grafana/grafana/grafana.ini create mode 100644 gramps/docker-compose.yml create mode 100644 jenkins/docker-compose.yml create mode 100644 kanboard/docker-compose.yml create mode 100644 keycloak/docker-compose.yml create mode 100644 mediawiki/docker-compose.yml create mode 100644 nextcloud/docker-compose.yml create mode 100644 offen/docker-compose.yml create mode 100644 offen/offen.env create mode 100644 offen/setup.sh diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..04c608e --- /dev/null +++ b/Readme.md @@ -0,0 +1,3 @@ +# Docker-Compose Library +A collection of docker-compose files for different open-source projects. + diff --git a/bookstack/bookstack_db_data/custom.cnf b/bookstack/bookstack_db_data/custom.cnf new file mode 100644 index 0000000..5cb6645 --- /dev/null +++ b/bookstack/bookstack_db_data/custom.cnf @@ -0,0 +1,196 @@ +## custom configuration file based on https://github.com/just-containers/mariadb/blob/master/rootfs/etc/mysql/my.cnf +## please be aware that changing options here may break things +# +# The MySQL database server configuration file. +# +# One can use all long options that the program supports. +# Run program with --help to get a list of available options and with +# --print-defaults to see which it would actually understand and use. +# +# For explanations see +# http://dev.mysql.com/doc/mysql/en/server-system-variables.html + +# This will be passed to all mysql clients +# It has been reported that passwords should be enclosed with ticks/quotes +# especially if they contain "#" chars... +[client] +port = 3306 +socket = /var/run/mysqld/mysqld.sock + +default-character-set = utf8mb4 + +# Here is entries for some specific programs +# The following values assume you have at least 32M ram + +# This was formally known as [safe_mysqld]. Both versions are currently parsed. +[mysqld_safe] +socket = /var/run/mysqld/mysqld.sock +nice = 0 + +[mysqld] +# +# * Basic Settings +# +user = abc +pid-file = /var/run/mysqld/mysqld.pid +socket = /var/run/mysqld/mysqld.sock +port = 3306 +basedir = /usr +datadir = /var/lib/mysql +tmpdir = /tmp +lc_messages_dir = /usr/share/mariadb +lc_messages = en_US +skip-external-locking +# +# Instead of skip-networking the default is now to listen only on +# localhost which is more compatible and is not less secure. +#bind-address = 127.0.0.1 +# +# * Fine Tuning +# +key_buffer_size = 128M +max_connections = 100 +connect_timeout = 5 +wait_timeout = 600 +max_allowed_packet = 16M +thread_cache_size = 128 +thread_stack = 192K +sort_buffer_size = 4M +bulk_insert_buffer_size = 16M +tmp_table_size = 32M +max_heap_table_size = 32M + +#performance_schema = on +character_set_server = utf8mb4 +collation_server = utf8mb4_general_ci +transaction_isolation = READ-COMMITTED +binlog_format = MIXED + +# +# * MyISAM +# +# This replaces the startup script and checks MyISAM tables if needed +# the first time they are touched. On error, make copy and try a repair. +myisam-recover-options = BACKUP +#open-files-limit = 2000 +table_open_cache = 400 +#table_cache = 64 +#thread_concurrency = 10 +myisam_sort_buffer_size = 512M +concurrent_insert = 2 +read_buffer_size = 2M +read_rnd_buffer_size = 1M +# +# * Query Cache Configuration +# +# Cache only tiny result sets, so we can fit more in the query cache. +query_cache_limit = 128K +query_cache_size = 64M +# for more write intensive setups, set to DEMAND or OFF +query_cache_type = DEMAND +# +# * Logging and Replication +# +console = 1 +# Both location gets rotated by the cronjob. +# Be aware that this log type is a performance killer. +# As of 5.1 you can enable the log at runtime! +#general_log = 1 +#general_log_file = /config/log/mysql/mysql.log +# +# Error log - should be very few entries. +# +log_warnings = 2 +# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf +#log_error = /config/log/mysql/mysql.log +# +# Enable the slow query log to see queries with especially long duration +slow_query_log = 1 +slow_query_log_file = /config/log/mysql/mariadb-slow.log +long_query_time = 5 +#log_slow_rate_limit = 1000 +#log-queries-not-using-indexes +#log_slow_admin_statements +# +# The following can be used as easy to replay backup logs or for replication. +# note: if you are setting up a replication slave, see +# https://mariadb.com/kb/en/setting-up-replication/ +# about other settings you may need to change. +#server-id = 1 +#report_host = master1 +#auto_increment_increment = 2 +#auto_increment_offset = 1 +log_bin = /config/log/mysql/mariadb-bin +log_bin_index = /config/log/mysql/mariadb-bin.index +# not fab for performance, but safer +#sync_binlog = 1 +#binlog_do_db = include_database_name +#binlog_ignore_db = include_database_name +expire_logs_days = 10 +max_binlog_size = 100M +# slaves +#relay_log = /config/log/mysql/relay-bin +#relay_log_index = /config/log/mysql/relay-bin.index +#relay_log_info_file = /config/log/mysql/relay-bin.info +#log_slave_updates +#read_only +# +# If applications support it, this stricter sql_mode prevents some +# mistakes like inserting invalid dates etc. +#sql_mode = NO_ENGINE_SUBSTITUTION,TRADITIONAL +# +# * InnoDB +# +# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. +# Read the manual for more InnoDB related options. There are many! +default_storage_engine = InnoDB +# you can't just change log file size, requires special procedure +#innodb_log_file_size = 50M +innodb_buffer_pool_size = 256M +innodb_log_buffer_size = 8M +innodb_file_per_table = 1 +innodb_open_files = 400 +innodb_io_capacity = 400 +innodb_flush_method = O_DIRECT +# +# * Security Features +# +# Read the manual, too, if you want chroot! +# chroot = /var/lib/mysql/ +# +# For generating SSL certificates I recommend the OpenSSL GUI "tinyca". +# +# ssl-ca=/etc/mysql/cacert.pem +# ssl-cert=/etc/mysql/server-cert.pem +# ssl-key=/etc/mysql/server-key.pem + +[mysqldump] +quick +quote-names +max_allowed_packet = 16M + +[mysql] +#no-auto-rehash # faster start of mysql but no tab completion + +[isamchk] +key_buffer = 16M + +# +# * Galera-related settings +# +[galera] +# Mandatory settings +#wsrep_on=ON +#wsrep_provider= +#wsrep_cluster_address= +#binlog_format=MIXED +#default_storage_engine=InnoDB +#innodb_autoinc_lock_mode=2 +# +# Allow server to accept connections on all interfaces. +# +#bind-address=0.0.0.0 +# +# Optional setting +#wsrep_slave_threads=1 +#innodb_flush_log_at_trx_commit=0 diff --git a/bookstack/docker-compose.yml b/bookstack/docker-compose.yml new file mode 100644 index 0000000..a95bd66 --- /dev/null +++ b/bookstack/docker-compose.yml @@ -0,0 +1,36 @@ +--- +version: "2" +services: + bookstack: + image: lscr.io/linuxserver/bookstack + container_name: bookstack + environment: + - PUID=1000 + - PGID=1000 + - APP_URL=https://your.domain + - DB_HOST=bookstack_db + - DB_PORT=3306 + - DB_USER=bookstackuser + - DB_PASS=yourpassword + - DB_DATABASE=bookstackapp + volumes: + - ./bookstack_app_data:/config + ports: + - 6875:80 + restart: unless-stopped + depends_on: + - bookstack_db + bookstack_db: + image: lscr.io/linuxserver/mariadb + container_name: bookstack_db + environment: + - PUID=1000 + - PGID=1000 + - MYSQL_ROOT_PASSWORD=yourpassword + - TZ=Europe/Berlin + - MYSQL_DATABASE=bookstackapp + - MYSQL_USER=bookstackuser + - MYSQL_PASSWORD=yourpassword + volumes: + - ./bookstack_db_data:/config + restart: unless-stopped diff --git a/dashy/config.yml b/dashy/config.yml new file mode 100644 index 0000000..f126594 --- /dev/null +++ b/dashy/config.yml @@ -0,0 +1,25 @@ +appConfig: + theme: matrix + layout: auto + iconSize: medium + language: de +pageInfo: + title: Your Dashy + description: '' + navLinks: [] + footerText: '' +sections: + - name: your.domain + items: + - title: YourDomain + icon: https://your.domain/img/logo.png + url: https://your.domain + items: + - title: Minecraft Dynmap + url: https://meinspaces.org + - name: personal links + items: + - title: Github + url: https://github.com/youruser + - title: Youtube + url: https://www.youtube.com/channel/yourchannel diff --git a/dashy/docker-compose.yml b/dashy/docker-compose.yml new file mode 100644 index 0000000..3599cfb --- /dev/null +++ b/dashy/docker-compose.yml @@ -0,0 +1,22 @@ +--- +version: "3.8" +services: + dashy: + image: lissy93/dashy + container_name: Dashy + # Pass in your config file below, by specifying the path on your host machine + volumes: + - ./config.yml:/app/public/conf.yml + ports: + - 80:80 + environment: + - NODE_ENV=production + - UID=1000 + - GID=1000 + restart: unless-stopped + healthcheck: + test: ['CMD', 'node', '/app/services/healthcheck'] + interval: 1m30s + timeout: 10s + retries: 3 + start_period: 40s diff --git a/gitea/docker-compose.yml b/gitea/docker-compose.yml new file mode 100644 index 0000000..9a05107 --- /dev/null +++ b/gitea/docker-compose.yml @@ -0,0 +1,24 @@ +version: "3" + +networks: + gitea: + external: false + +services: + server: + image: gitea/gitea:latest + container_name: gitea + environment: + - USER_UID=1000 + - USER_GID=1000 + - DISABLE_REGISTRATION=true + restart: always + networks: + - gitea + volumes: + - ./gitea:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: + - "3000:3000" + - "22:22" diff --git a/grafana/docker-compose.yml b/grafana/docker-compose.yml new file mode 100644 index 0000000..8b17d0f --- /dev/null +++ b/grafana/docker-compose.yml @@ -0,0 +1,18 @@ +version: "3.3" + +services: + grafana: + image: grafana/grafana:latest + container_name: grafana + restart: always + user: "1000" + ports: + - "3000:3000" # expose for localhost + volumes: + - ./data:/var/lib/grafana # data path + - ./grafana/grafana.ini:/etc/grafana/grafana.ini + - ./grafana/provisioning:/etc/grafana/provisioning + environment: + - GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource + - GF_SECURITY_ADMIN_USER=your-username + - GF_SECURITY_ADMIN_PASSWORD=your-super-secret-password diff --git a/grafana/grafana/grafana.ini b/grafana/grafana/grafana.ini new file mode 100644 index 0000000..ec93ce0 --- /dev/null +++ b/grafana/grafana/grafana.ini @@ -0,0 +1,2 @@ +[plugin.marcusolsson-csv-datasource] +allow_local_mode = true diff --git a/gramps/docker-compose.yml b/gramps/docker-compose.yml new file mode 100644 index 0000000..70d26d0 --- /dev/null +++ b/gramps/docker-compose.yml @@ -0,0 +1,47 @@ +version: "3.7" + +services: + grampsweb: &grampsweb + image: ghcr.io/gramps-project/grampsweb:latest + restart: always + ports: + - "5000:5000" # host:docker + environment: + GRAMPSWEB_TREE: "" # will create a new tree if not exists + GRAMPSWEB_CELERY_CONFIG__broker_url: "redis://grampsweb_redis:6379/0" + GRAMPSWEB_CELERY_CONFIG__result_backend: "redis://grampsweb_redis:6379/0" + GRAMPSWEB_RATELIMIT_STORAGE_URI: redis://grampsweb_redis:6379/1 + depends_on: + - grampsweb_redis + volumes: + - ./data/users:/app/users # persist user database + - ./data/index:/app/indexdir # persist search index + - ./data/thumbnail_cache:/app/thumbnail_cache # persist thumbnails + - ./data/cache:/app/cache # persist export and report caches + - ./data/secret:/app/secret # persist flask secret + - ./data/db:/root/.gramps/grampsdb # persist Gramps database + - ./data/media:/app/media # persist media files + - ./data/tmp:/tmp + + grampsweb_celery: + <<: *grampsweb # YAML merge key copying the entire grampsweb service config + ports: [] + container_name: grampsweb_celery + depends_on: + - grampsweb_redis + command: celery -A gramps_webapi.celery worker --loglevel=INFO + + grampsweb_redis: + image: redis:alpine + container_name: grampsweb_redis + restart: always + +volumes: + gramps_users: + gramps_index: + gramps_thumb_cache: + gramps_cache: + gramps_secret: + gramps_db: + gramps_media: + gramps_tmp: diff --git a/jenkins/docker-compose.yml b/jenkins/docker-compose.yml new file mode 100644 index 0000000..3bc9639 --- /dev/null +++ b/jenkins/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3.7' +services: + jenkins: + image: jenkins/jenkins:lts + privileged: true + restart: always + user: root + ports: + - 8080:8080 + - 50000:50000 + container_name: jenkins + volumes: + - ./jenkins:/var/jenkins_home + - /var/run/docker.sock:/var/run/docker.sock + - /usr/bin/docker:/usr/bin/docker diff --git a/kanboard/docker-compose.yml b/kanboard/docker-compose.yml new file mode 100644 index 0000000..de298d7 --- /dev/null +++ b/kanboard/docker-compose.yml @@ -0,0 +1,10 @@ +version: '2' +services: + kanboard: + restart: always + image: kanboard/kanboard:latest + ports: + - "80:80" + volumes: + - ./data:/var/www/app/data + - ./plugins:/var/www/app/plugins diff --git a/keycloak/docker-compose.yml b/keycloak/docker-compose.yml new file mode 100644 index 0000000..f11dca2 --- /dev/null +++ b/keycloak/docker-compose.yml @@ -0,0 +1,49 @@ +volumes: + mariadb_data: + driver: local + +networks: + local: + ipam: + config: + - subnet: 172.16.0.0/29 + +services: + mariadb: + image: mariadb:latest + environment: + MARIADB_ROOT_PASSWORD: mariadbpassword + MARIADB_DATABASE: keycloak + MARIADB_USER: keycloakuser + MARIADB_PASSWORD: mariadbpassword + mem_limit: 300m + container_name: mariadb + volumes: + - mariadb_data:/var/lib/mysql + restart: always + networks: + - local + keycloak: + image: quay.io/keycloak/keycloak:${KEYCLOAK_VERSION:-latest} + environment: + KC_DB: mariadb + KC_DB_SCHEMA: keycloak + KC_DB_USERNAME: keycloakuser + KC_DB_PASSWORD: mariadbpassword + KC_DB_URL_HOST: mariadb + KEYCLOAK_ADMIN: admin + KEYCLOAK_ADMIN_PASSWORD: adminpassword + KC_PROXY_HEADERS: xforwarded + KC_HTTP_ENABLED: true + KC_HOSTNAME_STRICT: false + KC_HOSTNAME_URL: https://your.domain + mem_limit: 500m + command: start + ports: + - 8080:8080 + container_name: keycloak + restart: always + networks: + - local + depends_on: + - mariadb diff --git a/mediawiki/docker-compose.yml b/mediawiki/docker-compose.yml new file mode 100644 index 0000000..5ed544b --- /dev/null +++ b/mediawiki/docker-compose.yml @@ -0,0 +1,28 @@ +version: '3' +services: + mediawiki: + image: mediawiki + restart: always + ports: + - 80:80 + links: + - database + volumes: + - ./images:/var/www/html/images + - ./uploads:/uploads + # After initial setup, download LocalSettings.php to the same directory as + # this yaml and uncomment the following line and use compose to restart + # the mediawiki service + - ./LocalSettings.php:/var/www/html/LocalSettings.php + # This key also defines the name of the database host used during setup instead of the default "localhost" + database: + image: mariadb + restart: always + environment: + # @see https://phabricator.wikimedia.org/source/mediawiki/browse/master/includes/DefaultSettings.php + MYSQL_DATABASE: db + MYSQL_USER: user + MYSQL_PASSWORD: password + MYSQL_RANDOM_ROOT_PASSWORD: 'yes' + volumes: + - ./db:/var/lib/mysql diff --git a/nextcloud/docker-compose.yml b/nextcloud/docker-compose.yml new file mode 100644 index 0000000..ba4f0a8 --- /dev/null +++ b/nextcloud/docker-compose.yml @@ -0,0 +1,11 @@ +version: '2' + +services: + nextcloud: + image: nextcloud:production + restart: always + ports: + - 80:80 + volumes: + - /data:/data:rw + - ./data:/var/www/html diff --git a/offen/docker-compose.yml b/offen/docker-compose.yml new file mode 100644 index 0000000..76fa3ec --- /dev/null +++ b/offen/docker-compose.yml @@ -0,0 +1,13 @@ +version: '3' + +services: + offen: + image: offen/offen:v1.3.4 + env_file: ./offen.env + restart: always + ports: + - 8102:80 + - 4434:443 + volumes: + - ./data:/var/opt/offen + - ./certs:/var/www/.cache diff --git a/offen/offen.env b/offen/offen.env new file mode 100644 index 0000000..808bb56 --- /dev/null +++ b/offen/offen.env @@ -0,0 +1 @@ +OFFEN_SECRET="yoursecret" \ No newline at end of file diff --git a/offen/setup.sh b/offen/setup.sh new file mode 100644 index 0000000..f8f9c2f --- /dev/null +++ b/offen/setup.sh @@ -0,0 +1,8 @@ +docker run -it --rm \ + -v ./data:/var/opt/offen \ + -v ./certs:/var/www/.cache \ + -v .offen.env:/etc/offen/offen.env \ + offen/offen:v1.3.4 setup \ + -email you@your.domain \ + -name your.domain \ + -populate