Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

375 linhas
13KB

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