forked from 0k/0k-charms
6 changed files with 384 additions and 0 deletions
-
24matomo/hooks/init
-
26matomo/hooks/mysql_database-relation-joined
-
117matomo/hooks/post_deploy
-
77matomo/hooks/publish_dir-relation-joined
-
95matomo/lib/common
-
45matomo/metadata.yml
@ -0,0 +1,24 @@ |
|||
#!/bin/bash |
|||
|
|||
## Init is run on host |
|||
## For now it is run every time the script is launched, but |
|||
## it should be launched only once after build. |
|||
|
|||
## Accessible variables are: |
|||
## - SERVICE_NAME Name of current service |
|||
## - DOCKER_BASE_IMAGE Base image from which this service might be built if any |
|||
## - SERVICE_DATASTORE Location on host of the DATASTORE of this service |
|||
## - SERVICE_CONFIGSTORE Location on host of the CONFIGSTORE of this service |
|||
|
|||
|
|||
. lib/common |
|||
|
|||
set -e |
|||
|
|||
## If no admin-password set, fail |
|||
options-get admin-password |
|||
|
|||
|
|||
matomo:init |
|||
|
|||
matomo:config |
@ -0,0 +1,26 @@ |
|||
#!/bin/bash |
|||
|
|||
|
|||
. lib/common |
|||
|
|||
|
|||
## XXXvlab: should get location of code |
|||
#CONFIG=$(echo $COMPOSE_CONFIG | shyaml get-value $SERVICE_NAME.relations.publish-dir...) |
|||
# CONFIG="$SERVICE_DATASTORE/opt/apps/piwigo/local/config/database.inc.php" |
|||
|
|||
set -e |
|||
|
|||
PASSWORD="$(relation-get password)" |
|||
USER="$(relation-get user)" |
|||
DBNAME="$(relation-get dbname)" |
|||
|
|||
|
|||
crudini --set "$MATOMO_CONFIG_FILE" database host "\"$TARGET_SERVICE_NAME\"" |
|||
crudini --set "$MATOMO_CONFIG_FILE" database username "\"$USER\"" |
|||
crudini --set "$MATOMO_CONFIG_FILE" database password "\"$PASSWORD\"" |
|||
crudini --set "$MATOMO_CONFIG_FILE" database dbname "\"$DBNAME\"" |
|||
crudini --set "$MATOMO_CONFIG_FILE" database tables_prefix "\"\"" |
|||
crudini --set "$MATOMO_CONFIG_FILE" database charset "\"utf8mb4\"" |
|||
|
|||
info "Configured $SERVICE_NAME code for $TARGET_SERVICE_NAME access." |
|||
|
@ -0,0 +1,117 @@ |
|||
#!/bin/bash |
|||
|
|||
. lib/common |
|||
|
|||
set -e |
|||
|
|||
## If no admin-password set, then don't try to pre-initialize database |
|||
admin_password=$(options-get admin-password 2>/dev/null) || exit 0 |
|||
admin_email=$(options-get admin-email 2>/dev/null ) || true |
|||
|
|||
CONTROL="$SERVICE_DATASTORE/.control" |
|||
## Was it already properly propagated to database ? |
|||
control=$(H "${admin_password}" "${admin_email}") |
|||
if [ -e "$CONTROL" ]; then |
|||
if [ "$control" == "$(cat "$CONTROL")" ]; then |
|||
exit 0 |
|||
else |
|||
err "Changing admin password in compose file not yet supported" |
|||
exit 1 |
|||
fi |
|||
fi |
|||
|
|||
|
|||
if ! [ -d "$MATOMO_CODE/vendor" ]; then |
|||
|
|||
# XXXvlab: can't get real config here |
|||
if ! read-0 publish_dir_ts _ _ < <(get_service_relation "$SERVICE_NAME" "publish-dir"); then |
|||
err "Couldn't find relation ${DARKCYAN}publish-dir${NORMAL}." |
|||
exit 1 |
|||
fi |
|||
|
|||
publish_dir_relation_dir=$(get_relation_data_dir "$SERVICE_NAME" "$publish_dir_ts" "publish-dir") || { |
|||
err "Failed to find relation file" |
|||
exit 1 |
|||
} |
|||
|
|||
publish_dir_relation_config=$(cat "$publish_dir_relation_dir/data") || exit 2 |
|||
|
|||
domain=$(e "$publish_dir_relation_config" | shyaml get-value domain) || { |
|||
err "Couldn't get domain information in ${DARKCYAN}publish-dir${NORMAL} relation's data." |
|||
exit 1 |
|||
} |
|||
url=$(e "$publish_dir_relation_config" | shyaml get-value url) || { |
|||
err "Couldn't get url information in ${DARKCYAN}publish-dir${NORMAL} relation's data." |
|||
exit 1 |
|||
} |
|||
|
|||
|
|||
## |
|||
## Get domain in option of relation "publish-dir" |
|||
## |
|||
|
|||
|
|||
container_id=$( |
|||
for container_id in $(get_running_containers_for_service "$MASTER_BASE_SERVICE_NAME"); do |
|||
e "$container_id" |
|||
break |
|||
done |
|||
) |
|||
|
|||
docker exec -i "$container_id" bash <<EOF |
|||
type -p "composer" || { |
|||
cd /tmp |
|||
curl -sS https://getcomposer.org/installer | php || { |
|||
echo "Error occured while attempting to install compose." >&2 |
|||
exit 1 |
|||
} |
|||
mv -v /tmp/composer.phar /usr/local/bin/composer || exit 1 |
|||
} |
|||
|
|||
cd /var/www/$domain && |
|||
composer install |
|||
|
|||
EOF |
|||
|
|||
fi |
|||
|
|||
|
|||
## |
|||
## Required wizard |
|||
## |
|||
|
|||
if [ "$(crudini --get "$MATOMO_CONFIG_FILE" General installation_in_progress)" == 1 ]; then |
|||
curl "$url/index.php?action=tablesCreation" >/dev/null || { |
|||
err "Table creation failed." |
|||
exit 1 |
|||
} |
|||
orig_uid_gid=$(stat --format=%u:%g "$MATOMO_CONFIG_FILE") |
|||
uid_gid=$(stat --format=%u:%g "$SERVICE_DATASTORE/var/tmp/matomo/index.php") |
|||
chown "$uid_gid" "$MATOMO_CONFIG_FILE" |
|||
curl "$url/index.php?action=setupSuperUser" \ |
|||
--data-urlencode login="admin" \ |
|||
--data-urlencode password="$admin_password" \ |
|||
--data-urlencode password_bis="$admin_password" \ |
|||
--data-urlencode email="${admin_email:-admin@localhost.localnet}" \ |
|||
--data-urlencode subscribe_newsletter_piwikorg="0" \ |
|||
--data-urlencode subscribe_newsletter_piwikpro="0" || { |
|||
err "Setting admin account failed." |
|||
exit 1 |
|||
} |
|||
|
|||
chown "$orig_uid_gid" "$MATOMO_CONFIG_FILE" |
|||
crudini --set "$MATOMO_CONFIG_FILE" General installation_in_progress 0 |
|||
|
|||
#curl "$url/index.php?action=firstWebsiteSetup" \ |
|||
# --data-urlencode siteName="$SITE_NAME" \ |
|||
# --data-urlencode url="$url" \ |
|||
# --data-urlencode timezone="$(cat /etc/timezone)" \ |
|||
# --data-urlencode ecommerce="0" || { |
|||
# err "First Web Site Setup failed." |
|||
# exit 1 |
|||
#} |
|||
|
|||
fi |
|||
|
|||
|
|||
exit 0 |
@ -0,0 +1,77 @@ |
|||
#!/bin/bash |
|||
|
|||
. lib/common |
|||
|
|||
|
|||
|
|||
set -e |
|||
|
|||
#domain=$(relation-get domain) || exit 1 |
|||
domain="matomo" |
|||
url=$(relation-get url) || exit 1 |
|||
# location=$CONFIGSTORE/$BASE_SERVICE_NAME/var/www/$domain |
|||
|
|||
upload_dir="${SERVICE_DATASTORE}/var/www/$domain/uploads" |
|||
if [ -d "$upload_dir" ]; then |
|||
uid_gid=$(stat --format=%u:%g "$upload_dir") |
|||
else |
|||
err "Upload dir '${upload_dir}' was not created. Can't continue." |
|||
exit 1 |
|||
fi |
|||
|
|||
dirs=( |
|||
/var/cache/matomo |
|||
/var/lib/matomo{,/assets} |
|||
/var/log/matomo |
|||
/var/tmp/matomo{,/tcpdf,/templates_c} |
|||
) |
|||
|
|||
to_create=() |
|||
for dir in "${dirs[@]}"; do |
|||
fdir="${SERVICE_DATASTORE}${dir}" |
|||
if ! [ -d "$fdir" ]; then |
|||
to_create+=("$fdir") |
|||
fi |
|||
done |
|||
|
|||
if [ "${#to_create[@]}" -gt 0 ]; then |
|||
mkdir -p "${to_create[@]}" && |
|||
chown -v "$uid_gid" "${to_create[@]}" && |
|||
chmod -v g+rwx "${to_create[@]}" |
|||
fi |
|||
|
|||
|
|||
|
|||
config-add " |
|||
services: |
|||
$MASTER_TARGET_SERVICE_NAME: |
|||
volumes: |
|||
- $SERVICE_DATASTORE/var/tmp/matomo:/var/www/$domain/tmp:rw |
|||
- $SERVICE_DATASTORE/var/cache/matomo:/var/www/$domain/tmp/cache:rw |
|||
- $SERVICE_DATASTORE/var/lib/matomo/assets:/var/www/$domain/tmp/assets:rw |
|||
- $SERVICE_DATASTORE/var/log/matomo:/var/www/$domain/tmp/logs:rw |
|||
- $SERVICE_DATASTORE/var/tmp/matomo/tcpdf:/var/www/$domain/tmp/tcpdf:rw |
|||
- $SERVICE_DATASTORE/var/tmp/matomo/templates_c:/var/www/$domain/tmp/templates_c:rw |
|||
" |
|||
|
|||
|
|||
# |
|||
#cat <<EOF >> "${MATOMO_CODE}"/.env |
|||
# |
|||
#BASE_PROTOCOL=${url%%://*} |
|||
#BASE_URL=$domain |
|||
#BASE_PATH=/index.php |
|||
# |
|||
#EOF |
|||
# |
|||
# |
|||
#cat <<EOF > "${MATOMO_CODE}"/web/.htaccess |
|||
# |
|||
#Options -MultiViews |
|||
#RewriteEngine On |
|||
#RewriteRule ^js/.* - [L] |
|||
#RewriteCond %{REQUEST_FILENAME} !-f |
|||
#RewriteRule ^(.*)$ index.php/\$1 [QSA,L] |
|||
# |
|||
#EOF |
|||
# |
@ -0,0 +1,95 @@ |
|||
# -*- mode: shell-script -*- |
|||
|
|||
MATOMO_DIR="/opt/apps/matomo" |
|||
MATOMO_CODE="$SERVICE_CONFIGSTORE$MATOMO_DIR" |
|||
MATOMO_RELEASE=4.16.0 |
|||
MATOMO_URL=https://github.com/matomo-org/matomo/archive/"${MATOMO_RELEASE}".tar.gz |
|||
#MATOMO_URL=https://docker.0k.io/downloads/matomo-"${MATOMO_RELEASE}".tar.gz |
|||
MATOMO_CONFIG_FILE="${MATOMO_CODE}"/config/config.ini.php |
|||
|
|||
|
|||
matomo:init() { |
|||
current_version="" |
|||
if [ -d "${MATOMO_CODE}" ]; then |
|||
current_version=$(cat "${MATOMO_CODE}"/.version) || { |
|||
err "Couldn't find ${MATOMO_CODE}/.version file." |
|||
echo " Your config dir is in a broken state." >&2 |
|||
return 1 |
|||
} |
|||
else |
|||
mkdir -p "${MATOMO_CODE}" && |
|||
cd "${MATOMO_CODE}" && |
|||
git init . && |
|||
git config user.email "root@localhost" && |
|||
git config user.name "Root" || { |
|||
err "Couldn't create directory ${MATOMO_CODE}, or init it with git." |
|||
return 1 |
|||
} |
|||
fi |
|||
if [ "$current_version" != "$MATOMO_RELEASE" ]; then |
|||
cd "${MATOMO_CODE}" || return 1 |
|||
[ -d "$MATOMO_CODE"/.git ] || { |
|||
err "Can't find the '.git' directory in ${MATOMO_CODE}." |
|||
return 1 |
|||
} |
|||
|
|||
rm -rf "$MATOMO_CODE"/* "$MATOMO_CODE"/{.version,.inited-*} || return 1 |
|||
|
|||
curl -L "$MATOMO_URL" | tar xzv || { |
|||
#if [ -f "$MATOMO_URL" ]; then |
|||
# git checkout HEAD |
|||
#else |
|||
# rmdir "$MATOMO_URL" |
|||
#fi |
|||
err "Couldn't download $MATOMO_URL." |
|||
return 1 |
|||
} |
|||
mv matomo-*/* matomo-*/{.bowerrc,.lfsconfig} . && rmdir matomo-* |
|||
echo "$MATOMO_RELEASE" > .version |
|||
git add -A . && |
|||
git commit -m "Release $MATOMO_RELEASE" |
|||
fi |
|||
} |
|||
|
|||
|
|||
matomo:config() { |
|||
[ -f "$MATOMO_CONFIG_FILE" ] || { |
|||
cat <<EOF > "$MATOMO_CONFIG_FILE" |
|||
; <?php exit; ?> DO NOT REMOVE THIS LINE |
|||
; file automatically generated or modified by Matomo; you can manually override the default values in global.ini.php by redefining them in this file. |
|||
EOF |
|||
} |
|||
crudini --get "$MATOMO_CONFIG_FILE" General salt >dev/null || { |
|||
salt=$(dd if=/dev/urandom bs=1 count=16 2>/dev/null | hexdump -v -e '/1 "%02x"') |
|||
crudini --set "$MATOMO_CONFIG_FILE" General salt \"$salt\" |
|||
crudini --set "$MATOMO_CONFIG_FILE" General installation_in_progress 1 |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
matomo:curl() { |
|||
local url="$1" |
|||
curl "$url" |
|||
|
|||
} |
|||
|
|||
|
|||
# matomo:wizard() { |
|||
|
|||
# PAGES=( |
|||
# "systemCheck" |
|||
# "databaseSetup" |
|||
# "tablesCreation" |
|||
# "setupSuperUser" |
|||
# "setupSuperUser" |
|||
# "firstWebsiteSetup" |
|||
# "firstWebsiteSetup" |
|||
# "trackingCode" |
|||
# "finished" |
|||
# ) |
|||
|
|||
# matomo:curl |
|||
|
|||
|
|||
# } |
@ -0,0 +1,45 @@ |
|||
subordinate: true |
|||
requires: |
|||
web-publishing-directory: |
|||
interface: publish-dir |
|||
scope: container |
|||
default-options: |
|||
admin-password: admin |
|||
|
|||
|
|||
|
|||
uses: |
|||
publish-dir: |
|||
#constraint: required | recommended | optional |
|||
#auto: pair | summon | none ## default: pair |
|||
scope: container |
|||
constraint: required |
|||
auto: summon |
|||
solves: |
|||
container: "main running server" |
|||
default-options: |
|||
location: !var-expand "$CONFIGSTORE/$BASE_SERVICE_NAME/opt/apps/matomo" |
|||
data-dirs: ## write permission for web-app |
|||
- uploads |
|||
mysql-database: |
|||
#constraint: required | recommended | optional |
|||
#auto: pair | summon | none ## default: pair |
|||
constraint: required |
|||
auto: summon |
|||
solves: |
|||
database: "main storage" |
|||
backup: |
|||
constraint: recommended |
|||
auto: pair |
|||
solves: |
|||
backup: "Automatic regular backup" |
|||
default-options: |
|||
## First pattern matching wins, no pattern matching includes. |
|||
## include-patterns are checked first, then exclude-patterns |
|||
## Patterns rules: |
|||
## - ending / for directory |
|||
## - '*' authorized |
|||
## - must start with a '/', will start from $SERVICE_DATASTORE |
|||
exclude-patterns: |
|||
- "/var/cache/" |
|||
- "/var/tmp/" |
Write
Preview
Loading…
Cancel
Save
Reference in new issue