compose
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
FROM postgres:9.4-alpine
|
||||
|
||||
ENV DEFAULT_TIMEZONE UTC
|
||||
|
||||
# Install some packages to use WAL
|
||||
RUN echo "azure<5.0.0" > pip-constraints.txt
|
||||
RUN apk add --no-cache \
|
||||
build-base \
|
||||
curl \
|
||||
libc6-compat \
|
||||
libffi-dev \
|
||||
linux-headers \
|
||||
python-dev \
|
||||
py-pip \
|
||||
py-cryptography \
|
||||
pv \
|
||||
libressl-dev \
|
||||
&& pip install --upgrade pip \
|
||||
&& pip --no-cache-dir install -c pip-constraints.txt 'wal-e<1.0.0' envdir \
|
||||
&& rm -rf /var/cache/apk/* /tmp/* /var/tmp/*
|
||||
|
||||
# Add wale script
|
||||
COPY setup-wale.sh /docker-entrypoint-initdb.d/
|
||||
|
||||
#Healthcheck to make sure container is ready
|
||||
HEALTHCHECK CMD pg_isready -U $POSTGRES_USER -d $POSTGRES_DB || exit 1
|
||||
|
||||
# Add and configure entrypoint and command
|
||||
COPY entrypoint.sh /
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
CMD ["postgres"]
|
||||
|
||||
VOLUME ["/var/run/postgresql", "/usr/share/postgresql/", "/var/lib/postgresql/data", "/tmp", "/etc/wal-e.d/env"]
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
|
||||
# if wal-e backup is not enabled, use minimal wal-e logging to reduce disk space
|
||||
export WAL_LEVEL=${WAL_LEVEL:-minimal}
|
||||
export ARCHIVE_MODE=${ARCHIVE_MODE:-off}
|
||||
export ARCHIVE_TIMEOUT=${ARCHIVE_TIMEOUT:-60}
|
||||
|
||||
function update_conf () {
|
||||
wal=$1
|
||||
# PGDATA is defined in upstream postgres dockerfile
|
||||
config_file=$PGDATA/postgresql.conf
|
||||
|
||||
# Check if configuration file exists. If not, it probably means that database is not initialized yet
|
||||
if [ ! -f $config_file ]; then
|
||||
return
|
||||
fi
|
||||
# Reinitialize config
|
||||
sed -i "s/log_timezone =.*$//g" $PGDATA/postgresql.conf
|
||||
sed -i "s/timezone =.*$//g" $PGDATA/postgresql.conf
|
||||
sed -i "s/wal_level =.*$//g" $config_file
|
||||
sed -i "s/archive_mode =.*$//g" $config_file
|
||||
sed -i "s/archive_timeout =.*$//g" $config_file
|
||||
sed -i "s/archive_command =.*$//g" $config_file
|
||||
|
||||
# Configure wal-e
|
||||
if [ "$wal" = true ] ; then
|
||||
/docker-entrypoint-initdb.d/setup-wale.sh
|
||||
fi
|
||||
echo "log_timezone = $DEFAULT_TIMEZONE" >> $config_file
|
||||
echo "timezone = $DEFAULT_TIMEZONE" >> $config_file
|
||||
}
|
||||
|
||||
if [ "${1:0:1}" = '-' ]; then
|
||||
set -- postgres "$@"
|
||||
fi
|
||||
|
||||
if [ "$1" = 'postgres' ]; then
|
||||
# Check wal-e variables
|
||||
wal_enable=true
|
||||
VARS=(AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY WALE_S3_PREFIX AWS_REGION)
|
||||
for v in ${VARS[@]}; do
|
||||
if [ "${!v}" = "" ]; then
|
||||
echo "$v is required for Wal-E but not set. Skipping Wal-E setup."
|
||||
wal_enable=false
|
||||
fi
|
||||
done
|
||||
|
||||
# Setup wal-e env variables
|
||||
if [ "$wal_enable" = true ] ; then
|
||||
for v in ${VARS[@]}; do
|
||||
export $v="${!v}"
|
||||
done
|
||||
WAL_LEVEL=archive
|
||||
ARCHIVE_MODE=on
|
||||
fi
|
||||
|
||||
# Update postgresql configuration
|
||||
update_conf $wal_enable
|
||||
|
||||
# Run the postgresql entrypoint
|
||||
docker-entrypoint.sh postgres
|
||||
fi
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# wal-e specific configuration
|
||||
echo "wal_level = $WAL_LEVEL" >> $PGDATA/postgresql.conf
|
||||
echo "archive_mode = $ARCHIVE_MODE" >> $PGDATA/postgresql.conf
|
||||
echo "archive_command = '/usr/bin/wal-e wal-push %p'" >> $PGDATA/postgresql.conf
|
||||
echo "archive_timeout = $ARCHIVE_TIMEOUT" >> $PGDATA/postgresql.conf
|
||||
Reference in New Issue
Block a user