No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

314 líneas
11KB

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