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