|
- #!/bin/bash
-
- DEFAULT_VOLUMES=/media/volumes
- PWD_GEN='< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;'
- #PWD_GEN='openssl rand -base64 20'
- DEFAULT_LDAP_MAIL_UID='mail'
- DEFAULT_LDAP_NEXTCLOUD_UID='nextcloud'
- DEFAULT_LDAP_GITEA_UID='gogs'
-
- # main domain
- read -p "Add main domain: " domain
- while [[ ! $domain =~ ^.*\.[a-z]{2,}$ ]]; do
- read -p "Add domain (empty to finish): " domain
- done
- # TODO: more than 1 level domains
- org=`echo ${domain} | cut -f1 -d'.'`
- ext=`echo ${domain} | cut -f2 -d'.'`
-
- # additional domain
- virtual_domains=()
- while :; do
- read -p "Add additional domains (empty to finish): " virtual_domain
- if [[ -z $virtual_domain ]]; then
- break;
- elif [[ ! $virtual_domain =~ ^.*\.[a-z]{2,}$ ]]; then
- echo "Please Enter a valid domain";
- else
- virtual_domains+=($virtual_domain);
- fi
- done
-
- read -p "Volumes path ($DEFAULT_VOLUMES): " volumes
- if [[ ${#volumes} -eq 0 ]]; then
- volumes=$DEFAULT_VOLUMES
- fi
-
- read -p "DB admin password (a random one will be generated if empty): " db_pwd
- if [[ ${#db_pwd} -eq 0 ]]; then
- db_pwd=`eval "$PWD_GEN"`
- fi
-
- read -p "LDAP admin password (a random one will be generated if empty): " ldap_pwd
- if [[ ${#ldap_pwd} -eq 0 ]]; then
- ldap_pwd=`eval "$PWD_GEN"`
- fi
-
- read -p "LDAP Mail Bind DN uid ($DEFAULT_LDAP_MAIL_UID): " ldap_mail_uid
- if [[ ${#ldap_mail_uid} -eq 0 ]]; then
- ldap_mail_uid=$DEFAULT_LDAP_MAIL_UID
- fi
-
- read -p "LDAP Mail Bind DN Pwd (a random one will be generated if empty): " ldap_mail_pwd
- if [[ ${#ldap_mail_pwd} -eq 0 ]]; then
- ldap_mail_pwd=`eval "$PWD_GEN"`
- fi
-
- read -p "LDAP Nextcloud Bind DN uid ($DEFAULT_LDAP_NEXTCLOUD_UID): " ldap_nextcloud_uid
- if [[ ${#ldap_nextcloud_uid} -eq 0 ]]; then
- ldap_nextcloud_uid=$DEFAULT_LDAP_NEXTCLOUD_UID
- fi
-
- read -p "LDAP Nextcloud Bind DN Pwd (a random one will be generated if empty): " ldap_nextcloud_pwd
- if [[ ${#ldap_nextcloud_pwd} -eq 0 ]]; then
- ldap_nextcloud_pwd=`eval "$PWD_GEN"`
- fi
-
- read -p "LDAP Gitea Bind DN uid ($DEFAULT_LDAP_GITEA_UID): " ldap_gitea_uid
- if [[ ${#ldap_gitea_uid} -eq 0 ]]; then
- ldap_gitea_uid=$DEFAULT_LDAP_GITEA_UID
- fi
-
- read -p "LDAP Gitea Bind DN Pwd (a random one will be generated if empty): " ldap_gitea_pwd
- if [[ ${#ldap_gitea_pwd} -eq 0 ]]; then
- ldap_gitea_pwd=`eval "$PWD_GEN"`
- fi
-
- read -p "Nextcloud Admin User Pwd (a random one will be generated if empty): " nextcloud_admin_pwd
- if [[ ${#nextcloud_admin_pwd} -eq 0 ]]; then
- nextcloud_admin_pwd=`eval "$PWD_GEN"`
- fi
-
- read -p "Gitea Admin User Pwd (a random one will be generated if empty): " gitea_admin_pwd
- if [[ ${#gitea_admin_pwd} -eq 0 ]]; then
- gitea_admin_pwd=`eval "$PWD_GEN"`
- fi
-
- read -p "Pi-Hole Web User Pwd (a random one will be generated if empty): " pihole_web_pwd
- if [[ ${#pihole_web_pwd} -eq 0 ]]; then
- pihole_web_pwd=`eval "$PWD_GEN"`
- fi
-
- read -p "Admin E-mail, used for Let's Encrypt account and more (admin@${domain}): " admin_email
- if [[ ${#admin_email} -eq 0 ]]; then
- admin_email=admin@${domain}
- fi
-
- echo "If you have a password salt and a secret from a previous installation, provide them here."
- echo "They are used by Passman and need to remain the same for the vaults to be accessible"
- read -p "Nextcloud Pwd Salt (a random one will be generated by NC if empty): " nextcloud_salt
- read -p "Nextcloud Secret (a random one will be generated by NC if empty): " nextcloud_secret
-
- # read -p "Paperless Web Server User (paperless): " paperless_webserver_user
- # if [[ ${#paperless_webserver_user} -eq 0 ]]; then
- # paperless_webserver_user=paperless
- # fi
-
- # read -p "Paperless Web Server Pwd (a random one will be generated if empty): " paperless_webserver_pwd
- # if [[ ${#paperless_webserver_pwd} -eq 0 ]]; then
- # paperless_webserver_pwd=`eval "$PWD_GEN"`
- # fi
-
- # read -p "Paperless Encryption Passphrase (a random one will be generated if empty): " paperless_passphrase
- # if [[ ${#paperless_passphrase} -eq 0 ]]; then
- # paperless_=`eval "$PWD_GEN"`
- # fi
-
- read -p "SFTP User - SFTP server is used by paperless (consume): " paperless_ftp_user
- if [[ ${#paperless_ftp_user} -eq 0 ]]; then
- paperless_ftp_user=consume
- fi
-
- read -p "SFTP Pwd (a random one will be generated if empty): " paperless_ftp_pwd
- if [[ ${#paperless_ftp_pwd} -eq 0 ]]; then
- paperless_ftp_pwd=`eval "$PWD_GEN"`
- fi
-
- echo $'\E[33m'
- echo "//////////////////////////////////////////////////"
- echo "///////////////// PLEASE CONFIRM /////////////////"
- echo "//////////////////////////////////////////////////"
- echo $'\E[1;30m'
-
- echo Your main domain is: ${domain}
- echo Your virtual domains are: ${virtual_domains[*]}
- echo Your Volumes path is: $volumes
- echo Your LDAP Mail Bind DN Uid is: $ldap_mail_uid
- echo Your LDAP Nextcloud Bind DN Uid is: $ldap_nextcloud_uid
- echo Your LDAP Gitea Bind DN Uid is: $ldap_gitea_uid
- echo Your Admin email. Let\'s Encrypt...: $admin_email
- echo Your Paperless Web Server User: $paperless_webserver_user
- echo Your SFTP User: $paperless_ftp_user
-
- echo $'\E[1;37m'
- read -p "Are These Settings Correct? Yes (y), No (n): " confirm
- while [[ ! $confirm =~ ^[yYnN]{1}$ ]]; do
- read -p "Please Enter 'y' or 'n' To Confirm Settings: " confirm
- done
-
- if [[ $confirm != [yY] ]]; then
- exit 1
- fi
-
- echo $'\E[33m'
- echo "//////////////////////////////////////////////////"
- echo "///////////// COPYING TEMPLATE FILES /////////////"
- echo "//////////////////////////////////////////////////"
- echo $'\E[1;30m'
-
- cp env.template .env
- cp mariadb.env.template mariadb.env
- cp openldap.env.template openldap.env
- cp mail.env.template mail.env
- cp nextcloud.env.template nextcloud.env
- cp haproxy.env.template haproxy.env
- cp paperless.env.template paperless.env
- cp sftp.env.template sftp.env
- cp gitea.env.template gitea.env
- cp pihole.env.template pihole.env
- chmod 600 *.env
-
- # Passwords
- echo MYSQL_ROOT_PWD=$db_pwd >> mariadb.env
- echo MYSQL_ROOT_PWD=$db_pwd >> nextcloud.env
- echo MYSQL_ROOT_PWD=$db_pwd >> gitea.env
-
- echo LDAP_ADMIN_PWD=$ldap_pwd >> openldap.env
- echo LDAP_MAIL_PWD=$ldap_mail_pwd >> openldap.env
- echo LDAP_NEXTCLOUD_PWD=$ldap_nextcloud_pwd >> openldap.env
- echo LDAP_GITEA_PWD=$ldap_gitea_pwd >> openldap.env
- echo LDAP_BIND_PWD=$ldap_mail_pwd >> mail.env
- echo LDAP_BIND_PWD=$ldap_nextcloud_pwd >> nextcloud.env
- echo LDAP_BIND_PWD=$ldap_gitea_pwd >> gitea.env
-
- echo NEXTCLOUD_ADMIN_PWD=$nextcloud_admin_pwd >> nextcloud.env
- echo NEXTCLOUD_SALT=$nextcloud_salt >> nextcloud.env
- echo NEXTCLOUD_SECRET=$nextcloud_secret >> nextcloud.env
-
- #echo PAPERLESS_WEBSERVER_PWD=$paperless_webserver_pwd >> paperless.env
- #echo PAPERLESS_PASSPHRASE=$paperless_passphrase >> paperless.env
- echo PAPERLESS_FTP_PWD=$paperless_ftp_pwd >> sftp.env
- echo GITEA_ADMIN_PWD=$gitea_admin_pwd >> gitea.env
- #echo $pihole_web_pwd | docker secret create pihole_web_pwd -
- sed -i "s/\${PIHOLE_WEB_PWD}/${pihole_web_pwd}/g" pihole.env
-
- # IP for Pi-Hole
- IP_LOOKUP="$(ip route get 8.8.8.8 | awk '{ print $NF; exit }')" # May not work for VPN / tun0
- IPv6_LOOKUP="$(ip -6 route get 2001:4860:4860::8888 | awk '{for(i=1;i<=NF;i++) if ($i=="src") print $(i+1)}')" # May not work for VPN / tun0
-
- for i in `ls *.env .env`; do
- sed -i "s/\${DOMAIN}/${domain}/g" $i
- sed -i "s/\${VIRTUAL_DOMAINS}/${virtual_domains[*]}/g" $i
- sed -i "s/\${ORGANIZATION}/${org}/g" $i
- sed -i "s/\${EXTENSION}/${ext}/g" $i
- sed -i "s/\${VOLUMES_PATH}/${volumes//\//\\/}/g" $i
- sed -i "s/\${LDAP_MAIL_UID}/${ldap_mail_uid}/g" $i
- sed -i "s/\${LDAP_NEXTCLOUD_UID}/${ldap_nextcloud_uid}/g" $i
- sed -i "s/\${LDAP_GITEA_UID}/${ldap_gitea_uid}/g" $i
- sed -i "s/\${ADMIN_EMAIL}/${admin_email}/g" $i
- sed -i "s/\${PAPERLESS_WEBSERVER_USER}/${paperless_webserver_user}/g" $i
- sed -i "s/\${PAPERLESS_FTP_USER}/${paperless_ftp_user}/g" $i
- sed -i "s/\${IP_LOOKUP}/${IP_LOOKUP}/g" $i
- sed -i "s/\${IPv6_LOOKUP}/${IPv6_LOOKUP}/g" $i
- #sed -i "s/\${}/${}/g" $i
- done;
-
- # read variables
- . .env
- # repeated env variables
- # domains available for all, just in case
- for i in `ls *.env`; do
- echo "" >> $i
- echo "# Domains" >> $i
- echo "DOMAIN=${DOMAIN}" >> $i
- echo "VIRTUAL_DOMAINS=${VIRTUAL_DOMAINS}" >> $i
- echo "DOMAINS=${DOMAINS}" >> $i
- done
-
- echo "" >> mail.env
- echo "MAIL_DATA_PATH=${MAIL_DATA_PATH}" >> mail.env
- echo "" >> nextcloud.env
- echo "NEXTCLOUD_SERVER_NAME=${NEXTCLOUD_SERVER_NAME}" >> nextcloud.env
- echo "NEXTCLOUD_DB_BACKUP=${NEXTCLOUD_DATA_PATH}/nextcloud_db_backup.sql" >> nextcloud.env
- echo "NEXTCLOUD_DATA_PATH=${NEXTCLOUD_DATA_PATH}" >> nextcloud.env
- echo "NEXTCLOUD_BACKUP_PATH=${NEXTCLOUD_BACKUP_PATH}" >> nextcloud.env
- echo "" >> gitea.env
- echo "GITEA_SERVER_NAME=${GITEA_SERVER_NAME}" >> gitea.env
- echo "" >> paperless.env
- echo "PAPERLESS_CONSUMPTION_DIR=${PAPERLESS_CONSUMPTION_PATH}" >> paperless.env
- echo "PAPERLESS_EXPORT_DIR=${PAPERLESS_EXPORT_PATH}" >> paperless.env
- echo "" >> sftp.env
- echo "PAPERLESS_CONSUMPTION_DIR=${PAPERLESS_CONSUMPTION_PATH}" >> sftp.env
- echo "" >> haproxy.env
- echo "NEXTCLOUD_SERVER_NAME=${NEXTCLOUD_SERVER_NAME}" >> haproxy.env
- echo "GITEA_SERVER_NAME=${GITEA_SERVER_NAME}" >> haproxy.env
-
- echo $'\E[33m'
- echo "//////////////////////////////////////////////////"
- echo "//////////////// CREATING FOLDERS ////////////////"
- echo "//////////////////////////////////////////////////"
- echo $'\E[1;30m'
-
- # openldap
- sudo mkdir -p ${LDAP_DATA_VOLUME_PATH}
- sudo mkdir -p ${LDAP_CONFIG_VOLUME_PATH}
- sudo mkdir -p ${LDAP_CERTS_VOLUME_PATH}
- # db
- sudo mkdir -p ${DB_DATA_VOLUME_PATH}
- #sudo mkdir -p ${DB_CONFIG_VOLUME_PATH}
- # mail
- sudo mkdir -p ${MAIL_DATA_VOLUME_PATH}
- sudo mkdir -p ${MAIL_DATA_VOLUME_PATH}/getmail
- #sudo mkdir -p ${MAIL_STATE_VOLUME_PATH}
- # nextcloud
- sudo mkdir -p ${NEXTCLOUD_DATA_VOLUME_PATH}
- sudo mkdir -p ${NEXTCLOUD_BACKUP_VOLUME_PATH}
- # paperless
- sudo mkdir -p ${PAPERLESS_DATA_VOLUME_PATH}
- sudo mkdir -p ${PAPERLESS_MEDIA_VOLUME_PATH}
- sudo mkdir -p ${PAPERLESS_CONSUMPTION_VOLUME_PATH}
- sudo mkdir -p ${PAPERLESS_EXPORT_VOLUME_PATH}
- # gitea
- sudo mkdir -p ${GITEA_DATA_VOLUME_PATH}
- # Pi-Hole
- sudo mkdir -p ${PIHOLE_CONFIG_VOLUME_PATH}
- sudo mkdir -p ${PIHOLE_DNSMASQ_VOLUME_PATH}
- # let's Encrypt
- sudo mkdir -p ${LETSENCRYPT_VOLUME_PATH}
-
- echo "Copying getmail confs"
- cp images/email/getmail/getmailrc-* ${MAIL_DATA_VOLUME_PATH}/getmail/
|