From 5ec489e0e03803b17fd54e0b3ddff555f6663389 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 29 Mar 2023 13:04:10 +0000 Subject: [PATCH] ... --- glpi/.env | 2 +- glpi/docker-compose.yml | 10 +- ipam/.env | 6 + ipam/Dockerfile | 76 ++++++++++ ipam/INSTALL.md | 130 ++++++++++++++++++ ipam/docker-compose.yml | 44 +++--- ipam/php.ini | 72 ++++++++++ mediawiki/.env | 12 ++ mediawiki/docker-compose.yml | 8 +- portainer/docker-compose.yaml | 13 ++ .../common/portainer.db.2.17.1.20230329123720 | Bin 0 -> 65536 bytes portainer/portainer_data/certs/cert.pem | 10 ++ portainer/portainer_data/certs/key.pem | 5 + .../portainer_data/docker_config/config.json | 1 + portainer/portainer_data/portainer.db | Bin 0 -> 196608 bytes portainer/portainer_data/portainer.key | 5 + portainer/portainer_data/portainer.pub | 4 + snipeit/.env | 4 +- snipeit/.gitignore | 1 + snipeit/docker-compose.yml | 13 +- snipeit/stack.env | 19 --- speedtest/.gitignore | 1 + speedtest/docker-compose.yml | 4 +- startstop.sh | 4 + zabbix/.env | 14 ++ zabbix/.gitignore | 1 + zabbix/docker-compose.yml | 66 +++++---- zabbix/stack.env | 9 -- 28 files changed, 426 insertions(+), 108 deletions(-) create mode 100644 ipam/Dockerfile create mode 100644 ipam/INSTALL.md create mode 100644 ipam/php.ini create mode 100644 portainer/docker-compose.yaml create mode 100644 portainer/portainer_data/backups/common/portainer.db.2.17.1.20230329123720 create mode 100644 portainer/portainer_data/certs/cert.pem create mode 100644 portainer/portainer_data/certs/key.pem create mode 100644 portainer/portainer_data/docker_config/config.json create mode 100644 portainer/portainer_data/portainer.db create mode 100644 portainer/portainer_data/portainer.key create mode 100644 portainer/portainer_data/portainer.pub create mode 100644 snipeit/.gitignore delete mode 100644 snipeit/stack.env create mode 100644 speedtest/.gitignore create mode 100644 zabbix/.gitignore delete mode 100644 zabbix/stack.env diff --git a/glpi/.env b/glpi/.env index ffb57f13..62a2dfa4 100644 --- a/glpi/.env +++ b/glpi/.env @@ -1,6 +1,6 @@ TZ: Europe/Berlin GLPI_LANG: de_DE -MARIADB_HOST: mariadb-glpi +MARIADB_HOST: glpi-db MARIADB_PORT: 3306 MARIADB_DATABASE: glpi MARIADB_USER: glpi-user diff --git a/glpi/docker-compose.yml b/glpi/docker-compose.yml index 93a7da9a..8b0f937d 100644 --- a/glpi/docker-compose.yml +++ b/glpi/docker-compose.yml @@ -1,6 +1,6 @@ version: "3.5" services: - mariadb-glpi: + mariadb: image: fametec/glpi:mariadb container_name: glpi-db restart: unless-stopped @@ -24,12 +24,12 @@ services: - ./volumes/glpi-files:/var/www/html/files:rw - ./volumes/glpi-plugins:/var/www/html/plugins:rw environment: - GLPI_LANG: ${GLPI_LANG} - MARIADB_HOST: glpi-db + MARIADB_HOST: ${MARIADB_HOST} MARIADB_PORT: ${MARIADB_PORT} MARIADB_DATABASE: ${MARIADB_DATABASE} MARIADB_USER: ${MARIADB_USER} MARIADB_PASSWORD: ${MARIADB_PASSWORD} + GLPI_LANG: ${GLPI_LANG} VERSION: "9.5.6" PLUGINS: "all" TIMEZONE: ${TZ} @@ -37,7 +37,7 @@ services: ADMINEMAIL: ${ADMINEMAIL} ORGANIZATION: ${ORGANIZATION} depends_on: - - mariadb-glpi + - mariadb ports: - 8075:80 networks: @@ -55,7 +55,7 @@ services: - ./volumes/glpi-files:/var/www/html/files:rw - ./volumes/glpi-plugins:/var/www/html/plugins:rw depends_on: - - mariadb-glpi + - mariadb environment: MARIADB_HOST: ${MARIADB_HOST} MARIADB_PORT: ${MARIADB_PORT} diff --git a/ipam/.env b/ipam/.env index e69de29b..fa08300e 100644 --- a/ipam/.env +++ b/ipam/.env @@ -0,0 +1,6 @@ +TZ=Europe/Berlin +IPAM_DATABASE_WEBHOST=% +SCAN_INTERVAL=1h +MARIADB_HOST=ipam_db +MARIADB_ROOT_PASSWORD=IPAMrootpwd + diff --git a/ipam/Dockerfile b/ipam/Dockerfile new file mode 100644 index 00000000..847d4b08 --- /dev/null +++ b/ipam/Dockerfile @@ -0,0 +1,76 @@ +FROM php:7.2-apache +MAINTAINER Pierre Cheynier + +ENV PHPIPAM_SOURCE https://github.com/phpipam/phpipam/ +ARG PHPIPAM_VERSION=1.5.1 +ENV PHPMAILER_SOURCE https://github.com/PHPMailer/PHPMailer/ +ARG PHPMAILER_VERSION=6.7.1 +ENV PHPSAML_SOURCE https://github.com/onelogin/php-saml/ +ARG PHPSAML_VERSION=3.4.1 +ENV WEB_REPO /var/www/html + +# Install required deb packages +RUN sed -i /etc/apt/sources.list -e 's/$/ non-free'/ && \ + apt-get update && apt-get -y upgrade && \ + rm /etc/apt/preferences.d/no-debian-php && \ + apt-get install -y libcurl4-gnutls-dev libgmp-dev libmcrypt-dev libfreetype6-dev libjpeg-dev libpng-dev libldap2-dev libsnmp-dev snmp-mibs-downloader iputils-ping && \ + rm -rf /var/lib/apt/lists/* + +# Install required packages and files required for snmp +RUN mkdir -p /var/lib/mibs/ietf && \ + curl -sL https://github.com/cisco/cisco-mibs/raw/main/v2/CISCO-SMI.my -o /var/lib/mibs/ietf/CISCO-SMI.txt && \ + curl -sL https://github.com/cisco/cisco-mibs/raw/main/v2/CISCO-TC.my -o /var/lib/mibs/ietf/CISCO-TC.txt && \ + curl -sL https://github.com/cisco/cisco-mibs/raw/main/v2/CISCO-VTP-MIB.my -o /var/lib/mibs/ietf/CISCO-VTP-MIB.txt && \ + curl -sL https://github.com/cisco/cisco-mibs/raw/main/v2/MPLS-VPN-MIB.my -o /var/lib/mibs/ietf/MPLS-VPN-MIB.txt + +# Configure apache and required PHP modules +RUN docker-php-ext-configure mysqli --with-mysqli=mysqlnd && \ + docker-php-ext-install mysqli && \ + docker-php-ext-configure gd --with-freetype-dir=/usr/include/freetype2 --with-png-dir=/usr/include --with-jpeg-dir=/usr/include && \ + docker-php-ext-install gd && \ + docker-php-ext-install curl && \ + docker-php-ext-install json && \ + docker-php-ext-install snmp && \ + docker-php-ext-install sockets && \ + docker-php-ext-install pdo_mysql && \ + docker-php-ext-install gettext && \ + ln -s /usr/include/$(uname -m)-linux-gnu/gmp.h /usr/include/gmp.h && \ + docker-php-ext-configure gmp --with-gmp=/usr/include/$(uname -m)-linux-gnu && \ + docker-php-ext-install gmp && \ + docker-php-ext-install pcntl && \ + docker-php-ext-configure ldap --with-libdir=lib/$(uname -m)-linux-gnu && \ + docker-php-ext-install ldap && \ + pecl install mcrypt-1.0.1 && \ + docker-php-ext-enable mcrypt && \ + echo ". /etc/environment" >> /etc/apache2/envvars && \ + a2enmod rewrite + +COPY php.ini /usr/local/etc/php/ + +# Copy phpipam sources to web dir +ADD ${PHPIPAM_SOURCE}/archive/v${PHPIPAM_VERSION}.tar.gz /tmp/ +RUN tar -xzf /tmp/v${PHPIPAM_VERSION}.tar.gz -C ${WEB_REPO}/ --strip-components=1 +# Copy referenced submodules into the right directory +ADD ${PHPMAILER_SOURCE}/archive/v${PHPMAILER_VERSION}.tar.gz /tmp/ +RUN tar -xzf /tmp/v${PHPMAILER_VERSION}.tar.gz -C ${WEB_REPO}/functions/PHPMailer/ --strip-components=1 +ADD ${PHPSAML_SOURCE}/archive/refs/tags/${PHPSAML_VERSION}.tar.gz /tmp/ +RUN tar -xzf /tmp/${PHPSAML_VERSION}.tar.gz -C ${WEB_REPO}/functions/php-saml/ --strip-components=1 + +# Use system environment variables into config.php +ENV PHPIPAM_BASE / +RUN cp ${WEB_REPO}/config.dist.php ${WEB_REPO}/config.php && \ + chown www-data /var/www/html/app/admin/import-export/upload && \ + chown www-data /var/www/html/app/subnets/import-subnet/upload && \ + chown www-data /var/www/html/css/images/logo && \ + echo "\$db['webhost'] = '%';" >> ${WEB_REPO}/config.php && \ + sed -i -e "s/\['host'\] = '127.0.0.1'/\['host'\] = getenv(\"MYSQL_ENV_MYSQL_HOST\") ?: \"mysql\"/" \ + -e "s/\['user'\] = 'phpipam'/\['user'\] = getenv(\"MYSQL_ENV_MYSQL_USER\") ?: \"root\"/" \ + -e "s/\['name'\] = 'phpipam'/\['name'\] = getenv(\"MYSQL_ENV_MYSQL_DB\") ?: \"phpipam\"/" \ + -e "s/\['pass'\] = 'phpipamadmin'/\['pass'\] = getenv(\"MYSQL_ENV_MYSQL_ROOT_PASSWORD\")/" \ + -e "s/\['port'\] = 3306;/\['port'\] = 3306;\n\n\$password_file = getenv(\"MYSQL_ENV_MYSQL_PASSWORD_FILE\");\nif(file_exists(\$password_file))\n\$db\['pass'\] = preg_replace(\"\/\\\\s+\/\", \"\", file_get_contents(\$password_file));/" \ + -e "s/define('BASE', \"\/\")/define('BASE', getenv(\"PHPIPAM_BASE\"))/" \ + -e "s/\$gmaps_api_key.*/\$gmaps_api_key = getenv(\"GMAPS_API_KEY\") ?: \"\";/" \ + -e "s/\$gmaps_api_geocode_key.*/\$gmaps_api_geocode_key = getenv(\"GMAPS_API_GEOCODE_KEY\") ?: \"\";/" \ + ${WEB_REPO}/config.php + +EXPOSE 80 diff --git a/ipam/INSTALL.md b/ipam/INSTALL.md new file mode 100644 index 00000000..47773aad --- /dev/null +++ b/ipam/INSTALL.md @@ -0,0 +1,130 @@ +# docker-phpipam + +phpIPAM is an open-source web IP address management application. Its goal is to provide light and simple IP address management application. + +phpIPAM is developed and maintained by Miha Petkovsek, released under the GPL v3 license, project source is [here](https://github.com/phpipam/phpipam). + +Learn more on [phpIPAM homepage](http://phpipam.net). + +![phpIPAM logo](http://phpipam.net/wp-content/uploads/2014/12/phpipam_logo_small.png) + +## How to use this Docker image + +### Mysql + +Run a MySQL database, dedicated to phpipam. + +```bash +$ docker run --name phpipam-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -v /my_dir/phpipam:/var/lib/mysql -d mysql:5.6 +``` + +Here, we store data on the host system under `/my_dir/phpipam` and use a specific root password. + +### Phpipam + +```bash +$ docker run -ti -d -p 80:80 -e MYSQL_ENV_MYSQL_ROOT_PASSWORD=my-secret-pw --name ipam --link phpipam-mysql:mysql pierrecdn/phpipam +``` + +We are linking the two containers and exposing the HTTP port. + +### First install scenario + +* Browse to `http://[:]/install/` +* Step 1 : Choose 'Automatic database installation' + +![step1](https://cloud.githubusercontent.com/assets/4225738/8746785/01758b9e-2c8d-11e5-8643-7f5862c75efe.png) + +* Step 2 : Re-Enter connection information + +![step2](https://cloud.githubusercontent.com/assets/4225738/8746789/0ad367e2-2c8d-11e5-80bb-f5093801e139.png) + +* Note that these two first steps could be swapped by patching phpipam (see https://github.com/phpipam/phpipam/issues/25) +* Step 3 : Configure the admin user password + +![step3](https://cloud.githubusercontent.com/assets/4225738/8746790/0c434bf6-2c8d-11e5-9ae7-b7d1021b7aa0.png) + +* You're done ! + +![done](https://cloud.githubusercontent.com/assets/4225738/8746792/0d6fa34e-2c8d-11e5-8002-3793361ae34d.png) + +### Docker compose + +You can also create an all-in-one YAML deployment descriptor with Docker compose, like this: + +```yaml +version: '2' + +services: + mysql: + image: mysql:5.6 + environment: + - MYSQL_ROOT_PASSWORD=my-secret-pw + restart: always + volumes: + - db_data:/var/lib/mysql + ipam: + depends_on: + - mysql + image: pierrecdn/phpipam + environment: + - MYSQL_ENV_MYSQL_USER=root + - MYSQL_ENV_MYSQL_ROOT_PASSWORD=my-secret-pw + - MYSQL_ENV_MYSQL_HOST=mysql + ports: + - "80:80" +volumes: + db_data: +``` + +And next : + +```bash +$ docker-compose up -d +``` + +You can also point the `MYSQL_ENV_PASSWORD_FILE` environment variable to a file, +in which case the contents of this file will be used as the password. +This makes it possible to use docker secrets for instance: + +```yaml +version: '3' + +services: + ipam: + environment: + - MYSQL_ENV_MYSQL_PASSWORD_FILE=/run/secrets/phpipam_mysql_root_password + secrets: + - phpipam_mysql_root_password +``` + +The secret can be created by running `echo my-secret-pw | docker secret create phpipam_mysql_root_password -` + +### Advanced Configuration + +Here is the list of the available environment variables in the phpipam container, pass them to docker using `-e`. +None of them are actually needed to run the container, this is only to tweak the behavior. + +| Environment variable | Default value | Description | +| ------------------------------ |:-------------:| --------------------------------------------------------------------------------------------------------:| +| MYSQL_ENV_MYSQL_HOST | mysql | The host used to reach the MySQL instance | +| MYSQL_ENV_MYSQL_USER | root | The user to connect the MySQL instance | +| MYSQL_ENV_MYSQL_ROOT_PASSWORD | (empty) | The MySQL password. Can be set using the Web UI during the first install | +| MYSQL_ENV_MYSQL_DB | phpipam | The name of the MySQL DB to connect to | +| MYSQL_ENV_MYSQL_PASSWORD_FILE | (empty) | A file containing the password (if not using MYSQL_ROOT_PASSWORD) this allows to leverage docker secrets | +| PHPIPAM_BASE | / | The base URI under which phpipam runs. Useful when performing rewrites with a reverse-proxy | +| GMAPS_API_KEY | (empty) | Google Maps API Key, used to display maps of your devices | +| GMAPS_API_GEOCODE_KEY | (empty) | Google Maps Geocode API Key, used to find coordinates from an address/ a location of your device | + +### Specific integration (HTTPS, multi-host containers, etc.) + +Regarding your requirements and docker setup, you've to expose resources. + +For HTTPS, run a reverse-proxy in front of your phpipam container and link it to. + +For multi-host containers, expose ports, run etcd or consul to make service discovery works etc. + +### Notes + +phpIPAM is under heavy development by the amazing Miha. +To upgrade the release version, just change the `PHPIPAM_VERSION` environment variable to the target release (see [here](https://github.com/phpipam/phpipam/releases)). diff --git a/ipam/docker-compose.yml b/ipam/docker-compose.yml index 1166ce12..2a543f7a 100644 --- a/ipam/docker-compose.yml +++ b/ipam/docker-compose.yml @@ -2,45 +2,43 @@ version: '3' services: - phpipam-web: + web: image: phpipam/phpipam-www:latest - container_name: phpipam_www + container_name: ipam_www ports: - "8080:80" environment: - - TZ=Europe/Berlin - - IPAM_DATABASE_HOST=phpipam-mariadb - - IPAM_DATABASE_PASS=IPAMpass + - TZ=${TZ} + - IPAM_DATABASE_HOST=${MARIADB_HOST} + - IPAM_DATABASE_PASS=${MARIADB_ROOT_PASSWORD} - IPAM_DATABASE_WEBHOST=% restart: unless-stopped volumes: - - phpipam-logo:/phpipam/css/images/logo + - ./volumes/logo:/phpipam/css/images/logo depends_on: - - phpipam-mariadb + - mariadb - phpipam-cron: + cron: image: phpipam/phpipam-cron:latest - container_name: phpipam_cron + container_name: ipam_cron environment: - - TZ=Europe/London - - IPAM_DATABASE_HOST=phpipam-mariadb - - IPAM_DATABASE_PASS=IPAMpass - - SCAN_INTERVAL=1h + - TZ=${TZ} + - SCAN_INTERVAL=1 + - PHPIPAM_BASE=/ + - MYSQL_ENV_MYSQL_USER=root + - MYSQL_ENV_MYSQL_DB=phpipam + - MYSQL_ENV_MYSQL_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD} + - MYSQL_ENV_MYSQL_HOST=${MARIADB_HOST} restart: unless-stopped depends_on: - - phpipam-mariadb + - mariadb - phpipam-mariadb: + mariadb: image: mariadb:latest - container_name: phpipam_db + container_name: ipam_db environment: - - MYSQL_ROOT_PASSWORD=IPAMrootpwd - - MARIADB_USER=phpipam-mariadb - - MARIADB_PASSWORD=IPAMpass + - MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD} restart: unless-stopped volumes: - - phpipam-db-data:/var/lib/mysql + - ./volumes/mariadb:/var/lib/mysql -volumes: - phpipam-db-data: - phpipam-logo: diff --git a/ipam/php.ini b/ipam/php.ini new file mode 100644 index 00000000..bfcad23e --- /dev/null +++ b/ipam/php.ini @@ -0,0 +1,72 @@ +[PHP] +engine = On +short_open_tag = Off +precision = 14 +output_buffering = 4096 +zlib.output_compression = Off +implicit_flush = Off +serialize_precision = 17 +zend.enable_gc = On +expose_php = Off +max_execution_time = 600 +max_input_time = 60 +error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT +display_errors = Off +log_errors = On +log_errors_max_len = 1024 +default_mimetype = "text/html" +default_charset = "UTF-8" +file_uploads = On +upload_max_filesize = 2M +max_file_uploads = 20 +allow_url_fopen = On +allow_url_include = Off +default_socket_timeout = 60 + +[Date] +date.timezone = "UTC" + +[mail function] +smtp_port = 25 +mail.add_x_header = On + +[SQL] +sql.safe_mode = Off + +[MySQLi] +mysqli.max_persistent = -1 +mysqli.allow_persistent = On +mysqli.max_links = -1 +mysqli.cache_size = 2000 +mysqli.default_port = 3306 +mysqli.reconnect = Off + +[mysqlnd] +mysqlnd.collect_statistics = On +mysqlnd.collect_memory_statistics = Off + +[Session] +session.save_handler = files +session.use_strict_mode = 0 +session.use_cookies = 1 +session.use_only_cookies = 1 +session.name = PHPSESSID +session.auto_start = 0 +session.cookie_lifetime = 0 +session.cookie_path = / +session.cookie_domain = +session.cookie_httponly = +session.serialize_handler = php +session.gc_probability = 1 +session.gc_divisor = 1000 +session.gc_maxlifetime = 1440 +session.cache_limiter = nocache +session.cache_expire = 180 +session.use_trans_sid = 0 +session.hash_function = 0 +session.hash_bits_per_character = 5 +url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" + +[ldap] +ldap.max_links = -1 + diff --git a/mediawiki/.env b/mediawiki/.env index e69de29b..565c46c5 100644 --- a/mediawiki/.env +++ b/mediawiki/.env @@ -0,0 +1,12 @@ +MW_SCRIPT_PATH=/w +MW_SERVER=http://localhost:8080 +MW_DOCKER_PORT=8080 +MEDIAWIKI_USER=Admin +MEDIAWIKI_PASSWORD=dockerpass +XDEBUG_CONFIG= +XDEBUG_ENABLE=true +XHPROF_ENABLE=true +MYSQL_DATABASE: my_wiki +MYSQL_USER: wikiuser +MYSQL_PASSWORD: example +MYSQL_RANDOM_ROOT_PASSWORD: 'yes' diff --git a/mediawiki/docker-compose.yml b/mediawiki/docker-compose.yml index fa959611..c914a825 100644 --- a/mediawiki/docker-compose.yml +++ b/mediawiki/docker-compose.yml @@ -6,7 +6,7 @@ version: '3' services: mediawiki: image: mediawiki - container_name: mediawiki + container_name: wiki restart: always ports: - 8070:80 @@ -21,11 +21,11 @@ services: # This key also defines the name of the database host used during setup instead of the default "localhost" database: image: mariadb - container_name: mediawiki_db + container_name: wikidb restart: always environment: # @see https://phabricator.wikimedia.org/source/mediawiki/browse/master/includes/DefaultSettings.php - MYSQL_DATABASE: my_wiki + MYSQL_DATABASE: wiki MYSQL_USER: wikiuser MYSQL_PASSWORD: example - MYSQL_RANDOM_ROOT_PASSWORD: 'yes' \ No newline at end of file + MYSQL_RANDOM_ROOT_PASSWORD: 'yes' diff --git a/portainer/docker-compose.yaml b/portainer/docker-compose.yaml new file mode 100644 index 00000000..a8a6b78a --- /dev/null +++ b/portainer/docker-compose.yaml @@ -0,0 +1,13 @@ +version: '2.4' + +services: + portainer: + image: portainer/portainer-ce:latest + container_name: portainer + restart: always + ports: + - 8000:8000 + - 9443:9443 + volumes: + - ./portainer_data:/data + - /var/run/docker.sock:/var/run/docker.sock diff --git a/portainer/portainer_data/backups/common/portainer.db.2.17.1.20230329123720 b/portainer/portainer_data/backups/common/portainer.db.2.17.1.20230329123720 new file mode 100644 index 0000000000000000000000000000000000000000..f40c459e98c44af0a953aac4d4f5cf6128c74725 GIT binary patch literal 65536 zcmeI3%Wot}5ym~kV_CF_6+$Z^gk+V(Y5ewhJ!8Sa@97=C*3}-dtdLb*mEE1=s>&uS z%U-YL6XLG`PAkEcBS?FOI|mMkGq*jh#1Z(S9^KVF#`bY7eI<2QMOIX1S|V)%mU8|NYCQh0k_sJ)TK`1W14cNPq-L zfCNZ@1W14cNPq;sIs_h7rrbCGul4Huf3tdi_q|7d{`KEJ`uwXiGg?9dBtQZrKmsH{ z0wh2JBtQZrKmsIC6DYpxhwyl+t^|}{{Y!rTySJvM{OxwTb+GGSd3&a3PLB7yHP4&z zHsT;W+tZm-(O%F|aptXk{EHcHJ$HSTIvoa1n{;2fzKOiG#Tl=aI%U%!76o59r_&xD zx$=(HFLP~GbQEOSg|X3|N_(!4N0zQA@>yb@#Gr#aO-ztZVA|DzIV0){n2ejUZF? zKs!3djH*F1Wev$vw5*=5o2Mt`7ZHmwSrI>C?t zCQWRUsFp4W4MC{rva1ECJgVMBqjltN`4oTkM0<1HA~fzf#5 zcvq200-e^6!r*RX?ljh1q{R@Y7(B^^GeQ z=Xnsr+?51AY^!7tBgnFHq`q^5Y;Att1{ZTZ?fQ8q$CzO`#ktTV^8;fYCZp`Us~??D z0&EVAhS{aLg}K+6Nio27)Klv{0NU)U@Jy#816E*F-(0*j$-rc4BiC_sIFP+$=&$X< zf6~Jyl(5*U=^_3qkBa|%1U#N<>qH@_FtKNSj4Lq(yRj>5e=^Wk!fHXxDY|T{SS89y zYt_*U6(`3EhG=K(>u3k~x}Z>9*WoI2LLQ)!AdN

