You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

264 lines
9.8KB

  1. #!/bin/bash
  2. DEFAULT_VOLUMES=/media/volumes
  3. PWD_GEN='< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;'
  4. #PWD_GEN='openssl rand -base64 20'
  5. DEFAULT_LDAP_MAIL_UID='mail'
  6. DEFAULT_LDAP_NEXTCLOUD_UID='nextcloud'
  7. DEFAULT_LDAP_GITEA_UID='git'
  8. DEFAULT_LDAP_HAUK_UID='hauk'
  9. read -p "Main domain: " domain
  10. while [[ ! $domain =~ ^.*\.[a-z]{2,}$ ]]; do
  11. read -p "Please Enter a valid domain: " domain
  12. done
  13. # TODO: more than 1 level domains
  14. org=`echo $domain | cut -f1 -d'.'`
  15. ext=`echo $domain | cut -f2 -d'.'`
  16. read -p "Volumes path ($DEFAULT_VOLUMES): " volumes
  17. if [[ ${#volumes} -eq 0 ]]; then
  18. volumes=$DEFAULT_VOLUMES
  19. fi
  20. read -p "DB admin password (a random one will be generated if empty): " db_pwd
  21. if [[ ${#db_pwd} -eq 0 ]]; then
  22. db_pwd=`eval "$PWD_GEN"`
  23. fi
  24. read -p "LDAP admin password (a random one will be generated if empty): " ldap_pwd
  25. if [[ ${#ldap_pwd} -eq 0 ]]; then
  26. ldap_pwd=`eval "$PWD_GEN"`
  27. fi
  28. read -p "LDAP Mail Bind DN uid ($DEFAULT_LDAP_MAIL_UID): " ldap_mail_uid
  29. if [[ ${#ldap_mail_uid} -eq 0 ]]; then
  30. ldap_mail_uid=$DEFAULT_LDAP_MAIL_UID
  31. fi
  32. read -p "LDAP Mail Bind DN Pwd (a random one will be generated if empty): " ldap_mail_pwd
  33. if [[ ${#ldap_mail_pwd} -eq 0 ]]; then
  34. ldap_mail_pwd=`eval "$PWD_GEN"`
  35. fi
  36. read -p "LDAP Nextcloud Bind DN uid ($DEFAULT_LDAP_NEXTCLOUD_UID): " ldap_nextcloud_uid
  37. if [[ ${#ldap_nextcloud_uid} -eq 0 ]]; then
  38. ldap_nextcloud_uid=$DEFAULT_LDAP_NEXTCLOUD_UID
  39. fi
  40. read -p "LDAP Nextcloud Bind DN Pwd (a random one will be generated if empty): " ldap_nextcloud_pwd
  41. if [[ ${#ldap_nextcloud_pwd} -eq 0 ]]; then
  42. ldap_nextcloud_pwd=`eval "$PWD_GEN"`
  43. fi
  44. read -p "LDAP Gitea Bind DN uid ($DEFAULT_LDAP_GITEA_UID): " ldap_gitea_uid
  45. if [[ ${#ldap_gitea_uid} -eq 0 ]]; then
  46. ldap_gitea_uid=$DEFAULT_LDAP_GITEA_UID
  47. fi
  48. read -p "LDAP Gitea Bind DN Pwd (a random one will be generated if empty): " ldap_gitea_pwd
  49. if [[ ${#ldap_gitea_pwd} -eq 0 ]]; then
  50. ldap_gitea_pwd=`eval "$PWD_GEN"`
  51. fi
  52. read -p "LDAP Hauk Bind DN uid ($DEFAULT_LDAP_HAUK_UID): " ldap_hauk_uid
  53. if [[ ${#ldap_hauk_uid} -eq 0 ]]; then
  54. ldap_hauk_uid=$DEFAULT_LDAP_HAUK_UID
  55. fi
  56. read -p "LDAP Hauk Bind DN Pwd (a random one will be generated if empty): " ldap_hauk_pwd
  57. if [[ ${#ldap_hauk_pwd} -eq 0 ]]; then
  58. ldap_hauk_pwd=`eval "$PWD_GEN"`
  59. fi
  60. read -p "Nextcloud Admin User Pwd (a random one will be generated if empty): " nextcloud_admin_pwd
  61. if [[ ${#nextcloud_admin_pwd} -eq 0 ]]; then
  62. nextcloud_admin_pwd=`eval "$PWD_GEN"`
  63. fi
  64. read -p "Gitea Admin User Pwd (a random one will be generated if empty): " gitea_admin_pwd
  65. if [[ ${#gitea_admin_pwd} -eq 0 ]]; then
  66. gitea_admin_pwd=`eval "$PWD_GEN"`
  67. fi
  68. read -p "Pi-Hole Web User Pwd (a random one will be generated if empty): " pihole_web_pwd
  69. if [[ ${#pihole_web_pwd} -eq 0 ]]; then
  70. pihole_web_pwd=`eval "$PWD_GEN"`
  71. fi
  72. read -p "Admin E-mail, used for Let's Encrypt account and more (admin@${domain}): " admin_email
  73. if [[ ${#admin_email} -eq 0 ]]; then
  74. admin_email=admin@${domain}
  75. fi
  76. echo "If you have a password salt and a secret from a previous installation, provide them here."
  77. echo "They are used by Passman and need to remain the same for the vaults to be accessible"
  78. read -p "Nextcloud Pwd Salt (a random one will be generated by NC if empty): " nextcloud_salt
  79. read -p "Nextcloud Secret (a random one will be generated by NC if empty): " nextcloud_secret
  80. # read -p "Paperless Web Server User (paperless): " paperless_webserver_user
  81. # if [[ ${#paperless_webserver_user} -eq 0 ]]; then
  82. # paperless_webserver_user=paperless
  83. # fi
  84. # read -p "Paperless Web Server Pwd (a random one will be generated if empty): " paperless_webserver_pwd
  85. # if [[ ${#paperless_webserver_pwd} -eq 0 ]]; then
  86. # paperless_webserver_pwd=`eval "$PWD_GEN"`
  87. # fi
  88. # read -p "Paperless Encryption Passphrase (a random one will be generated if empty): " paperless_passphrase
  89. # if [[ ${#paperless_passphrase} -eq 0 ]]; then
  90. # paperless_=`eval "$PWD_GEN"`
  91. # fi
  92. read -p "SFTP User - SFTP server is used by paperless (consume): " paperless_ftp_user
  93. if [[ ${#paperless_ftp_user} -eq 0 ]]; then
  94. paperless_ftp_user=consume
  95. fi
  96. read -p "SFTP Pwd (a random one will be generated if empty): " paperless_ftp_pwd
  97. if [[ ${#paperless_ftp_pwd} -eq 0 ]]; then
  98. paperless_ftp_pwd=`eval "$PWD_GEN"`
  99. fi
  100. echo $'\E[33m'
  101. echo "//////////////////////////////////////////////////"
  102. echo "///////////////// PLEASE CONFIRM /////////////////"
  103. echo "//////////////////////////////////////////////////"
  104. echo $'\E[1;30m'
  105. echo Your domain is: $domain
  106. echo Your Volumes path is: $volumes
  107. echo Your LDAP Mail Bind DN Uid is: $ldap_mail_uid
  108. echo Your LDAP Nextcloud Bind DN Uid is: $ldap_nextcloud_uid
  109. echo Your LDAP Gitea Bind DN Uid is: $ldap_gitea_uid
  110. echo Your LDAP Hauk Bind DN Uid is: $ldap_hauk_uid
  111. echo Your Admin email. Let\'s Encrypt...: $admin_email
  112. echo Your Paperless Web Server User: $paperless_webserver_user
  113. echo Your SFTP User: $paperless_ftp_user
  114. echo $'\E[1;37m'
  115. read -p "Are These Settings Correct? Yes (y), No (n): " confirm
  116. while [[ ! $confirm =~ ^[yYnN]{1}$ ]]; do
  117. read -p "Please Enter 'y' or 'n' To Confirm Settings: " confirm
  118. done
  119. if [[ $confirm != [yY] ]]; then
  120. exit 1
  121. fi
  122. # Generate docker secrets
  123. echo $db_pwd | docker secret create db_pwd -
  124. echo $ldap_pwd | docker secret create ldap_pwd -
  125. echo $ldap_mail_pwd | docker secret create ldap_mail_pwd -
  126. echo $ldap_nextcloud_pwd | docker secret create ldap_nextcloud_pwd -
  127. echo $ldap_gitea_pwd | docker secret create ldap_gitea_pwd -
  128. echo $ldap_hauk_pwd | docker secret create ldap_hauk_pwd -
  129. echo $nextcloud_admin_pwd | docker secret create nextcloud_admin_pwd -
  130. echo $nextcloud_salt | docker secret create nextcloud_salt -
  131. echo $nextcloud_secret | docker secret create nextcloud_secret -
  132. #echo $paperless_webserver_pwd | docker secret create paperless_webserver_pwd -
  133. #echo $paperless_passphrase | docker secret create paperless_passphrase -
  134. echo $paperless_ftp_pwd | docker secret create paperless_ftp_pwd -
  135. echo $gitea_admin_pwd | docker secret create gitea_admin_pwd -
  136. #echo $pihole_web_pwd | docker secret create pihole_web_pwd -
  137. sed -i "s/\${PIHOLE_WEB_PWD}/${pihole_web_pwd}/g" pihole.env
  138. echo $'\E[33m'
  139. echo "//////////////////////////////////////////////////"
  140. echo "///////////// COPYING TEMPLATE FILES /////////////"
  141. echo "//////////////////////////////////////////////////"
  142. echo $'\E[1;30m'
  143. cp env.template .env
  144. cp openldap.env.template openldap.env
  145. cp mail.env.template mail.env
  146. cp nextcloud.env.template nextcloud.env
  147. cp haproxy.env.template haproxy.env
  148. cp paperless.env.template paperless.env
  149. cp sftp.env.template sftp.env
  150. cp gitea.env.template gitea.env
  151. cp hauk.env.template hauk.env
  152. cp pihole.env.template pihole.env
  153. # IP for Pi-Hole
  154. IP_LOOKUP="$(ip route get 8.8.8.8 | awk '{ print $NF; exit }')" # May not work for VPN / tun0
  155. 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
  156. for i in `ls *.env .env`; do
  157. sed -i "s/\${DOMAIN}/${domain}/g" $i
  158. sed -i "s/\${ORGANIZATION}/${org}/g" $i
  159. sed -i "s/\${EXTENSION}/${ext}/g" $i
  160. sed -i "s/\${VOLUMES_PATH}/${volumes//\//\\/}/g" $i
  161. sed -i "s/\${LDAP_MAIL_UID}/${ldap_mail_uid}/g" $i
  162. sed -i "s/\${LDAP_NEXTCLOUD_UID}/${ldap_nextcloud_uid}/g" $i
  163. sed -i "s/\${LDAP_GITEA_UID}/${ldap_gitea_uid}/g" $i
  164. sed -i "s/\${LDAP_HAUK_UID}/${ldap_hauk_uid}/g" $i
  165. sed -i "s/\${ADMIN_EMAIL}/${admin_email}/g" $i
  166. sed -i "s/\${PAPERLESS_WEBSERVER_USER}/${paperless_webserver_user}/g" $i
  167. sed -i "s/\${PAPERLESS_FTP_USER}/${paperless_ftp_user}/g" $i
  168. sed -i "s/\${IP_LOOKUP}/${IP_LOOKUP}/g" $i
  169. sed -i "s/\${IPv6_LOOKUP}/${IPv6_LOOKUP}/g" $i
  170. #sed -i "s/\${}/${}/g" $i
  171. done;
  172. # read variables
  173. . .env
  174. # repeated env variables
  175. echo "" >> mail.env
  176. echo "MAIL_DATA_PATH=${MAIL_DATA_PATH}" >> mail.env
  177. echo "" >> nextcloud.env
  178. echo "NEXTCLOUD_DB_BACKUP=${NEXTCLOUD_DATA_PATH}/nextcloud_db_backup.sql" >> nextcloud.env
  179. echo "NEXTCLOUD_DATA_PATH=${NEXTCLOUD_DATA_PATH}" >> nextcloud.env
  180. echo "NEXTCLOUD_BACKUP_PATH=${NEXTCLOUD_BACKUP_PATH}" >> nextcloud.env
  181. echo "" >> gitea.env
  182. echo "GITEA_SERVER_NAME=${GITEA_SERVER_NAME}" >> gitea.env
  183. echo "GITEA_HTTP_PORT=${GITEA_HTTP_PORT}" >> gitea.env
  184. echo "" >> hauk.env
  185. echo "HAUK_SERVER_NAME=${HAUK_SERVER_NAME}" >> hauk.env
  186. echo "" >> paperless.env
  187. echo "PAPERLESS_CONSUMPTION_DIR=${PAPERLESS_CONSUMPTION_PATH}" >> paperless.env
  188. echo "PAPERLESS_EXPORT_DIR=${PAPERLESS_EXPORT_PATH}" >> paperless.env
  189. echo "" >> sftp.env
  190. echo "PAPERLESS_CONSUMPTION_DIR=${PAPERLESS_CONSUMPTION_PATH}" >> sftp.env
  191. echo "" >> haproxy.env
  192. echo "NEXTCLOUD_SERVER_NAME=${NEXTCLOUD_SERVER_NAME}" >> haproxy.env
  193. echo "GITEA_SERVER_NAME=${GITEA_SERVER_NAME}" >> haproxy.env
  194. echo "HAUK_SERVER_NAME=${HAUK_SERVER_NAME}" >> haproxy.env
  195. echo $'\E[33m'
  196. echo "//////////////////////////////////////////////////"
  197. echo "//////////////// CREATING FOLDERS ////////////////"
  198. echo "//////////////////////////////////////////////////"
  199. echo $'\E[1;30m'
  200. # openldap
  201. sudo mkdir -p ${LDAP_DATA_VOLUME_PATH}
  202. sudo mkdir -p ${LDAP_CONFIG_VOLUME_PATH}
  203. sudo mkdir -p ${LDAP_CERTS_VOLUME_PATH}
  204. # db
  205. sudo mkdir -p ${DB_DATA_VOLUME_PATH}
  206. #sudo mkdir -p ${DB_CONFIG_VOLUME_PATH}
  207. # mail
  208. sudo mkdir -p ${MAIL_DATA_VOLUME_PATH}
  209. sudo mkdir -p ${MAIL_DATA_VOLUME_PATH}/getmail
  210. #sudo mkdir -p ${MAIL_STATE_VOLUME_PATH}
  211. # nextcloud
  212. sudo mkdir -p ${NEXTCLOUD_DATA_VOLUME_PATH}
  213. sudo mkdir -p ${NEXTCLOUD_BACKUP_VOLUME_PATH}
  214. # paperless
  215. sudo mkdir -p ${PAPERLESS_DATA_VOLUME_PATH}
  216. sudo mkdir -p ${PAPERLESS_MEDIA_VOLUME_PATH}
  217. sudo mkdir -p ${PAPERLESS_CONSUMPTION_VOLUME_PATH}
  218. sudo mkdir -p ${PAPERLESS_EXPORT_VOLUME_PATH}
  219. # gitea
  220. sudo mkdir -p ${GITEA_DATA_VOLUME_PATH}
  221. # Pi-Hole
  222. sudo mkdir -p ${PIHOLE_CONFIG_VOLUME_PATH}
  223. sudo mkdir -p ${PIHOLE_DNSMASQ_VOLUME_PATH}
  224. # let's Encrypt
  225. sudo mkdir -p ${LETSENCRYPT_VOLUME_PATH}
  226. echo "Copying getmail confs"
  227. cp images/email/getmail/getmailrc-* ${MAIL_DATA_VOLUME_PATH}/getmail/