From b8593ba6566062b877be9e489672e01f941a8e4c Mon Sep 17 00:00:00 2001 From: Derek Crudgington Date: Thu, 5 Jan 2023 20:29:17 +0000 Subject: [PATCH] First run of .env and secret files --- bin/install-federated.sh | 5 ++- lib/collabora.sh | 17 +++++--- lib/functions.sh | 6 +++ lib/jitsi.sh | 2 +- lib/ldap.sh | 36 +++++++++++------ lib/listmonk.sh | 17 +++++--- lib/mail.sh | 83 +++++++++++++++++++++------------------- lib/matrix.sh | 28 +++++++++----- lib/nextcloud.sh | 43 ++++++++++++++------- lib/panel.sh | 49 +++++++++++++----------- lib/postgresql.sh | 33 ++++++++++++---- lib/vaultwarden.sh | 22 ++++++----- 12 files changed, 214 insertions(+), 127 deletions(-) create mode 100644 lib/functions.sh diff --git a/bin/install-federated.sh b/bin/install-federated.sh index a8e5e28..525ade1 100755 --- a/bin/install-federated.sh +++ b/bin/install-federated.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/bash -x # # Federated installation script @@ -44,6 +44,7 @@ get_config() { fi done + . /federated/lib/functions.sh . /federated/lib/checks.sh . /federated/lib/network.sh . /federated/lib/dns.sh @@ -88,7 +89,7 @@ check_ports config_network # Configure and start each federated service -for i in dns postgresql ldap mail collabora nextcloud matrix listmonk vaultwarden panel proxy jitsi; do +for i in dns postgresql ldap mail collabora proxy nextcloud matrix listmonk vaultwarden panel jitsi; do config_$i start_$i done diff --git a/lib/collabora.sh b/lib/collabora.sh index 4ed0061..58eef52 100644 --- a/lib/collabora.sh +++ b/lib/collabora.sh @@ -39,12 +39,8 @@ services: - ./data/root/certs/fullchain1.pem:/etc/coolwsd/cert.pem - ./data/root/certs/privkey1.pem:/etc/coolwsd/key.pem - ./data/root/certs/chain1.pem:/etc/coolwsd/ca-chain.cert.pem - environment: - - VIRTUAL_PROTO=https - - VIRTUAL_PORT=9980 - - VIRTUAL_HOST=collabora.$DOMAIN - - domain=nextcloud.$DOMAIN - - server_name=collabora.$DOMAIN + env_file: + - ./.env cap_add: - MKNOD @@ -53,6 +49,15 @@ networks: external: true EOF +cat > /federated/apps/collabora/.env < /dev/null echo -ne "done." } diff --git a/lib/functions.sh b/lib/functions.sh new file mode 100644 index 0000000..65f21e9 --- /dev/null +++ b/lib/functions.sh @@ -0,0 +1,6 @@ +create_password() { +# eval $1_var=$1 +# echo "$postgres_var" + SECRET=`tr -cd '[:alnum:]' < /dev/urandom | fold -w32 | head -n1` + echo "$SECRET"; +} diff --git a/lib/jitsi.sh b/lib/jitsi.sh index b72d7bb..cb95b1e 100644 --- a/lib/jitsi.sh +++ b/lib/jitsi.sh @@ -532,7 +532,7 @@ LDAP_BASE=DC=$DOMAIN_FIRST,DC=$DOMAIN_LAST LDAP_BINDDN=CN=admin,DC=$DOMAIN_FIRST,DC=$DOMAIN_LAST # LDAP user password. Do not specify this parameter for the anonymous bind -LDAP_BINDPW=$ADMINPASS +LDAP_BINDPW=$LDAP_SECRET # LDAP filter. Tokens example: diff --git a/lib/ldap.sh b/lib/ldap.sh index a7b5cda..ea473da 100644 --- a/lib/ldap.sh +++ b/lib/ldap.sh @@ -42,22 +42,36 @@ services: - ./data/etc/ldap/slapd.d:/etc/ldap/slapd.d - ./data/certs:/container/service/slapd/assets/certs - ./data/root:/root - environment: - - LDAP_ORGANISATION=$COMPANY - - LDAP_DOMAIN=$DOMAIN - - LDAP_ADMIN_PASSWORD=$ADMINPASS - - LDAP_RFC2307BIS_SCHEMA=true - - LDAP_REMOVE_CONFIG_AFTER_SETUP=true - - LDAP_TLS=true - - LDAP_TLS_CRT_FILENAME=fullchain1.pem - - LDAP_TLS_KEY_FILENAME=privkey1.pem - - LDAP_TLS_CA_CRT_FILENAME=chain1.pem - - LDAP_TLS_VERIFY_CLIENT=try + env_file: + - ./.env + secrets: + - federated_ldap_password +secrets: + federated_ldap_password: + file: ./.ldap.secret networks: federated: external: true EOF + +cat > /federated/apps/ldap/.env < /federated/apps/ldap/.ldap.secret +chmod 600 /federated/apps/ldap/.ldap.secret cat > /federated/apps/ldap/data/root/ldap.ldif < /federated/apps/listmonk/.env < /federated/apps/listmonk/data/listmonk/config.toml < /dev/null echo -ne "done." diff --git a/lib/mail.sh b/lib/mail.sh index 4a4656b..4d4542c 100644 --- a/lib/mail.sh +++ b/lib/mail.sh @@ -48,45 +48,8 @@ services: - ./data/var/log/mail:/var/log/mail/ - ./data/tmp/docker-mailserver:/tmp/docker-mailserver/ - /etc/localtime:/etc/localtime:ro - environment: - - ENABLE_SPAMASSASSIN=1 - - ENABLE_SPAMASSASSIN_KAM=1 - - SPAMASSASSIN_SPAM_TO_INBOX=1 - - ENABLE_CLAMAV=0 - - ENABLE_FAIL2BAN=1 - - ENABLE_POSTGREY=1 - - ONE_DIR=1 - - DMS_DEBUG=0 - - LOG_LEVEL=debug - - ENABLE_LDAP=1 - - SSL_TYPE=manual - - SSL_CERT_PATH=/root/certs/fullchain1.pem - - SSL_KEY_PATH=/root/certs/privkey1.pem - - LDAP_START_TLS=yes - - DOVECOT_TLS=yes - - SASLAUTHD_LDAP_START_TLS=yes - - LDAP_SERVER_HOST=ldap.$DOMAIN - - LDAP_SEARCH_BASE=ou=people,dc=$DOMAIN_FIRST,dc=$DOMAIN_LAST - - LDAP_BIND_DN=cn=admin,dc=$DOMAIN_FIRST,dc=$DOMAIN_LAST - - LDAP_BIND_PW=$ADMINPASS - - LDAP_QUERY_FILTER_USER=(&(mail=%s)(mailEnabled=TRUE)) - - LDAP_QUERY_FILTER_GROUP=(&(mailGroupMember=%s)(mailEnabled=TRUE)) - - LDAP_QUERY_FILTER_ALIAS=(|(&(mailAlias=%s)(objectClass=PostfixBookMailForward))(&(mailAlias=%s)(objectClass=inetOrgPerson)(mailEnabled=TRUE))) - - LDAP_QUERY_FILTER_DOMAIN=(|(&(mail=*@%s)(objectClass=PostfixBookMailAccount)(mailEnabled=TRUE))(&(mailGroupMember=*@%s)(objectClass=PostfixBookMailAccount)(mailEnabled=TRUE))(&(mailalias=*@%s)(objectClass=PostfixBookMailForward))) - # DOVECOT - - DOVECOT_PASS_FILTER=(&(objectClass=inetOrgPerson)(uid=%n)) - - DOVECOT_USER_FILTER=(&(objectClass=inetOrgPerson)(uid=%n)) - - DOVECOT_USER_ATTRS=homeDirectory=home,=uid=5000,=gid=5000 - # SASLAUTHD - - ENABLE_SASLAUTHD=1 - - SASLAUTHD_MECHANISMS=ldap - - SASLAUTHD_LDAP_SERVER=ldap.$DOMAIN - - SASLAUTHD_LDAP_BIND_DN=cn=admin,dc=$DOMAIN_FIRST,dc=$DOMAIN_LAST - - SASLAUTHD_LDAP_PASSWORD=$ADMINPASS - - SASLAUTHD_LDAP_SEARCH_BASE=ou=people,dc=$DOMAIN_FIRST,dc=$DOMAIN_LAST - - SASLAUTHD_LDAP_FILTER=(&(objectClass=inetOrgPerson)(uid=%U)) - - POSTMASTER_ADDRESS=postmaster@localhost.localdomain - - POSTFIX_MESSAGE_SIZE_LIMIT=100000000 + env_file: + - ./.env cap_add: - NET_ADMIN - SYS_PTRACE @@ -96,6 +59,48 @@ networks: external: true EOF +cat > /federated/apps/mail/.env < /federated/apps/mail/data/tmp/docker-mailserver/postfix-main.cf <<'EOF' smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unknown_sender_domain, reject_sender_login_mismatch smtpd_sender_login_maps = ldap:/etc/postfix/ldap-aliases.cf diff --git a/lib/matrix.sh b/lib/matrix.sh index 774dcc5..81d5e1b 100644 --- a/lib/matrix.sh +++ b/lib/matrix.sh @@ -34,10 +34,8 @@ services: networks: federated: ipv4_address: 172.99.0.31 - environment: - - VIRTUAL_PROTO=http - - VIRTUAL_PORT=80 - - VIRTUAL_HOST=element.$DOMAIN + env_file: + - ./.env.element synapse: image: matrixdotorg/synapse:latest @@ -50,16 +48,26 @@ services: ipv4_address: 172.99.0.32 volumes: - ./data/matrix:/data - environment: - - VIRTUAL_PROTO=http - - VIRTUAL_PORT=8008 - - VIRTUAL_HOST=matrix.$DOMAIN + env_file: + - ./.env.matrix networks: federated: external: true EOF +cat > /federated/apps/matrix/.env.element < /federated/apps/matrix/.env.matrix < /federated/apps/matrix/data/element/element-config.json < /federated/apps/nextcloud/.nextcloud.secret +chmod 600 /federated/apps/nextcloud/.postgresql.secret /federated/apps/nextcloud/.nextcloud.secret + +cat > /federated/apps/nextcloud/.env < /federated/apps/nextcloud/supervisord.conf < /federated/apps/panel/.env < /dev/null echo -ne "done." diff --git a/lib/postgresql.sh b/lib/postgresql.sh index 8d96e44..dc51c9d 100644 --- a/lib/postgresql.sh +++ b/lib/postgresql.sh @@ -39,11 +39,10 @@ services: - ./data/var/lib/postgresql/server.key:/var/lib/postgresql/server.key - ./data/var/lib/postgresql/data:/var/lib/postgresql/data - ./data/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d - environment: - - POSTGRES_DB=nextcloud - - POSTGRES_USER=nextcloud - - POSTGRES_PASSWORD=$ADMINPASS - - POSTGRES_INITDB_ARGS=--encoding='UTF8' --lc-collate='C' --lc-ctype='C' + env_file: + - ./.env + secrets: + - federated_psql_password command: > -c ssl=on -c ssl_cert_file=/var/lib/postgresql/server.crt @@ -54,20 +53,38 @@ services: timeout: 5s retries: 5 +secrets: + federated_psql_password: + file: ./.postgresql.secret networks: federated: external: true EOF +cat > /federated/apps/postgresql/.env < /federated/apps/postgresql/.postgresql.secret +chmod 600 /federated/apps/postgresql/.postgresql.secret +VAULTWARDEN_SECRET=$(create_password); +LISTMONK_SECRET=$(create_password); +MATRIX_SECRET=$(create_password); + # cat postgresql/data/docker-entrypoint-initdb.d/init.sql cat > /federated/apps/postgresql/data/docker-entrypoint-initdb.d/init.sql < /federated/apps/vaultwarden/.env < /dev/null echo -ne "done."