@ -7,6 +7,7 @@ This repository gathers all the recipes (hence the name "Cookbook") to deploy Op
- [nginx](nginx/): starts Nginx, content is initialized / updated from a GIT repository
- [postgresql](postgresql/): starts a PostgreSQL server, handles automated major upgrades, periodic backup and initialization of the database from the last backup.
- [nextcloud](nextcloud/): starts a Nextcloud server with all its dependencies, handles automated upgrades.
until run curl -X GET -sSf -u "$${NEXTCLOUD_ADMIN_USER}:$${NEXTCLOUD_ADMIN_PASSWORD}""$${OVERWRITECLIURL}/status.php"&> /dev/null;do\
echo"Nextcloud is not ready yet. Retrying in 5 seconds...";\
sleep 5;\
done;\
echo"Nextcloud is ready!";\
echo"Uploading file...";\
run curl -X PUT -sSf -u "$${NEXTCLOUD_ADMIN_USER}:$${NEXTCLOUD_ADMIN_PASSWORD}" --data-binary @tests/witness.txt "$${OVERWRITECLIURL}/remote.php/webdav/witness.txt";\
echo"Verifying file upload...";\
run curl -X GET -sSf -u "$${NEXTCLOUD_ADMIN_USER}:$${NEXTCLOUD_ADMIN_PASSWORD}""$${OVERWRITECLIURL}/remote.php/webdav/witness.txt" -o /tmp/witness.txt;\
if run cmp -s tests/witness.txt /tmp/witness.txt ;then\
echo"Upgrading Nextcloud from $$ver to $$nextver...";\
sed -i "s/^NEXTCLOUD_MAJOR=.*/NEXTCLOUD_MAJOR=$$nextver/" /etc/quadlets/nextcloud/config.env;\
systemctl stop nextcloud.target;\
sleep 1;\
systemctl start nextcloud.target;\
echo"Waiting for Nextcloud to be ready...";\
until run curl -X GET -sSf -u "$${NEXTCLOUD_ADMIN_USER}:$${NEXTCLOUD_ADMIN_PASSWORD}""$${OVERWRITECLIURL}/status.php"&> /dev/null;do\
echo"Nextcloud is not ready yet. Retrying in 5 seconds...";\
sleep 5;\
done;\
echo"Nextcloud is ready after upgrade!";\
echo"Verifying file upload after upgrade...";\
run curl -X GET -sSf -u "$${NEXTCLOUD_ADMIN_USER}:$${NEXTCLOUD_ADMIN_PASSWORD}""$${OVERWRITECLIURL}/remote.php/webdav/witness.txt" -o /tmp/witness.txt;\
if run cmp -s tests/witness.txt /tmp/witness.txt ;then\
echo"File upload verified successfully after upgrade!";\
rm -f /tmp/witness.txt;\
else\
echo"File upload verification failed after upgrade!";\
exit 1;\
fi;\
# Assert Nextcloud version after upgrade from status.php \
ACTUAL_VERSION=$$(run curl -X GET -sSf -u "$${NEXTCLOUD_ADMIN_USER}:$${NEXTCLOUD_ADMIN_PASSWORD}""$${OVERWRITECLIURL}/status.php"| grep -oP '"version":"\K[^"]+');\
ExecStartPre=/bin/sh -c 'exec 2>/dev/null; for try in $(seq 0 12); do if ! /bin/true 5<> /dev/tcp/127.0.0.1/5432; then echo "Waiting for PostgreSQL to be available..."; sleep 5; else exit 0; fi; done; exit 1'
# This container is a job - run once to completion
Type=oneshot
# Wait for PostgreSQL to be ready
ExecStartPre=/bin/sh -c 'exec 2>/dev/null; for try in $(seq 0 12); do if ! /bin/true 5<> /dev/tcp/127.0.0.1/5432; then echo "Waiting for PostgreSQL to be available..."; sleep 5; else exit 0; fi; done; exit 1'
# Wait for Redis to be ready
ExecStartPre=/bin/sh -c 'exec 2>/dev/null; for try in $(seq 0 12); do if ! /bin/true 5<> /dev/tcp/127.0.0.1/6379; then echo "Waiting for Redis to be available..."; sleep 5; else exit 0; fi; done; exit 1'
# This container is a job - run once to completion
Type=oneshot
# Wait for PostgreSQL to be ready
ExecStartPre=/bin/sh -c 'exec 2>/dev/null; for try in $(seq 0 12); do if ! /bin/true 5<> /dev/tcp/127.0.0.1/5432; then echo "Waiting for PostgreSQL to be available..."; sleep 5; else exit 0; fi; done; exit 1'
# Wait for Redis to be ready
ExecStartPre=/bin/sh -c 'exec 2>/dev/null; for try in $(seq 0 12); do if ! /bin/true 5<> /dev/tcp/127.0.0.1/6379; then echo "Waiting for Redis to be available..."; sleep 5; else exit 0; fi; done; exit 1'
# This container is a job - run once to completion
Type=oneshot
# Wait for PostgreSQL to be ready
ExecStartPre=/bin/sh -c 'exec 2>/dev/null; for try in $(seq 0 12); do if ! /bin/true 5<> /dev/tcp/127.0.0.1/5432; then echo "Waiting for PostgreSQL to be available..."; sleep 5; else exit 0; fi; done; exit 1'
# Wait for Redis to be ready
ExecStartPre=/bin/sh -c 'exec 2>/dev/null; for try in $(seq 0 12); do if ! /bin/true 5<> /dev/tcp/127.0.0.1/6379; then echo "Waiting for Redis to be available..."; sleep 5; else exit 0; fi; done; exit 1'
# Integration tests for PostgreSQL quadlet: backup, restore + major version upgrade (14 to 18)
test:uninstallcleantest-set-pgmajorinstall
@echo "Running PostgreSQL integration tests...";\
set -Eeuo pipefail;\
sleep 2;\
echo"Creating a test database and a witness table...";\
podman exec postgresql-server su postgres -c "createdb test";\
podman exec postgresql-server su postgres -c "psql -U postgres -d test -c \"CREATE TABLE witness (id SERIAL PRIMARY KEY, version VARCHAR); INSERT INTO witness (version) SELECT version();\"";\
podman exec postgresql-server su postgres -c "psql -U postgres -d test -c \"SELECT * FROM witness;\"";\
podman exec postgresql-server createdb test;\
podman exec postgresql-server psql -U postgres -d test -c "CREATE TABLE witness (id SERIAL PRIMARY KEY, version VARCHAR); INSERT INTO witness (version) SELECT version();";\
podman exec postgresql-server psql -U postgres -d test -c "SELECT * FROM witness;";\