diff --git a/2020.12-dev/apache/Dockerfile b/2020.12-dev/apache/Dockerfile deleted file mode 100644 index 588c168..0000000 --- a/2020.12-dev/apache/Dockerfile +++ /dev/null @@ -1,143 +0,0 @@ -# DO NOT EDIT: created by update.sh from Dockerfile-debian.template -FROM php:7.3-apache-buster - -# entrypoint.sh and cron.sh dependencies -RUN set -ex; \ - \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - rsync \ - bzip2 \ - git \ -# For mail() support - msmtp \ -# For tini installation - gnupg dirmngr \ - ; \ - rm -rf /var/lib/apt/lists/*; - -# Add tini for reaping processes -ENV TINI_VERSION v0.19.0 -RUN export BUILD_ARCH=$(dpkg-architecture --query DEB_BUILD_ARCH) \ - && mkdir ~/.gnupg \ - && echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \ - && curl -L -o /sbin/tini https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-${BUILD_ARCH} \ - && curl -L -o /tini.asc https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-${BUILD_ARCH}.asc \ - && gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 \ - && gpg --batch --verify /tini.asc /sbin/tini \ - && chmod +x /sbin/tini - -# install the PHP extensions we need -# see https://friendi.ca/resources/requirements/ -RUN set -ex; \ - \ - savedAptMark="$(apt-mark showmanual)"; \ - \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - mariadb-client \ - bash \ - libpng-dev \ - libjpeg62-turbo-dev \ - libtool \ - libmagick++-dev \ - libmemcached-dev \ - libgraphicsmagick1-dev \ - libfreetype6-dev \ - librsvg2-2 \ - libzip-dev \ - libldap2-dev \ - ; \ - \ - debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \ - \ - docker-php-ext-configure gd \ - --with-gd \ - --with-freetype-dir=/usr/include/ \ - --with-png-dir=/usr/include/ \ - --with-jpeg-dir=/usr/include/ \ - ; \ - docker-php-ext-configure ldap \ - --with-libdir=lib/$debMultiarch/ \ - ;\ - docker-php-ext-install -j "$(nproc)" \ - pdo_mysql \ - gd \ - zip \ - opcache \ - ctype \ - pcntl \ - ldap \ - ; \ - \ -# pecl will claim success even if one install fails, so we need to perform each install separately - pecl install apcu-5.1.19; \ - pecl install memcached-3.1.5; \ - pecl install redis-5.3.2; \ - pecl install imagick-3.4.4; \ - \ - docker-php-ext-enable \ - apcu \ - memcached \ - redis \ - imagick \ - ; \ - \ -# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies - apt-mark auto '.*' > /dev/null; \ - apt-mark manual $savedAptMark; \ - ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \ - | awk '/=>/ { print $3 }' \ - | sort -u \ - | xargs -r dpkg-query -S \ - | cut -d: -f1 \ - | sort -u \ - | xargs -rt apt-mark manual; \ - \ - apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ - rm -rf /var/lib/apt/lists/* - -# set recommended PHP.ini settings -RUN set -ex; \ - { \ - echo 'opcache.enable=1' ; \ - echo 'opcache.interned_strings_buffer=8'; \ - echo 'opcache.max_accelerated_files=10000'; \ - echo 'opcache.memory_consumption=128'; \ - echo 'opcache.save_comments=1'; \ - echo 'opcache.revalidte_freq=1'; \ - } > /usr/local/etc/php/conf.d/opcache-recommended.ini; \ - \ - { \ - echo sendmail_path = "/usr/bin/msmtp -t"; \ - } > /usr/local/etc/php/conf.d/sendmail.ini; \ - \ - echo 'apc.enable_cli=1' >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini; \ - \ - echo 'memory_limit=512M' > /usr/local/etc/php/conf.d/memory-limit.ini; \ - \ - mkdir /var/www/data; \ - chown -R www-data:root /var/www; \ - chmod -R g=u /var/www - -VOLUME /var/www/html - -RUN set -ex;\ - a2enmod rewrite remoteip ;\ - {\ - echo RemoteIPHeader X-Real-IP ;\ - echo RemoteIPTrustedProxy 10.0.0.0/8 ;\ - echo RemoteIPTrustedProxy 172.16.0.0/12 ;\ - echo RemoteIPTrustedProxy 192.168.0.0/16 ;\ - } > /etc/apache2/conf-available/remoteip.conf;\ - a2enconf remoteip - -ENV FRIENDICA_VERSION "2020.12-dev" -ENV FRIENDICA_ADDONS "2020.12-dev" - - -COPY *.sh upgrade.exclude / -COPY config/* /usr/src/friendica/config/ - -ENTRYPOINT ["/entrypoint-dev.sh"] -CMD ["apache2-foreground"] diff --git a/2020.12-dev/apache/config/00apcu.config.php b/2020.12-dev/apache/config/00apcu.config.php deleted file mode 100644 index d6dac4f..0000000 --- a/2020.12-dev/apache/config/00apcu.config.php +++ /dev/null @@ -1,12 +0,0 @@ - [ - 'cache_driver' => 'apcu', - 'session_handler' => 'cache', - ], -]; diff --git a/2020.12-dev/apache/config/01redis.config.php b/2020.12-dev/apache/config/01redis.config.php deleted file mode 100644 index 1a43c95..0000000 --- a/2020.12-dev/apache/config/01redis.config.php +++ /dev/null @@ -1,15 +0,0 @@ - [ - 'lock_driver' => 'redis', - 'redis_host' => getenv('REDIS_HOST'), - 'redis_port' => (getenv('REDIS_PORT') ? getenv('REDIS_PORT') : ''), - 'redis_password' => (getenv('REDIS_PW') ? getenv('REDIS_PW') : ''), - 'redis_db' => (getenv('REDIS_DB') ? getenv('REDIS_DB') : 0), - ], - ]; -} else { - return []; -} diff --git a/2020.12-dev/apache/config/zz-docker.config.php b/2020.12-dev/apache/config/zz-docker.config.php deleted file mode 100644 index 2d5835d..0000000 --- a/2020.12-dev/apache/config/zz-docker.config.php +++ /dev/null @@ -1,62 +0,0 @@ - [ - // Necessary because otherwise the daemon isn't working - 'pidfile' => '/var/run/friendica.pid', - - 'logfile' => '/var/www/html/friendica.log', - 'loglevel' => 'notice', - ], - 'storage' => [ - 'filesystem_path' => '/var/www/html/storage', - ], -]; - -if (getenv('FRIENDICA_TZ')) { - $config['config']['timezone'] = getenv('FRIENDICA_TZ'); -} - -if (getenv('FRIENDICA_LANG')) { - $config['config']['language'] = getenv('FRIENDICA_LANG'); -} - -if (getenv('FRIENDICA_ADMIN_MAIL')) { - $config['config']['admin_email'] = getenv('FRIENDICA_ADMIN_MAIL'); -} - -if (getenv('FRIENDICA_SITENAME')) { - $config['config']['sitename'] = getenv('FRIENDICA_SITENAME'); -} - -if (!empty(getenv('FRIENDICA_NO_VALIDATION'))) { - $config['system']['disable_url_validation'] = true; - $config['system']['disable_email_validation'] = true; -} - -if (!empty(getenv('FRIENDICA_DATA'))) { - $config['storage']['class'] = \Friendica\Model\Storage\Filesystem::class; - - if (!empty(getenv('FRIENDICA_DATA_DIR'))) { - $config['storage']['filesystem_path'] = getenv('FRIENDICA_DATA'); - } -} - -if (!empty(getenv('FRIENDICA_DEBUGGING'))) { - $config['system']['debugging'] = true; - if (!empty(getenv('FRIENDICA_LOGFILE'))) { - $config['system']['logfile'] = getenv('FRIENDICA_LOGFILE'); - } - if (!empty(getenv('FRIENDICA_LOGLEVEL'))) { - $config['system']['loglevel'] = getenv('FRIENDICA_LOGLEVEL'); - } -} - -return $config; diff --git a/2020.12-dev/apache/cron.sh b/2020.12-dev/apache/cron.sh deleted file mode 100755 index f899df9..0000000 --- a/2020.12-dev/apache/cron.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -trap "break;exit" HUP INT TERM - -while [ ! -f /var/www/html/bin/daemon.php ]; do - sleep 1 -done - -echo "Waiting for MySQL $MYSQL_HOST initialization..." -if php /var/www/html/bin/wait-for-connection "$MYSQL_HOST" "${MYSQL_PORT:-3306}" 300; then - sh /setup_msmtp.sh - exec /sbin/tini -- php /var/www/html/bin/daemon.php -f start -else - echo "[ERROR] Waited 300 seconds, no response" >&2 -fi diff --git a/2020.12-dev/apache/entrypoint-dev.sh b/2020.12-dev/apache/entrypoint-dev.sh deleted file mode 100755 index 08c3c13..0000000 --- a/2020.12-dev/apache/entrypoint-dev.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh -set -eu - -# checks if the branch and repository exists -check_branch() { - repo=${1:-} - branch=${2:-} - git ls-remote --heads --tags "https://github.com/$repo" | grep -E "refs/(heads|tags)/${branch}$" >/dev/null - [ "$?" -eq "0" ] -} - -# clones the whole develop branch (Friendica and Addons) -clone_develop() { - friendica_git="${FRIENDICA_VERSION}" - addons_git="${FRIENDICA_ADDONS}" - friendica_repo="${FRIENDICA_REPOSITORY:-friendica/friendica}" - friendica_addons_repo="${FRIENDICA_ADDONS_REPO:-friendica/friendica-addons}" - - if echo "{$friendica_git,,}" | grep -Eq '^.*\-dev'; then - friendica_git="develop" - fi - - if echo "{$addons_git,,}" | grep -Eq '^.*\-dev'; then - addons_git="develop" - fi - - # Check if the branches exist before wiping the - if check_branch "$friendica_repo" "$friendica_git" && check_branch "$friendica_addons_repo" "$addons_git" ; then - echo "Cloning '${friendica_git}' from GitHub repository '${friendica_repo}' ..." - - # Removing the whole directory first - rm -fr /usr/src/friendica - git clone -q -b ${friendica_git} "https://github.com/${friendica_repo}" /usr/src/friendica - - mkdir /usr/src/friendica/addon - git clone -q -b ${addons_git} "https://github.com/${friendica_addons_repo}" /usr/src/friendica/addon - - echo "Download finished" - - if [ ! -f /usr/src/friendica/VERSION ]; then - echo "Couldn't clone repository" - exit 1 - fi - - /usr/src/friendica/bin/composer.phar install --no-dev -d /usr/src/friendica - return 0 - - else - if check_branch "$friendica_repo" "$friendica_git"; then - echo "$friendica_repo/$friendica_git is not valid." - else - echo "$friendica_addons_repo/$addons_git is not valid." - fi - echo "Using old version." - return 1 - - fi -} - -# just check if we execute apache or php-fpm -if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then - # cloning from git is just possible for develop or Release Candidate - if echo "${FRIENDICA_VERSION}" | grep -Eq '^.*(\-dev|-rc|-RC)' || [ "${FRIENDICA_UPGRADE:-false}" = "true" ] || [ ! -f /usr/src/friendica/VERSION ]; then - # just clone & check if it's a new install or upgrade - clone_develop - fi -fi - -exec /entrypoint.sh "$@" diff --git a/2020.12-dev/apache/entrypoint.sh b/2020.12-dev/apache/entrypoint.sh deleted file mode 100755 index fa51564..0000000 --- a/2020.12-dev/apache/entrypoint.sh +++ /dev/null @@ -1,145 +0,0 @@ -#!/bin/sh -set -eu - -# run an command with the www-data user -run_as() { - set -- -c "cd /var/www/html; $*" - if [ "$(id -u)" -eq 0 ]; then - su - www-data -s /bin/sh "$@" - else - sh "$@" - fi -} - -# checks if the the first parameter is greater than the second parameter -version_greater() { - [ "$(printf '%s\n' "$@" | sed -e 's/-rc/.1/' | sed -e 's/-dev/.2/' | sort -t '.' -k1,1n -k2,2n -k3,3nbr | head -n 1)" != "$(printf "$1" | sed -e 's/-rc/.1/' | sed -e 's/-dev/.2/')" ] -} - -# usage: file_env VAR [DEFAULT] -# ie: file_env 'XYZ_DB_PASSWORD' 'example' -# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of -# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) -file_env() { - local var="$1" - local fileVar="${var}_FILE" - local def="${2:-}" - local varValue=$(env | grep -E "^${var}=" | sed -E -e "s/^${var}=//") - local fileVarValue=$(env | grep -E "^${fileVar}=" | sed -E -e "s/^${fileVar}=//") - if [ -n "${varValue}" ] && [ -n "${fileVarValue}" ]; then - echo >&2 "error: both $var and $fileVar are set (but are exclusive)" - exit 1 - fi - if [ -n "${varValue}" ]; then - export "$var"="${varValue}" - elif [ -n "${fileVarValue}" ]; then - export "$var"="$(cat "${fileVarValue}")" - elif [ -n "${def}" ]; then - export "$var"="$def" - fi - unset "$fileVar" -} - -sh /setup_msmtp.sh - -# just check if we execute apache or php-fpm -if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then - installed_version="0.0.0.0" - if [ -f /var/www/html/VERSION ]; then - installed_version="$(cat /var/www/html/VERSION)" - fi - - image_version="$(cat /usr/src/friendica/VERSION)" - - # no downgrading possible - if version_greater "$installed_version" "$image_version"; then - echo "Can't copy Friendica sources because the version of the data ($installed_version) is higher than the docker image ($image_version)" - exit 1 - fi - - # check it just in case the version is greater or if we force the upgrade - if version_greater "$image_version" "$installed_version" || [ "${FRIENDICA_UPGRADE:-false}" = "true" ]; then - echo "Initializing Friendica $image_version ..." - - if [ "$installed_version" != "0.0.0.0" ]; then - echo "Upgrading Friendica from $installed_version ..." - fi - - if [ "$(id -u)" -eq 0 ]; then - rsync_options="-rlDog --chown=www-data:www-data" - else - rsync_options="-rlD" - fi - - rsync $rsync_options --delete --exclude-from=/upgrade.exclude /usr/src/friendica/ /var/www/html/ - - # Update docker-based config files, but never delete other config files - rsync $rsync_options --update /usr/src/friendica/config/ /var/www/html/config/ - - # In case there is no .htaccess, copy it from the default dist file - if [ ! -f "/var/www/html/.htaccess" ]; then - cp "/var/www/html/.htaccess-dist" "/var/www/html/.htaccess" - fi - - if [ -d /var/www/html/view/smarty3 ]; then - chmod -R 777 /var/www/html/view/smarty3 - fi - echo "Initializing finished" - - # install - if [ "$installed_version" = "0.0.0.0" ]; then - echo "New Friendica instance" - - file_env FRIENDICA_ADMIN_MAIL - - file_env MYSQL_DATABASE - file_env MYSQL_USER - file_env MYSQL_PASSWORD - - install=false - if [ -n "${MYSQL_DATABASE+x}" ] && [ -n "${MYSQL_PASSWORD+x}" ] && [ -n "${MYSQL_HOST+x}" ] && [ -n "${MYSQL_USER+x}" ] && [ -n "${FRIENDICA_ADMIN_MAIL+x}" ] && [ -n "${FRIENDICA_URL+x}" ]; then - echo "Installation with environment variables" - - FRIENDICA_TZ=${FRIENDICA_TZ:-America/LosAngeles} - FRIENDICA_LANG=${FRIENDICA_LANG:-en} - MYSQL_PORT=${MYSQL_PORT:-3306} - - # shellcheck disable=SC2016 - install_options='-s --dbhost "'$MYSQL_HOST'" --dbport "'$MYSQL_PORT'" --dbdata "'$MYSQL_DATABASE'" --dbuser "'$MYSQL_USER'" --dbpass "'$MYSQL_PASSWORD'"' - - # shellcheck disable=SC2016 - install_options=$install_options' --admin "'$FRIENDICA_ADMIN_MAIL'" --tz "'$FRIENDICA_TZ'" --lang "'$FRIENDICA_LANG'" --url "'$FRIENDICA_URL'"' - install=true - fi - - if [ "$install" = true ]; then - echo "Waiting for MySQL $MYSQL_HOST initialization..." - if run_as "php /var/www/html/bin/wait-for-connection $MYSQL_HOST ${MYSQL_PORT:-3306} 300"; then - - echo "Starting Friendica installation ..." - run_as "php /var/www/html/bin/console.php autoinstall $install_options" - - rm -fr /var/www/html/view/smarty3/compiled - - # load other config files (*.config.php) to the config folder - if [ -d "/usr/src/config" ]; then - rsync $rsync_options --ignore-existing /usr/src/config/ /var/www/html/config/ - fi - - echo "Installation finished" - else - echo "[ERROR] Waited 300 seconds, no response" >&2 - fi - else - echo "Running web-based installer on first connect!" - fi - # upgrade - else - echo "Upgrading Friendica ..." - run_as 'php /var/www/html/bin/console.php dbstructure update -f' - echo "Upgrading finished" - fi - fi -fi - -exec "$@" diff --git a/2020.12-dev/apache/setup_msmtp.sh b/2020.12-dev/apache/setup_msmtp.sh deleted file mode 100644 index b2e22f0..0000000 --- a/2020.12-dev/apache/setup_msmtp.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/sh -set -eu - -if [ -n "${SMTP_DOMAIN+x}" ] && [ -n "${SMTP+x}" ] && [ "${SMTP}" != "localhost" ]; then - SITENAME="${FRIENDICA_SITENAME:-Friendica Social Network}" - echo "Setup MSMTP for '$SITENAME' with '$SMTP' ..." - - smtp_from="${SMTP_FROM:=no-reply}" - - # Setup MSMTP - usermod --comment "$(echo "$SITENAME" | tr -dc '[:print:]')" root - usermod --comment "$(echo "$SITENAME" | tr -dc '[:print:]')" www-data - - # add possible mail-senders - { - echo "www-data: $smtp_from@$SMTP_DOMAIN" - echo "root: $smtp_from@$SMTP_DOMAIN" - } >/etc/aliases - - # create msmtp settings - { - echo "account default" - echo "host $SMTP" - if [ -n "${SMTP_PORT+x}" ]; then echo "port $SMTP_PORT"; else echo "port 587"; fi - echo "from \"$smtp_from@$SMTP_DOMAIN\"" - echo "tls_certcheck off" # No certcheck because of internal docker mail-hostnames - if [ -n "${SMTP_TLS+x}" ]; then echo "tls on"; fi - if [ -n "${SMTP_STARTTLS+x}" ]; then echo "tls_starttls on"; fi - if [ -n "${SMTP_AUTH_USER+x}" ]; then echo "auth on"; fi - if [ -n "${SMTP_AUTH_USER+x}" ]; then echo "user \"$SMTP_AUTH_USER\""; fi - if [ -n "${SMTP_AUTH_PASS+x}" ]; then echo "password \"$SMTP_AUTH_PASS\""; fi - echo "logfile /var/log/msmtp.log" - echo "aliases /etc/aliases" - } >/etc/msmtprc - - echo "Setup finished" -fi diff --git a/2020.12-dev/apache/upgrade.exclude b/2020.12-dev/apache/upgrade.exclude deleted file mode 100644 index 2fb6533..0000000 --- a/2020.12-dev/apache/upgrade.exclude +++ /dev/null @@ -1,10 +0,0 @@ -/.git/ -/photo/ -/proxy/ -/.htconfig.php -/.htaccess -/home.* -/config/ -/storage/ -/log/ -*.log \ No newline at end of file diff --git a/2020.12-dev/fpm-alpine/Dockerfile b/2020.12-dev/fpm-alpine/Dockerfile deleted file mode 100644 index 99d0f49..0000000 --- a/2020.12-dev/fpm-alpine/Dockerfile +++ /dev/null @@ -1,109 +0,0 @@ -# DO NOT EDIT: created by update.sh from Dockerfile-alpine.template -FROM php:7.3-fpm-alpine - -# entrypoint.sh and cron.sh dependencies -RUN set -ex; \ - apk add --no-cache \ - rsync \ - git \ -# For mail() support - msmtp \ - shadow \ - tini; - -# install the PHP extensions we need -# see https://friendi.ca/resources/requirements/ -RUN set -ex; \ - \ - apk add --no-cache --virtual .build-deps \ - mariadb-client \ - bash \ - $PHPIZE_DEPS \ - libpng-dev \ - libjpeg-turbo-dev \ - imagemagick-dev \ - libtool \ - libmemcached-dev \ - cyrus-sasl-dev \ - libjpeg-turbo-dev \ - freetype-dev \ - librsvg \ - pcre-dev \ - libzip-dev \ - icu-dev \ - openldap-dev \ - ; \ - \ - docker-php-ext-configure gd \ - --with-gd \ - --with-freetype-dir=/usr/include/ \ - --with-png-dir=/usr/include/ \ - --with-jpeg-dir=/usr/include/ \ - ; \ - \ - docker-php-ext-install -j "$(nproc)" \ - pdo_mysql \ - gd \ - zip \ - opcache \ - pcntl \ - ldap \ - ; \ - \ -# pecl will claim success even if one install fails, so we need to perform each install separately - pecl install APCu-5.1.19; \ - pecl install memcached-3.1.5; \ - pecl install redis-5.3.2; \ - pecl install imagick-3.4.4; \ - \ - docker-php-ext-enable \ - apcu \ - memcached \ - redis \ - imagick \ - ; \ - \ - runDeps="$( \ - scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \ - | tr ',' '\n' \ - | sort -u \ - | awk 'system("[ -e /usr/local/lib" $1 " ]") == 0 { next } { print "so:" $1 }' \ - )"; \ - apk add --no-network --virtual .friendica-phpext-rundeps $runDeps; \ - apk del --no-network .build-deps; - -# set recommended PHP.ini settings -RUN set -ex; \ - { \ - echo 'opcache.enable=1' ; \ - echo 'opcache.interned_strings_buffer=8'; \ - echo 'opcache.max_accelerated_files=10000'; \ - echo 'opcache.memory_consumption=128'; \ - echo 'opcache.save_comments=1'; \ - echo 'opcache.revalidte_freq=1'; \ - } > /usr/local/etc/php/conf.d/opcache-recommended.ini; \ - \ - { \ - echo sendmail_path = "/usr/bin/msmtp -t"; \ - } > /usr/local/etc/php/conf.d/sendmail.ini; \ - \ - echo 'apc.enable_cli=1' >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini; \ - \ - echo 'memory_limit=512M' > /usr/local/etc/php/conf.d/memory-limit.ini; \ - \ - mkdir /var/www/data; \ - chown -R www-data:root /var/www; \ - chmod -R g=u /var/www - -VOLUME /var/www/html - - -ENV FRIENDICA_VERSION "2020.12-dev" -ENV FRIENDICA_ADDONS "2020.12-dev" - - -COPY *.sh upgrade.exclude / -COPY config/* /usr/src/friendica/config/ - -ENTRYPOINT ["/entrypoint-dev.sh"] -CMD ["php-fpm"] diff --git a/2020.12-dev/fpm-alpine/config/00apcu.config.php b/2020.12-dev/fpm-alpine/config/00apcu.config.php deleted file mode 100644 index d6dac4f..0000000 --- a/2020.12-dev/fpm-alpine/config/00apcu.config.php +++ /dev/null @@ -1,12 +0,0 @@ - [ - 'cache_driver' => 'apcu', - 'session_handler' => 'cache', - ], -]; diff --git a/2020.12-dev/fpm-alpine/config/01redis.config.php b/2020.12-dev/fpm-alpine/config/01redis.config.php deleted file mode 100644 index 1a43c95..0000000 --- a/2020.12-dev/fpm-alpine/config/01redis.config.php +++ /dev/null @@ -1,15 +0,0 @@ - [ - 'lock_driver' => 'redis', - 'redis_host' => getenv('REDIS_HOST'), - 'redis_port' => (getenv('REDIS_PORT') ? getenv('REDIS_PORT') : ''), - 'redis_password' => (getenv('REDIS_PW') ? getenv('REDIS_PW') : ''), - 'redis_db' => (getenv('REDIS_DB') ? getenv('REDIS_DB') : 0), - ], - ]; -} else { - return []; -} diff --git a/2020.12-dev/fpm-alpine/config/zz-docker.config.php b/2020.12-dev/fpm-alpine/config/zz-docker.config.php deleted file mode 100644 index 2d5835d..0000000 --- a/2020.12-dev/fpm-alpine/config/zz-docker.config.php +++ /dev/null @@ -1,62 +0,0 @@ - [ - // Necessary because otherwise the daemon isn't working - 'pidfile' => '/var/run/friendica.pid', - - 'logfile' => '/var/www/html/friendica.log', - 'loglevel' => 'notice', - ], - 'storage' => [ - 'filesystem_path' => '/var/www/html/storage', - ], -]; - -if (getenv('FRIENDICA_TZ')) { - $config['config']['timezone'] = getenv('FRIENDICA_TZ'); -} - -if (getenv('FRIENDICA_LANG')) { - $config['config']['language'] = getenv('FRIENDICA_LANG'); -} - -if (getenv('FRIENDICA_ADMIN_MAIL')) { - $config['config']['admin_email'] = getenv('FRIENDICA_ADMIN_MAIL'); -} - -if (getenv('FRIENDICA_SITENAME')) { - $config['config']['sitename'] = getenv('FRIENDICA_SITENAME'); -} - -if (!empty(getenv('FRIENDICA_NO_VALIDATION'))) { - $config['system']['disable_url_validation'] = true; - $config['system']['disable_email_validation'] = true; -} - -if (!empty(getenv('FRIENDICA_DATA'))) { - $config['storage']['class'] = \Friendica\Model\Storage\Filesystem::class; - - if (!empty(getenv('FRIENDICA_DATA_DIR'))) { - $config['storage']['filesystem_path'] = getenv('FRIENDICA_DATA'); - } -} - -if (!empty(getenv('FRIENDICA_DEBUGGING'))) { - $config['system']['debugging'] = true; - if (!empty(getenv('FRIENDICA_LOGFILE'))) { - $config['system']['logfile'] = getenv('FRIENDICA_LOGFILE'); - } - if (!empty(getenv('FRIENDICA_LOGLEVEL'))) { - $config['system']['loglevel'] = getenv('FRIENDICA_LOGLEVEL'); - } -} - -return $config; diff --git a/2020.12-dev/fpm-alpine/cron.sh b/2020.12-dev/fpm-alpine/cron.sh deleted file mode 100755 index f899df9..0000000 --- a/2020.12-dev/fpm-alpine/cron.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -trap "break;exit" HUP INT TERM - -while [ ! -f /var/www/html/bin/daemon.php ]; do - sleep 1 -done - -echo "Waiting for MySQL $MYSQL_HOST initialization..." -if php /var/www/html/bin/wait-for-connection "$MYSQL_HOST" "${MYSQL_PORT:-3306}" 300; then - sh /setup_msmtp.sh - exec /sbin/tini -- php /var/www/html/bin/daemon.php -f start -else - echo "[ERROR] Waited 300 seconds, no response" >&2 -fi diff --git a/2020.12-dev/fpm-alpine/entrypoint-dev.sh b/2020.12-dev/fpm-alpine/entrypoint-dev.sh deleted file mode 100755 index 08c3c13..0000000 --- a/2020.12-dev/fpm-alpine/entrypoint-dev.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh -set -eu - -# checks if the branch and repository exists -check_branch() { - repo=${1:-} - branch=${2:-} - git ls-remote --heads --tags "https://github.com/$repo" | grep -E "refs/(heads|tags)/${branch}$" >/dev/null - [ "$?" -eq "0" ] -} - -# clones the whole develop branch (Friendica and Addons) -clone_develop() { - friendica_git="${FRIENDICA_VERSION}" - addons_git="${FRIENDICA_ADDONS}" - friendica_repo="${FRIENDICA_REPOSITORY:-friendica/friendica}" - friendica_addons_repo="${FRIENDICA_ADDONS_REPO:-friendica/friendica-addons}" - - if echo "{$friendica_git,,}" | grep -Eq '^.*\-dev'; then - friendica_git="develop" - fi - - if echo "{$addons_git,,}" | grep -Eq '^.*\-dev'; then - addons_git="develop" - fi - - # Check if the branches exist before wiping the - if check_branch "$friendica_repo" "$friendica_git" && check_branch "$friendica_addons_repo" "$addons_git" ; then - echo "Cloning '${friendica_git}' from GitHub repository '${friendica_repo}' ..." - - # Removing the whole directory first - rm -fr /usr/src/friendica - git clone -q -b ${friendica_git} "https://github.com/${friendica_repo}" /usr/src/friendica - - mkdir /usr/src/friendica/addon - git clone -q -b ${addons_git} "https://github.com/${friendica_addons_repo}" /usr/src/friendica/addon - - echo "Download finished" - - if [ ! -f /usr/src/friendica/VERSION ]; then - echo "Couldn't clone repository" - exit 1 - fi - - /usr/src/friendica/bin/composer.phar install --no-dev -d /usr/src/friendica - return 0 - - else - if check_branch "$friendica_repo" "$friendica_git"; then - echo "$friendica_repo/$friendica_git is not valid." - else - echo "$friendica_addons_repo/$addons_git is not valid." - fi - echo "Using old version." - return 1 - - fi -} - -# just check if we execute apache or php-fpm -if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then - # cloning from git is just possible for develop or Release Candidate - if echo "${FRIENDICA_VERSION}" | grep -Eq '^.*(\-dev|-rc|-RC)' || [ "${FRIENDICA_UPGRADE:-false}" = "true" ] || [ ! -f /usr/src/friendica/VERSION ]; then - # just clone & check if it's a new install or upgrade - clone_develop - fi -fi - -exec /entrypoint.sh "$@" diff --git a/2020.12-dev/fpm-alpine/entrypoint.sh b/2020.12-dev/fpm-alpine/entrypoint.sh deleted file mode 100755 index fa51564..0000000 --- a/2020.12-dev/fpm-alpine/entrypoint.sh +++ /dev/null @@ -1,145 +0,0 @@ -#!/bin/sh -set -eu - -# run an command with the www-data user -run_as() { - set -- -c "cd /var/www/html; $*" - if [ "$(id -u)" -eq 0 ]; then - su - www-data -s /bin/sh "$@" - else - sh "$@" - fi -} - -# checks if the the first parameter is greater than the second parameter -version_greater() { - [ "$(printf '%s\n' "$@" | sed -e 's/-rc/.1/' | sed -e 's/-dev/.2/' | sort -t '.' -k1,1n -k2,2n -k3,3nbr | head -n 1)" != "$(printf "$1" | sed -e 's/-rc/.1/' | sed -e 's/-dev/.2/')" ] -} - -# usage: file_env VAR [DEFAULT] -# ie: file_env 'XYZ_DB_PASSWORD' 'example' -# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of -# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) -file_env() { - local var="$1" - local fileVar="${var}_FILE" - local def="${2:-}" - local varValue=$(env | grep -E "^${var}=" | sed -E -e "s/^${var}=//") - local fileVarValue=$(env | grep -E "^${fileVar}=" | sed -E -e "s/^${fileVar}=//") - if [ -n "${varValue}" ] && [ -n "${fileVarValue}" ]; then - echo >&2 "error: both $var and $fileVar are set (but are exclusive)" - exit 1 - fi - if [ -n "${varValue}" ]; then - export "$var"="${varValue}" - elif [ -n "${fileVarValue}" ]; then - export "$var"="$(cat "${fileVarValue}")" - elif [ -n "${def}" ]; then - export "$var"="$def" - fi - unset "$fileVar" -} - -sh /setup_msmtp.sh - -# just check if we execute apache or php-fpm -if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then - installed_version="0.0.0.0" - if [ -f /var/www/html/VERSION ]; then - installed_version="$(cat /var/www/html/VERSION)" - fi - - image_version="$(cat /usr/src/friendica/VERSION)" - - # no downgrading possible - if version_greater "$installed_version" "$image_version"; then - echo "Can't copy Friendica sources because the version of the data ($installed_version) is higher than the docker image ($image_version)" - exit 1 - fi - - # check it just in case the version is greater or if we force the upgrade - if version_greater "$image_version" "$installed_version" || [ "${FRIENDICA_UPGRADE:-false}" = "true" ]; then - echo "Initializing Friendica $image_version ..." - - if [ "$installed_version" != "0.0.0.0" ]; then - echo "Upgrading Friendica from $installed_version ..." - fi - - if [ "$(id -u)" -eq 0 ]; then - rsync_options="-rlDog --chown=www-data:www-data" - else - rsync_options="-rlD" - fi - - rsync $rsync_options --delete --exclude-from=/upgrade.exclude /usr/src/friendica/ /var/www/html/ - - # Update docker-based config files, but never delete other config files - rsync $rsync_options --update /usr/src/friendica/config/ /var/www/html/config/ - - # In case there is no .htaccess, copy it from the default dist file - if [ ! -f "/var/www/html/.htaccess" ]; then - cp "/var/www/html/.htaccess-dist" "/var/www/html/.htaccess" - fi - - if [ -d /var/www/html/view/smarty3 ]; then - chmod -R 777 /var/www/html/view/smarty3 - fi - echo "Initializing finished" - - # install - if [ "$installed_version" = "0.0.0.0" ]; then - echo "New Friendica instance" - - file_env FRIENDICA_ADMIN_MAIL - - file_env MYSQL_DATABASE - file_env MYSQL_USER - file_env MYSQL_PASSWORD - - install=false - if [ -n "${MYSQL_DATABASE+x}" ] && [ -n "${MYSQL_PASSWORD+x}" ] && [ -n "${MYSQL_HOST+x}" ] && [ -n "${MYSQL_USER+x}" ] && [ -n "${FRIENDICA_ADMIN_MAIL+x}" ] && [ -n "${FRIENDICA_URL+x}" ]; then - echo "Installation with environment variables" - - FRIENDICA_TZ=${FRIENDICA_TZ:-America/LosAngeles} - FRIENDICA_LANG=${FRIENDICA_LANG:-en} - MYSQL_PORT=${MYSQL_PORT:-3306} - - # shellcheck disable=SC2016 - install_options='-s --dbhost "'$MYSQL_HOST'" --dbport "'$MYSQL_PORT'" --dbdata "'$MYSQL_DATABASE'" --dbuser "'$MYSQL_USER'" --dbpass "'$MYSQL_PASSWORD'"' - - # shellcheck disable=SC2016 - install_options=$install_options' --admin "'$FRIENDICA_ADMIN_MAIL'" --tz "'$FRIENDICA_TZ'" --lang "'$FRIENDICA_LANG'" --url "'$FRIENDICA_URL'"' - install=true - fi - - if [ "$install" = true ]; then - echo "Waiting for MySQL $MYSQL_HOST initialization..." - if run_as "php /var/www/html/bin/wait-for-connection $MYSQL_HOST ${MYSQL_PORT:-3306} 300"; then - - echo "Starting Friendica installation ..." - run_as "php /var/www/html/bin/console.php autoinstall $install_options" - - rm -fr /var/www/html/view/smarty3/compiled - - # load other config files (*.config.php) to the config folder - if [ -d "/usr/src/config" ]; then - rsync $rsync_options --ignore-existing /usr/src/config/ /var/www/html/config/ - fi - - echo "Installation finished" - else - echo "[ERROR] Waited 300 seconds, no response" >&2 - fi - else - echo "Running web-based installer on first connect!" - fi - # upgrade - else - echo "Upgrading Friendica ..." - run_as 'php /var/www/html/bin/console.php dbstructure update -f' - echo "Upgrading finished" - fi - fi -fi - -exec "$@" diff --git a/2020.12-dev/fpm-alpine/setup_msmtp.sh b/2020.12-dev/fpm-alpine/setup_msmtp.sh deleted file mode 100644 index b2e22f0..0000000 --- a/2020.12-dev/fpm-alpine/setup_msmtp.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/sh -set -eu - -if [ -n "${SMTP_DOMAIN+x}" ] && [ -n "${SMTP+x}" ] && [ "${SMTP}" != "localhost" ]; then - SITENAME="${FRIENDICA_SITENAME:-Friendica Social Network}" - echo "Setup MSMTP for '$SITENAME' with '$SMTP' ..." - - smtp_from="${SMTP_FROM:=no-reply}" - - # Setup MSMTP - usermod --comment "$(echo "$SITENAME" | tr -dc '[:print:]')" root - usermod --comment "$(echo "$SITENAME" | tr -dc '[:print:]')" www-data - - # add possible mail-senders - { - echo "www-data: $smtp_from@$SMTP_DOMAIN" - echo "root: $smtp_from@$SMTP_DOMAIN" - } >/etc/aliases - - # create msmtp settings - { - echo "account default" - echo "host $SMTP" - if [ -n "${SMTP_PORT+x}" ]; then echo "port $SMTP_PORT"; else echo "port 587"; fi - echo "from \"$smtp_from@$SMTP_DOMAIN\"" - echo "tls_certcheck off" # No certcheck because of internal docker mail-hostnames - if [ -n "${SMTP_TLS+x}" ]; then echo "tls on"; fi - if [ -n "${SMTP_STARTTLS+x}" ]; then echo "tls_starttls on"; fi - if [ -n "${SMTP_AUTH_USER+x}" ]; then echo "auth on"; fi - if [ -n "${SMTP_AUTH_USER+x}" ]; then echo "user \"$SMTP_AUTH_USER\""; fi - if [ -n "${SMTP_AUTH_PASS+x}" ]; then echo "password \"$SMTP_AUTH_PASS\""; fi - echo "logfile /var/log/msmtp.log" - echo "aliases /etc/aliases" - } >/etc/msmtprc - - echo "Setup finished" -fi diff --git a/2020.12-dev/fpm-alpine/upgrade.exclude b/2020.12-dev/fpm-alpine/upgrade.exclude deleted file mode 100644 index 2fb6533..0000000 --- a/2020.12-dev/fpm-alpine/upgrade.exclude +++ /dev/null @@ -1,10 +0,0 @@ -/.git/ -/photo/ -/proxy/ -/.htconfig.php -/.htaccess -/home.* -/config/ -/storage/ -/log/ -*.log \ No newline at end of file diff --git a/2020.12-dev/fpm/Dockerfile b/2020.12-dev/fpm/Dockerfile deleted file mode 100644 index 0c37d48..0000000 --- a/2020.12-dev/fpm/Dockerfile +++ /dev/null @@ -1,134 +0,0 @@ -# DO NOT EDIT: created by update.sh from Dockerfile-debian.template -FROM php:7.3-fpm-buster - -# entrypoint.sh and cron.sh dependencies -RUN set -ex; \ - \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - rsync \ - bzip2 \ - git \ -# For mail() support - msmtp \ -# For tini installation - gnupg dirmngr \ - ; \ - rm -rf /var/lib/apt/lists/*; - -# Add tini for reaping processes -ENV TINI_VERSION v0.19.0 -RUN export BUILD_ARCH=$(dpkg-architecture --query DEB_BUILD_ARCH) \ - && mkdir ~/.gnupg \ - && echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \ - && curl -L -o /sbin/tini https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-${BUILD_ARCH} \ - && curl -L -o /tini.asc https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-${BUILD_ARCH}.asc \ - && gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 \ - && gpg --batch --verify /tini.asc /sbin/tini \ - && chmod +x /sbin/tini - -# install the PHP extensions we need -# see https://friendi.ca/resources/requirements/ -RUN set -ex; \ - \ - savedAptMark="$(apt-mark showmanual)"; \ - \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - mariadb-client \ - bash \ - libpng-dev \ - libjpeg62-turbo-dev \ - libtool \ - libmagick++-dev \ - libmemcached-dev \ - libgraphicsmagick1-dev \ - libfreetype6-dev \ - librsvg2-2 \ - libzip-dev \ - libldap2-dev \ - ; \ - \ - debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \ - \ - docker-php-ext-configure gd \ - --with-gd \ - --with-freetype-dir=/usr/include/ \ - --with-png-dir=/usr/include/ \ - --with-jpeg-dir=/usr/include/ \ - ; \ - docker-php-ext-configure ldap \ - --with-libdir=lib/$debMultiarch/ \ - ;\ - docker-php-ext-install -j "$(nproc)" \ - pdo_mysql \ - gd \ - zip \ - opcache \ - ctype \ - pcntl \ - ldap \ - ; \ - \ -# pecl will claim success even if one install fails, so we need to perform each install separately - pecl install apcu-5.1.19; \ - pecl install memcached-3.1.5; \ - pecl install redis-5.3.2; \ - pecl install imagick-3.4.4; \ - \ - docker-php-ext-enable \ - apcu \ - memcached \ - redis \ - imagick \ - ; \ - \ -# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies - apt-mark auto '.*' > /dev/null; \ - apt-mark manual $savedAptMark; \ - ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \ - | awk '/=>/ { print $3 }' \ - | sort -u \ - | xargs -r dpkg-query -S \ - | cut -d: -f1 \ - | sort -u \ - | xargs -rt apt-mark manual; \ - \ - apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ - rm -rf /var/lib/apt/lists/* - -# set recommended PHP.ini settings -RUN set -ex; \ - { \ - echo 'opcache.enable=1' ; \ - echo 'opcache.interned_strings_buffer=8'; \ - echo 'opcache.max_accelerated_files=10000'; \ - echo 'opcache.memory_consumption=128'; \ - echo 'opcache.save_comments=1'; \ - echo 'opcache.revalidte_freq=1'; \ - } > /usr/local/etc/php/conf.d/opcache-recommended.ini; \ - \ - { \ - echo sendmail_path = "/usr/bin/msmtp -t"; \ - } > /usr/local/etc/php/conf.d/sendmail.ini; \ - \ - echo 'apc.enable_cli=1' >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini; \ - \ - echo 'memory_limit=512M' > /usr/local/etc/php/conf.d/memory-limit.ini; \ - \ - mkdir /var/www/data; \ - chown -R www-data:root /var/www; \ - chmod -R g=u /var/www - -VOLUME /var/www/html - - -ENV FRIENDICA_VERSION "2020.12-dev" -ENV FRIENDICA_ADDONS "2020.12-dev" - - -COPY *.sh upgrade.exclude / -COPY config/* /usr/src/friendica/config/ - -ENTRYPOINT ["/entrypoint-dev.sh"] -CMD ["php-fpm"] diff --git a/2020.12-dev/fpm/config/00apcu.config.php b/2020.12-dev/fpm/config/00apcu.config.php deleted file mode 100644 index d6dac4f..0000000 --- a/2020.12-dev/fpm/config/00apcu.config.php +++ /dev/null @@ -1,12 +0,0 @@ - [ - 'cache_driver' => 'apcu', - 'session_handler' => 'cache', - ], -]; diff --git a/2020.12-dev/fpm/config/01redis.config.php b/2020.12-dev/fpm/config/01redis.config.php deleted file mode 100644 index 1a43c95..0000000 --- a/2020.12-dev/fpm/config/01redis.config.php +++ /dev/null @@ -1,15 +0,0 @@ - [ - 'lock_driver' => 'redis', - 'redis_host' => getenv('REDIS_HOST'), - 'redis_port' => (getenv('REDIS_PORT') ? getenv('REDIS_PORT') : ''), - 'redis_password' => (getenv('REDIS_PW') ? getenv('REDIS_PW') : ''), - 'redis_db' => (getenv('REDIS_DB') ? getenv('REDIS_DB') : 0), - ], - ]; -} else { - return []; -} diff --git a/2020.12-dev/fpm/config/zz-docker.config.php b/2020.12-dev/fpm/config/zz-docker.config.php deleted file mode 100644 index 2d5835d..0000000 --- a/2020.12-dev/fpm/config/zz-docker.config.php +++ /dev/null @@ -1,62 +0,0 @@ - [ - // Necessary because otherwise the daemon isn't working - 'pidfile' => '/var/run/friendica.pid', - - 'logfile' => '/var/www/html/friendica.log', - 'loglevel' => 'notice', - ], - 'storage' => [ - 'filesystem_path' => '/var/www/html/storage', - ], -]; - -if (getenv('FRIENDICA_TZ')) { - $config['config']['timezone'] = getenv('FRIENDICA_TZ'); -} - -if (getenv('FRIENDICA_LANG')) { - $config['config']['language'] = getenv('FRIENDICA_LANG'); -} - -if (getenv('FRIENDICA_ADMIN_MAIL')) { - $config['config']['admin_email'] = getenv('FRIENDICA_ADMIN_MAIL'); -} - -if (getenv('FRIENDICA_SITENAME')) { - $config['config']['sitename'] = getenv('FRIENDICA_SITENAME'); -} - -if (!empty(getenv('FRIENDICA_NO_VALIDATION'))) { - $config['system']['disable_url_validation'] = true; - $config['system']['disable_email_validation'] = true; -} - -if (!empty(getenv('FRIENDICA_DATA'))) { - $config['storage']['class'] = \Friendica\Model\Storage\Filesystem::class; - - if (!empty(getenv('FRIENDICA_DATA_DIR'))) { - $config['storage']['filesystem_path'] = getenv('FRIENDICA_DATA'); - } -} - -if (!empty(getenv('FRIENDICA_DEBUGGING'))) { - $config['system']['debugging'] = true; - if (!empty(getenv('FRIENDICA_LOGFILE'))) { - $config['system']['logfile'] = getenv('FRIENDICA_LOGFILE'); - } - if (!empty(getenv('FRIENDICA_LOGLEVEL'))) { - $config['system']['loglevel'] = getenv('FRIENDICA_LOGLEVEL'); - } -} - -return $config; diff --git a/2020.12-dev/fpm/cron.sh b/2020.12-dev/fpm/cron.sh deleted file mode 100755 index f899df9..0000000 --- a/2020.12-dev/fpm/cron.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -trap "break;exit" HUP INT TERM - -while [ ! -f /var/www/html/bin/daemon.php ]; do - sleep 1 -done - -echo "Waiting for MySQL $MYSQL_HOST initialization..." -if php /var/www/html/bin/wait-for-connection "$MYSQL_HOST" "${MYSQL_PORT:-3306}" 300; then - sh /setup_msmtp.sh - exec /sbin/tini -- php /var/www/html/bin/daemon.php -f start -else - echo "[ERROR] Waited 300 seconds, no response" >&2 -fi diff --git a/2020.12-dev/fpm/entrypoint-dev.sh b/2020.12-dev/fpm/entrypoint-dev.sh deleted file mode 100755 index 08c3c13..0000000 --- a/2020.12-dev/fpm/entrypoint-dev.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh -set -eu - -# checks if the branch and repository exists -check_branch() { - repo=${1:-} - branch=${2:-} - git ls-remote --heads --tags "https://github.com/$repo" | grep -E "refs/(heads|tags)/${branch}$" >/dev/null - [ "$?" -eq "0" ] -} - -# clones the whole develop branch (Friendica and Addons) -clone_develop() { - friendica_git="${FRIENDICA_VERSION}" - addons_git="${FRIENDICA_ADDONS}" - friendica_repo="${FRIENDICA_REPOSITORY:-friendica/friendica}" - friendica_addons_repo="${FRIENDICA_ADDONS_REPO:-friendica/friendica-addons}" - - if echo "{$friendica_git,,}" | grep -Eq '^.*\-dev'; then - friendica_git="develop" - fi - - if echo "{$addons_git,,}" | grep -Eq '^.*\-dev'; then - addons_git="develop" - fi - - # Check if the branches exist before wiping the - if check_branch "$friendica_repo" "$friendica_git" && check_branch "$friendica_addons_repo" "$addons_git" ; then - echo "Cloning '${friendica_git}' from GitHub repository '${friendica_repo}' ..." - - # Removing the whole directory first - rm -fr /usr/src/friendica - git clone -q -b ${friendica_git} "https://github.com/${friendica_repo}" /usr/src/friendica - - mkdir /usr/src/friendica/addon - git clone -q -b ${addons_git} "https://github.com/${friendica_addons_repo}" /usr/src/friendica/addon - - echo "Download finished" - - if [ ! -f /usr/src/friendica/VERSION ]; then - echo "Couldn't clone repository" - exit 1 - fi - - /usr/src/friendica/bin/composer.phar install --no-dev -d /usr/src/friendica - return 0 - - else - if check_branch "$friendica_repo" "$friendica_git"; then - echo "$friendica_repo/$friendica_git is not valid." - else - echo "$friendica_addons_repo/$addons_git is not valid." - fi - echo "Using old version." - return 1 - - fi -} - -# just check if we execute apache or php-fpm -if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then - # cloning from git is just possible for develop or Release Candidate - if echo "${FRIENDICA_VERSION}" | grep -Eq '^.*(\-dev|-rc|-RC)' || [ "${FRIENDICA_UPGRADE:-false}" = "true" ] || [ ! -f /usr/src/friendica/VERSION ]; then - # just clone & check if it's a new install or upgrade - clone_develop - fi -fi - -exec /entrypoint.sh "$@" diff --git a/2020.12-dev/fpm/entrypoint.sh b/2020.12-dev/fpm/entrypoint.sh deleted file mode 100755 index fa51564..0000000 --- a/2020.12-dev/fpm/entrypoint.sh +++ /dev/null @@ -1,145 +0,0 @@ -#!/bin/sh -set -eu - -# run an command with the www-data user -run_as() { - set -- -c "cd /var/www/html; $*" - if [ "$(id -u)" -eq 0 ]; then - su - www-data -s /bin/sh "$@" - else - sh "$@" - fi -} - -# checks if the the first parameter is greater than the second parameter -version_greater() { - [ "$(printf '%s\n' "$@" | sed -e 's/-rc/.1/' | sed -e 's/-dev/.2/' | sort -t '.' -k1,1n -k2,2n -k3,3nbr | head -n 1)" != "$(printf "$1" | sed -e 's/-rc/.1/' | sed -e 's/-dev/.2/')" ] -} - -# usage: file_env VAR [DEFAULT] -# ie: file_env 'XYZ_DB_PASSWORD' 'example' -# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of -# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) -file_env() { - local var="$1" - local fileVar="${var}_FILE" - local def="${2:-}" - local varValue=$(env | grep -E "^${var}=" | sed -E -e "s/^${var}=//") - local fileVarValue=$(env | grep -E "^${fileVar}=" | sed -E -e "s/^${fileVar}=//") - if [ -n "${varValue}" ] && [ -n "${fileVarValue}" ]; then - echo >&2 "error: both $var and $fileVar are set (but are exclusive)" - exit 1 - fi - if [ -n "${varValue}" ]; then - export "$var"="${varValue}" - elif [ -n "${fileVarValue}" ]; then - export "$var"="$(cat "${fileVarValue}")" - elif [ -n "${def}" ]; then - export "$var"="$def" - fi - unset "$fileVar" -} - -sh /setup_msmtp.sh - -# just check if we execute apache or php-fpm -if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then - installed_version="0.0.0.0" - if [ -f /var/www/html/VERSION ]; then - installed_version="$(cat /var/www/html/VERSION)" - fi - - image_version="$(cat /usr/src/friendica/VERSION)" - - # no downgrading possible - if version_greater "$installed_version" "$image_version"; then - echo "Can't copy Friendica sources because the version of the data ($installed_version) is higher than the docker image ($image_version)" - exit 1 - fi - - # check it just in case the version is greater or if we force the upgrade - if version_greater "$image_version" "$installed_version" || [ "${FRIENDICA_UPGRADE:-false}" = "true" ]; then - echo "Initializing Friendica $image_version ..." - - if [ "$installed_version" != "0.0.0.0" ]; then - echo "Upgrading Friendica from $installed_version ..." - fi - - if [ "$(id -u)" -eq 0 ]; then - rsync_options="-rlDog --chown=www-data:www-data" - else - rsync_options="-rlD" - fi - - rsync $rsync_options --delete --exclude-from=/upgrade.exclude /usr/src/friendica/ /var/www/html/ - - # Update docker-based config files, but never delete other config files - rsync $rsync_options --update /usr/src/friendica/config/ /var/www/html/config/ - - # In case there is no .htaccess, copy it from the default dist file - if [ ! -f "/var/www/html/.htaccess" ]; then - cp "/var/www/html/.htaccess-dist" "/var/www/html/.htaccess" - fi - - if [ -d /var/www/html/view/smarty3 ]; then - chmod -R 777 /var/www/html/view/smarty3 - fi - echo "Initializing finished" - - # install - if [ "$installed_version" = "0.0.0.0" ]; then - echo "New Friendica instance" - - file_env FRIENDICA_ADMIN_MAIL - - file_env MYSQL_DATABASE - file_env MYSQL_USER - file_env MYSQL_PASSWORD - - install=false - if [ -n "${MYSQL_DATABASE+x}" ] && [ -n "${MYSQL_PASSWORD+x}" ] && [ -n "${MYSQL_HOST+x}" ] && [ -n "${MYSQL_USER+x}" ] && [ -n "${FRIENDICA_ADMIN_MAIL+x}" ] && [ -n "${FRIENDICA_URL+x}" ]; then - echo "Installation with environment variables" - - FRIENDICA_TZ=${FRIENDICA_TZ:-America/LosAngeles} - FRIENDICA_LANG=${FRIENDICA_LANG:-en} - MYSQL_PORT=${MYSQL_PORT:-3306} - - # shellcheck disable=SC2016 - install_options='-s --dbhost "'$MYSQL_HOST'" --dbport "'$MYSQL_PORT'" --dbdata "'$MYSQL_DATABASE'" --dbuser "'$MYSQL_USER'" --dbpass "'$MYSQL_PASSWORD'"' - - # shellcheck disable=SC2016 - install_options=$install_options' --admin "'$FRIENDICA_ADMIN_MAIL'" --tz "'$FRIENDICA_TZ'" --lang "'$FRIENDICA_LANG'" --url "'$FRIENDICA_URL'"' - install=true - fi - - if [ "$install" = true ]; then - echo "Waiting for MySQL $MYSQL_HOST initialization..." - if run_as "php /var/www/html/bin/wait-for-connection $MYSQL_HOST ${MYSQL_PORT:-3306} 300"; then - - echo "Starting Friendica installation ..." - run_as "php /var/www/html/bin/console.php autoinstall $install_options" - - rm -fr /var/www/html/view/smarty3/compiled - - # load other config files (*.config.php) to the config folder - if [ -d "/usr/src/config" ]; then - rsync $rsync_options --ignore-existing /usr/src/config/ /var/www/html/config/ - fi - - echo "Installation finished" - else - echo "[ERROR] Waited 300 seconds, no response" >&2 - fi - else - echo "Running web-based installer on first connect!" - fi - # upgrade - else - echo "Upgrading Friendica ..." - run_as 'php /var/www/html/bin/console.php dbstructure update -f' - echo "Upgrading finished" - fi - fi -fi - -exec "$@" diff --git a/2020.12-dev/fpm/setup_msmtp.sh b/2020.12-dev/fpm/setup_msmtp.sh deleted file mode 100644 index b2e22f0..0000000 --- a/2020.12-dev/fpm/setup_msmtp.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/sh -set -eu - -if [ -n "${SMTP_DOMAIN+x}" ] && [ -n "${SMTP+x}" ] && [ "${SMTP}" != "localhost" ]; then - SITENAME="${FRIENDICA_SITENAME:-Friendica Social Network}" - echo "Setup MSMTP for '$SITENAME' with '$SMTP' ..." - - smtp_from="${SMTP_FROM:=no-reply}" - - # Setup MSMTP - usermod --comment "$(echo "$SITENAME" | tr -dc '[:print:]')" root - usermod --comment "$(echo "$SITENAME" | tr -dc '[:print:]')" www-data - - # add possible mail-senders - { - echo "www-data: $smtp_from@$SMTP_DOMAIN" - echo "root: $smtp_from@$SMTP_DOMAIN" - } >/etc/aliases - - # create msmtp settings - { - echo "account default" - echo "host $SMTP" - if [ -n "${SMTP_PORT+x}" ]; then echo "port $SMTP_PORT"; else echo "port 587"; fi - echo "from \"$smtp_from@$SMTP_DOMAIN\"" - echo "tls_certcheck off" # No certcheck because of internal docker mail-hostnames - if [ -n "${SMTP_TLS+x}" ]; then echo "tls on"; fi - if [ -n "${SMTP_STARTTLS+x}" ]; then echo "tls_starttls on"; fi - if [ -n "${SMTP_AUTH_USER+x}" ]; then echo "auth on"; fi - if [ -n "${SMTP_AUTH_USER+x}" ]; then echo "user \"$SMTP_AUTH_USER\""; fi - if [ -n "${SMTP_AUTH_PASS+x}" ]; then echo "password \"$SMTP_AUTH_PASS\""; fi - echo "logfile /var/log/msmtp.log" - echo "aliases /etc/aliases" - } >/etc/msmtprc - - echo "Setup finished" -fi diff --git a/2020.12-dev/fpm/upgrade.exclude b/2020.12-dev/fpm/upgrade.exclude deleted file mode 100644 index 2fb6533..0000000 --- a/2020.12-dev/fpm/upgrade.exclude +++ /dev/null @@ -1,10 +0,0 @@ -/.git/ -/photo/ -/proxy/ -/.htconfig.php -/.htaccess -/home.* -/config/ -/storage/ -/log/ -*.log \ No newline at end of file diff --git a/2020.12-rc/apache/Dockerfile b/2020.12-rc/apache/Dockerfile deleted file mode 100644 index 88ea4b3..0000000 --- a/2020.12-rc/apache/Dockerfile +++ /dev/null @@ -1,143 +0,0 @@ -# DO NOT EDIT: created by update.sh from Dockerfile-debian.template -FROM php:7.3-apache-buster - -# entrypoint.sh and cron.sh dependencies -RUN set -ex; \ - \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - rsync \ - bzip2 \ - git \ -# For mail() support - msmtp \ -# For tini installation - gnupg dirmngr \ - ; \ - rm -rf /var/lib/apt/lists/*; - -# Add tini for reaping processes -ENV TINI_VERSION v0.19.0 -RUN export BUILD_ARCH=$(dpkg-architecture --query DEB_BUILD_ARCH) \ - && mkdir ~/.gnupg \ - && echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \ - && curl -L -o /sbin/tini https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-${BUILD_ARCH} \ - && curl -L -o /tini.asc https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-${BUILD_ARCH}.asc \ - && gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 \ - && gpg --batch --verify /tini.asc /sbin/tini \ - && chmod +x /sbin/tini - -# install the PHP extensions we need -# see https://friendi.ca/resources/requirements/ -RUN set -ex; \ - \ - savedAptMark="$(apt-mark showmanual)"; \ - \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - mariadb-client \ - bash \ - libpng-dev \ - libjpeg62-turbo-dev \ - libtool \ - libmagick++-dev \ - libmemcached-dev \ - libgraphicsmagick1-dev \ - libfreetype6-dev \ - librsvg2-2 \ - libzip-dev \ - libldap2-dev \ - ; \ - \ - debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \ - \ - docker-php-ext-configure gd \ - --with-gd \ - --with-freetype-dir=/usr/include/ \ - --with-png-dir=/usr/include/ \ - --with-jpeg-dir=/usr/include/ \ - ; \ - docker-php-ext-configure ldap \ - --with-libdir=lib/$debMultiarch/ \ - ;\ - docker-php-ext-install -j "$(nproc)" \ - pdo_mysql \ - gd \ - zip \ - opcache \ - ctype \ - pcntl \ - ldap \ - ; \ - \ -# pecl will claim success even if one install fails, so we need to perform each install separately - pecl install apcu-5.1.19; \ - pecl install memcached-3.1.5; \ - pecl install redis-5.3.2; \ - pecl install imagick-3.4.4; \ - \ - docker-php-ext-enable \ - apcu \ - memcached \ - redis \ - imagick \ - ; \ - \ -# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies - apt-mark auto '.*' > /dev/null; \ - apt-mark manual $savedAptMark; \ - ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \ - | awk '/=>/ { print $3 }' \ - | sort -u \ - | xargs -r dpkg-query -S \ - | cut -d: -f1 \ - | sort -u \ - | xargs -rt apt-mark manual; \ - \ - apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ - rm -rf /var/lib/apt/lists/* - -# set recommended PHP.ini settings -RUN set -ex; \ - { \ - echo 'opcache.enable=1' ; \ - echo 'opcache.interned_strings_buffer=8'; \ - echo 'opcache.max_accelerated_files=10000'; \ - echo 'opcache.memory_consumption=128'; \ - echo 'opcache.save_comments=1'; \ - echo 'opcache.revalidte_freq=1'; \ - } > /usr/local/etc/php/conf.d/opcache-recommended.ini; \ - \ - { \ - echo sendmail_path = "/usr/bin/msmtp -t"; \ - } > /usr/local/etc/php/conf.d/sendmail.ini; \ - \ - echo 'apc.enable_cli=1' >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini; \ - \ - echo 'memory_limit=512M' > /usr/local/etc/php/conf.d/memory-limit.ini; \ - \ - mkdir /var/www/data; \ - chown -R www-data:root /var/www; \ - chmod -R g=u /var/www - -VOLUME /var/www/html - -RUN set -ex;\ - a2enmod rewrite remoteip ;\ - {\ - echo RemoteIPHeader X-Real-IP ;\ - echo RemoteIPTrustedProxy 10.0.0.0/8 ;\ - echo RemoteIPTrustedProxy 172.16.0.0/12 ;\ - echo RemoteIPTrustedProxy 192.168.0.0/16 ;\ - } > /etc/apache2/conf-available/remoteip.conf;\ - a2enconf remoteip - -ENV FRIENDICA_VERSION "2020.12-rc" -ENV FRIENDICA_ADDONS "2020.12-rc" - - -COPY *.sh upgrade.exclude / -COPY config/* /usr/src/friendica/config/ - -ENTRYPOINT ["/entrypoint-dev.sh"] -CMD ["apache2-foreground"] diff --git a/2020.12-rc/apache/config/00apcu.config.php b/2020.12-rc/apache/config/00apcu.config.php deleted file mode 100644 index d6dac4f..0000000 --- a/2020.12-rc/apache/config/00apcu.config.php +++ /dev/null @@ -1,12 +0,0 @@ - [ - 'cache_driver' => 'apcu', - 'session_handler' => 'cache', - ], -]; diff --git a/2020.12-rc/apache/config/01redis.config.php b/2020.12-rc/apache/config/01redis.config.php deleted file mode 100644 index 1a43c95..0000000 --- a/2020.12-rc/apache/config/01redis.config.php +++ /dev/null @@ -1,15 +0,0 @@ - [ - 'lock_driver' => 'redis', - 'redis_host' => getenv('REDIS_HOST'), - 'redis_port' => (getenv('REDIS_PORT') ? getenv('REDIS_PORT') : ''), - 'redis_password' => (getenv('REDIS_PW') ? getenv('REDIS_PW') : ''), - 'redis_db' => (getenv('REDIS_DB') ? getenv('REDIS_DB') : 0), - ], - ]; -} else { - return []; -} diff --git a/2020.12-rc/apache/config/zz-docker.config.php b/2020.12-rc/apache/config/zz-docker.config.php deleted file mode 100644 index 2d5835d..0000000 --- a/2020.12-rc/apache/config/zz-docker.config.php +++ /dev/null @@ -1,62 +0,0 @@ - [ - // Necessary because otherwise the daemon isn't working - 'pidfile' => '/var/run/friendica.pid', - - 'logfile' => '/var/www/html/friendica.log', - 'loglevel' => 'notice', - ], - 'storage' => [ - 'filesystem_path' => '/var/www/html/storage', - ], -]; - -if (getenv('FRIENDICA_TZ')) { - $config['config']['timezone'] = getenv('FRIENDICA_TZ'); -} - -if (getenv('FRIENDICA_LANG')) { - $config['config']['language'] = getenv('FRIENDICA_LANG'); -} - -if (getenv('FRIENDICA_ADMIN_MAIL')) { - $config['config']['admin_email'] = getenv('FRIENDICA_ADMIN_MAIL'); -} - -if (getenv('FRIENDICA_SITENAME')) { - $config['config']['sitename'] = getenv('FRIENDICA_SITENAME'); -} - -if (!empty(getenv('FRIENDICA_NO_VALIDATION'))) { - $config['system']['disable_url_validation'] = true; - $config['system']['disable_email_validation'] = true; -} - -if (!empty(getenv('FRIENDICA_DATA'))) { - $config['storage']['class'] = \Friendica\Model\Storage\Filesystem::class; - - if (!empty(getenv('FRIENDICA_DATA_DIR'))) { - $config['storage']['filesystem_path'] = getenv('FRIENDICA_DATA'); - } -} - -if (!empty(getenv('FRIENDICA_DEBUGGING'))) { - $config['system']['debugging'] = true; - if (!empty(getenv('FRIENDICA_LOGFILE'))) { - $config['system']['logfile'] = getenv('FRIENDICA_LOGFILE'); - } - if (!empty(getenv('FRIENDICA_LOGLEVEL'))) { - $config['system']['loglevel'] = getenv('FRIENDICA_LOGLEVEL'); - } -} - -return $config; diff --git a/2020.12-rc/apache/cron.sh b/2020.12-rc/apache/cron.sh deleted file mode 100755 index f899df9..0000000 --- a/2020.12-rc/apache/cron.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -trap "break;exit" HUP INT TERM - -while [ ! -f /var/www/html/bin/daemon.php ]; do - sleep 1 -done - -echo "Waiting for MySQL $MYSQL_HOST initialization..." -if php /var/www/html/bin/wait-for-connection "$MYSQL_HOST" "${MYSQL_PORT:-3306}" 300; then - sh /setup_msmtp.sh - exec /sbin/tini -- php /var/www/html/bin/daemon.php -f start -else - echo "[ERROR] Waited 300 seconds, no response" >&2 -fi diff --git a/2020.12-rc/apache/entrypoint-dev.sh b/2020.12-rc/apache/entrypoint-dev.sh deleted file mode 100755 index 08c3c13..0000000 --- a/2020.12-rc/apache/entrypoint-dev.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh -set -eu - -# checks if the branch and repository exists -check_branch() { - repo=${1:-} - branch=${2:-} - git ls-remote --heads --tags "https://github.com/$repo" | grep -E "refs/(heads|tags)/${branch}$" >/dev/null - [ "$?" -eq "0" ] -} - -# clones the whole develop branch (Friendica and Addons) -clone_develop() { - friendica_git="${FRIENDICA_VERSION}" - addons_git="${FRIENDICA_ADDONS}" - friendica_repo="${FRIENDICA_REPOSITORY:-friendica/friendica}" - friendica_addons_repo="${FRIENDICA_ADDONS_REPO:-friendica/friendica-addons}" - - if echo "{$friendica_git,,}" | grep -Eq '^.*\-dev'; then - friendica_git="develop" - fi - - if echo "{$addons_git,,}" | grep -Eq '^.*\-dev'; then - addons_git="develop" - fi - - # Check if the branches exist before wiping the - if check_branch "$friendica_repo" "$friendica_git" && check_branch "$friendica_addons_repo" "$addons_git" ; then - echo "Cloning '${friendica_git}' from GitHub repository '${friendica_repo}' ..." - - # Removing the whole directory first - rm -fr /usr/src/friendica - git clone -q -b ${friendica_git} "https://github.com/${friendica_repo}" /usr/src/friendica - - mkdir /usr/src/friendica/addon - git clone -q -b ${addons_git} "https://github.com/${friendica_addons_repo}" /usr/src/friendica/addon - - echo "Download finished" - - if [ ! -f /usr/src/friendica/VERSION ]; then - echo "Couldn't clone repository" - exit 1 - fi - - /usr/src/friendica/bin/composer.phar install --no-dev -d /usr/src/friendica - return 0 - - else - if check_branch "$friendica_repo" "$friendica_git"; then - echo "$friendica_repo/$friendica_git is not valid." - else - echo "$friendica_addons_repo/$addons_git is not valid." - fi - echo "Using old version." - return 1 - - fi -} - -# just check if we execute apache or php-fpm -if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then - # cloning from git is just possible for develop or Release Candidate - if echo "${FRIENDICA_VERSION}" | grep -Eq '^.*(\-dev|-rc|-RC)' || [ "${FRIENDICA_UPGRADE:-false}" = "true" ] || [ ! -f /usr/src/friendica/VERSION ]; then - # just clone & check if it's a new install or upgrade - clone_develop - fi -fi - -exec /entrypoint.sh "$@" diff --git a/2020.12-rc/apache/entrypoint.sh b/2020.12-rc/apache/entrypoint.sh deleted file mode 100755 index fa51564..0000000 --- a/2020.12-rc/apache/entrypoint.sh +++ /dev/null @@ -1,145 +0,0 @@ -#!/bin/sh -set -eu - -# run an command with the www-data user -run_as() { - set -- -c "cd /var/www/html; $*" - if [ "$(id -u)" -eq 0 ]; then - su - www-data -s /bin/sh "$@" - else - sh "$@" - fi -} - -# checks if the the first parameter is greater than the second parameter -version_greater() { - [ "$(printf '%s\n' "$@" | sed -e 's/-rc/.1/' | sed -e 's/-dev/.2/' | sort -t '.' -k1,1n -k2,2n -k3,3nbr | head -n 1)" != "$(printf "$1" | sed -e 's/-rc/.1/' | sed -e 's/-dev/.2/')" ] -} - -# usage: file_env VAR [DEFAULT] -# ie: file_env 'XYZ_DB_PASSWORD' 'example' -# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of -# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) -file_env() { - local var="$1" - local fileVar="${var}_FILE" - local def="${2:-}" - local varValue=$(env | grep -E "^${var}=" | sed -E -e "s/^${var}=//") - local fileVarValue=$(env | grep -E "^${fileVar}=" | sed -E -e "s/^${fileVar}=//") - if [ -n "${varValue}" ] && [ -n "${fileVarValue}" ]; then - echo >&2 "error: both $var and $fileVar are set (but are exclusive)" - exit 1 - fi - if [ -n "${varValue}" ]; then - export "$var"="${varValue}" - elif [ -n "${fileVarValue}" ]; then - export "$var"="$(cat "${fileVarValue}")" - elif [ -n "${def}" ]; then - export "$var"="$def" - fi - unset "$fileVar" -} - -sh /setup_msmtp.sh - -# just check if we execute apache or php-fpm -if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then - installed_version="0.0.0.0" - if [ -f /var/www/html/VERSION ]; then - installed_version="$(cat /var/www/html/VERSION)" - fi - - image_version="$(cat /usr/src/friendica/VERSION)" - - # no downgrading possible - if version_greater "$installed_version" "$image_version"; then - echo "Can't copy Friendica sources because the version of the data ($installed_version) is higher than the docker image ($image_version)" - exit 1 - fi - - # check it just in case the version is greater or if we force the upgrade - if version_greater "$image_version" "$installed_version" || [ "${FRIENDICA_UPGRADE:-false}" = "true" ]; then - echo "Initializing Friendica $image_version ..." - - if [ "$installed_version" != "0.0.0.0" ]; then - echo "Upgrading Friendica from $installed_version ..." - fi - - if [ "$(id -u)" -eq 0 ]; then - rsync_options="-rlDog --chown=www-data:www-data" - else - rsync_options="-rlD" - fi - - rsync $rsync_options --delete --exclude-from=/upgrade.exclude /usr/src/friendica/ /var/www/html/ - - # Update docker-based config files, but never delete other config files - rsync $rsync_options --update /usr/src/friendica/config/ /var/www/html/config/ - - # In case there is no .htaccess, copy it from the default dist file - if [ ! -f "/var/www/html/.htaccess" ]; then - cp "/var/www/html/.htaccess-dist" "/var/www/html/.htaccess" - fi - - if [ -d /var/www/html/view/smarty3 ]; then - chmod -R 777 /var/www/html/view/smarty3 - fi - echo "Initializing finished" - - # install - if [ "$installed_version" = "0.0.0.0" ]; then - echo "New Friendica instance" - - file_env FRIENDICA_ADMIN_MAIL - - file_env MYSQL_DATABASE - file_env MYSQL_USER - file_env MYSQL_PASSWORD - - install=false - if [ -n "${MYSQL_DATABASE+x}" ] && [ -n "${MYSQL_PASSWORD+x}" ] && [ -n "${MYSQL_HOST+x}" ] && [ -n "${MYSQL_USER+x}" ] && [ -n "${FRIENDICA_ADMIN_MAIL+x}" ] && [ -n "${FRIENDICA_URL+x}" ]; then - echo "Installation with environment variables" - - FRIENDICA_TZ=${FRIENDICA_TZ:-America/LosAngeles} - FRIENDICA_LANG=${FRIENDICA_LANG:-en} - MYSQL_PORT=${MYSQL_PORT:-3306} - - # shellcheck disable=SC2016 - install_options='-s --dbhost "'$MYSQL_HOST'" --dbport "'$MYSQL_PORT'" --dbdata "'$MYSQL_DATABASE'" --dbuser "'$MYSQL_USER'" --dbpass "'$MYSQL_PASSWORD'"' - - # shellcheck disable=SC2016 - install_options=$install_options' --admin "'$FRIENDICA_ADMIN_MAIL'" --tz "'$FRIENDICA_TZ'" --lang "'$FRIENDICA_LANG'" --url "'$FRIENDICA_URL'"' - install=true - fi - - if [ "$install" = true ]; then - echo "Waiting for MySQL $MYSQL_HOST initialization..." - if run_as "php /var/www/html/bin/wait-for-connection $MYSQL_HOST ${MYSQL_PORT:-3306} 300"; then - - echo "Starting Friendica installation ..." - run_as "php /var/www/html/bin/console.php autoinstall $install_options" - - rm -fr /var/www/html/view/smarty3/compiled - - # load other config files (*.config.php) to the config folder - if [ -d "/usr/src/config" ]; then - rsync $rsync_options --ignore-existing /usr/src/config/ /var/www/html/config/ - fi - - echo "Installation finished" - else - echo "[ERROR] Waited 300 seconds, no response" >&2 - fi - else - echo "Running web-based installer on first connect!" - fi - # upgrade - else - echo "Upgrading Friendica ..." - run_as 'php /var/www/html/bin/console.php dbstructure update -f' - echo "Upgrading finished" - fi - fi -fi - -exec "$@" diff --git a/2020.12-rc/apache/setup_msmtp.sh b/2020.12-rc/apache/setup_msmtp.sh deleted file mode 100644 index b2e22f0..0000000 --- a/2020.12-rc/apache/setup_msmtp.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/sh -set -eu - -if [ -n "${SMTP_DOMAIN+x}" ] && [ -n "${SMTP+x}" ] && [ "${SMTP}" != "localhost" ]; then - SITENAME="${FRIENDICA_SITENAME:-Friendica Social Network}" - echo "Setup MSMTP for '$SITENAME' with '$SMTP' ..." - - smtp_from="${SMTP_FROM:=no-reply}" - - # Setup MSMTP - usermod --comment "$(echo "$SITENAME" | tr -dc '[:print:]')" root - usermod --comment "$(echo "$SITENAME" | tr -dc '[:print:]')" www-data - - # add possible mail-senders - { - echo "www-data: $smtp_from@$SMTP_DOMAIN" - echo "root: $smtp_from@$SMTP_DOMAIN" - } >/etc/aliases - - # create msmtp settings - { - echo "account default" - echo "host $SMTP" - if [ -n "${SMTP_PORT+x}" ]; then echo "port $SMTP_PORT"; else echo "port 587"; fi - echo "from \"$smtp_from@$SMTP_DOMAIN\"" - echo "tls_certcheck off" # No certcheck because of internal docker mail-hostnames - if [ -n "${SMTP_TLS+x}" ]; then echo "tls on"; fi - if [ -n "${SMTP_STARTTLS+x}" ]; then echo "tls_starttls on"; fi - if [ -n "${SMTP_AUTH_USER+x}" ]; then echo "auth on"; fi - if [ -n "${SMTP_AUTH_USER+x}" ]; then echo "user \"$SMTP_AUTH_USER\""; fi - if [ -n "${SMTP_AUTH_PASS+x}" ]; then echo "password \"$SMTP_AUTH_PASS\""; fi - echo "logfile /var/log/msmtp.log" - echo "aliases /etc/aliases" - } >/etc/msmtprc - - echo "Setup finished" -fi diff --git a/2020.12-rc/apache/upgrade.exclude b/2020.12-rc/apache/upgrade.exclude deleted file mode 100644 index 2fb6533..0000000 --- a/2020.12-rc/apache/upgrade.exclude +++ /dev/null @@ -1,10 +0,0 @@ -/.git/ -/photo/ -/proxy/ -/.htconfig.php -/.htaccess -/home.* -/config/ -/storage/ -/log/ -*.log \ No newline at end of file diff --git a/2020.12-rc/fpm-alpine/Dockerfile b/2020.12-rc/fpm-alpine/Dockerfile deleted file mode 100644 index 8c9386b..0000000 --- a/2020.12-rc/fpm-alpine/Dockerfile +++ /dev/null @@ -1,109 +0,0 @@ -# DO NOT EDIT: created by update.sh from Dockerfile-alpine.template -FROM php:7.3-fpm-alpine - -# entrypoint.sh and cron.sh dependencies -RUN set -ex; \ - apk add --no-cache \ - rsync \ - git \ -# For mail() support - msmtp \ - shadow \ - tini; - -# install the PHP extensions we need -# see https://friendi.ca/resources/requirements/ -RUN set -ex; \ - \ - apk add --no-cache --virtual .build-deps \ - mariadb-client \ - bash \ - $PHPIZE_DEPS \ - libpng-dev \ - libjpeg-turbo-dev \ - imagemagick-dev \ - libtool \ - libmemcached-dev \ - cyrus-sasl-dev \ - libjpeg-turbo-dev \ - freetype-dev \ - librsvg \ - pcre-dev \ - libzip-dev \ - icu-dev \ - openldap-dev \ - ; \ - \ - docker-php-ext-configure gd \ - --with-gd \ - --with-freetype-dir=/usr/include/ \ - --with-png-dir=/usr/include/ \ - --with-jpeg-dir=/usr/include/ \ - ; \ - \ - docker-php-ext-install -j "$(nproc)" \ - pdo_mysql \ - gd \ - zip \ - opcache \ - pcntl \ - ldap \ - ; \ - \ -# pecl will claim success even if one install fails, so we need to perform each install separately - pecl install APCu-5.1.19; \ - pecl install memcached-3.1.5; \ - pecl install redis-5.3.2; \ - pecl install imagick-3.4.4; \ - \ - docker-php-ext-enable \ - apcu \ - memcached \ - redis \ - imagick \ - ; \ - \ - runDeps="$( \ - scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \ - | tr ',' '\n' \ - | sort -u \ - | awk 'system("[ -e /usr/local/lib" $1 " ]") == 0 { next } { print "so:" $1 }' \ - )"; \ - apk add --no-network --virtual .friendica-phpext-rundeps $runDeps; \ - apk del --no-network .build-deps; - -# set recommended PHP.ini settings -RUN set -ex; \ - { \ - echo 'opcache.enable=1' ; \ - echo 'opcache.interned_strings_buffer=8'; \ - echo 'opcache.max_accelerated_files=10000'; \ - echo 'opcache.memory_consumption=128'; \ - echo 'opcache.save_comments=1'; \ - echo 'opcache.revalidte_freq=1'; \ - } > /usr/local/etc/php/conf.d/opcache-recommended.ini; \ - \ - { \ - echo sendmail_path = "/usr/bin/msmtp -t"; \ - } > /usr/local/etc/php/conf.d/sendmail.ini; \ - \ - echo 'apc.enable_cli=1' >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini; \ - \ - echo 'memory_limit=512M' > /usr/local/etc/php/conf.d/memory-limit.ini; \ - \ - mkdir /var/www/data; \ - chown -R www-data:root /var/www; \ - chmod -R g=u /var/www - -VOLUME /var/www/html - - -ENV FRIENDICA_VERSION "2020.12-rc" -ENV FRIENDICA_ADDONS "2020.12-rc" - - -COPY *.sh upgrade.exclude / -COPY config/* /usr/src/friendica/config/ - -ENTRYPOINT ["/entrypoint-dev.sh"] -CMD ["php-fpm"] diff --git a/2020.12-rc/fpm-alpine/config/00apcu.config.php b/2020.12-rc/fpm-alpine/config/00apcu.config.php deleted file mode 100644 index d6dac4f..0000000 --- a/2020.12-rc/fpm-alpine/config/00apcu.config.php +++ /dev/null @@ -1,12 +0,0 @@ - [ - 'cache_driver' => 'apcu', - 'session_handler' => 'cache', - ], -]; diff --git a/2020.12-rc/fpm-alpine/config/01redis.config.php b/2020.12-rc/fpm-alpine/config/01redis.config.php deleted file mode 100644 index 1a43c95..0000000 --- a/2020.12-rc/fpm-alpine/config/01redis.config.php +++ /dev/null @@ -1,15 +0,0 @@ - [ - 'lock_driver' => 'redis', - 'redis_host' => getenv('REDIS_HOST'), - 'redis_port' => (getenv('REDIS_PORT') ? getenv('REDIS_PORT') : ''), - 'redis_password' => (getenv('REDIS_PW') ? getenv('REDIS_PW') : ''), - 'redis_db' => (getenv('REDIS_DB') ? getenv('REDIS_DB') : 0), - ], - ]; -} else { - return []; -} diff --git a/2020.12-rc/fpm-alpine/config/zz-docker.config.php b/2020.12-rc/fpm-alpine/config/zz-docker.config.php deleted file mode 100644 index 2d5835d..0000000 --- a/2020.12-rc/fpm-alpine/config/zz-docker.config.php +++ /dev/null @@ -1,62 +0,0 @@ - [ - // Necessary because otherwise the daemon isn't working - 'pidfile' => '/var/run/friendica.pid', - - 'logfile' => '/var/www/html/friendica.log', - 'loglevel' => 'notice', - ], - 'storage' => [ - 'filesystem_path' => '/var/www/html/storage', - ], -]; - -if (getenv('FRIENDICA_TZ')) { - $config['config']['timezone'] = getenv('FRIENDICA_TZ'); -} - -if (getenv('FRIENDICA_LANG')) { - $config['config']['language'] = getenv('FRIENDICA_LANG'); -} - -if (getenv('FRIENDICA_ADMIN_MAIL')) { - $config['config']['admin_email'] = getenv('FRIENDICA_ADMIN_MAIL'); -} - -if (getenv('FRIENDICA_SITENAME')) { - $config['config']['sitename'] = getenv('FRIENDICA_SITENAME'); -} - -if (!empty(getenv('FRIENDICA_NO_VALIDATION'))) { - $config['system']['disable_url_validation'] = true; - $config['system']['disable_email_validation'] = true; -} - -if (!empty(getenv('FRIENDICA_DATA'))) { - $config['storage']['class'] = \Friendica\Model\Storage\Filesystem::class; - - if (!empty(getenv('FRIENDICA_DATA_DIR'))) { - $config['storage']['filesystem_path'] = getenv('FRIENDICA_DATA'); - } -} - -if (!empty(getenv('FRIENDICA_DEBUGGING'))) { - $config['system']['debugging'] = true; - if (!empty(getenv('FRIENDICA_LOGFILE'))) { - $config['system']['logfile'] = getenv('FRIENDICA_LOGFILE'); - } - if (!empty(getenv('FRIENDICA_LOGLEVEL'))) { - $config['system']['loglevel'] = getenv('FRIENDICA_LOGLEVEL'); - } -} - -return $config; diff --git a/2020.12-rc/fpm-alpine/cron.sh b/2020.12-rc/fpm-alpine/cron.sh deleted file mode 100755 index f899df9..0000000 --- a/2020.12-rc/fpm-alpine/cron.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -trap "break;exit" HUP INT TERM - -while [ ! -f /var/www/html/bin/daemon.php ]; do - sleep 1 -done - -echo "Waiting for MySQL $MYSQL_HOST initialization..." -if php /var/www/html/bin/wait-for-connection "$MYSQL_HOST" "${MYSQL_PORT:-3306}" 300; then - sh /setup_msmtp.sh - exec /sbin/tini -- php /var/www/html/bin/daemon.php -f start -else - echo "[ERROR] Waited 300 seconds, no response" >&2 -fi diff --git a/2020.12-rc/fpm-alpine/entrypoint-dev.sh b/2020.12-rc/fpm-alpine/entrypoint-dev.sh deleted file mode 100755 index 08c3c13..0000000 --- a/2020.12-rc/fpm-alpine/entrypoint-dev.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh -set -eu - -# checks if the branch and repository exists -check_branch() { - repo=${1:-} - branch=${2:-} - git ls-remote --heads --tags "https://github.com/$repo" | grep -E "refs/(heads|tags)/${branch}$" >/dev/null - [ "$?" -eq "0" ] -} - -# clones the whole develop branch (Friendica and Addons) -clone_develop() { - friendica_git="${FRIENDICA_VERSION}" - addons_git="${FRIENDICA_ADDONS}" - friendica_repo="${FRIENDICA_REPOSITORY:-friendica/friendica}" - friendica_addons_repo="${FRIENDICA_ADDONS_REPO:-friendica/friendica-addons}" - - if echo "{$friendica_git,,}" | grep -Eq '^.*\-dev'; then - friendica_git="develop" - fi - - if echo "{$addons_git,,}" | grep -Eq '^.*\-dev'; then - addons_git="develop" - fi - - # Check if the branches exist before wiping the - if check_branch "$friendica_repo" "$friendica_git" && check_branch "$friendica_addons_repo" "$addons_git" ; then - echo "Cloning '${friendica_git}' from GitHub repository '${friendica_repo}' ..." - - # Removing the whole directory first - rm -fr /usr/src/friendica - git clone -q -b ${friendica_git} "https://github.com/${friendica_repo}" /usr/src/friendica - - mkdir /usr/src/friendica/addon - git clone -q -b ${addons_git} "https://github.com/${friendica_addons_repo}" /usr/src/friendica/addon - - echo "Download finished" - - if [ ! -f /usr/src/friendica/VERSION ]; then - echo "Couldn't clone repository" - exit 1 - fi - - /usr/src/friendica/bin/composer.phar install --no-dev -d /usr/src/friendica - return 0 - - else - if check_branch "$friendica_repo" "$friendica_git"; then - echo "$friendica_repo/$friendica_git is not valid." - else - echo "$friendica_addons_repo/$addons_git is not valid." - fi - echo "Using old version." - return 1 - - fi -} - -# just check if we execute apache or php-fpm -if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then - # cloning from git is just possible for develop or Release Candidate - if echo "${FRIENDICA_VERSION}" | grep -Eq '^.*(\-dev|-rc|-RC)' || [ "${FRIENDICA_UPGRADE:-false}" = "true" ] || [ ! -f /usr/src/friendica/VERSION ]; then - # just clone & check if it's a new install or upgrade - clone_develop - fi -fi - -exec /entrypoint.sh "$@" diff --git a/2020.12-rc/fpm-alpine/entrypoint.sh b/2020.12-rc/fpm-alpine/entrypoint.sh deleted file mode 100755 index fa51564..0000000 --- a/2020.12-rc/fpm-alpine/entrypoint.sh +++ /dev/null @@ -1,145 +0,0 @@ -#!/bin/sh -set -eu - -# run an command with the www-data user -run_as() { - set -- -c "cd /var/www/html; $*" - if [ "$(id -u)" -eq 0 ]; then - su - www-data -s /bin/sh "$@" - else - sh "$@" - fi -} - -# checks if the the first parameter is greater than the second parameter -version_greater() { - [ "$(printf '%s\n' "$@" | sed -e 's/-rc/.1/' | sed -e 's/-dev/.2/' | sort -t '.' -k1,1n -k2,2n -k3,3nbr | head -n 1)" != "$(printf "$1" | sed -e 's/-rc/.1/' | sed -e 's/-dev/.2/')" ] -} - -# usage: file_env VAR [DEFAULT] -# ie: file_env 'XYZ_DB_PASSWORD' 'example' -# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of -# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) -file_env() { - local var="$1" - local fileVar="${var}_FILE" - local def="${2:-}" - local varValue=$(env | grep -E "^${var}=" | sed -E -e "s/^${var}=//") - local fileVarValue=$(env | grep -E "^${fileVar}=" | sed -E -e "s/^${fileVar}=//") - if [ -n "${varValue}" ] && [ -n "${fileVarValue}" ]; then - echo >&2 "error: both $var and $fileVar are set (but are exclusive)" - exit 1 - fi - if [ -n "${varValue}" ]; then - export "$var"="${varValue}" - elif [ -n "${fileVarValue}" ]; then - export "$var"="$(cat "${fileVarValue}")" - elif [ -n "${def}" ]; then - export "$var"="$def" - fi - unset "$fileVar" -} - -sh /setup_msmtp.sh - -# just check if we execute apache or php-fpm -if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then - installed_version="0.0.0.0" - if [ -f /var/www/html/VERSION ]; then - installed_version="$(cat /var/www/html/VERSION)" - fi - - image_version="$(cat /usr/src/friendica/VERSION)" - - # no downgrading possible - if version_greater "$installed_version" "$image_version"; then - echo "Can't copy Friendica sources because the version of the data ($installed_version) is higher than the docker image ($image_version)" - exit 1 - fi - - # check it just in case the version is greater or if we force the upgrade - if version_greater "$image_version" "$installed_version" || [ "${FRIENDICA_UPGRADE:-false}" = "true" ]; then - echo "Initializing Friendica $image_version ..." - - if [ "$installed_version" != "0.0.0.0" ]; then - echo "Upgrading Friendica from $installed_version ..." - fi - - if [ "$(id -u)" -eq 0 ]; then - rsync_options="-rlDog --chown=www-data:www-data" - else - rsync_options="-rlD" - fi - - rsync $rsync_options --delete --exclude-from=/upgrade.exclude /usr/src/friendica/ /var/www/html/ - - # Update docker-based config files, but never delete other config files - rsync $rsync_options --update /usr/src/friendica/config/ /var/www/html/config/ - - # In case there is no .htaccess, copy it from the default dist file - if [ ! -f "/var/www/html/.htaccess" ]; then - cp "/var/www/html/.htaccess-dist" "/var/www/html/.htaccess" - fi - - if [ -d /var/www/html/view/smarty3 ]; then - chmod -R 777 /var/www/html/view/smarty3 - fi - echo "Initializing finished" - - # install - if [ "$installed_version" = "0.0.0.0" ]; then - echo "New Friendica instance" - - file_env FRIENDICA_ADMIN_MAIL - - file_env MYSQL_DATABASE - file_env MYSQL_USER - file_env MYSQL_PASSWORD - - install=false - if [ -n "${MYSQL_DATABASE+x}" ] && [ -n "${MYSQL_PASSWORD+x}" ] && [ -n "${MYSQL_HOST+x}" ] && [ -n "${MYSQL_USER+x}" ] && [ -n "${FRIENDICA_ADMIN_MAIL+x}" ] && [ -n "${FRIENDICA_URL+x}" ]; then - echo "Installation with environment variables" - - FRIENDICA_TZ=${FRIENDICA_TZ:-America/LosAngeles} - FRIENDICA_LANG=${FRIENDICA_LANG:-en} - MYSQL_PORT=${MYSQL_PORT:-3306} - - # shellcheck disable=SC2016 - install_options='-s --dbhost "'$MYSQL_HOST'" --dbport "'$MYSQL_PORT'" --dbdata "'$MYSQL_DATABASE'" --dbuser "'$MYSQL_USER'" --dbpass "'$MYSQL_PASSWORD'"' - - # shellcheck disable=SC2016 - install_options=$install_options' --admin "'$FRIENDICA_ADMIN_MAIL'" --tz "'$FRIENDICA_TZ'" --lang "'$FRIENDICA_LANG'" --url "'$FRIENDICA_URL'"' - install=true - fi - - if [ "$install" = true ]; then - echo "Waiting for MySQL $MYSQL_HOST initialization..." - if run_as "php /var/www/html/bin/wait-for-connection $MYSQL_HOST ${MYSQL_PORT:-3306} 300"; then - - echo "Starting Friendica installation ..." - run_as "php /var/www/html/bin/console.php autoinstall $install_options" - - rm -fr /var/www/html/view/smarty3/compiled - - # load other config files (*.config.php) to the config folder - if [ -d "/usr/src/config" ]; then - rsync $rsync_options --ignore-existing /usr/src/config/ /var/www/html/config/ - fi - - echo "Installation finished" - else - echo "[ERROR] Waited 300 seconds, no response" >&2 - fi - else - echo "Running web-based installer on first connect!" - fi - # upgrade - else - echo "Upgrading Friendica ..." - run_as 'php /var/www/html/bin/console.php dbstructure update -f' - echo "Upgrading finished" - fi - fi -fi - -exec "$@" diff --git a/2020.12-rc/fpm-alpine/setup_msmtp.sh b/2020.12-rc/fpm-alpine/setup_msmtp.sh deleted file mode 100644 index b2e22f0..0000000 --- a/2020.12-rc/fpm-alpine/setup_msmtp.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/sh -set -eu - -if [ -n "${SMTP_DOMAIN+x}" ] && [ -n "${SMTP+x}" ] && [ "${SMTP}" != "localhost" ]; then - SITENAME="${FRIENDICA_SITENAME:-Friendica Social Network}" - echo "Setup MSMTP for '$SITENAME' with '$SMTP' ..." - - smtp_from="${SMTP_FROM:=no-reply}" - - # Setup MSMTP - usermod --comment "$(echo "$SITENAME" | tr -dc '[:print:]')" root - usermod --comment "$(echo "$SITENAME" | tr -dc '[:print:]')" www-data - - # add possible mail-senders - { - echo "www-data: $smtp_from@$SMTP_DOMAIN" - echo "root: $smtp_from@$SMTP_DOMAIN" - } >/etc/aliases - - # create msmtp settings - { - echo "account default" - echo "host $SMTP" - if [ -n "${SMTP_PORT+x}" ]; then echo "port $SMTP_PORT"; else echo "port 587"; fi - echo "from \"$smtp_from@$SMTP_DOMAIN\"" - echo "tls_certcheck off" # No certcheck because of internal docker mail-hostnames - if [ -n "${SMTP_TLS+x}" ]; then echo "tls on"; fi - if [ -n "${SMTP_STARTTLS+x}" ]; then echo "tls_starttls on"; fi - if [ -n "${SMTP_AUTH_USER+x}" ]; then echo "auth on"; fi - if [ -n "${SMTP_AUTH_USER+x}" ]; then echo "user \"$SMTP_AUTH_USER\""; fi - if [ -n "${SMTP_AUTH_PASS+x}" ]; then echo "password \"$SMTP_AUTH_PASS\""; fi - echo "logfile /var/log/msmtp.log" - echo "aliases /etc/aliases" - } >/etc/msmtprc - - echo "Setup finished" -fi diff --git a/2020.12-rc/fpm-alpine/upgrade.exclude b/2020.12-rc/fpm-alpine/upgrade.exclude deleted file mode 100644 index 2fb6533..0000000 --- a/2020.12-rc/fpm-alpine/upgrade.exclude +++ /dev/null @@ -1,10 +0,0 @@ -/.git/ -/photo/ -/proxy/ -/.htconfig.php -/.htaccess -/home.* -/config/ -/storage/ -/log/ -*.log \ No newline at end of file diff --git a/2020.12-rc/fpm/Dockerfile b/2020.12-rc/fpm/Dockerfile deleted file mode 100644 index 9810b19..0000000 --- a/2020.12-rc/fpm/Dockerfile +++ /dev/null @@ -1,134 +0,0 @@ -# DO NOT EDIT: created by update.sh from Dockerfile-debian.template -FROM php:7.3-fpm-buster - -# entrypoint.sh and cron.sh dependencies -RUN set -ex; \ - \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - rsync \ - bzip2 \ - git \ -# For mail() support - msmtp \ -# For tini installation - gnupg dirmngr \ - ; \ - rm -rf /var/lib/apt/lists/*; - -# Add tini for reaping processes -ENV TINI_VERSION v0.19.0 -RUN export BUILD_ARCH=$(dpkg-architecture --query DEB_BUILD_ARCH) \ - && mkdir ~/.gnupg \ - && echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \ - && curl -L -o /sbin/tini https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-${BUILD_ARCH} \ - && curl -L -o /tini.asc https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-${BUILD_ARCH}.asc \ - && gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 \ - && gpg --batch --verify /tini.asc /sbin/tini \ - && chmod +x /sbin/tini - -# install the PHP extensions we need -# see https://friendi.ca/resources/requirements/ -RUN set -ex; \ - \ - savedAptMark="$(apt-mark showmanual)"; \ - \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - mariadb-client \ - bash \ - libpng-dev \ - libjpeg62-turbo-dev \ - libtool \ - libmagick++-dev \ - libmemcached-dev \ - libgraphicsmagick1-dev \ - libfreetype6-dev \ - librsvg2-2 \ - libzip-dev \ - libldap2-dev \ - ; \ - \ - debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \ - \ - docker-php-ext-configure gd \ - --with-gd \ - --with-freetype-dir=/usr/include/ \ - --with-png-dir=/usr/include/ \ - --with-jpeg-dir=/usr/include/ \ - ; \ - docker-php-ext-configure ldap \ - --with-libdir=lib/$debMultiarch/ \ - ;\ - docker-php-ext-install -j "$(nproc)" \ - pdo_mysql \ - gd \ - zip \ - opcache \ - ctype \ - pcntl \ - ldap \ - ; \ - \ -# pecl will claim success even if one install fails, so we need to perform each install separately - pecl install apcu-5.1.19; \ - pecl install memcached-3.1.5; \ - pecl install redis-5.3.2; \ - pecl install imagick-3.4.4; \ - \ - docker-php-ext-enable \ - apcu \ - memcached \ - redis \ - imagick \ - ; \ - \ -# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies - apt-mark auto '.*' > /dev/null; \ - apt-mark manual $savedAptMark; \ - ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \ - | awk '/=>/ { print $3 }' \ - | sort -u \ - | xargs -r dpkg-query -S \ - | cut -d: -f1 \ - | sort -u \ - | xargs -rt apt-mark manual; \ - \ - apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ - rm -rf /var/lib/apt/lists/* - -# set recommended PHP.ini settings -RUN set -ex; \ - { \ - echo 'opcache.enable=1' ; \ - echo 'opcache.interned_strings_buffer=8'; \ - echo 'opcache.max_accelerated_files=10000'; \ - echo 'opcache.memory_consumption=128'; \ - echo 'opcache.save_comments=1'; \ - echo 'opcache.revalidte_freq=1'; \ - } > /usr/local/etc/php/conf.d/opcache-recommended.ini; \ - \ - { \ - echo sendmail_path = "/usr/bin/msmtp -t"; \ - } > /usr/local/etc/php/conf.d/sendmail.ini; \ - \ - echo 'apc.enable_cli=1' >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini; \ - \ - echo 'memory_limit=512M' > /usr/local/etc/php/conf.d/memory-limit.ini; \ - \ - mkdir /var/www/data; \ - chown -R www-data:root /var/www; \ - chmod -R g=u /var/www - -VOLUME /var/www/html - - -ENV FRIENDICA_VERSION "2020.12-rc" -ENV FRIENDICA_ADDONS "2020.12-rc" - - -COPY *.sh upgrade.exclude / -COPY config/* /usr/src/friendica/config/ - -ENTRYPOINT ["/entrypoint-dev.sh"] -CMD ["php-fpm"] diff --git a/2020.12-rc/fpm/config/00apcu.config.php b/2020.12-rc/fpm/config/00apcu.config.php deleted file mode 100644 index d6dac4f..0000000 --- a/2020.12-rc/fpm/config/00apcu.config.php +++ /dev/null @@ -1,12 +0,0 @@ - [ - 'cache_driver' => 'apcu', - 'session_handler' => 'cache', - ], -]; diff --git a/2020.12-rc/fpm/config/01redis.config.php b/2020.12-rc/fpm/config/01redis.config.php deleted file mode 100644 index 1a43c95..0000000 --- a/2020.12-rc/fpm/config/01redis.config.php +++ /dev/null @@ -1,15 +0,0 @@ - [ - 'lock_driver' => 'redis', - 'redis_host' => getenv('REDIS_HOST'), - 'redis_port' => (getenv('REDIS_PORT') ? getenv('REDIS_PORT') : ''), - 'redis_password' => (getenv('REDIS_PW') ? getenv('REDIS_PW') : ''), - 'redis_db' => (getenv('REDIS_DB') ? getenv('REDIS_DB') : 0), - ], - ]; -} else { - return []; -} diff --git a/2020.12-rc/fpm/config/zz-docker.config.php b/2020.12-rc/fpm/config/zz-docker.config.php deleted file mode 100644 index 2d5835d..0000000 --- a/2020.12-rc/fpm/config/zz-docker.config.php +++ /dev/null @@ -1,62 +0,0 @@ - [ - // Necessary because otherwise the daemon isn't working - 'pidfile' => '/var/run/friendica.pid', - - 'logfile' => '/var/www/html/friendica.log', - 'loglevel' => 'notice', - ], - 'storage' => [ - 'filesystem_path' => '/var/www/html/storage', - ], -]; - -if (getenv('FRIENDICA_TZ')) { - $config['config']['timezone'] = getenv('FRIENDICA_TZ'); -} - -if (getenv('FRIENDICA_LANG')) { - $config['config']['language'] = getenv('FRIENDICA_LANG'); -} - -if (getenv('FRIENDICA_ADMIN_MAIL')) { - $config['config']['admin_email'] = getenv('FRIENDICA_ADMIN_MAIL'); -} - -if (getenv('FRIENDICA_SITENAME')) { - $config['config']['sitename'] = getenv('FRIENDICA_SITENAME'); -} - -if (!empty(getenv('FRIENDICA_NO_VALIDATION'))) { - $config['system']['disable_url_validation'] = true; - $config['system']['disable_email_validation'] = true; -} - -if (!empty(getenv('FRIENDICA_DATA'))) { - $config['storage']['class'] = \Friendica\Model\Storage\Filesystem::class; - - if (!empty(getenv('FRIENDICA_DATA_DIR'))) { - $config['storage']['filesystem_path'] = getenv('FRIENDICA_DATA'); - } -} - -if (!empty(getenv('FRIENDICA_DEBUGGING'))) { - $config['system']['debugging'] = true; - if (!empty(getenv('FRIENDICA_LOGFILE'))) { - $config['system']['logfile'] = getenv('FRIENDICA_LOGFILE'); - } - if (!empty(getenv('FRIENDICA_LOGLEVEL'))) { - $config['system']['loglevel'] = getenv('FRIENDICA_LOGLEVEL'); - } -} - -return $config; diff --git a/2020.12-rc/fpm/cron.sh b/2020.12-rc/fpm/cron.sh deleted file mode 100755 index f899df9..0000000 --- a/2020.12-rc/fpm/cron.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -trap "break;exit" HUP INT TERM - -while [ ! -f /var/www/html/bin/daemon.php ]; do - sleep 1 -done - -echo "Waiting for MySQL $MYSQL_HOST initialization..." -if php /var/www/html/bin/wait-for-connection "$MYSQL_HOST" "${MYSQL_PORT:-3306}" 300; then - sh /setup_msmtp.sh - exec /sbin/tini -- php /var/www/html/bin/daemon.php -f start -else - echo "[ERROR] Waited 300 seconds, no response" >&2 -fi diff --git a/2020.12-rc/fpm/entrypoint-dev.sh b/2020.12-rc/fpm/entrypoint-dev.sh deleted file mode 100755 index 08c3c13..0000000 --- a/2020.12-rc/fpm/entrypoint-dev.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh -set -eu - -# checks if the branch and repository exists -check_branch() { - repo=${1:-} - branch=${2:-} - git ls-remote --heads --tags "https://github.com/$repo" | grep -E "refs/(heads|tags)/${branch}$" >/dev/null - [ "$?" -eq "0" ] -} - -# clones the whole develop branch (Friendica and Addons) -clone_develop() { - friendica_git="${FRIENDICA_VERSION}" - addons_git="${FRIENDICA_ADDONS}" - friendica_repo="${FRIENDICA_REPOSITORY:-friendica/friendica}" - friendica_addons_repo="${FRIENDICA_ADDONS_REPO:-friendica/friendica-addons}" - - if echo "{$friendica_git,,}" | grep -Eq '^.*\-dev'; then - friendica_git="develop" - fi - - if echo "{$addons_git,,}" | grep -Eq '^.*\-dev'; then - addons_git="develop" - fi - - # Check if the branches exist before wiping the - if check_branch "$friendica_repo" "$friendica_git" && check_branch "$friendica_addons_repo" "$addons_git" ; then - echo "Cloning '${friendica_git}' from GitHub repository '${friendica_repo}' ..." - - # Removing the whole directory first - rm -fr /usr/src/friendica - git clone -q -b ${friendica_git} "https://github.com/${friendica_repo}" /usr/src/friendica - - mkdir /usr/src/friendica/addon - git clone -q -b ${addons_git} "https://github.com/${friendica_addons_repo}" /usr/src/friendica/addon - - echo "Download finished" - - if [ ! -f /usr/src/friendica/VERSION ]; then - echo "Couldn't clone repository" - exit 1 - fi - - /usr/src/friendica/bin/composer.phar install --no-dev -d /usr/src/friendica - return 0 - - else - if check_branch "$friendica_repo" "$friendica_git"; then - echo "$friendica_repo/$friendica_git is not valid." - else - echo "$friendica_addons_repo/$addons_git is not valid." - fi - echo "Using old version." - return 1 - - fi -} - -# just check if we execute apache or php-fpm -if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then - # cloning from git is just possible for develop or Release Candidate - if echo "${FRIENDICA_VERSION}" | grep -Eq '^.*(\-dev|-rc|-RC)' || [ "${FRIENDICA_UPGRADE:-false}" = "true" ] || [ ! -f /usr/src/friendica/VERSION ]; then - # just clone & check if it's a new install or upgrade - clone_develop - fi -fi - -exec /entrypoint.sh "$@" diff --git a/2020.12-rc/fpm/entrypoint.sh b/2020.12-rc/fpm/entrypoint.sh deleted file mode 100755 index fa51564..0000000 --- a/2020.12-rc/fpm/entrypoint.sh +++ /dev/null @@ -1,145 +0,0 @@ -#!/bin/sh -set -eu - -# run an command with the www-data user -run_as() { - set -- -c "cd /var/www/html; $*" - if [ "$(id -u)" -eq 0 ]; then - su - www-data -s /bin/sh "$@" - else - sh "$@" - fi -} - -# checks if the the first parameter is greater than the second parameter -version_greater() { - [ "$(printf '%s\n' "$@" | sed -e 's/-rc/.1/' | sed -e 's/-dev/.2/' | sort -t '.' -k1,1n -k2,2n -k3,3nbr | head -n 1)" != "$(printf "$1" | sed -e 's/-rc/.1/' | sed -e 's/-dev/.2/')" ] -} - -# usage: file_env VAR [DEFAULT] -# ie: file_env 'XYZ_DB_PASSWORD' 'example' -# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of -# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) -file_env() { - local var="$1" - local fileVar="${var}_FILE" - local def="${2:-}" - local varValue=$(env | grep -E "^${var}=" | sed -E -e "s/^${var}=//") - local fileVarValue=$(env | grep -E "^${fileVar}=" | sed -E -e "s/^${fileVar}=//") - if [ -n "${varValue}" ] && [ -n "${fileVarValue}" ]; then - echo >&2 "error: both $var and $fileVar are set (but are exclusive)" - exit 1 - fi - if [ -n "${varValue}" ]; then - export "$var"="${varValue}" - elif [ -n "${fileVarValue}" ]; then - export "$var"="$(cat "${fileVarValue}")" - elif [ -n "${def}" ]; then - export "$var"="$def" - fi - unset "$fileVar" -} - -sh /setup_msmtp.sh - -# just check if we execute apache or php-fpm -if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ]; then - installed_version="0.0.0.0" - if [ -f /var/www/html/VERSION ]; then - installed_version="$(cat /var/www/html/VERSION)" - fi - - image_version="$(cat /usr/src/friendica/VERSION)" - - # no downgrading possible - if version_greater "$installed_version" "$image_version"; then - echo "Can't copy Friendica sources because the version of the data ($installed_version) is higher than the docker image ($image_version)" - exit 1 - fi - - # check it just in case the version is greater or if we force the upgrade - if version_greater "$image_version" "$installed_version" || [ "${FRIENDICA_UPGRADE:-false}" = "true" ]; then - echo "Initializing Friendica $image_version ..." - - if [ "$installed_version" != "0.0.0.0" ]; then - echo "Upgrading Friendica from $installed_version ..." - fi - - if [ "$(id -u)" -eq 0 ]; then - rsync_options="-rlDog --chown=www-data:www-data" - else - rsync_options="-rlD" - fi - - rsync $rsync_options --delete --exclude-from=/upgrade.exclude /usr/src/friendica/ /var/www/html/ - - # Update docker-based config files, but never delete other config files - rsync $rsync_options --update /usr/src/friendica/config/ /var/www/html/config/ - - # In case there is no .htaccess, copy it from the default dist file - if [ ! -f "/var/www/html/.htaccess" ]; then - cp "/var/www/html/.htaccess-dist" "/var/www/html/.htaccess" - fi - - if [ -d /var/www/html/view/smarty3 ]; then - chmod -R 777 /var/www/html/view/smarty3 - fi - echo "Initializing finished" - - # install - if [ "$installed_version" = "0.0.0.0" ]; then - echo "New Friendica instance" - - file_env FRIENDICA_ADMIN_MAIL - - file_env MYSQL_DATABASE - file_env MYSQL_USER - file_env MYSQL_PASSWORD - - install=false - if [ -n "${MYSQL_DATABASE+x}" ] && [ -n "${MYSQL_PASSWORD+x}" ] && [ -n "${MYSQL_HOST+x}" ] && [ -n "${MYSQL_USER+x}" ] && [ -n "${FRIENDICA_ADMIN_MAIL+x}" ] && [ -n "${FRIENDICA_URL+x}" ]; then - echo "Installation with environment variables" - - FRIENDICA_TZ=${FRIENDICA_TZ:-America/LosAngeles} - FRIENDICA_LANG=${FRIENDICA_LANG:-en} - MYSQL_PORT=${MYSQL_PORT:-3306} - - # shellcheck disable=SC2016 - install_options='-s --dbhost "'$MYSQL_HOST'" --dbport "'$MYSQL_PORT'" --dbdata "'$MYSQL_DATABASE'" --dbuser "'$MYSQL_USER'" --dbpass "'$MYSQL_PASSWORD'"' - - # shellcheck disable=SC2016 - install_options=$install_options' --admin "'$FRIENDICA_ADMIN_MAIL'" --tz "'$FRIENDICA_TZ'" --lang "'$FRIENDICA_LANG'" --url "'$FRIENDICA_URL'"' - install=true - fi - - if [ "$install" = true ]; then - echo "Waiting for MySQL $MYSQL_HOST initialization..." - if run_as "php /var/www/html/bin/wait-for-connection $MYSQL_HOST ${MYSQL_PORT:-3306} 300"; then - - echo "Starting Friendica installation ..." - run_as "php /var/www/html/bin/console.php autoinstall $install_options" - - rm -fr /var/www/html/view/smarty3/compiled - - # load other config files (*.config.php) to the config folder - if [ -d "/usr/src/config" ]; then - rsync $rsync_options --ignore-existing /usr/src/config/ /var/www/html/config/ - fi - - echo "Installation finished" - else - echo "[ERROR] Waited 300 seconds, no response" >&2 - fi - else - echo "Running web-based installer on first connect!" - fi - # upgrade - else - echo "Upgrading Friendica ..." - run_as 'php /var/www/html/bin/console.php dbstructure update -f' - echo "Upgrading finished" - fi - fi -fi - -exec "$@" diff --git a/2020.12-rc/fpm/setup_msmtp.sh b/2020.12-rc/fpm/setup_msmtp.sh deleted file mode 100644 index b2e22f0..0000000 --- a/2020.12-rc/fpm/setup_msmtp.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/sh -set -eu - -if [ -n "${SMTP_DOMAIN+x}" ] && [ -n "${SMTP+x}" ] && [ "${SMTP}" != "localhost" ]; then - SITENAME="${FRIENDICA_SITENAME:-Friendica Social Network}" - echo "Setup MSMTP for '$SITENAME' with '$SMTP' ..." - - smtp_from="${SMTP_FROM:=no-reply}" - - # Setup MSMTP - usermod --comment "$(echo "$SITENAME" | tr -dc '[:print:]')" root - usermod --comment "$(echo "$SITENAME" | tr -dc '[:print:]')" www-data - - # add possible mail-senders - { - echo "www-data: $smtp_from@$SMTP_DOMAIN" - echo "root: $smtp_from@$SMTP_DOMAIN" - } >/etc/aliases - - # create msmtp settings - { - echo "account default" - echo "host $SMTP" - if [ -n "${SMTP_PORT+x}" ]; then echo "port $SMTP_PORT"; else echo "port 587"; fi - echo "from \"$smtp_from@$SMTP_DOMAIN\"" - echo "tls_certcheck off" # No certcheck because of internal docker mail-hostnames - if [ -n "${SMTP_TLS+x}" ]; then echo "tls on"; fi - if [ -n "${SMTP_STARTTLS+x}" ]; then echo "tls_starttls on"; fi - if [ -n "${SMTP_AUTH_USER+x}" ]; then echo "auth on"; fi - if [ -n "${SMTP_AUTH_USER+x}" ]; then echo "user \"$SMTP_AUTH_USER\""; fi - if [ -n "${SMTP_AUTH_PASS+x}" ]; then echo "password \"$SMTP_AUTH_PASS\""; fi - echo "logfile /var/log/msmtp.log" - echo "aliases /etc/aliases" - } >/etc/msmtprc - - echo "Setup finished" -fi diff --git a/2020.12-rc/fpm/upgrade.exclude b/2020.12-rc/fpm/upgrade.exclude deleted file mode 100644 index 2fb6533..0000000 --- a/2020.12-rc/fpm/upgrade.exclude +++ /dev/null @@ -1,10 +0,0 @@ -/.git/ -/photo/ -/proxy/ -/.htconfig.php -/.htaccess -/home.* -/config/ -/storage/ -/log/ -*.log \ No newline at end of file diff --git a/README-MAINTENANCE.md b/README-MAINTENANCE.md index 4229201..f8a029f 100644 --- a/README-MAINTENANCE.md +++ b/README-MAINTENANCE.md @@ -6,31 +6,91 @@ The structure and usage of this repository is influenced by other, official dock **This is important!** +The `update.sh` script automatically deletes all non-`.`-directories (= version directories) at first. + Never ever change a file/folder inside a directory without a `.` at the beginning (`2018.05-rc`, ...). This folder will get updated automatically based on the templates you want to change. All changes in such folders will get overwritten during an update. -# Maintenance scripts +# How to update -# `update.sh` +This section describes how to update the official Friendica docker images. +The official Docker image is available at https://hub.docker.com/_/friendica. + +## How to update the Docker Image + +1. Review your changes based on the official Docker [Review guidelines](https://github.com/docker-library/official-images#review-guidelines). +2. (optional) Check for possible release channels (see chapter `generate-stackbrew-library.sh`) +3. (optional) Check if you have to adjust the minimum version (see chapter `update.sh`) +4. Check if all tests are green (common issue: you forgot to commit all changes because of `update.sh`) +5. Check if all commits are available at the stable branch (= all required PRs are committed into stable) +6. Download & install [`bashbrew`](https://github.com/docker-library/bashbrew) +7. Execute `generate-stackbrew-library.sh` +8. Copy the output & overwrite the whole official Friendica [docker manifest](https://github.com/docker-library/official-images/blob/master/library/friendica). +9. Create a new PR at https://github.com/docker-library/official-images/pulls + +After the PR is merged, the images aren't immediately available, they've to get build. +Check the official Docker Continuous Deployment server https://doi-janky.infosiftr.net/job/multiarch/ for the current status of the builds. + +## How to update the docker hub description + +1. At first, read https://github.com/docker-library/docs#how-do-i-update-an-images-docs +2. Checkout & change the content of https://github.com/docker-library/docs/tree/master/friendica +3. Create a new Pull Request at https://github.com/docker-library/docs/pulls + +# Tools & Scripts + +## Github Action + +GitHub Actions helps to automate tasks for Continuous Integration (= autotest Docker images) and Continuous Deployment (= autocreate Docker images based on the friendica upstream). + +For mor details see [Introduction to github actions](https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/introduction-to-github-actions). + +### [`update-sh.yml`](https://github.com/friendica/docker/blob/stable/.github/workflows/update-sh.yml) + +This script is a cronjob every 15 minutes and automatically runs `update.sh`. +In case there are changes because of `update.sh`, it starts `images.yml`. + +### [`images.yml`](https://github.com/friendica/docker/blob/stable/.github/workflows/images.yml) + +This script automatically creates autotests actions based on the Docker image version structure and variants. +For example if there are two versions (like `2021.03-dev` and `2021.01`), it would create 3 runs (apache, apache-fpm, fpm-alpine) for each version, having 6 runs at all. + +The script uses the official docker GitHub Action tool [`bashbrew`](https://github.com/docker-library/bashbrew.git) to transform the repository version structure into GitHub Action commands. + +This workflow is automatically executed because of a PR, a commit to `stable` or if the cronjob has found new updates. + +## Maintenance scripts + +### [`update.sh`](https://github.com/friendica/docker/blob/stable/update.sh) -Creates a directory and the necessary files for each combination of version (2018.05-rc, 3.6, ...) and variant (apache, fpm, fpm-alpine): +Creates a directory, and the necessary files for each combination of version (2018.05-rc, 3.6, ...) and variant (apache, fpm, fpm-alpine): - Creating the right `Dockerfile` (from one of the two *.template files) - Copy each config file in `.config/` - Recreating the version/variant environment in `.travis.yml` + +All possible Friendica versions are retrieved from https://files.friendi.ca/. + +#### Version patterns + +The update script parses the source https://files.friendi.ca/ automatically based on these patterns: +- stable: `friendica-full-%YYYY%.%MM%.tar.gz` (e.g. `friendica-full-2021.10.tar.gz`) +- dev/rc: `friendica-full-%YYYY%.%MM%-dev/rc.tar.gz` (e.g. `friendica-full-2021.10-dev.tar.gz`) +- hotfix: `friendica-full-%YYYY%.%MM%-%i.tar.gz` (e.g. `friendica-full-2021.10-01.tar.gz`) -If you want to update the Docker-images to a newer version, just change the list in `update.sh` at -```shell -versions=( - 2018.05-rc -) -``` - -# `generate-stackbrew-library.sh` - -This file automatically creates a "manifest" for the docker-images. -This "manifest" is used to create a new PR in the official-images [repository](https://github.com/docker-library/official-images/) for deploying the changes to the docker hub. +Any other pattern will completely be ignored(!) + +#### Minimum version + +Please adjust the `min_version` variable. +It contains the minimum supported version, which will automatically be available as a Docker image. +Any other versions lower than this won't be available from the official Docker Hub anymore. + +### [`generate-stackbrew-library.sh`](https://github.com/friendica/docker/blob/stable/generate-stackbrew-library.sh) + +This file creates a "manifest" for the docker-images. +This "manifest" is used to create a new PR in the official-images [repository](https://github.com/docker-library/official-images/) for deploying the changes to the Docker Hub. Like: ```console @@ -54,3 +114,8 @@ GitCommit: b46fae917321394e1482df59dc4e39daffbe5c59 Directory: 2018.05-rc/fpm-alpine This is the input-file for the official-images in a later step :-) ``` + +#### Release channels + +Please adjust the `release_channel` array. +It maps additional tags onto Docker image versions. diff --git a/generate-stackbrew-library.sh b/generate-stackbrew-library.sh index 4d20b88..6cc02a2 100755 --- a/generate-stackbrew-library.sh +++ b/generate-stackbrew-library.sh @@ -2,7 +2,7 @@ set -Eeuo pipefail declare -A release_channel=( - [stable]='2020.09' + [stable]=$( cat latest.txt ) ) self="$(basename "${BASH_SOURCE[0]}")"