Compare commits
10 Commits
0421c8b8d9
...
7e8ac6bbd1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7e8ac6bbd1 | ||
|
|
3cca493648 | ||
|
|
54ab5919e2 | ||
|
|
3ac73e6d28 | ||
|
|
b2cfba373e | ||
|
|
9182e656bf | ||
|
|
16b974afd1 | ||
|
|
604b803f74 | ||
|
|
ab0944cbff | ||
|
|
cf008cd284 |
16
Dockerfile
16
Dockerfile
@@ -16,7 +16,7 @@ RUN export DEBIAN_FRONTEND=noninteractive; \
|
||||
cron \
|
||||
postgresql postgresql-contrib \
|
||||
&& curl -L \
|
||||
https://github.com/miniflux/miniflux/releases/download/2.0.19/miniflux_2.0.19_amd64.deb \
|
||||
https://github.com/miniflux/miniflux/releases/download/2.0.36/miniflux_2.0.36_amd64.deb \
|
||||
> /miniflux.deb \
|
||||
&& dpkg -i /miniflux.deb \
|
||||
&& mkdir -p /mnt/save
|
||||
@@ -39,22 +39,16 @@ ENV RUN_MIGRATIONS=0
|
||||
ENV CREATE_ADMIN=0
|
||||
|
||||
COPY --from=builder /pause/pauser /pauser
|
||||
COPY backup.sh /
|
||||
COPY restore.sh /
|
||||
COPY entrypoint.sh /
|
||||
|
||||
USER root
|
||||
### CRON BACKUPS
|
||||
RUN true \
|
||||
&& echo 'b=$(date +%Y%m%d%H%M%S); mkdir -p /mnt/save/$b; pg_dump $DATABASE_URL --clean > /mnt/save/$b/pg.dump || (rm -rf /mnt/save/$b; echo "backup failed; deleting $b"; exit 1); if du -sh /mnt/save/$b | grep -i "^[ ]*4.0K"; then rm -rf /mnt/save/$b; echo rm empty backup $b; fi' > /backup.sh \
|
||||
&& echo 'b=$(find /mnt/save -type f | sort | tail -n 1); if [ -n "$b" ]; then echo restoring $b; psql $DATABASE_URL < "$b"; fi && service postgresql start;' > /restore.sh \
|
||||
&& echo '0 4,8,12,16,20 * * * bash /backup.sh >> /var/log/cronj.log 2>&1' > /etc/cron.d/backups \
|
||||
&& echo '' >> /etc/cron.d/backups \
|
||||
&& chmod 0644 /etc/cron.d/backups \
|
||||
&& touch /var/log/cronj.log
|
||||
|
||||
ENTRYPOINT \
|
||||
service postgresql start \
|
||||
&& until psql $DATABASE_URL < /dev/null; do sleep 5; done \
|
||||
&& bash /restore.sh \
|
||||
&& miniflux -migrate \
|
||||
&& miniflux -create-admin \
|
||||
&& miniflux \
|
||||
& exec /pauser
|
||||
ENTRYPOINT bash /entrypoint.sh
|
||||
|
||||
16
backup.sh
Executable file
16
backup.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
b=$(date +%Y%m%d%H%M%S)
|
||||
mkdir -p /mnt/save/$b
|
||||
(
|
||||
set -e
|
||||
pg_dump $DATABASE_URL --clean > /mnt/save/$b/.pg.dump
|
||||
mv /mnt/save/$b/{.,""}pg.dump
|
||||
) \
|
||||
|| (
|
||||
rm -rf /mnt/save/$b
|
||||
echo "backup failed; deleting $b"
|
||||
exit 1
|
||||
)
|
||||
if du -sh /mnt/save/$b | grep -Ei "^[ ]*(4|2.).0K"; then
|
||||
rm -rf /mnt/save/$b
|
||||
echo rm empty backup $b
|
||||
fi
|
||||
38
entrypoint.sh
Executable file
38
entrypoint.sh
Executable file
@@ -0,0 +1,38 @@
|
||||
#! /bin/bash
|
||||
|
||||
LOG=/tmp/bel.log
|
||||
|
||||
main() {
|
||||
echo "" > $LOG
|
||||
|
||||
ensure start_postgres
|
||||
until psql $DATABASE_URL < /dev/null; do sleep 5; done
|
||||
|
||||
bash /restore.sh
|
||||
|
||||
miniflux -migrate
|
||||
miniflux -create-admin
|
||||
ensure miniflux
|
||||
|
||||
exec /pauser
|
||||
}
|
||||
|
||||
start_postgres() {
|
||||
service postgresql start
|
||||
psql $DATABASE_URL
|
||||
}
|
||||
|
||||
ensure() {
|
||||
_ensure "$@" &>> $LOG & disown
|
||||
}
|
||||
|
||||
_ensure() {
|
||||
while true; do
|
||||
echo $(date): ensuring "$@" >&2
|
||||
"$@"
|
||||
sleep 3
|
||||
done
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
||||
23
restore.sh
Executable file
23
restore.sh
Executable file
@@ -0,0 +1,23 @@
|
||||
all_backups=($(find /mnt/save -not -path '*/\.*' -type f | sort -r))
|
||||
for ((i=${#all_backups[@]}-1; i>50; i--)); do
|
||||
echo rm old backpu ${all_backups[i]} >&2
|
||||
rm -f ${all_backups[i]} || true
|
||||
done
|
||||
|
||||
for b in "${all_backups[@]}"; do
|
||||
if [ -n "$b" ]; then
|
||||
du -sh "$b"
|
||||
if ! du -sh "$b" | grep -Ei "^[ \t]*[0-9][0-9]*[0-9]?(.0)?[mg]"; then
|
||||
echo would rm empty backup $b >&2
|
||||
set -x
|
||||
mv "$b" "${b%/*}/.${b##*/}"
|
||||
set +x
|
||||
continue
|
||||
fi
|
||||
echo restoring $b >&2
|
||||
if psql $DATABASE_URL < "$b"; then
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
service postgresql start
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user