mirror of
https://github.com/wallabag/docker.git
synced 2026-02-27 20:27:40 +01:00
Merge branch 'master' into docker-secrets
This commit is contained in:
@ -1,4 +1,6 @@
|
||||
#!/bin/sh
|
||||
# Exit when any command fails
|
||||
set -e
|
||||
|
||||
FILE_ENV_VARS="$(env | grep '__FILE=')"
|
||||
for env_var in $FILE_ENV_VARS; do
|
||||
@ -10,28 +12,115 @@ for env_var in $FILE_ENV_VARS; do
|
||||
export $(echo $new_var | xargs)
|
||||
done
|
||||
|
||||
provisioner () {
|
||||
echo "Starting provisioner..."
|
||||
if ! out=`ansible-playbook -i /etc/ansible/hosts /etc/ansible/entrypoint.yml -c local "$@"`;then
|
||||
echo $out;
|
||||
fi
|
||||
echo "Provisioner finished."
|
||||
COMMAND_ARG1="$1"
|
||||
COMMAND_ARG2="$2"
|
||||
|
||||
cd /var/www/wallabag || exit
|
||||
|
||||
wait_for_database() {
|
||||
timeout 60s /bin/sh -c "$(cat << EOF
|
||||
until echo 'Waiting for database ...' \
|
||||
&& nc -z ${SYMFONY__ENV__DATABASE_HOST} ${SYMFONY__ENV__DATABASE_PORT} < /dev/null > /dev/null 2>&1 ; \
|
||||
do sleep 1 ; done
|
||||
EOF
|
||||
)"
|
||||
}
|
||||
|
||||
if [ "$1" = "wallabag" ];then
|
||||
install_wallabag() {
|
||||
su -c "php bin/console wallabag:install --env=prod -n" -s /bin/sh nobody
|
||||
}
|
||||
|
||||
provisioner() {
|
||||
SYMFONY__ENV__DATABASE_DRIVER=${SYMFONY__ENV__DATABASE_DRIVER:-pdo_sqlite}
|
||||
POPULATE_DATABASE=${POPULATE_DATABASE:-True}
|
||||
SQLITE_DB_DIR="/var/www/wallabag/data/db"
|
||||
SQLITE_DB_FILEPATH="$SQLITE_DB_DIR/wallabag.sqlite"
|
||||
|
||||
# Replace environment variables
|
||||
envsubst < /etc/wallabag/parameters.template.yml > app/config/parameters.yml
|
||||
envsubst < /etc/wallabag/php-wallabag.template.ini > /etc/php81/conf.d/50_wallabag.ini
|
||||
|
||||
# Wait for external database
|
||||
if [ "$SYMFONY__ENV__DATABASE_DRIVER" = "pdo_mysql" ] || [ "$SYMFONY__ENV__DATABASE_DRIVER" = "pdo_pgsql" ] ; then
|
||||
wait_for_database
|
||||
fi
|
||||
|
||||
# Configure SQLite database
|
||||
if [ "$SYMFONY__ENV__DATABASE_DRIVER" = "pdo_sqlite" ]; then
|
||||
# mkdir and chown are mandatory for local folder binding
|
||||
if [ ! -f "$SQLITE_DB_FILEPATH" ]; then
|
||||
mkdir -p "$SQLITE_DB_DIR"
|
||||
chown nobody: "$SQLITE_DB_DIR"
|
||||
fi
|
||||
|
||||
if [ ! -s "$SQLITE_DB_FILEPATH" ]; then
|
||||
echo "Configuring the SQLite database ..."
|
||||
install_wallabag
|
||||
fi
|
||||
fi
|
||||
|
||||
# Configure MySQL / MariaDB database
|
||||
if [ "$SYMFONY__ENV__DATABASE_DRIVER" = "pdo_mysql" ] && [ "$POPULATE_DATABASE" = "True" ] && [ "$MYSQL_ROOT_PASSWORD" != "" ] ; then
|
||||
DATABASE_EXISTS="$(mysql -h "${SYMFONY__ENV__DATABASE_HOST}" --port "${SYMFONY__ENV__DATABASE_PORT}" -uroot -p"${MYSQL_ROOT_PASSWORD}" \
|
||||
-sse "SELECT EXISTS(SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '$SYMFONY__ENV__DATABASE_NAME')")"
|
||||
if [ "$DATABASE_EXISTS" != "1" ]; then
|
||||
echo "Configuring the MySQL database ..."
|
||||
mysql -h "${SYMFONY__ENV__DATABASE_HOST}" --port "${SYMFONY__ENV__DATABASE_PORT}" -uroot -p"${MYSQL_ROOT_PASSWORD}" \
|
||||
-e "CREATE DATABASE IF NOT EXISTS ${SYMFONY__ENV__DATABASE_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
||||
USER_EXISTS="$(mysql -h "${SYMFONY__ENV__DATABASE_HOST}" --port "${SYMFONY__ENV__DATABASE_PORT}" -uroot -p"${MYSQL_ROOT_PASSWORD}" \
|
||||
-sse "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = '$SYMFONY__ENV__DATABASE_USER')")"
|
||||
if [ "$USER_EXISTS" != "1" ]; then
|
||||
mysql -h "${SYMFONY__ENV__DATABASE_HOST}" --port "${SYMFONY__ENV__DATABASE_PORT}" -uroot -p"${MYSQL_ROOT_PASSWORD}" \
|
||||
-e "CREATE USER IF NOT EXISTS '${SYMFONY__ENV__DATABASE_USER}'@'%' IDENTIFIED BY '${SYMFONY__ENV__DATABASE_PASSWORD}';"
|
||||
mysql -h "${SYMFONY__ENV__DATABASE_HOST}" --port "${SYMFONY__ENV__DATABASE_PORT}" -uroot -p"${MYSQL_ROOT_PASSWORD}" \
|
||||
-e "GRANT ALL PRIVILEGES ON ${SYMFONY__ENV__DATABASE_NAME}.* TO '${SYMFONY__ENV__DATABASE_USER}'@'%';"
|
||||
fi
|
||||
install_wallabag
|
||||
else
|
||||
echo "WARN: MySQL database is already configured. Remove the environment variable with root password."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Configure Postgres database
|
||||
if [ "$SYMFONY__ENV__DATABASE_DRIVER" = "pdo_pgsql" ] && [ "$POPULATE_DATABASE" = "True" ] && [ "$POSTGRES_PASSWORD" != "" ] ; then
|
||||
export PGPASSWORD="${POSTGRES_PASSWORD}"
|
||||
DATABASE_EXISTS="$(psql -qAt -h "${SYMFONY__ENV__DATABASE_HOST}" -p "${SYMFONY__ENV__DATABASE_PORT}" -U "${POSTGRES_USER}" \
|
||||
-c "SELECT 1 FROM pg_catalog.pg_database WHERE datname = '${SYMFONY__ENV__DATABASE_NAME}';")"
|
||||
if [ "$DATABASE_EXISTS" != "1" ]; then
|
||||
echo "Configuring the Postgres database ..."
|
||||
psql -q -h "${SYMFONY__ENV__DATABASE_HOST}" -p "${SYMFONY__ENV__DATABASE_PORT}" -U "${POSTGRES_USER}" \
|
||||
-c "CREATE DATABASE ${SYMFONY__ENV__DATABASE_NAME};"
|
||||
USER_EXISTS="$(psql -qAt -h "${SYMFONY__ENV__DATABASE_HOST}" -p "${SYMFONY__ENV__DATABASE_PORT}" -U "${POSTGRES_USER}" \
|
||||
-c "SELECT 1 FROM pg_roles WHERE rolname = '${SYMFONY__ENV__DATABASE_USER}';")"
|
||||
if [ "$USER_EXISTS" != "1" ]; then
|
||||
psql -q -h "${SYMFONY__ENV__DATABASE_HOST}" -p "${SYMFONY__ENV__DATABASE_PORT}" -U "${POSTGRES_USER}" \
|
||||
-c "CREATE ROLE ${SYMFONY__ENV__DATABASE_USER} with PASSWORD '${SYMFONY__ENV__DATABASE_PASSWORD}' LOGIN;"
|
||||
fi
|
||||
install_wallabag
|
||||
else
|
||||
echo "WARN: Postgres database is already configured. Remove the environment variable with root password."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Remove cache and install Wallabag
|
||||
rm -f -r /var/www/wallabag/var/cache
|
||||
su -c "SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist" -s /bin/sh nobody
|
||||
}
|
||||
|
||||
if [ "$COMMAND_ARG1" = "wallabag" ]; then
|
||||
echo "Starting wallabag ..."
|
||||
provisioner
|
||||
echo "wallabag is ready!"
|
||||
exec s6-svscan /etc/s6/
|
||||
fi
|
||||
|
||||
if [ "$1" = "import" ];then
|
||||
provisioner --skip-tags=firstrun
|
||||
cd /var/www/wallabag/
|
||||
exec su -c "bin/console wallabag:import:redis-worker --env=prod $2 -vv" -s /bin/sh nobody
|
||||
if [ "$COMMAND_ARG1" = "import" ]; then
|
||||
provisioner
|
||||
exec su -c "bin/console wallabag:import:redis-worker --env=prod $COMMAND_ARG2 -vv" -s /bin/sh nobody
|
||||
fi
|
||||
|
||||
if [ "$1" = "migrate" ];then
|
||||
if [ "$COMMAND_ARG1" = "migrate" ]; then
|
||||
provisioner
|
||||
cd /var/www/wallabag/
|
||||
exec su -c "bin/console doctrine:migrations:migrate --env=prod --no-interaction" -s /bin/sh nobody
|
||||
fi
|
||||
|
||||
|
||||
Reference in New Issue
Block a user