您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

214 行
12KB

  1. #!/bin/bash
  2. #set -e
  3. #NEXTCLOUD_DB_PWD=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;`
  4. NEXTCLOUD_DB_PWD=`openssl rand -base64 20`
  5. if [ -z "${NEXTCLOUD_SERVER_NAME}" ]; then
  6. echo >&2 'error: you have to provide a server-name (NEXTCLOUD_SERVER_NAME)'
  7. exit 1
  8. fi
  9. sed -i "s/server_name localhost/server_name ${NEXTCLOUD_SERVER_NAME}.${DOMAIN} ${NEXTCLOUD_SERVER_NAME}/g" /etc/nginx/sites-available/default
  10. # check needed variables
  11. if [[ -z ${DB_HOST} || -z ${NEXTCLOUD_DB_NAME} || -z ${NEXTCLOUD_DB_USER} \
  12. || -z ${NEXTCLOUD_DB_PWD} || -z ${NEXTCLOUD_ADMIN_PWD} \
  13. || -z ${NEXTCLOUD_DATA_PATH} || -z ${NEXTCLOUD_BACKUP_PATH} ]]; then
  14. echo "Missing variable! You must provide: DB_HOST, NEXTCLOUD_DB_NAME, \
  15. NEXTCLOUD_DB_USER, NEXTCLOUD_DB_PWD, NEXTCLOUD_ADMIN_PWD, NEXTCLOUD_DATA_PATH, \
  16. NEXTCLOUD_BACKUP_PATH";
  17. #env;
  18. exit 1;
  19. fi
  20. # SSL certificates
  21. if [ ! -f /etc/nginx/ssl/nextcloud.crt ]; then
  22. sudo mkdir /etc/nginx/ssl
  23. sudo openssl genrsa -out /etc/nginx/ssl/nextcloud.key 4096
  24. sudo openssl req -new -sha256 -batch -subj "/CN=$NEXTCLOUD_SERVER_NAME" -key /etc/nginx/ssl/nextcloud.key -out /etc/nginx/ssl/nextcloud.csr
  25. sudo openssl x509 -req -sha256 -days 3650 -in /etc/nginx/ssl/nextcloud.csr -signkey /etc/nginx/ssl/nextcloud.key -out /etc/nginx/ssl/nextcloud.crt
  26. fi
  27. # Data folder
  28. if [ -z "${DATA_CHOWN}" -o "${DATA_CHOWN}" != "0" ]; then
  29. echo "Changing ownership of Data folder. It may take a while..."
  30. chown -R www-data:www-data ${NEXTCLOUD_DATA_PATH};
  31. fi
  32. function check_result {
  33. if [ $1 != 0 ]; then
  34. echo "";
  35. echo "Error $1: $2";
  36. exit 1;
  37. fi
  38. }
  39. # ### DB ###
  40. # wait for DB to be ready
  41. sleep 60 # to avoid hitting it while the first start for setting root pwd
  42. R=111
  43. while [ $R -eq 111 ]; do
  44. mysql --skip-ssl -u root -p${MARIADB_ROOT_PASSWORD} -h ${DB_HOST} -e "SHOW DATABASES" 1>/dev/null 2>&1;
  45. R=$?;
  46. done
  47. # check if DB exists
  48. DB_EXISTS=$(mysql --skip-ssl -u root -p${MARIADB_ROOT_PASSWORD} -h ${DB_HOST} -e "SHOW DATABASES" 2> /dev/null | grep ${NEXTCLOUD_DB_NAME})
  49. echo "DB exists: ${DB_EXISTS}"
  50. if [ -z "${DB_EXISTS}" ]; then
  51. echo "Creating Database"
  52. #mysql --skip-ssl -u root -p${MARIADB_ROOT_PASSWORD} -h ${DB_HOST} -e "DROP DATABASE IF EXISTS ${NEXTCLOUD_DB_NAME};"
  53. #check_result $? "Dropping DB"
  54. mysql --skip-ssl -u root -p${MARIADB_ROOT_PASSWORD} -h ${DB_HOST} -e "CREATE DATABASE ${NEXTCLOUD_DB_NAME};"
  55. check_result $? "Creating DB"
  56. fi
  57. echo "Creating User"
  58. # 'IF EXISTS' for DROP USER is available from MariaDB 10.1.3 only
  59. mysql --skip-ssl -u root -p${MARIADB_ROOT_PASSWORD} -h ${DB_HOST} -e "DROP USER ${NEXTCLOUD_DB_USER};" || echo "It seems it didn't exist"
  60. mysql --skip-ssl -u root -p${MARIADB_ROOT_PASSWORD} -h ${DB_HOST} -e "CREATE USER ${NEXTCLOUD_DB_USER} IDENTIFIED BY '${NEXTCLOUD_DB_PWD}';"
  61. check_result $? "Creating User"
  62. mysql --skip-ssl -u root -p${MARIADB_ROOT_PASSWORD} -h ${DB_HOST} -e "GRANT ALL ON ${NEXTCLOUD_DB_NAME}.* TO ${NEXTCLOUD_DB_USER};"
  63. check_result $? "Granting permissions"
  64. mysql --skip-ssl -u root -p${MARIADB_ROOT_PASSWORD} -h ${DB_HOST} -e "FLUSH PRIVILEGES;"
  65. check_result $? "Flushing privileges"
  66. unset MARIADB_ROOT_PASSWORD
  67. # DB Backup
  68. if [ ! -z "${DB_EXISTS}" -a ! -z "${NEXTCLOUD_DB_BACKUP}" -a -f "${NEXTCLOUD_DB_BACKUP}" ]; then
  69. echo "Restoring DB Backup..."
  70. mysql --skip-ssl -u ${NEXTCLOUD_DB_USER} -p${NEXTCLOUD_DB_PWD} -D ${NEXTCLOUD_DB_NAME} -h ${DB_HOST} < ${NEXTCLOUD_DB_BACKUP};
  71. check_result $? "Restoring DB"
  72. fi
  73. # empty oc_users table
  74. # maintenance:install creates admin user, the rest will be created through LDAP
  75. echo "Removing users"
  76. mysql --skip-ssl -u ${NEXTCLOUD_DB_USER} -p${NEXTCLOUD_DB_PWD} -D ${NEXTCLOUD_DB_NAME} -h ${DB_HOST} -e "TRUNCATE TABLE oc_users;" || echo "Truncate oc_users failed";
  77. # check_result $? "Truncating Users table"
  78. mysql --skip-ssl -u ${NEXTCLOUD_DB_USER} -p${NEXTCLOUD_DB_PWD} -D ${NEXTCLOUD_DB_NAME} -h ${DB_HOST} -e "TRUNCATE TABLE oc_ldap_user_mapping;" || echo "Truncate oc_ldap_user_mapping failed";
  79. #check_result $? "Truncating LDAP Users mapping table"
  80. # ### Nextcloud config file ###
  81. echo "Configuring Nextcloud"
  82. cd /var/www/nextcloud
  83. # https://github.com/nextcloud/server/pull/18130#issuecomment-604518403
  84. sudo -u www-data rm -Rf /srv/nextcloud/data/admin
  85. sudo -u www-data php occ maintenance:install --database "mysql" --database-host ${DB_HOST} --database-name ${NEXTCLOUD_DB_NAME} --database-user ${NEXTCLOUD_DB_USER} --database-pass ${NEXTCLOUD_DB_PWD} --admin-user "admin" --admin-pass ${NEXTCLOUD_ADMIN_PWD} --data-dir ${NEXTCLOUD_DATA_PATH}
  86. check_result $? "Initializing Config"
  87. # Password salt and secret are used by Passman and must remain the same after
  88. # restarting of the instance, otherwise vaults would become inaccessible
  89. if [ ! -z "${NEXTCLOUD_SALT}" ]; then
  90. sudo -u www-data php occ config:system:set passwordsalt --value "${NEXTCLOUD_SALT}"
  91. fi
  92. if [ ! -z "${NEXTCLOUD_SECRET}" ]; then
  93. sudo -u www-data php occ config:system:set secret --value "${NEXTCLOUD_SECRET}"
  94. fi
  95. #sudo -u www-data php occ config:system:set trusted_domains 0 --value ${NEXTCLOUD_SERVER_NAME}.${DOMAIN}
  96. #sudo -u www-data php occ config:system:set trusted_domains 1 --value ${DOMAIN}
  97. index=0
  98. for domain in ${DOMAINS[@]}; do
  99. sudo -u www-data php occ config:system:set trusted_domains ${index} --value ${NEXTCLOUD_SERVER_NAME}.${domain}
  100. index=$((${index}+1))
  101. sudo -u www-data php occ config:system:set trusted_domains ${index} --value ${domain}
  102. index=$((${index}+1))
  103. done;
  104. # Already in maintenance:install command:
  105. #sudo -u www-data php occ config:system:set datadirectory ${NEXTCLOUD_DATA_PATH}
  106. #sudo -u www-data php occ config:system:set dbtype --value mysql
  107. #sudo -u www-data php occ config:system:set dbhost --value ${DB_HOST}
  108. #sudo -u www-data php occ config:system:set dbname --value ${NEXTCLOUD_DB_NAME}
  109. #sudo -u www-data php occ config:system:set dbuser --value ${NEXTCLOUD_DB_USER}
  110. #sudo -u www-data php occ config:system:set dbpassword --value ${NEXTCLOUD_DB_PWD}
  111. sudo -u www-data php occ config:system:set mail_from_address --value postmaster
  112. sudo -u www-data php occ config:system:set mail_domain --value ${DOMAIN}
  113. sudo -u www-data php occ config:system:set ldapIgnoreNamingRules --value false
  114. sudo -u www-data php occ config:system:set ldapProviderFactory --value "\\OCA\\User_LDAP\\LDAPProviderFactory"
  115. # https://docs.nextcloud.com/server/13/admin_manual/configuration_server/caching_configuration.html
  116. sudo -u www-data php occ config:system:set memcache.local --value '\OC\Memcache\APCu'
  117. sudo -u www-data php occ config:app:set user_ldap enabled --value yes
  118. sudo -u www-data php occ config:app:set user_ldap types --value authentication
  119. sudo -u www-data php occ config:app:set user_ldap ldap_host --value ${LDAP_SERVER_HOST}
  120. sudo -u www-data php occ config:app:set user_ldap ldap_port --value 389
  121. sudo -u www-data php occ config:app:set user_ldap ldap_base --value ${LDAP_SEARCH_BASE}
  122. sudo -u www-data php occ config:app:set user_ldap ldap_base_users --value ${LDAP_SEARCH_BASE}
  123. sudo -u www-data php occ config:app:set user_ldap ldap_base_groups --value ${LDAP_SEARCH_BASE}
  124. sudo -u www-data php occ config:app:set user_ldap ldap_dn --value ${LDAP_BIND_DN}
  125. sudo -u www-data php occ config:app:set user_ldap ldap_agent_password --value `printf "${LDAP_BIND_PWD}" | base64`
  126. sudo -u www-data php occ config:app:set user_ldap ldap_email_attr --value mail
  127. sudo -u www-data php occ config:app:set user_ldap ldap_login_filter --value "(&(objectclass=*)(|(uniqueIdentifier=%uid)(mail=%uid)))"
  128. sudo -u www-data php occ config:app:set user_ldap ldap_login_filter_mode --value 1
  129. sudo -u www-data php occ config:app:set user_ldap ldap_loginfilter_email --value 1
  130. sudo -u www-data php occ config:app:set user_ldap ldap_loginfilter_username --value 1
  131. sudo -u www-data php occ config:app:set user_ldap ldap_user_filter_mode --value 1
  132. sudo -u www-data php occ config:app:set user_ldap ldap_userlist_filter --value "(objectclass=*)"
  133. sudo -u www-data php occ config:app:set user_ldap use_memberof_to_detect_membership --value 1
  134. sudo -u www-data php occ config:app:set user_ldap ldap_display_name --value "cn"
  135. #sudo -u www-data php occ config:app:set user_ldap ldap_expert_username_attr --value "mail"
  136. sudo -u www-data php occ config:app:set user_ldap has_memberof_filter_support --value "0"
  137. sudo -u www-data php occ config:app:set user_ldap home_folder_naming_rule --value ""
  138. sudo -u www-data php occ config:app:set user_ldap last_jpegPhoto_lookup --value "0"
  139. sudo -u www-data php occ config:app:set user_ldap ldap_attributes_for_group_search --value ""
  140. sudo -u www-data php occ config:app:set user_ldap ldap_attributes_for_user_search --value ""
  141. sudo -u www-data php occ config:app:set user_ldap ldap_backup_host --value ""
  142. sudo -u www-data php occ config:app:set user_ldap ldap_backup_port --value ""
  143. sudo -u www-data php occ config:app:set user_ldap ldap_cache_ttl --value "600"
  144. sudo -u www-data php occ config:app:set user_ldap ldap_configuration_active --value "1"
  145. sudo -u www-data php occ config:app:set user_ldap ldap_dynamic_group_member_url --value ""
  146. sudo -u www-data php occ config:app:set user_ldap ldap_experienced_admin --value "0"
  147. sudo -u www-data php occ config:app:set user_ldap ldap_expert_uuid_group_attr --value ""
  148. sudo -u www-data php occ config:app:set user_ldap ldap_expert_uuid_user_attr --value ""
  149. sudo -u www-data php occ config:app:set user_ldap ldap_group_display_name --value "cn"
  150. sudo -u www-data php occ config:app:set user_ldap ldap_group_filter --value ""
  151. sudo -u www-data php occ config:app:set user_ldap ldap_group_filter_mode --value "0"
  152. sudo -u www-data php occ config:app:set user_ldap ldap_group_member_assoc_attribute --value "uniqueMember"
  153. sudo -u www-data php occ config:app:set user_ldap ldap_groupfilter_groups --value ""
  154. sudo -u www-data php occ config:app:set user_ldap ldap_groupfilter_objectclass --value ""
  155. sudo -u www-data php occ config:app:set user_ldap ldap_loginfilter_attributes --value ""
  156. sudo -u www-data php occ config:app:set user_ldap ldap_nested_groups --value "0"
  157. sudo -u www-data php occ config:app:set user_ldap ldap_override_main_server --value ""
  158. sudo -u www-data php occ config:app:set user_ldap ldap_paging_size --value "500"
  159. sudo -u www-data php occ config:app:set user_ldap ldap_quota_attr --value ""
  160. sudo -u www-data php occ config:app:set user_ldap ldap_quota_def --value ""
  161. sudo -u www-data php occ config:app:set user_ldap ldap_tls --value "0"
  162. sudo -u www-data php occ config:app:set user_ldap ldap_turn_off_cert_check --value "0"
  163. sudo -u www-data php occ config:app:set user_ldap ldap_turn_on_pwd_change --value "0"
  164. sudo -u www-data php occ config:app:set user_ldap ldap_user_display_name_2 --value ""
  165. sudo -u www-data php occ config:app:set user_ldap ldap_userfilter_groups --value ""
  166. sudo -u www-data php occ config:app:set user_ldap ldap_userfilter_objectclass --value ""
  167. # upgrade apps
  168. sudo -u www-data php occ upgrade
  169. # enable apps
  170. sudo -u www-data php occ app:enable contacts
  171. sudo -u www-data php occ app:enable calendar
  172. sudo -u www-data php occ app:enable tasks
  173. #sudo -u www-data php occ app:enable spreed
  174. sudo -u www-data php occ app:enable bookmarks
  175. #sudo -u www-data php occ app:enable direct_menu
  176. sudo -u www-data php occ app:enable mail
  177. sudo -u www-data php occ app:enable news
  178. sudo -u www-data php occ app:enable notes
  179. sudo -u www-data php occ app:enable passman
  180. sudo -u www-data php occ app:enable tasks
  181. sudo -u www-data php occ app:enable drawio
  182. sudo -u www-data php occ app:enable gpxedit
  183. sudo -u www-data php occ app:enable gpxmotion
  184. sudo -u www-data php occ app:enable gpxpod
  185. sudo -u www-data php occ app:enable sharebyemail
  186. sudo -u www-data php occ app:enable socialsharing_email
  187. # copy variables to a file for cron
  188. printenv | grep "NEXTCLOUD\|DB" | sed 's/^\(.*\)$/export \1/g' > /root/env.sh
  189. service cron start
  190. exec "$@"