mirror of
https://github.com/OPSnet/Gazelle.git
synced 2026-01-16 18:04:34 -05:00
105 lines
3.9 KiB
Bash
Executable File
105 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
# Set the following to 1 in order to dump the mysql schema after all the migrations have run.
|
|
# This can help in debugging migrations.
|
|
DUMP_MYSQL_SCHEMA=0
|
|
|
|
cd "${CI_PROJECT_DIR}"
|
|
COMPOSER_HOME="${CI_PROJECT_DIR}/.composer"
|
|
POSTGRES_USER_PASSWORD="$(dd if=/dev/urandom count=1 bs=12 status=none | base64)"
|
|
export COMPOSER_HOME
|
|
export POSTGRES_USER_PASSWORD
|
|
|
|
[ -f "${CI_PROJECT_DIR}/lib/override.config.php" ] || bash "${CI_PROJECT_DIR}/misc/docker/web/generate-config-testing.sh"
|
|
sed -i 's|gazelle\.php|ci-coverage.php|' "${CI_PROJECT_DIR}/public/index.php"
|
|
|
|
composer --version && composer install --no-progress
|
|
bin/local-patch
|
|
|
|
cat > ~/.my.cnf <<EOF
|
|
[client]
|
|
user = $MYSQL_USER
|
|
password = $MYSQL_PASSWORD
|
|
host = $MYSQL_HOST
|
|
database = $MYSQL_DATABASE
|
|
EOF
|
|
chmod 600 ~/.my.cnf
|
|
|
|
while ! nc -z "$MYSQL_HOST" 3306
|
|
do
|
|
echo "Waiting for MySQL..."
|
|
sleep 1
|
|
done
|
|
|
|
echo "Create postgres database..."
|
|
cat > ~/.pgpass << EOF
|
|
#hostname:port:database:username:password
|
|
${PGHOST}:5432:*:${POSTGRES_USER}:${POSTGRES_PASSWORD}
|
|
${PGHOST}:5432:*:${POSTGRES_DB_USER}:${POSTGRES_USER_PASSWORD}
|
|
EOF
|
|
chmod 600 ~/.pgpass
|
|
|
|
cat << EOF | psql -d postgres -U ${POSTGRES_USER}
|
|
create role ${POSTGRES_DB_USER} with password '${POSTGRES_USER_PASSWORD}' login;
|
|
create role ${PG_RO_USER} with password '${PG_RO_PASS}' login;
|
|
create database ${POSTGRES_DATABASE} with owner ${POSTGRES_DB_USER};
|
|
EOF
|
|
|
|
cat << EOF | psql "${POSTGRES_DATABASE}" "${POSTGRES_USER}"
|
|
create extension mysql_fdw;
|
|
grant all on foreign data wrapper mysql_fdw to ${POSTGRES_DB_USER};
|
|
EOF
|
|
|
|
if [ -z "${MYSQL_INIT_DB-}" ]; then
|
|
echo "Restore mysql dump..."
|
|
(
|
|
cat /opt/gazelle/mysql_schema.sql /opt/gazelle/mysql_data.sql
|
|
cat <<EOF
|
|
CREATE USER IF NOT EXISTS 'ro_$MYSQL_USER'@'%' IDENTIFIED BY 'ro_$MYSQL_PASSWORD';
|
|
GRANT SELECT ON performance_schema.table_io_waits_summary_by_index_usage TO '$MYSQL_USER'@'%';
|
|
GRANT SELECT ON sys.schema_redundant_indexes TO '$MYSQL_USER'@'%';
|
|
GRANT SELECT ON sys.schema_unused_indexes TO '$MYSQL_USER'@'%';
|
|
GRANT SELECT ON sys.x\$schema_flattened_keys TO '$MYSQL_USER'@'%';
|
|
GRANT SELECT ON performance_schema.table_io_waits_summary_by_index_usage TO 'ro_$MYSQL_USER'@'%';
|
|
GRANT SELECT ON sys.schema_redundant_indexes TO 'ro_$MYSQL_USER'@'%';
|
|
GRANT SELECT ON sys.schema_unused_indexes TO 'ro_$MYSQL_USER'@'%';
|
|
GRANT SELECT ON sys.x\$schema_flattened_keys TO 'ro_$MYSQL_USER'@'%';
|
|
CREATE FUNCTION IF NOT EXISTS bonus_accrual(Size bigint, Seedtime float, Seeders integer)
|
|
RETURNS float DETERMINISTIC NO SQL
|
|
RETURN Size / pow(1024, 3) * (0.0433 + (0.07 * ln(1 + Seedtime/24)) / pow(greatest(Seeders, 1), 0.35));
|
|
CREATE FUNCTION IF NOT EXISTS binomial_ci(p int, n int)
|
|
RETURNS float DETERMINISTIC
|
|
RETURN IF(n = 0,0.0,((p + 1.35336) / n - 1.6452 * SQRT((p * (n-p)) / n + 0.67668) / n) / (1 + 2.7067 / n));
|
|
EOF
|
|
) | mysql -u root -p"$MYSQL_ROOT_PASSWORD" || exit 1
|
|
fi
|
|
|
|
echo "Run Mysql migrations..."
|
|
if ! FKEY_MY_DATABASE=1 LOCK_MY_DATABASE=1 "${CI_PROJECT_DIR}/vendor/bin/phinx" migrate -e gazelle; then
|
|
echo "phinx encountered a fatal error in the Mysql migrations"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Run Postgresql migrations..."
|
|
if ! "${CI_PROJECT_DIR}/vendor/bin/phinx" migrate -c ./misc/phinx-pg.php; then
|
|
echo "phinx encountered a fatal error in the Postgresql migrations"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "${DUMP_MYSQL_SCHEMA}" = 1 ]; then
|
|
mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" -f --single-transaction --no-data --databases "$MYSQL_DATABASE"
|
|
fi
|
|
|
|
if [ ! -d /var/lib/gazelle/torrent ]; then
|
|
echo "Generate file storage directories..."
|
|
perl "${CI_PROJECT_DIR}/bin/generate-storage-dirs" /var/lib/gazelle/torrent 2 100
|
|
perl "${CI_PROJECT_DIR}/bin/generate-storage-dirs" /var/lib/gazelle/riplog 2 100
|
|
perl "${CI_PROJECT_DIR}/bin/generate-storage-dirs" /var/lib/gazelle/riploghtml 2 100
|
|
chown -R gazelle /var/lib/gazelle
|
|
fi
|
|
|
|
# configure nginx
|
|
sed -i "s|/var/www|${CI_PROJECT_DIR}|g" /etc/nginx/sites-available/gazelle.conf
|