-
Notifications
You must be signed in to change notification settings - Fork 51
Expand file tree
/
Copy pathdocker-entrypoint.sh
More file actions
executable file
·233 lines (179 loc) · 7.18 KB
/
Copy pathdocker-entrypoint.sh
File metadata and controls
executable file
·233 lines (179 loc) · 7.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
#!/bin/bash
set -euo pipefail
# entrypoint-utils.sh
# END: entrypoint-utils.sh
start() {
if isLegacy; then
return
fi
# Required for web servers in FPM mode
copyPublicFiles
copyClientFiles
if [ "$(bin/command config:get isInstalled)" = "true" ]; then
actionMigrate
return
fi
actionInstall
}
actionMigrate() {
echo >&2 "info: Running \"migrate\" action."
if ! verifyDatabaseReady ; then
echo >&2 "error: Migration failed: database is not ready."
exit 1
fi
bin/command clear-cache
bin/command migrate || {
local version
version="$(bin/command config:get version)"
echo >&2 "error: Migration failed: customizations may be incompatible with the new version."
echo >&2 "error: Resolve them or downgrade to version \"$version\"."
echo >&2 "error: See https://docs.espocrm.com/administration/docker/installation/#incompatible-customizations"
exit 1
}
setPermissions
}
actionInstall() {
echo >&2 "info: Running \"install\" action."
rm -rf ./data/cache
bin/command config:populate
bin/command config:set "defaultPermissions.user" "www-data"
bin/command config:set "defaultPermissions.group" "www-data"
setPermissions
bin/command config:set database.platform "${ESPOCRM_DATABASE_PLATFORM}"
bin/command config:set database.host "${ESPOCRM_DATABASE_HOST}"
bin/command config:set database.port "${ESPOCRM_DATABASE_PORT-}"
bin/command config:set database.dbname "${ESPOCRM_DATABASE_NAME}"
bin/command config:set database.user "${ESPOCRM_DATABASE_USER}"
bin/command config:set database.password "${ESPOCRM_DATABASE_PASSWORD}"
if ! verifyDatabaseReady ; then
echo >&2 "error: Installation failed: database connection error. Verify the host, port, and credentials, then restart the container."
exit 1
fi
bin/command rebuild >/dev/null 2>&1 || {
echo >&2 "error: Installation failed: rebuild failed. Check data/logs/ for details, then restart the container."
exit 1
}
bin/command create-admin-user "$ESPOCRM_ADMIN_USERNAME" >/dev/null 2>&1
printf '%s\n' "$ESPOCRM_ADMIN_PASSWORD" | bin/command set-password admin >/dev/null 2>&1
bin/command config:set "language" "$ESPOCRM_LANGUAGE"
bin/command config:set "siteUrl" "$ESPOCRM_SITE_URL"
[ -n "${ESPOCRM_DATE_FORMAT-}" ] && bin/command config:set "dateFormat" "$ESPOCRM_DATE_FORMAT"
[ -n "${ESPOCRM_TIME_FORMAT-}" ] && bin/command config:set "timeFormat" "$ESPOCRM_TIME_FORMAT"
[ -n "${ESPOCRM_TIME_ZONE-}" ] && bin/command config:set "timeZone" "$ESPOCRM_TIME_ZONE"
[ -n "${ESPOCRM_WEEK_START-}" ] && bin/command config:set "weekStart" "$ESPOCRM_WEEK_START" --type=int
[ -n "${ESPOCRM_DEFAULT_CURRENCY-}" ] && bin/command config:set "defaultCurrency" "$ESPOCRM_DEFAULT_CURRENCY"
[ -n "${ESPOCRM_THOUSAND_SEPARATOR-}" ] && bin/command config:set "thousandSeparator" "$ESPOCRM_THOUSAND_SEPARATOR"
[ -n "${ESPOCRM_DECIMAL_MARK-}" ] && bin/command config:set "decimalMark" "$ESPOCRM_DECIMAL_MARK"
bin/command populate-scheduled-jobs
bin/command config:set "jobRunInParallel" "true" --type=bool
bin/command app-check || {
echo >&2 "error: Installation failed: app-check error. Check data/logs/ for details, then restart the container."
exit 1
}
bin/command config:set "isInstalled" "true" --type=bool
echo >&2 "info: Installation completed successfully."
}
setPermissions() {
chown -R www-data:www-data "${CUSTOM_RESOURCE_LIST[@]}"
}
setEnvironments() {
for defaultParam in "${!DEFAULTS[@]}"
do
setEnvValue "${defaultParam}" "${DEFAULTS[$defaultParam]}"
done
for optionName in "${!OPTIONAL_PARAMS[@]}"
do
local varName="${OPTIONAL_PARAMS[$optionName]}"
setEnvValue "${varName}" "${!varName-}"
done
}
copyPublicFiles() {
if ! awk '{print $2}' /proc/mounts | grep -qxF "/var/www/html/public"; then
return
fi
echo >&2 "info: Copying public files."
rm -rf ./public/*
cp -a /usr/src/espocrm/public/. ./public/
}
copyClientFiles() {
if ! awk '{print $2}' /proc/mounts | grep -qxF "/var/www/html/client"; then
return
fi
echo >&2 "info: Copying client files."
find ./client/ -mindepth 1 -maxdepth 1 ! -name 'custom' -exec rm -rf {} +
cp -a /usr/src/espocrm/client/. ./client/
}
warnInsecureCredentials() {
declare -a warningItems=()
if [ "$ESPOCRM_ADMIN_PASSWORD" = "${DEFAULTS['ESPOCRM_ADMIN_PASSWORD']}" ]; then
warningItems+=("ESPOCRM_ADMIN_PASSWORD uses the built-in default value.")
fi
if [ "$ESPOCRM_DATABASE_PASSWORD" = "${DEFAULTS['ESPOCRM_DATABASE_PASSWORD']}" ]; then
warningItems+=("ESPOCRM_DATABASE_PASSWORD uses the built-in default value.")
fi
if [ ${#warningItems[@]} -eq 0 ]; then
return
fi
echo >&2 '****************************************************'
echo >&2 'warning: Insecure default EspoCRM credentials detected.'
for warningItem in "${warningItems[@]}"
do
echo >&2 "warning: $warningItem"
done
echo >&2 'warning: Set strong environment variable values before using this instance in production.'
echo >&2 '****************************************************'
}
warnLegacyInstallation() {
if ! isLegacy; then
return
fi
echo >&2 "warning: LEGACY INSTALLATION METHOD DETECTED."
echo >&2 "warning: Do not mount /var/www/html directly. Instead, mount the following directories separately:"
echo >&2 "warning: /var/www/html/custom"
echo >&2 "warning: /var/www/html/data"
echo >&2 "warning: /var/www/html/client/custom"
echo >&2 "warning: No further EspoCRM upgrades will be available."
echo >&2 "warning: See https://docs.espocrm.com/administration/docker/installation/#migration-to-espocrm-10"
if [ ! -f bin/command ]; then
echo >&2 "error: Container startup aborted. Migrate to the supported volume layout shown above and restart."
exit 1
fi
}
# ------------------------- START -------------------------------------
# Global variables
CUSTOM_RESOURCE_LIST=(
"./data"
"./custom"
"./client/custom"
)
declare -A DEFAULTS=(
['ESPOCRM_DATABASE_PLATFORM']='Mysql'
['ESPOCRM_DATABASE_HOST']='espocrm-db'
['ESPOCRM_DATABASE_PORT']=''
['ESPOCRM_DATABASE_NAME']='espocrm'
['ESPOCRM_DATABASE_USER']='espocrm'
['ESPOCRM_DATABASE_PASSWORD']='password'
['ESPOCRM_ADMIN_USERNAME']='admin'
['ESPOCRM_ADMIN_PASSWORD']='password'
['ESPOCRM_LANGUAGE']='en_US'
['ESPOCRM_SITE_URL']='http://localhost'
)
declare -A OPTIONAL_PARAMS=(
['language']='ESPOCRM_LANGUAGE'
['dateFormat']='ESPOCRM_DATE_FORMAT'
['timeFormat']='ESPOCRM_TIME_FORMAT'
['timeZone']='ESPOCRM_TIME_ZONE'
['weekStart']='ESPOCRM_WEEK_START'
['defaultCurrency']='ESPOCRM_DEFAULT_CURRENCY'
['thousandSeparator']='ESPOCRM_THOUSAND_SEPARATOR'
['decimalMark']='ESPOCRM_DECIMAL_MARK'
)
setEnvironments
if [[ "${1-}" == apache2* ]] || [ "${1-}" = 'php-fpm' ]; then
warnInsecureCredentials
warnLegacyInstallation
start
applyConfigEnv
fi
# ------------------------- END -------------------------------------
exec "$@"