Skip to content

Commit be3a8f8

Browse files
committed
Replace Ansible with Shell script
* Remove Ansible and all Python packages * Reduce image size by 452 MB (689 MB => 237 MB uncompressed)
1 parent ae9214e commit be3a8f8

7 files changed

Lines changed: 125 additions & 258 deletions

File tree

Dockerfile

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
1+
FROM golang:alpine3.16 as builder
2+
3+
# envsubst from gettext can not replace env vars with default values
4+
# this package is not available for ARM32 and we have to build it from source code
5+
RUN go install -v github.com/a8m/envsubst/cmd/envsubst@v1.3.0
6+
17
FROM alpine:3.16
28

3-
LABEL maintainer "Marvin Steadfast <marvin@xsteadfastx.org>"
9+
COPY --from=builder /go/bin/envsubst /usr/bin/envsubst
410

511
ARG WALLABAG_VERSION=2.5.2
612

713
RUN set -ex \
8-
&& apk update \
9-
&& apk upgrade --available \
10-
&& apk add \
11-
ansible \
14+
&& apk add --no-cache \
1215
curl \
1316
libwebp \
14-
mariadb-client \
1517
nginx \
1618
pcre \
1719
php8 \
@@ -40,9 +42,8 @@ RUN set -ex \
4042
php8-xmlreader \
4143
php8-tidy \
4244
php8-intl \
43-
py3-mysqlclient \
44-
py3-psycopg2 \
45-
py-simplejson \
45+
mariadb-client \
46+
postgresql14-client \
4647
rabbitmq-c \
4748
s6 \
4849
tar \
@@ -59,13 +60,14 @@ RUN set -ex \
5960
COPY root /
6061