IAwPDQ#T)JcIvFhbXL8r|A9J2bfCNZ@1W14cNZ=j>>fiT2p88>-EmeR&;ti?))HGfq{}pfFZOH$E z{B}eBFXV4G-)ZRo z3G(+F@;@Or$Nx8E`FDnCykz|M@FNEKKZaU<0=YTf7G$wko)P`MiTesNx}5q=b^lAq z-^BHFCBKc%(KM8Q1i8uYCy<-te+c0_(Eq4<{tpxPKZh*-_^i7B3WL==gMmIhQY}k$k4$)`EHb^j6crMW(@Z`9-$%12^^oj7ny*dgZoM=b7@fM) z@ovRq&EuxZ)?Y>nkFLBHssX4`Rk`>{idvNJrKk}g+fi9)b(Mj7qg&G|J=fNxlDlNk zla!<^vmBXNhxn+D#0%Mylsax~4|=T#I#M*7ETBnQMnzSUljd<;*44^p=@8GA&Fw&{ zXmWk6Y8X}_bw}!ZZ+v$vBAH7in;t0H#yBg?bHr4?D1Yl zQr*8*JyaYm;EwK%UyU@&I@T$&eP>NPt~HW|`sN-cXJKDO`F#|t0%zTOJziGTTkbSJ z%WkoF6yLHx$v)J_%lG%LJSj*W1yVot=A*y`^U{zN?{fnsr5$V)Hz=UBx}T}I>zBb_ z)mNqZQ)cW~B}KilSnhYu!67#5iBFzuFb=_dny93Me7>&-lWMixRKL5=92J!K6p@9R zUfsjwd2&yX-TKFPwGMU;uRN&|p!|ipqpze==>2@jKlj`DUi`trvrog<9q(Eq_fAt_ z!0pRs+?BG$i{D>uAN#GtgDcNRz$F1H)zS;hSejd0om+$#_jL~iO=CBu;!)I5wHw*9G|ff60UIBtQZrKmsH{0wh2JBtQZrKmsK2kO|cJeVzZ;|7$r}2YASHr0pa? z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J GB=A2Ftk}l@ literal 0 HcmV?d00001 diff --git a/portainer/portainer_data/certs/cert.pem b/portainer/portainer_data/certs/cert.pem new file mode 100644 index 00000000..60b1c871 --- /dev/null +++ b/portainer/portainer_data/certs/cert.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBUTCB+aADAgECAhEAzCMCoLriIwCpK0RgVPPPHjAKBggqhkjOPQQDAjAAMB4X +DTIzMDMyOTEyMzEzMVoXDTI4MDMyOTEyMzEzMVowADBZMBMGByqGSM49AgEGCCqG +SM49AwEHA0IABEEA1sLZGRfK6R+njkEq9LD/M41FAMI7pg/J8GDvaSexeuXh0qAL +K4pmvBD4E4chJ0KRNjnU4whzUUEKoLRKcx6jVDBSMA4GA1UdDwEB/wQEAwIFoDAT +BgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMB0GA1UdEQEB/wQTMBGC +CWxvY2FsaG9zdIcEAAAAADAKBggqhkjOPQQDAgNHADBEAiBXgeviCYcEiMHJPhxN +7psUVVXHZqBt/RsaLWDEVqe5HQIgfdQoCHvcq5wUQMRF7YlrIJP20eoqqZRWDB8V +mFAjBEU= +-----END CERTIFICATE----- diff --git a/portainer/portainer_data/certs/key.pem b/portainer/portainer_data/certs/key.pem new file mode 100644 index 00000000..d9826cf3 --- /dev/null +++ b/portainer/portainer_data/certs/key.pem @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEINMkRbyAA37Se5V+cDZezaaqTnqQUmHu3sQdwHQbefRyoAoGCCqGSM49 +AwEHoUQDQgAEQQDWwtkZF8rpH6eOQSr0sP8zjUUAwjumD8nwYO9pJ7F65eHSoAsr +ima8EPgThyEnQpE2OdTjCHNRQQqgtEpzHg== +-----END EC PRIVATE KEY----- diff --git a/portainer/portainer_data/docker_config/config.json b/portainer/portainer_data/docker_config/config.json new file mode 100644 index 00000000..13551f3b --- /dev/null +++ b/portainer/portainer_data/docker_config/config.json @@ -0,0 +1 @@ +{"HttpHeaders":{"X-PortainerAgent-ManagerOperation":"1","X-PortainerAgent-PublicKey":"3059301306072a8648ce3d020106082a8648ce3d0301070342000423ff2b462113e7f1160b2b5928fcb7592035fa30484cfffad090b78e8b61e086902b50a90caae2af5b509e7b7dadb621523c2571389873b6c785061fe575cabc","X-PortainerAgent-Signature":"fLj8HUSCLaCcOMB3KHzUldHNM23swq8vIBieHAjoVSF57u7ASFq+7J3L80WeoM2BszFYySxsziUt4WI5fCr7GQ"}} \ No newline at end of file diff --git a/portainer/portainer_data/portainer.db b/portainer/portainer_data/portainer.db new file mode 100644 index 0000000000000000000000000000000000000000..20f1a3a90100d8330c909287ac4244b43c8ab892 GIT binary patch literal 196608 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 literal 0 HcmV?d00001 diff --git a/portainer/portainer_data/portainer.key b/portainer/portainer_data/portainer.key new file mode 100644 index 00000000..96e501d6 --- /dev/null +++ b/portainer/portainer_data/portainer.key @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIHyUg5CHWXExcAV5z+RPx+B0XB1FFuPrxN7eD/xBV62NoAoGCCqGSM49 +AwEHoUQDQgAEI/8rRiET5/EWCytZKPy3WSA1+jBITP/60JC3joth4IaQK1CpDKri +r1tQnnt9rbYhUjwlcTiYc7bHhQYf5XXKvA== +-----END EC PRIVATE KEY----- diff --git a/portainer/portainer_data/portainer.pub b/portainer/portainer_data/portainer.pub new file mode 100644 index 00000000..ca69c7c5 --- /dev/null +++ b/portainer/portainer_data/portainer.pub @@ -0,0 +1,4 @@ +-----BEGIN ECDSA PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEI/8rRiET5/EWCytZKPy3WSA1+jBI +TP/60JC3joth4IaQK1CpDKrir1tQnnt9rbYhUjwlcTiYc7bHhQYf5XXKvA== +-----END ECDSA PUBLIC KEY----- diff --git a/snipeit/.env b/snipeit/.env index 1ecdd7ab..e4575a54 100644 --- a/snipeit/.env +++ b/snipeit/.env @@ -2,7 +2,7 @@ MYSQL_ROOT_PASSWORD=Holdiom,snipeit,root MYSQL_DATABASE=snipeit MYSQL_USER=snipeit MYSQL_PASSWORD=Holdiom,snipeit -MYSQL_PORT_3306_TCP_ADDR=snipeit-db +MYSQL_PORT_3306_TCP_ADDR=snipe_db MYSQL_PORT_3306_TCP_PORT=3306 MAIL_PORT_587_TCP_ADDR=192.168.75.25 MAIL_PORT_587_TCP_PORT=587 @@ -14,6 +14,6 @@ MAIL_ENV_PASSWORD=pass APP_ENV=production APP_DEBUG=false APP_KEY=base64:i/+ZvT6C4LEWcBNL7vWwicRVtEt05pv22RhWMJy+yZ8= -APP_URL=http://it.ostrach.tld:8090 +APP_URL=http://itmgmt.ostrach.tld:8090 APP_TIMEZONE=Europe/Berlin APP_LOCALE=de diff --git a/snipeit/.gitignore b/snipeit/.gitignore new file mode 100644 index 00000000..5368aac3 --- /dev/null +++ b/snipeit/.gitignore @@ -0,0 +1 @@ +./volumes/** diff --git a/snipeit/docker-compose.yml b/snipeit/docker-compose.yml index 6e6f5488..d6ee84b7 100644 --- a/snipeit/docker-compose.yml +++ b/snipeit/docker-compose.yml @@ -3,18 +3,18 @@ version: '3' services: mysql: - image: mysql:latest - container_name: snipeit-db + image: mariadb:latest + container_name: snipe_db env_file: - ./.env restart: unless-stopped volumes: - - db:/var/lib/mysql + - ./volumes/db:/var/lib/mysql app: image: snipe/snipe-it:latest - container_name: snipeit-app + container_name: snipe_app env_file: - ./.env ports: @@ -22,7 +22,4 @@ services: restart: unless-stopped depends_on: - mysql - -volumes: - db: - \ No newline at end of file + diff --git a/snipeit/stack.env b/snipeit/stack.env deleted file mode 100644 index 1ecdd7ab..00000000 --- a/snipeit/stack.env +++ /dev/null @@ -1,19 +0,0 @@ -MYSQL_ROOT_PASSWORD=Holdiom,snipeit,root -MYSQL_DATABASE=snipeit -MYSQL_USER=snipeit -MYSQL_PASSWORD=Holdiom,snipeit -MYSQL_PORT_3306_TCP_ADDR=snipeit-db -MYSQL_PORT_3306_TCP_PORT=3306 -MAIL_PORT_587_TCP_ADDR=192.168.75.25 -MAIL_PORT_587_TCP_PORT=587 -MAIL_ENV_FROM_ADDR=it@hochvogel.de -MAIL_ENV_FROM_NAME=Snipe-IT -MAIL_ENV_ENCRYPTION=tcp -MAIL_ENV_USERNAME=user -MAIL_ENV_PASSWORD=pass -APP_ENV=production -APP_DEBUG=false -APP_KEY=base64:i/+ZvT6C4LEWcBNL7vWwicRVtEt05pv22RhWMJy+yZ8= -APP_URL=http://it.ostrach.tld:8090 -APP_TIMEZONE=Europe/Berlin -APP_LOCALE=de diff --git a/speedtest/.gitignore b/speedtest/.gitignore new file mode 100644 index 00000000..5368aac3 --- /dev/null +++ b/speedtest/.gitignore @@ -0,0 +1 @@ +./volumes/** diff --git a/speedtest/docker-compose.yml b/speedtest/docker-compose.yml index 8a15c95c..e30d2620 100644 --- a/speedtest/docker-compose.yml +++ b/speedtest/docker-compose.yml @@ -6,7 +6,7 @@ services: ports: - 8765:80 volumes: - - /path/to/data:/config + - ./volumes/config:/config environment: - TZ=Europe/Berlin - PGID= @@ -17,4 +17,4 @@ services: options: max-file: "10" max-size: "200k" - restart: unless-stopped \ No newline at end of file + restart: unless-stopped diff --git a/startstop.sh b/startstop.sh index c00e06ec..274e945c 100755 --- a/startstop.sh +++ b/startstop.sh @@ -41,6 +41,10 @@ stop) compose "docker compose stop" ;; +cleanup) + compose "rm ./volumes/* -rf" +;; + *) echo "Usage: $0 [start|stop|down]" ;; diff --git a/zabbix/.env b/zabbix/.env index e69de29b..df5d80f0 100644 --- a/zabbix/.env +++ b/zabbix/.env @@ -0,0 +1,14 @@ +MYSQL_ROOT_PASSWORD=zabbixrootsqlsecret +MYSQL_USER=zabbix +MYSQL_PASSWORD=zabbixsqlsecret +MYSQL_DATABASE=zabbix +DB_SERVER_HOST=zbxdb +DB_SERVER_PORT=3306 +ZBX_DEBUGLEVEL=3 +ZBX_SERVER_HOST="zabbix" +PHP_TZ="Europe/Berlin" +SERVER_NAME=itmgmt.ostrach.tld +ZBX_SERVER_HOST=zabbix +ZBX_HOSTNAME=agent2 +ZBX_STARTAGENTS=5 + diff --git a/zabbix/.gitignore b/zabbix/.gitignore new file mode 100644 index 00000000..5368aac3 --- /dev/null +++ b/zabbix/.gitignore @@ -0,0 +1 @@ +./volumes/** diff --git a/zabbix/docker-compose.yml b/zabbix/docker-compose.yml index c5a6f75e..f2d17322 100644 --- a/zabbix/docker-compose.yml +++ b/zabbix/docker-compose.yml @@ -4,69 +4,65 @@ version: '3.3' services: mysql: - image: mysql:latest - container_name: zabbix-db + image: mariadb:10.7.8 + container_name: zbxdb restart: unless-stopped environment: - - MYSQL_ROOT_PASSWORD=zabbixrootsqlsecret - - MYSQL_USER=zabbix - - MYSQL_PASSWORD=zabbixsqlsecret - - MYSQL_DATABASE=zabbix - - DB_SERVER_HOST=zabbix-db - - DB_SERVER_PORT=3306 - - ZBX_DEBUGLEVEL=3 - - ZBX_SERVER_HOST=zabbix-server + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} + - MYSQL_USER=${MYSQL_USER} + - MYSQL_PASSWORD=${MYSQL_PASSWORD} + - MYSQL_DATABASE=${MYSQL_DATABASE} + - DB_SERVER_HOST=${DB_SERVER_HOST} + - DB_SERVER_PORT=${DB_SERVER_PORT} + - ZBX_DEBUGLEVEL=${ZBX_DEBUGLEVEL} + - ZBX_SERVER_HOST=${ZBX_SERVER_HOST} cap_add: - SYS_NICE # CAP_SYS_NICE volumes: - - db:/var/lib/mysql + - ./volumes/db:/var/lib/mysql server: image: zabbix/zabbix-server-mysql - container_name: zabbix-server + container_name: zabbix ports: - "10051:10051" restart: unless-stopped environment: - - SERVER_NAME=server - - MYSQL_ROOT_PASSWORD=zabbixrootsqlsecret - - MYSQL_USER=zabbix - - MYSQL_PASSWORD=zabbixsqlsecret - - MYSQL_DATABASE=zabbix - - DB_SERVER_HOST=zabbix-db - - DB_SERVER_PORT=3306 - - ZBX_DEBUGLEVEL=3 + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} + - MYSQL_USER=${MYSQL_USER} + - MYSQL_PASSWORD=${MYSQL_PASSWORD} + - MYSQL_DATABASE=${MYSQL_DATABASE} + - DB_SERVER_HOST=${DB_SERVER_HOST} + - DB_SERVER_PORT=${DB_SERVER_PORT} + - ZBX_DEBUGLEVEL=${ZBX_DEBUGLEVEL} depends_on: - mysql agent: image: zabbix/zabbix-agent2 - container_name: zabbix-agent2 + container_name: zbxagent2 privileged: true environment: - - ZBX_SERVER_HOST=zabbix-server - - ZBX_HOSTNAME=zabbix-agent2 - - ZBX_STARTAGENTS=3 + - ZBX_SERVER_HOST=${ZBX_SERVER_HOST} + - ZBX_HOSTNAME=${ZBX_HOSTNAME} + - ZBX_STARTAGENTS=${ZBX_STARTAGENTS} restart: unless-stopped web: image: zabbix/zabbix-web-apache-mysql - container_name: zabbix-web + container_name: zbxweb ports: - "8085:8080" restart: unless-stopped environment: - - MYSQL_USER=zabbix - - MYSQL_PASSWORD=zabbixsqlsecret - - MYSQL_DATABASE=zabbix - - DB_SERVER_HOST=zabbix-db - - DB_SERVER_PORT=3306 - - ZBX_DEBUGLEVEL=3 - - ZBX_SERVER_HOST=zabbix-server + - MYSQL_USER=${MYSQL_USER} + - MYSQL_PASSWORD=${MYSQL_PASSWORD} + - MYSQL_DATABASE=${MYSQL_DATABASE} + - DB_SERVER_HOST=${DB_SERVER_HOST} + - DB_SERVER_PORT=${DB_SERVER_PORT} + - ZBX_DEBUGLEVEL=${ZBX_DEBUGLEVEL} + - ZBX_SERVER_HOST=${ZBX_SERVER_HOST} depends_on: - mysql -volumes: - db: - \ No newline at end of file diff --git a/zabbix/stack.env b/zabbix/stack.env deleted file mode 100644 index 331e17e1..00000000 --- a/zabbix/stack.env +++ /dev/null @@ -1,9 +0,0 @@ -MYSQL_ROOT_PASSWORD=zabbixrootsqlsecret -MYSQL_USER=zabbix -MYSQL_PASSWORD=zabbixsqlsecret -MYSQL_DATABASE=zabbix -DB_SERVER_HOST=zabbix-db -DB_SERVER_PORT=3306 -ZBX_DEBUGLEVEL=3 -ZBX_SERVER_HOST="zabbix-server" -PHP_TZ="Europe/Berlin"