Integrate feedback from tianon (#10)

This commit is contained in:
Alexis Saettler 2020-05-12 21:06:40 +02:00 committed by GitHub
parent 870d1c2893
commit 7989be371b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
28 changed files with 133 additions and 267 deletions

View File

@ -26,7 +26,6 @@ services:
env_file: .env env_file: .env
volumes: volumes:
- data:/var/www/html/storage - data:/var/www/html/storage
- www:/var/www/html
restart: always restart: always
depends_on: depends_on:
- db - db
@ -53,7 +52,6 @@ services:
restart: always restart: always
volumes: volumes:
- data:/var/www/html/storage - data:/var/www/html/storage
- www:/var/www/html:ro
command: cron.sh command: cron.sh
depends_on: depends_on:
- db - db
@ -65,7 +63,6 @@ services:
restart: always restart: always
volumes: volumes:
- data:/var/www/html/storage - data:/var/www/html/storage
- www:/var/www/html:ro
command: queue.sh command: queue.sh
depends_on: depends_on:
- db - db
@ -78,7 +75,6 @@ services:
- VIRTUAL_HOST=monica.local - VIRTUAL_HOST=monica.local
volumes: volumes:
- data:/var/www/html/storage:ro - data:/var/www/html/storage:ro
- www:/var/www/html:ro
depends_on: depends_on:
- app - app
networks: networks:
@ -115,7 +111,6 @@ services:
volumes: volumes:
data: data:
www:
db: db:
certs: certs:

View File

@ -1,3 +1,9 @@
FROM monica:fpm AS monica
FROM nginx:alpine FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf COPY nginx.conf /etc/nginx/nginx.conf
# Copy content of monica image
COPY --from=monica /var/www/html /var/www/html
RUN ln -sf /var/www/html/storage/app/public /var/www/html/public/storage

View File

@ -25,7 +25,6 @@ services:
env_file: .env env_file: .env
volumes: volumes:
- data:/var/www/html/storage - data:/var/www/html/storage
- www:/var/www/html
restart: always restart: always
depends_on: depends_on:
- db - db
@ -52,7 +51,6 @@ services:
restart: always restart: always
volumes: volumes:
- data:/var/www/html/storage - data:/var/www/html/storage
- www:/var/www/html:ro
command: cron.sh command: cron.sh
depends_on: depends_on:
- db - db
@ -64,7 +62,6 @@ services:
restart: always restart: always
volumes: volumes:
- data:/var/www/html/storage - data:/var/www/html/storage
- www:/var/www/html:ro
command: queue.sh command: queue.sh
depends_on: depends_on:
- db - db
@ -79,7 +76,6 @@ services:
- LETSENCRYPT_EMAIL= - LETSENCRYPT_EMAIL=
volumes: volumes:
- data:/var/www/html/storage:ro - data:/var/www/html/storage:ro
- www:/var/www/html:ro
depends_on: depends_on:
- app - app
networks: networks:
@ -117,7 +113,6 @@ services:
volumes: volumes:
data: data:
www:
mysql: mysql:
certs: certs:
vhost.d: vhost.d:

View File

@ -1,3 +1,9 @@
FROM monica:fpm AS monica
FROM nginx:alpine FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf COPY nginx.conf /etc/nginx/nginx.conf
# Copy content of monica image
COPY --from=monica /var/www/html /var/www/html
RUN ln -sf /var/www/html/storage/app/public /var/www/html/public/storage

View File

@ -10,4 +10,4 @@ RUN set -ex; \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
COPY supervisord.conf /etc/supervisord.conf COPY supervisord.conf /etc/supervisord.conf
CMD ["supervisord", "-c /etc/supervisord.conf"] CMD ["supervisord", "-c", "/etc/supervisord.conf"]

View File

@ -10,7 +10,6 @@ services:
- 80:80 - 80:80
volumes: volumes:
- data:/var/www/html/storage - data:/var/www/html/storage
- www:/var/www/html
restart: always restart: always
db: db:
@ -26,5 +25,4 @@ services:
volumes: volumes:
data: data:
www:
mysql: mysql:

View File

@ -8,4 +8,4 @@ RUN set -ex; \
; ;
COPY supervisord.conf /etc/supervisord.conf COPY supervisord.conf /etc/supervisord.conf
CMD ["supervisord", "-c /etc/supervisord.conf"] CMD ["supervisord", "-c", "/etc/supervisord.conf"]

View File

@ -8,17 +8,15 @@ services:
env_file: .env env_file: .env
volumes: volumes:
- data:/var/www/html/storage - data:/var/www/html/storage
- www:/var/www/html
restart: always restart: always
web: web:
build: ./web build: ./web
restart: always restart: always
ports: ports:
- 80:80 - 8880:80
volumes: volumes:
- data:/var/www/html/storage:ro - data:/var/www/html/storage:ro
- www:/var/www/html:ro
depends_on: depends_on:
- app - app
@ -35,5 +33,4 @@ services:
volumes: volumes:
data: data:
www:
mysql: mysql:

View File

@ -1,3 +1,9 @@
FROM monica:fpm-alpine AS monica
FROM nginx:alpine FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf COPY nginx.conf /etc/nginx/nginx.conf
# Copy content of monica image
COPY --from=monica /var/www/html /var/www/html
RUN ln -sf /var/www/html/storage/app/public /var/www/html/public/storage

View File

@ -10,4 +10,4 @@ RUN set -ex; \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
COPY supervisord.conf /etc/supervisord.conf COPY supervisord.conf /etc/supervisord.conf
CMD ["supervisord", "-c /etc/supervisord.conf"] CMD ["supervisord", "-c", "/etc/supervisord.conf"]

View File

@ -8,7 +8,6 @@ services:
env_file: .env env_file: .env
volumes: volumes:
- data:/var/www/html/storage - data:/var/www/html/storage
- www:/var/www/html
restart: always restart: always
web: web:
@ -18,7 +17,6 @@ services:
- 80:80 - 80:80
volumes: volumes:
- data:/var/www/html/storage:ro - data:/var/www/html/storage:ro
- www:/var/www/html:ro
depends_on: depends_on:
- app - app
@ -35,5 +33,4 @@ services:
volumes: volumes:
data: data:
www:
mysql: mysql:

View File

@ -1,3 +1,9 @@
FROM monica:fpm AS monica
FROM nginx:alpine FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf COPY nginx.conf /etc/nginx/nginx.conf
# Copy content of monica image
COPY --from=monica /var/www/html /var/www/html
RUN ln -sf /var/www/html/storage/app/public /var/www/html/public/storage

View File

@ -9,9 +9,7 @@ RUN set -ex; \
apk add --no-cache \ apk add --no-cache \
bash \ bash \
coreutils \ coreutils \
rsync \ rsync
; \
rm -rf /var/cache/apk/*
# Install required PHP extensions # Install required PHP extensions
RUN set -ex; \ RUN set -ex; \
@ -71,9 +69,8 @@ RUN set -ex; \
| sort -u \ | sort -u \
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
)"; \ )"; \
apk add --virtual .monica-phpext-rundeps $runDeps; \ apk add --no-network --virtual .monica-phpext-rundeps $runDeps; \
apk del .build-deps; \ apk del --no-network .build-deps
rm -rf /var/cache/apk/*
# Set crontab for schedules # Set crontab for schedules
RUN set -ex; \ RUN set -ex; \
@ -86,14 +83,16 @@ ENV PHP_OPCACHE_VALIDATE_TIMESTAMPS="0" \
PHP_OPCACHE_MAX_ACCELERATED_FILES="20000" \ PHP_OPCACHE_MAX_ACCELERATED_FILES="20000" \
PHP_OPCACHE_MEMORY_CONSUMPTION="192" \ PHP_OPCACHE_MEMORY_CONSUMPTION="192" \
PHP_OPCACHE_MAX_WASTED_PERCENTAGE="10" PHP_OPCACHE_MAX_WASTED_PERCENTAGE="10"
RUN { \ RUN set -ex; \
\
{ \
echo '[opcache]'; \ echo '[opcache]'; \
echo 'opcache.enable=1'; \ echo 'opcache.enable=1'; \
echo 'opcache.revalidate_freq=0'; \ echo 'opcache.revalidate_freq=0'; \
echo "opcache.validate_timestamps=${PHP_OPCACHE_VALIDATE_TIMESTAMPS}"; \ echo 'opcache.validate_timestamps=${PHP_OPCACHE_VALIDATE_TIMESTAMPS}'; \
echo "opcache.max_accelerated_files=${PHP_OPCACHE_MAX_ACCELERATED_FILES}"; \ echo 'opcache.max_accelerated_files=${PHP_OPCACHE_MAX_ACCELERATED_FILES}'; \
echo "opcache.memory_consumption=${PHP_OPCACHE_MEMORY_CONSUMPTION}"; \ echo 'opcache.memory_consumption=${PHP_OPCACHE_MEMORY_CONSUMPTION}'; \
echo "opcache.max_wasted_percentage=${PHP_OPCACHE_MAX_WASTED_PERCENTAGE}"; \ echo 'opcache.max_wasted_percentage=${PHP_OPCACHE_MAX_WASTED_PERCENTAGE}'; \
echo 'opcache.interned_strings_buffer=16'; \ echo 'opcache.interned_strings_buffer=16'; \
echo 'opcache.fast_shutdown=1'; \ echo 'opcache.fast_shutdown=1'; \
} > $PHP_INI_DIR/conf.d/opcache-recommended.ini; \ } > $PHP_INI_DIR/conf.d/opcache-recommended.ini; \
@ -102,21 +101,12 @@ RUN { \
\ \
echo 'memory_limit=512M' > $PHP_INI_DIR/conf.d/memory-limit.ini echo 'memory_limit=512M' > $PHP_INI_DIR/conf.d/memory-limit.ini
# Sentry
RUN if [ $(uname -m) = "x86_64" ]; then \
PLATFORM=$(uname -s); \
if [ "$PLATFORM" = "Linux" -o "$PLATFORM" = "Windows" -o "$PLATFORM" = "Darwin" ]; then \
mkdir -p /root/.local/bin; \
curl -sL https://sentry.io/get-cli/ | INSTALL_DIR=/root/.local/bin bash; \
fi \
fi
VOLUME /var/www/html WORKDIR /var/www/html
# Define Monica version and expected SHA512 signature # Define Monica version and expected SHA512 signature
ENV MONICA_VERSION %%VERSION%% ENV MONICA_VERSION %%VERSION%%
ENV MONICA_SHA512 %%SHA512%% ENV MONICA_SHA512 %%SHA512%%
ENV MONICA_SRC /usr/src/monica
RUN set -ex; \ RUN set -ex; \
apk add --no-cache --virtual .fetch-deps \ apk add --no-cache --virtual .fetch-deps \
@ -124,20 +114,16 @@ RUN set -ex; \
; \ ; \
\ \
curl -fsSL -o monica.tar.bz2 "https://github.com/monicahq/monica/releases/download/${MONICA_VERSION}/monica-${MONICA_VERSION}.tar.bz2"; \ curl -fsSL -o monica.tar.bz2 "https://github.com/monicahq/monica/releases/download/${MONICA_VERSION}/monica-${MONICA_VERSION}.tar.bz2"; \
echo "$MONICA_SHA512 *monica.tar.bz2" | sha512sum -c -; \ echo "$MONICA_SHA512 monica.tar.bz2" | sha512sum -c -; \
\ \
mkdir $MONICA_SRC; \ tar -xf monica.tar.bz2 -C /var/www/html --strip-components=1; \
tar -xf monica.tar.bz2 -C $MONICA_SRC --strip-components=1; \
rm monica.tar.bz2; \ rm monica.tar.bz2; \
\ \
cp $MONICA_SRC/.env.example $MONICA_SRC/.env; \ cp /var/www/html/.env.example /var/www/html/.env; \
chown -R www-data:www-data $MONICA_SRC; \ chown -R www-data:www-data /var/www/html; \
\ \
apk del .fetch-deps; \ apk del .fetch-deps
rm -rf /var/cache/apk/*
COPY upgrade.exclude \
/usr/local/share/
COPY entrypoint.sh \ COPY entrypoint.sh \
queue.sh \ queue.sh \
cron.sh \ cron.sh \

View File

@ -7,7 +7,6 @@ FROM php:%%PHP_VERSION%%-%%VARIANT%%
RUN set -ex; \ RUN set -ex; \
\ \
apt-get update; \ apt-get update; \
apt-get -y autoremove; \
apt-get install -y --no-install-recommends \ apt-get install -y --no-install-recommends \
rsync \ rsync \
bash \ bash \
@ -95,14 +94,16 @@ ENV PHP_OPCACHE_VALIDATE_TIMESTAMPS="0" \
PHP_OPCACHE_MAX_ACCELERATED_FILES="20000" \ PHP_OPCACHE_MAX_ACCELERATED_FILES="20000" \
PHP_OPCACHE_MEMORY_CONSUMPTION="192" \ PHP_OPCACHE_MEMORY_CONSUMPTION="192" \
PHP_OPCACHE_MAX_WASTED_PERCENTAGE="10" PHP_OPCACHE_MAX_WASTED_PERCENTAGE="10"
RUN { \ RUN set -ex; \
\
{ \
echo '[opcache]'; \ echo '[opcache]'; \
echo 'opcache.enable=1'; \ echo 'opcache.enable=1'; \
echo 'opcache.revalidate_freq=0'; \ echo 'opcache.revalidate_freq=0'; \
echo "opcache.validate_timestamps=${PHP_OPCACHE_VALIDATE_TIMESTAMPS}"; \ echo 'opcache.validate_timestamps=${PHP_OPCACHE_VALIDATE_TIMESTAMPS}'; \
echo "opcache.max_accelerated_files=${PHP_OPCACHE_MAX_ACCELERATED_FILES}"; \ echo 'opcache.max_accelerated_files=${PHP_OPCACHE_MAX_ACCELERATED_FILES}'; \
echo "opcache.memory_consumption=${PHP_OPCACHE_MEMORY_CONSUMPTION}"; \ echo 'opcache.memory_consumption=${PHP_OPCACHE_MEMORY_CONSUMPTION}'; \
echo "opcache.max_wasted_percentage=${PHP_OPCACHE_MAX_WASTED_PERCENTAGE}"; \ echo 'opcache.max_wasted_percentage=${PHP_OPCACHE_MAX_WASTED_PERCENTAGE}'; \
echo 'opcache.interned_strings_buffer=16'; \ echo 'opcache.interned_strings_buffer=16'; \
echo 'opcache.fast_shutdown=1'; \ echo 'opcache.fast_shutdown=1'; \
} > $PHP_INI_DIR/conf.d/opcache-recommended.ini; \ } > $PHP_INI_DIR/conf.d/opcache-recommended.ini; \
@ -111,37 +112,26 @@ RUN { \
\ \
echo 'memory_limit=512M' > $PHP_INI_DIR/conf.d/memory-limit.ini echo 'memory_limit=512M' > $PHP_INI_DIR/conf.d/memory-limit.ini
# Sentry
RUN if [ $(uname -m) = "x86_64" ]; then \
PLATFORM=$(uname -s); \
if [ "$PLATFORM" = "Linux" -o "$PLATFORM" = "Windows" -o "$PLATFORM" = "Darwin" ]; then \
mkdir -p /root/.local/bin; \
curl -sL https://sentry.io/get-cli/ | INSTALL_DIR=/root/.local/bin bash; \
fi \
fi
VOLUME /var/www/html WORKDIR /var/www/html
# Define Monica version and expected SHA512 signature # Define Monica version and expected SHA512 signature
ENV MONICA_VERSION %%VERSION%% ENV MONICA_VERSION %%VERSION%%
ENV MONICA_SHA512 %%SHA512%% ENV MONICA_SHA512 %%SHA512%%
ENV MONICA_SRC /usr/src/monica
%%APACHE_DOCUMENT%% %%APACHE_DOCUMENT%%
RUN set -eu; \ RUN set -ex; \
curl -fsSL -o monica.tar.bz2 "https://github.com/monicahq/monica/releases/download/${MONICA_VERSION}/monica-${MONICA_VERSION}.tar.bz2"; \
echo "$MONICA_SHA512 *monica.tar.bz2" | sha512sum -c -; \
\ \
mkdir $MONICA_SRC; \ curl -fsSL -o monica.tar.bz2 "https://github.com/monicahq/monica/releases/download/${MONICA_VERSION}/monica-${MONICA_VERSION}.tar.bz2"; \
tar -xf monica.tar.bz2 -C $MONICA_SRC --strip-components=1; \ echo "$MONICA_SHA512 monica.tar.bz2" | sha512sum -c -; \
\
tar -xf monica.tar.bz2 -C /var/www/html --strip-components=1; \
rm monica.tar.bz2; \ rm monica.tar.bz2; \
\ \
cp $MONICA_SRC/.env.example $MONICA_SRC/.env; \ cp /var/www/html/.env.example /var/www/html/.env; \
chown -R www-data:www-data $MONICA_SRC chown -R www-data:www-data /var/www/html
COPY upgrade.exclude \
/usr/local/share/
COPY entrypoint.sh \ COPY entrypoint.sh \
queue.sh \ queue.sh \
cron.sh \ cron.sh \

View File

@ -142,10 +142,13 @@ When using FPM image, you will need another container with a webserver to proxy
The webserver will need an access to all static files from Monica container, the volumes `html` will deal with it. The webserver will need an access to all static files from Monica container, the volumes `html` will deal with it.
1. Download `nginx.conf` file. An example can be found on the [`example section`](/.examples/nginx-proxy/web/nginx.conf) 1. Download `nginx.conf` and `Dockerfile` file for nginx image. An example can be found on the [`example section`](/.examples/nginx-proxy/web/)
```sh ```sh
curl -sSL https://raw.githubusercontent.com/monicahq/docker/master/.examples/nginx-proxy/web/nginx.conf -o nginx.conf mkdir web
curl -sSL https://raw.githubusercontent.com/monicahq/docker/master/.examples/nginx-proxy/web/nginx.conf -o web/nginx.conf
curl -sSL https://raw.githubusercontent.com/monicahq/docker/master/.examples/nginx-proxy/web/Dockerfile -o web/Dockerfile
``` ```
The `web` container image should be pre-build before each deploy with: `docker-compose build`
2. Create a `docker-compose.yml` file 2. Create a `docker-compose.yml` file
@ -161,19 +164,16 @@ services:
- APP_KEY= - APP_KEY=
- DB_HOST=db - DB_HOST=db
volumes: volumes:
- html:/var/www/html
- data:/var/www/html/storage - data:/var/www/html/storage
restart: always restart: always
web: web:
image: nginx build: ./web
ports: ports:
- 8080:80 - 8080:80
depends_on: depends_on:
- app - app
volumes: volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- html:/var/www/html:ro
- data:/var/www/html/storage:ro - data:/var/www/html/storage:ro
restart: always restart: always
@ -191,8 +191,6 @@ services:
volumes: volumes:
data: data:
name: data name: data
html:
name: html
mysql: mysql:
name: mysql name: mysql
``` ```

View File

@ -1,8 +1,7 @@
FROM php:7.3-apache FROM php:7.3-apache
# opencontainers annotations https://github.com/opencontainers/image-spec/blob/master/annotations.md # opencontainers annotations https://github.com/opencontainers/image-spec/blob/master/annotations.md
LABEL maintainer="Alexis Saettler <alexis@saettler.org> (@asbiin)" \ LABEL org.opencontainers.image.authors="Alexis Saettler <alexis@saettler.org>" \
org.opencontainers.image.authors="Alexis Saettler <alexis@saettler.org>" \
org.opencontainers.image.title="MonicaHQ, the Personal Relationship Manager" \ org.opencontainers.image.title="MonicaHQ, the Personal Relationship Manager" \
org.opencontainers.image.description="This is MonicaHQ, your personal memory! MonicaHQ is like a CRM but for the friends, family, and acquaintances around you." \ org.opencontainers.image.description="This is MonicaHQ, your personal memory! MonicaHQ is like a CRM but for the friends, family, and acquaintances around you." \
org.opencontainers.image.url="https://monicahq.com" \ org.opencontainers.image.url="https://monicahq.com" \
@ -15,7 +14,6 @@ LABEL maintainer="Alexis Saettler <alexis@saettler.org> (@asbiin)" \
RUN set -ex; \ RUN set -ex; \
\ \
apt-get update; \ apt-get update; \
apt-get -y autoremove; \
apt-get install -y --no-install-recommends \ apt-get install -y --no-install-recommends \
rsync \ rsync \
bash \ bash \
@ -103,14 +101,16 @@ ENV PHP_OPCACHE_VALIDATE_TIMESTAMPS="0" \
PHP_OPCACHE_MAX_ACCELERATED_FILES="20000" \ PHP_OPCACHE_MAX_ACCELERATED_FILES="20000" \
PHP_OPCACHE_MEMORY_CONSUMPTION="192" \ PHP_OPCACHE_MEMORY_CONSUMPTION="192" \
PHP_OPCACHE_MAX_WASTED_PERCENTAGE="10" PHP_OPCACHE_MAX_WASTED_PERCENTAGE="10"
RUN { \ RUN set -ex; \
\
{ \
echo '[opcache]'; \ echo '[opcache]'; \
echo 'opcache.enable=1'; \ echo 'opcache.enable=1'; \
echo 'opcache.revalidate_freq=0'; \ echo 'opcache.revalidate_freq=0'; \
echo "opcache.validate_timestamps=${PHP_OPCACHE_VALIDATE_TIMESTAMPS}"; \ echo 'opcache.validate_timestamps=${PHP_OPCACHE_VALIDATE_TIMESTAMPS}'; \
echo "opcache.max_accelerated_files=${PHP_OPCACHE_MAX_ACCELERATED_FILES}"; \ echo 'opcache.max_accelerated_files=${PHP_OPCACHE_MAX_ACCELERATED_FILES}'; \
echo "opcache.memory_consumption=${PHP_OPCACHE_MEMORY_CONSUMPTION}"; \ echo 'opcache.memory_consumption=${PHP_OPCACHE_MEMORY_CONSUMPTION}'; \
echo "opcache.max_wasted_percentage=${PHP_OPCACHE_MAX_WASTED_PERCENTAGE}"; \ echo 'opcache.max_wasted_percentage=${PHP_OPCACHE_MAX_WASTED_PERCENTAGE}'; \
echo 'opcache.interned_strings_buffer=16'; \ echo 'opcache.interned_strings_buffer=16'; \
echo 'opcache.fast_shutdown=1'; \ echo 'opcache.fast_shutdown=1'; \
} > $PHP_INI_DIR/conf.d/opcache-recommended.ini; \ } > $PHP_INI_DIR/conf.d/opcache-recommended.ini; \
@ -119,39 +119,28 @@ RUN { \
\ \
echo 'memory_limit=512M' > $PHP_INI_DIR/conf.d/memory-limit.ini echo 'memory_limit=512M' > $PHP_INI_DIR/conf.d/memory-limit.ini
# Sentry
RUN if [ $(uname -m) = "x86_64" ]; then \
PLATFORM=$(uname -s); \
if [ "$PLATFORM" = "Linux" -o "$PLATFORM" = "Windows" -o "$PLATFORM" = "Darwin" ]; then \
mkdir -p /root/.local/bin; \
curl -sL https://sentry.io/get-cli/ | INSTALL_DIR=/root/.local/bin bash; \
fi \
fi
VOLUME /var/www/html WORKDIR /var/www/html
# Define Monica version and expected SHA512 signature # Define Monica version and expected SHA512 signature
ENV MONICA_VERSION v2.17.0 ENV MONICA_VERSION v2.17.0
ENV MONICA_SHA512 9e208f3aee15eb8ffcd33aa834fc2a4c07ef3396234132d76e2563e0c17c596e5f505aa6527625b13be1f564f8583c4bbd2a54c44d26f8e9c8418d9636c8720b ENV MONICA_SHA512 9e208f3aee15eb8ffcd33aa834fc2a4c07ef3396234132d76e2563e0c17c596e5f505aa6527625b13be1f564f8583c4bbd2a54c44d26f8e9c8418d9636c8720b
ENV MONICA_SRC /usr/src/monica
ENV APACHE_DOCUMENT_ROOT /var/www/html/public ENV APACHE_DOCUMENT_ROOT /var/www/html/public
RUN set -eu; sed -ri -e "s!/var/www/html!${APACHE_DOCUMENT_ROOT}!g" /etc/apache2/sites-available/*.conf; \ RUN set -eu; sed -ri -e "s!/var/www/html!${APACHE_DOCUMENT_ROOT}!g" /etc/apache2/sites-available/*.conf; \
sed -ri -e "s!/var/www/!${APACHE_DOCUMENT_ROOT}!g" /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf sed -ri -e "s!/var/www/!${APACHE_DOCUMENT_ROOT}!g" /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
RUN set -eu; \ RUN set -ex; \
curl -fsSL -o monica.tar.bz2 "https://github.com/monicahq/monica/releases/download/${MONICA_VERSION}/monica-${MONICA_VERSION}.tar.bz2"; \
echo "$MONICA_SHA512 *monica.tar.bz2" | sha512sum -c -; \
\ \
mkdir $MONICA_SRC; \ curl -fsSL -o monica.tar.bz2 "https://github.com/monicahq/monica/releases/download/${MONICA_VERSION}/monica-${MONICA_VERSION}.tar.bz2"; \
tar -xf monica.tar.bz2 -C $MONICA_SRC --strip-components=1; \ echo "$MONICA_SHA512 monica.tar.bz2" | sha512sum -c -; \
\
tar -xf monica.tar.bz2 -C /var/www/html --strip-components=1; \
rm monica.tar.bz2; \ rm monica.tar.bz2; \
\ \
cp $MONICA_SRC/.env.example $MONICA_SRC/.env; \ cp /var/www/html/.env.example /var/www/html/.env; \
chown -R www-data:www-data $MONICA_SRC chown -R www-data:www-data /var/www/html
COPY upgrade.exclude \
/usr/local/share/
COPY entrypoint.sh \ COPY entrypoint.sh \
queue.sh \ queue.sh \
cron.sh \ cron.sh \

View File

@ -1,9 +1,6 @@
#!/bin/bash #!/bin/bash
# return true if specified directory is empty set -Eeuo pipefail
directory_empty() {
[ -z "$(ls -A "$1/")" ]
}
# wait for the database to start # wait for the database to start
waitfordb() { waitfordb() {
@ -31,26 +28,9 @@ waitfordb() {
if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then
MONICASRC=/usr/src/monica
MONICADIR=/var/www/html MONICADIR=/var/www/html
ARTISAN="php ${MONICADIR}/artisan" ARTISAN="php ${MONICADIR}/artisan"
# Update application sources
echo "Syncing sources..."
if [ "$(id -u)" = 0 ]; then
rsync_options="-rlDog --chown www-data:www-data"
else
rsync_options="-rlD"
fi
rsync $rsync_options --delete --exclude-from=/usr/local/share/upgrade.exclude $MONICASRC/ $MONICADIR/
for dir in storage; do
if [ ! -d "$MONICADIR/$dir" ] || directory_empty "$MONICADIR/$dir"; then
rsync $rsync_options --include "/$dir/" --exclude '/*' $MONICASRC/ $MONICADIR/
fi
done
echo "...done!"
# Ensure storage directories are present # Ensure storage directories are present
STORAGE=${MONICADIR}/storage STORAGE=${MONICADIR}/storage
mkdir -p ${STORAGE}/logs mkdir -p ${STORAGE}/logs
@ -86,4 +66,4 @@ if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then
fi fi
exec $@ exec "$@"

View File

@ -1 +0,0 @@
/storage

10
build.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/bash
set -ex
for variant in apache fpm fpm-alpine; do
pushd $variant
docker build --no-cache -t monica:$variant .
popd
done
docker images

View File

@ -1,9 +1,6 @@
#!/bin/bash #!/bin/bash
# return true if specified directory is empty set -Eeuo pipefail
directory_empty() {
[ -z "$(ls -A "$1/")" ]
}
# wait for the database to start # wait for the database to start
waitfordb() { waitfordb() {
@ -31,26 +28,9 @@ waitfordb() {
if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then
MONICASRC=/usr/src/monica
MONICADIR=/var/www/html MONICADIR=/var/www/html
ARTISAN="php ${MONICADIR}/artisan" ARTISAN="php ${MONICADIR}/artisan"
# Update application sources
echo "Syncing sources..."
if [ "$(id -u)" = 0 ]; then
rsync_options="-rlDog --chown www-data:www-data"
else
rsync_options="-rlD"
fi
rsync $rsync_options --delete --exclude-from=/usr/local/share/upgrade.exclude $MONICASRC/ $MONICADIR/
for dir in storage; do
if [ ! -d "$MONICADIR/$dir" ] || directory_empty "$MONICADIR/$dir"; then
rsync $rsync_options --include "/$dir/" --exclude '/*' $MONICASRC/ $MONICADIR/
fi
done
echo "...done!"
# Ensure storage directories are present # Ensure storage directories are present
STORAGE=${MONICADIR}/storage STORAGE=${MONICADIR}/storage
mkdir -p ${STORAGE}/logs mkdir -p ${STORAGE}/logs
@ -86,4 +66,4 @@ if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then
fi fi
exec $@ exec "$@"

View File

@ -1,8 +1,7 @@
FROM php:7.3-fpm-alpine FROM php:7.3-fpm-alpine
# opencontainers annotations https://github.com/opencontainers/image-spec/blob/master/annotations.md # opencontainers annotations https://github.com/opencontainers/image-spec/blob/master/annotations.md
LABEL maintainer="Alexis Saettler <alexis@saettler.org> (@asbiin)" \ LABEL org.opencontainers.image.authors="Alexis Saettler <alexis@saettler.org>" \
org.opencontainers.image.authors="Alexis Saettler <alexis@saettler.org>" \
org.opencontainers.image.title="MonicaHQ, the Personal Relationship Manager" \ org.opencontainers.image.title="MonicaHQ, the Personal Relationship Manager" \
org.opencontainers.image.description="This is MonicaHQ, your personal memory! MonicaHQ is like a CRM but for the friends, family, and acquaintances around you." \ org.opencontainers.image.description="This is MonicaHQ, your personal memory! MonicaHQ is like a CRM but for the friends, family, and acquaintances around you." \
org.opencontainers.image.url="https://monicahq.com" \ org.opencontainers.image.url="https://monicahq.com" \
@ -17,9 +16,7 @@ RUN set -ex; \
apk add --no-cache \ apk add --no-cache \
bash \ bash \
coreutils \ coreutils \
rsync \ rsync
; \
rm -rf /var/cache/apk/*
# Install required PHP extensions # Install required PHP extensions
RUN set -ex; \ RUN set -ex; \
@ -79,9 +76,8 @@ RUN set -ex; \
| sort -u \ | sort -u \
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
)"; \ )"; \
apk add --virtual .monica-phpext-rundeps $runDeps; \ apk add --no-network --virtual .monica-phpext-rundeps $runDeps; \
apk del .build-deps; \ apk del --no-network .build-deps
rm -rf /var/cache/apk/*
# Set crontab for schedules # Set crontab for schedules
RUN set -ex; \ RUN set -ex; \
@ -94,14 +90,16 @@ ENV PHP_OPCACHE_VALIDATE_TIMESTAMPS="0" \
PHP_OPCACHE_MAX_ACCELERATED_FILES="20000" \ PHP_OPCACHE_MAX_ACCELERATED_FILES="20000" \
PHP_OPCACHE_MEMORY_CONSUMPTION="192" \ PHP_OPCACHE_MEMORY_CONSUMPTION="192" \
PHP_OPCACHE_MAX_WASTED_PERCENTAGE="10" PHP_OPCACHE_MAX_WASTED_PERCENTAGE="10"
RUN { \ RUN set -ex; \
\
{ \
echo '[opcache]'; \ echo '[opcache]'; \
echo 'opcache.enable=1'; \ echo 'opcache.enable=1'; \
echo 'opcache.revalidate_freq=0'; \ echo 'opcache.revalidate_freq=0'; \
echo "opcache.validate_timestamps=${PHP_OPCACHE_VALIDATE_TIMESTAMPS}"; \ echo 'opcache.validate_timestamps=${PHP_OPCACHE_VALIDATE_TIMESTAMPS}'; \
echo "opcache.max_accelerated_files=${PHP_OPCACHE_MAX_ACCELERATED_FILES}"; \ echo 'opcache.max_accelerated_files=${PHP_OPCACHE_MAX_ACCELERATED_FILES}'; \
echo "opcache.memory_consumption=${PHP_OPCACHE_MEMORY_CONSUMPTION}"; \ echo 'opcache.memory_consumption=${PHP_OPCACHE_MEMORY_CONSUMPTION}'; \
echo "opcache.max_wasted_percentage=${PHP_OPCACHE_MAX_WASTED_PERCENTAGE}"; \ echo 'opcache.max_wasted_percentage=${PHP_OPCACHE_MAX_WASTED_PERCENTAGE}'; \
echo 'opcache.interned_strings_buffer=16'; \ echo 'opcache.interned_strings_buffer=16'; \
echo 'opcache.fast_shutdown=1'; \ echo 'opcache.fast_shutdown=1'; \
} > $PHP_INI_DIR/conf.d/opcache-recommended.ini; \ } > $PHP_INI_DIR/conf.d/opcache-recommended.ini; \
@ -110,21 +108,12 @@ RUN { \
\ \
echo 'memory_limit=512M' > $PHP_INI_DIR/conf.d/memory-limit.ini echo 'memory_limit=512M' > $PHP_INI_DIR/conf.d/memory-limit.ini
# Sentry
RUN if [ $(uname -m) = "x86_64" ]; then \
PLATFORM=$(uname -s); \
if [ "$PLATFORM" = "Linux" -o "$PLATFORM" = "Windows" -o "$PLATFORM" = "Darwin" ]; then \
mkdir -p /root/.local/bin; \
curl -sL https://sentry.io/get-cli/ | INSTALL_DIR=/root/.local/bin bash; \
fi \
fi
VOLUME /var/www/html WORKDIR /var/www/html
# Define Monica version and expected SHA512 signature # Define Monica version and expected SHA512 signature
ENV MONICA_VERSION v2.17.0 ENV MONICA_VERSION v2.17.0
ENV MONICA_SHA512 9e208f3aee15eb8ffcd33aa834fc2a4c07ef3396234132d76e2563e0c17c596e5f505aa6527625b13be1f564f8583c4bbd2a54c44d26f8e9c8418d9636c8720b ENV MONICA_SHA512 9e208f3aee15eb8ffcd33aa834fc2a4c07ef3396234132d76e2563e0c17c596e5f505aa6527625b13be1f564f8583c4bbd2a54c44d26f8e9c8418d9636c8720b
ENV MONICA_SRC /usr/src/monica
RUN set -ex; \ RUN set -ex; \
apk add --no-cache --virtual .fetch-deps \ apk add --no-cache --virtual .fetch-deps \
@ -132,20 +121,16 @@ RUN set -ex; \
; \ ; \
\ \
curl -fsSL -o monica.tar.bz2 "https://github.com/monicahq/monica/releases/download/${MONICA_VERSION}/monica-${MONICA_VERSION}.tar.bz2"; \ curl -fsSL -o monica.tar.bz2 "https://github.com/monicahq/monica/releases/download/${MONICA_VERSION}/monica-${MONICA_VERSION}.tar.bz2"; \
echo "$MONICA_SHA512 *monica.tar.bz2" | sha512sum -c -; \ echo "$MONICA_SHA512 monica.tar.bz2" | sha512sum -c -; \
\ \
mkdir $MONICA_SRC; \ tar -xf monica.tar.bz2 -C /var/www/html --strip-components=1; \
tar -xf monica.tar.bz2 -C $MONICA_SRC --strip-components=1; \
rm monica.tar.bz2; \ rm monica.tar.bz2; \
\ \
cp $MONICA_SRC/.env.example $MONICA_SRC/.env; \ cp /var/www/html/.env.example /var/www/html/.env; \
chown -R www-data:www-data $MONICA_SRC; \ chown -R www-data:www-data /var/www/html; \
\ \
apk del .fetch-deps; \ apk del .fetch-deps
rm -rf /var/cache/apk/*
COPY upgrade.exclude \
/usr/local/share/
COPY entrypoint.sh \ COPY entrypoint.sh \
queue.sh \ queue.sh \
cron.sh \ cron.sh \

View File

@ -1,9 +1,6 @@
#!/bin/bash #!/bin/bash
# return true if specified directory is empty set -Eeuo pipefail
directory_empty() {
[ -z "$(ls -A "$1/")" ]
}
# wait for the database to start # wait for the database to start
waitfordb() { waitfordb() {
@ -31,26 +28,9 @@ waitfordb() {
if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then
MONICASRC=/usr/src/monica
MONICADIR=/var/www/html MONICADIR=/var/www/html
ARTISAN="php ${MONICADIR}/artisan" ARTISAN="php ${MONICADIR}/artisan"
# Update application sources
echo "Syncing sources..."
if [ "$(id -u)" = 0 ]; then
rsync_options="-rlDog --chown www-data:www-data"
else
rsync_options="-rlD"
fi
rsync $rsync_options --delete --exclude-from=/usr/local/share/upgrade.exclude $MONICASRC/ $MONICADIR/
for dir in storage; do
if [ ! -d "$MONICADIR/$dir" ] || directory_empty "$MONICADIR/$dir"; then
rsync $rsync_options --include "/$dir/" --exclude '/*' $MONICASRC/ $MONICADIR/
fi
done
echo "...done!"
# Ensure storage directories are present # Ensure storage directories are present
STORAGE=${MONICADIR}/storage STORAGE=${MONICADIR}/storage
mkdir -p ${STORAGE}/logs mkdir -p ${STORAGE}/logs
@ -86,4 +66,4 @@ if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then
fi fi
exec $@ exec "$@"

View File

@ -1 +0,0 @@
/storage

View File

@ -1,8 +1,7 @@
FROM php:7.3-fpm FROM php:7.3-fpm
# opencontainers annotations https://github.com/opencontainers/image-spec/blob/master/annotations.md # opencontainers annotations https://github.com/opencontainers/image-spec/blob/master/annotations.md
LABEL maintainer="Alexis Saettler <alexis@saettler.org> (@asbiin)" \ LABEL org.opencontainers.image.authors="Alexis Saettler <alexis@saettler.org>" \
org.opencontainers.image.authors="Alexis Saettler <alexis@saettler.org>" \
org.opencontainers.image.title="MonicaHQ, the Personal Relationship Manager" \ org.opencontainers.image.title="MonicaHQ, the Personal Relationship Manager" \
org.opencontainers.image.description="This is MonicaHQ, your personal memory! MonicaHQ is like a CRM but for the friends, family, and acquaintances around you." \ org.opencontainers.image.description="This is MonicaHQ, your personal memory! MonicaHQ is like a CRM but for the friends, family, and acquaintances around you." \
org.opencontainers.image.url="https://monicahq.com" \ org.opencontainers.image.url="https://monicahq.com" \
@ -15,7 +14,6 @@ LABEL maintainer="Alexis Saettler <alexis@saettler.org> (@asbiin)" \
RUN set -ex; \ RUN set -ex; \
\ \
apt-get update; \ apt-get update; \
apt-get -y autoremove; \
apt-get install -y --no-install-recommends \ apt-get install -y --no-install-recommends \
rsync \ rsync \
bash \ bash \
@ -103,14 +101,16 @@ ENV PHP_OPCACHE_VALIDATE_TIMESTAMPS="0" \
PHP_OPCACHE_MAX_ACCELERATED_FILES="20000" \ PHP_OPCACHE_MAX_ACCELERATED_FILES="20000" \
PHP_OPCACHE_MEMORY_CONSUMPTION="192" \ PHP_OPCACHE_MEMORY_CONSUMPTION="192" \
PHP_OPCACHE_MAX_WASTED_PERCENTAGE="10" PHP_OPCACHE_MAX_WASTED_PERCENTAGE="10"
RUN { \ RUN set -ex; \
\
{ \
echo '[opcache]'; \ echo '[opcache]'; \
echo 'opcache.enable=1'; \ echo 'opcache.enable=1'; \
echo 'opcache.revalidate_freq=0'; \ echo 'opcache.revalidate_freq=0'; \
echo "opcache.validate_timestamps=${PHP_OPCACHE_VALIDATE_TIMESTAMPS}"; \ echo 'opcache.validate_timestamps=${PHP_OPCACHE_VALIDATE_TIMESTAMPS}'; \
echo "opcache.max_accelerated_files=${PHP_OPCACHE_MAX_ACCELERATED_FILES}"; \ echo 'opcache.max_accelerated_files=${PHP_OPCACHE_MAX_ACCELERATED_FILES}'; \
echo "opcache.memory_consumption=${PHP_OPCACHE_MEMORY_CONSUMPTION}"; \ echo 'opcache.memory_consumption=${PHP_OPCACHE_MEMORY_CONSUMPTION}'; \
echo "opcache.max_wasted_percentage=${PHP_OPCACHE_MAX_WASTED_PERCENTAGE}"; \ echo 'opcache.max_wasted_percentage=${PHP_OPCACHE_MAX_WASTED_PERCENTAGE}'; \
echo 'opcache.interned_strings_buffer=16'; \ echo 'opcache.interned_strings_buffer=16'; \
echo 'opcache.fast_shutdown=1'; \ echo 'opcache.fast_shutdown=1'; \
} > $PHP_INI_DIR/conf.d/opcache-recommended.ini; \ } > $PHP_INI_DIR/conf.d/opcache-recommended.ini; \
@ -119,37 +119,26 @@ RUN { \
\ \
echo 'memory_limit=512M' > $PHP_INI_DIR/conf.d/memory-limit.ini echo 'memory_limit=512M' > $PHP_INI_DIR/conf.d/memory-limit.ini
# Sentry
RUN if [ $(uname -m) = "x86_64" ]; then \
PLATFORM=$(uname -s); \
if [ "$PLATFORM" = "Linux" -o "$PLATFORM" = "Windows" -o "$PLATFORM" = "Darwin" ]; then \
mkdir -p /root/.local/bin; \
curl -sL https://sentry.io/get-cli/ | INSTALL_DIR=/root/.local/bin bash; \
fi \
fi
VOLUME /var/www/html WORKDIR /var/www/html
# Define Monica version and expected SHA512 signature # Define Monica version and expected SHA512 signature
ENV MONICA_VERSION v2.17.0 ENV MONICA_VERSION v2.17.0
ENV MONICA_SHA512 9e208f3aee15eb8ffcd33aa834fc2a4c07ef3396234132d76e2563e0c17c596e5f505aa6527625b13be1f564f8583c4bbd2a54c44d26f8e9c8418d9636c8720b ENV MONICA_SHA512 9e208f3aee15eb8ffcd33aa834fc2a4c07ef3396234132d76e2563e0c17c596e5f505aa6527625b13be1f564f8583c4bbd2a54c44d26f8e9c8418d9636c8720b
ENV MONICA_SRC /usr/src/monica
RUN set -eu; \ RUN set -ex; \
curl -fsSL -o monica.tar.bz2 "https://github.com/monicahq/monica/releases/download/${MONICA_VERSION}/monica-${MONICA_VERSION}.tar.bz2"; \
echo "$MONICA_SHA512 *monica.tar.bz2" | sha512sum -c -; \
\ \
mkdir $MONICA_SRC; \ curl -fsSL -o monica.tar.bz2 "https://github.com/monicahq/monica/releases/download/${MONICA_VERSION}/monica-${MONICA_VERSION}.tar.bz2"; \
tar -xf monica.tar.bz2 -C $MONICA_SRC --strip-components=1; \ echo "$MONICA_SHA512 monica.tar.bz2" | sha512sum -c -; \
\
tar -xf monica.tar.bz2 -C /var/www/html --strip-components=1; \
rm monica.tar.bz2; \ rm monica.tar.bz2; \
\ \
cp $MONICA_SRC/.env.example $MONICA_SRC/.env; \ cp /var/www/html/.env.example /var/www/html/.env; \
chown -R www-data:www-data $MONICA_SRC chown -R www-data:www-data /var/www/html
COPY upgrade.exclude \
/usr/local/share/
COPY entrypoint.sh \ COPY entrypoint.sh \
queue.sh \ queue.sh \
cron.sh \ cron.sh \

View File

@ -1,9 +1,6 @@
#!/bin/bash #!/bin/bash
# return true if specified directory is empty set -Eeuo pipefail
directory_empty() {
[ -z "$(ls -A "$1/")" ]
}
# wait for the database to start # wait for the database to start
waitfordb() { waitfordb() {
@ -31,26 +28,9 @@ waitfordb() {
if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then
MONICASRC=/usr/src/monica
MONICADIR=/var/www/html MONICADIR=/var/www/html
ARTISAN="php ${MONICADIR}/artisan" ARTISAN="php ${MONICADIR}/artisan"
# Update application sources
echo "Syncing sources..."
if [ "$(id -u)" = 0 ]; then
rsync_options="-rlDog --chown www-data:www-data"
else
rsync_options="-rlD"
fi
rsync $rsync_options --delete --exclude-from=/usr/local/share/upgrade.exclude $MONICASRC/ $MONICADIR/
for dir in storage; do
if [ ! -d "$MONICADIR/$dir" ] || directory_empty "$MONICADIR/$dir"; then
rsync $rsync_options --include "/$dir/" --exclude '/*' $MONICASRC/ $MONICADIR/
fi
done
echo "...done!"
# Ensure storage directories are present # Ensure storage directories are present
STORAGE=${MONICADIR}/storage STORAGE=${MONICADIR}/storage
mkdir -p ${STORAGE}/logs mkdir -p ${STORAGE}/logs
@ -86,4 +66,4 @@ if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then
fi fi
exec $@ exec "$@"

View File

@ -1 +0,0 @@
/storage

View File

@ -28,8 +28,7 @@ RUN set -eu; sed -ri -e \"s!/var/www/html!\\\${APACHE_DOCUMENT_ROOT}!g\" /etc/ap
[fpm-alpine]='' [fpm-alpine]=''
) )
label="LABEL maintainer=\"Alexis Saettler <alexis@saettler.org> (@asbiin)\" \\\\\\n\ label="LABEL org.opencontainers.image.authors=\"Alexis Saettler <alexis@saettler.org>\" \\\\\\n\
org.opencontainers.image.authors=\"Alexis Saettler <alexis@saettler.org>\" \\\\\\n\
org.opencontainers.image.title=\"MonicaHQ, the Personal Relationship Manager\" \\\\\\n\ org.opencontainers.image.title=\"MonicaHQ, the Personal Relationship Manager\" \\\\\\n\
org.opencontainers.image.description=\"This is MonicaHQ, your personal memory! MonicaHQ is like a CRM but for the friends, family, and acquaintances around you.\" \\\\\\n\ org.opencontainers.image.description=\"This is MonicaHQ, your personal memory! MonicaHQ is like a CRM but for the friends, family, and acquaintances around you.\" \\\\\\n\
org.opencontainers.image.url=\"https://monicahq.com\" \\\\\\n\ org.opencontainers.image.url=\"https://monicahq.com\" \\\\\\n\
@ -101,6 +100,4 @@ for variant in apache fpm fpm-alpine; do
for file in entrypoint cron queue; do for file in entrypoint cron queue; do
cp docker-$file.sh $variant/$file.sh cp docker-$file.sh $variant/$file.sh
done done
cp upgrade.exclude $variant/
done done

View File

@ -1 +0,0 @@
/storage