6162
RUN set -ex \
62-
&& mv /var/www/wallabag/app /tmp/app \
6363
&& curl -L -o /tmp/wallabag.tar.gz https://github.com/wallabag/wallabag/archive/$WALLABAG_VERSION.tar.gz \
6464
&& tar xvf /tmp/wallabag.tar.gz -C /tmp \
65+
&& mkdir /var/www/wallabag \
6566
&& mv /tmp/wallabag-*/* /var/www/wallabag/ \
6667
&& rm -rf /tmp/wallabag* \
67-
&& mv /tmp/app/config/parameters.yml /var/www/wallabag/app/config/parameters.yml \
68+
&& mv /etc/wallabag/* /var/www/wallabag/app/config/ \
6869
&& cd /var/www/wallabag \
70+
&& mkdir data/assets \
6971
&& SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist --no-progress \
7072
&& rm -rf /root/.composer/* /var/www/wallabag/var/cache/* /var/www/wallabag/var/logs/* /var/www/wallabag/var/sessions/* \
7173
&& chown -R nobody:nobody /var/www/wallabag

root/entrypoint.sh

Lines changed: 49 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,65 @@
11
#!/bin/sh
22

3+
COMMAND_ARG1="$1"
4+
COMMAND_ARG2="$2"
5+
6+
cd /var/www/wallabag || exit
7+
38
provisioner () {
4-
echo "Starting provisioner..."
5-
if ! out=`ansible-playbook -i /etc/ansible/hosts /etc/ansible/entrypoint.yml -c local "$@"`;then
6-
echo $out;
9+
SYMFONY__ENV__DATABASE_DRIVER=${SYMFONY__ENV__DATABASE_DRIVER:-pdo_sqlite}
10+
POPULATE_DATABASE=${POPULATE_DATABASE:-True}
11+
12+
envsubst < app/config/parameters.template.yml > app/config/parameters.yml
13+
14+
if [ "$SYMFONY__ENV__DATABASE_DRIVER" = "pdo_sqlite" ]; then
15+
if [ ! -f "/var/www/wallabag/data/db/wallabag.sqlite" ]; then
16+
su -c "php bin/console wallabag:install --env=prod -n" -s /bin/sh nobody
17+
fi
18+
fi
19+
20+
if [ "$POPULATE_DATABASE" = "True" ] && [ "$SYMFONY__ENV__DATABASE_DRIVER" = "pdo_mysql" ]; then
21+
timeout 60s /bin/sh -c "until echo 'Waiting for MariaDB ...' && mysql -h ${SYMFONY__ENV__DATABASE_HOST} --port ${SYMFONY__ENV__DATABASE_PORT} -uroot -p${MYSQL_ROOT_PASSWORD} -e 'show databases;' > /dev/null 2>&1 ; do sleep 1 ; done"
22+
mysql -h "${SYMFONY__ENV__DATABASE_HOST}" --port "${SYMFONY__ENV__DATABASE_PORT}" -uroot -p"${MYSQL_ROOT_PASSWORD}" \
23+
-e "CREATE DATABASE ${SYMFONY__ENV__DATABASE_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
24+
if [ "$SYMFONY__ENV__DATABASE_USER" != "root" ]; then
25+
mysql -h "${SYMFONY__ENV__DATABASE_HOST}" --port "${SYMFONY__ENV__DATABASE_PORT}" -uroot -p"${MYSQL_ROOT_PASSWORD}" \
26+
-e "CREATE USER '${SYMFONY__ENV__DATABASE_USER}'@'%' IDENTIFIED BY '${SYMFONY__ENV__DATABASE_PASSWORD}';"
27+
mysql -h "${SYMFONY__ENV__DATABASE_HOST}" --port "${SYMFONY__ENV__DATABASE_PORT}" -uroot -p"${MYSQL_ROOT_PASSWORD}" \
28+
-e "GRANT ALL PRIVILEGES ON ${SYMFONY__ENV__DATABASE_NAME}.* TO '${SYMFONY__ENV__DATABASE_USER}'@'%';"
29+
fi
30+
su -c "php bin/console wallabag:install --env=prod -n" -s /bin/sh nobody
31+
fi
32+
33+
if [ "$POPULATE_DATABASE" = "True" ] && [ "$SYMFONY__ENV__DATABASE_DRIVER" = "pdo_pgsql" ]; then
34+
export PGPASSWORD="${POSTGRES_PASSWORD}"
35+
timeout 60s /bin/sh -c "until echo 'Waiting for Postgres ...' && pg_isready -h ${SYMFONY__ENV__DATABASE_HOST} -p ${SYMFONY__ENV__DATABASE_PORT} -U ${POSTGRES_USER} > /dev/null 2>&1 ; do sleep 1 ; done"
36+
psql -q -h "${SYMFONY__ENV__DATABASE_HOST}" -p "${SYMFONY__ENV__DATABASE_PORT}" -U "${POSTGRES_USER}" \
37+
-c "CREATE DATABASE ${SYMFONY__ENV__DATABASE_NAME};"
38+
if [ "$SYMFONY__ENV__DATABASE_USER" != "postgres" ]; then
39+
psql -q -h "${SYMFONY__ENV__DATABASE_HOST}" -p "${SYMFONY__ENV__DATABASE_PORT}" -U "${POSTGRES_USER}" \
40+
-c "CREATE ROLE ${SYMFONY__ENV__DATABASE_USER} with PASSWORD '${SYMFONY__ENV__DATABASE_PASSWORD}' LOGIN;"
41+
fi
42+
su -c "php bin/console wallabag:install --env=prod -n" -s /bin/sh nobody
743
fi
8-
echo "Provisioner finished."
44+
45+
rm -f -r /var/www/wallabag/var/cache
46+
su -c "SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist" -s /bin/sh nobody
947
}
1048

11-
if [ "$1" = "wallabag" ];then
49+
if [ "$COMMAND_ARG1" = "wallabag" ]; then
50+
echo "Starting Wallabag..."
1251
provisioner
52+
echo "Wallabag is ready!"
1353
exec s6-svscan /etc/s6/
1454
fi
1555

16-
if [ "$1" = "import" ];then
17-
provisioner --skip-tags=firstrun
18-
cd /var/www/wallabag/
19-
exec su -c "bin/console wallabag:import:redis-worker --env=prod $2 -vv" -s /bin/sh nobody
56+
if [ "$COMMAND_ARG1" = "import" ]; then
57+
provisioner
58+
exec su -c "bin/console wallabag:import:redis-worker --env=prod $COMMAND_ARG2 -vv" -s /bin/sh nobody
2059
fi
2160

22-
if [ "$1" = "migrate" ];then
61+
if [ "$COMMAND_ARG1" = "migrate" ]; then
2362
provisioner
24-
cd /var/www/wallabag/
2563
exec su -c "bin/console doctrine:migrations:migrate --env=prod --no-interaction" -s /bin/sh nobody
2664
fi
2765

root/etc/ansible/entrypoint.yml

Lines changed: 0 additions & 171 deletions
This file was deleted.

root/etc/ansible/hosts

Lines changed: 0 additions & 2 deletions
This file was deleted.

root/etc/ansible/templates/parameters.yml.j2

Lines changed: 0 additions & 63 deletions
This file was deleted.

0 commit comments

Comments
 (0)