From d09826c145bd6276f8a0e85a87dccefb55227ca1 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 20 Aug 2019 15:48:54 +0200 Subject: Docker Alpine opcache (#2498) https://github.com/FreshRSS/FreshRSS/pull/2495#discussion_r315662184 https://php.net/ref.opcache We need to retest the performances https://github.com/FreshRSS/FreshRSS/pull/2205 --- Docker/Dockerfile-Alpine | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Docker/Dockerfile-Alpine') diff --git a/Docker/Dockerfile-Alpine b/Docker/Dockerfile-Alpine index ac5d74a43..b8ef72988 100644 --- a/Docker/Dockerfile-Alpine +++ b/Docker/Dockerfile-Alpine @@ -5,7 +5,7 @@ SHELL ["/bin/ash", "-eo", "pipefail", "-c"] RUN apk add --no-cache \ apache2 php7-apache2 \ php7 php7-curl php7-gmp php7-intl php7-mbstring php7-xml php7-zip \ - php7-ctype php7-dom php7-fileinfo php7-iconv php7-json php7-session php7-simplexml php7-xmlreader php7-zlib \ + php7-ctype php7-dom php7-fileinfo php7-iconv php7-json php7-opcache php7-session php7-simplexml php7-xmlreader php7-zlib \ php7-pdo_sqlite php7-pdo_mysql php7-pdo_pgsql RUN mkdir -p /var/www/FreshRSS /run/apache2/ -- cgit v1.2.3 From 6cedeeeae51f5e5220d7f786fb801951811bb743 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Thu, 22 Aug 2019 20:04:26 +0200 Subject: Minz: New environment variable to control development mode (#2508) * New environment variable to control development mode Suggestion of new enviromnent variable, as discussed https://github.com/FreshRSS/FreshRSS/pull/2492#issuecomment-523613920 * Update Docker/README.md Co-Authored-By: Frans de Jonge * Update Docker/README.md Co-Authored-By: Frans de Jonge * Update Docker/README.md Co-Authored-By: Frans de Jonge * Declare ENV in Dockerfile Tested --- Docker/Dockerfile | 2 ++ Docker/Dockerfile-Alpine | 2 ++ Docker/Dockerfile-QEMU-ARM | 2 ++ Docker/README.md | 16 ++++++++++++++++ app/install.php | 2 +- lib/Minz/FrontController.php | 35 ++++++++++++++++++++--------------- 6 files changed, 43 insertions(+), 16 deletions(-) (limited to 'Docker/Dockerfile-Alpine') diff --git a/Docker/Dockerfile b/Docker/Dockerfile index 8693bb0f7..1d2ead96e 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -49,6 +49,8 @@ RUN sed -r -i "/^\s*(CustomLog|ErrorLog|Listen) /s/^/#/" /etc/apache2/apache2.co ENV COPY_SYSLOG_TO_STDERR On ENV CRON_MIN '' +ENV FRESHRSS_ENV '' + ENTRYPOINT ["./Docker/entrypoint.sh"] EXPOSE 80 diff --git a/Docker/Dockerfile-Alpine b/Docker/Dockerfile-Alpine index b8ef72988..3b1f1a394 100644 --- a/Docker/Dockerfile-Alpine +++ b/Docker/Dockerfile-Alpine @@ -45,6 +45,8 @@ RUN rm -f /etc/apache2/conf.d/languages.conf /etc/apache2/conf.d/info.conf \ ENV COPY_SYSLOG_TO_STDERR On ENV CRON_MIN '' +ENV FRESHRSS_ENV '' + ENTRYPOINT ["./Docker/entrypoint.sh"] EXPOSE 80 diff --git a/Docker/Dockerfile-QEMU-ARM b/Docker/Dockerfile-QEMU-ARM index 4d81a23f0..ea1f98798 100644 --- a/Docker/Dockerfile-QEMU-ARM +++ b/Docker/Dockerfile-QEMU-ARM @@ -61,6 +61,8 @@ RUN rm /usr/bin/qemu-* /var/www/FreshRSS/Docker/qemu-* ENV COPY_SYSLOG_TO_STDERR On ENV CRON_MIN '' +ENV FRESHRSS_ENV '' + ENTRYPOINT ["./Docker/entrypoint.sh"] EXPOSE 80 diff --git a/Docker/README.md b/Docker/README.md index 32024c829..9de1d5033 100644 --- a/Docker/README.md +++ b/Docker/README.md @@ -238,6 +238,22 @@ docker run -d --restart unless-stopped --log-opt max-size=10m \ crond -f -d 6 ``` +## Development mode + +To contribute to FreshRSS development, you can use one of the Docker images to run and serve the PHP code, +while reading the source code from your local (git) directory, like the following example: + +```sh +cd /path-to-local/FreshRSS/ +docker run --rm -p 8080:80 -e TZ=Europe/Paris -e FRESHRSS_ENV=development \ + -v $(pwd):/var/www/FreshRSS \ + freshrss/freshrss:dev +``` + +This will start a server on port 8080, based on your local PHP code, which will show the logs directly in your terminal. +Press Control+c to exit. + +The `FRESHRSS_ENV=development` environment variable increases the level of logging and ensures that errors are displayed. ## More deployment options diff --git a/app/install.php b/app/install.php index 8e14d14c0..a4d1d0af9 100644 --- a/app/install.php +++ b/app/install.php @@ -61,7 +61,7 @@ function initTranslate() { } function get_best_language() { - $accept = $_SERVER['HTTP_ACCEPT_LANGUAGE']; + $accept = empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? '' : $_SERVER['HTTP_ACCEPT_LANGUAGE']; return strtolower(substr($accept, 0, 2)); } diff --git a/lib/Minz/FrontController.php b/lib/Minz/FrontController.php index 066278b7c..e09b022fc 100644 --- a/lib/Minz/FrontController.php +++ b/lib/Minz/FrontController.php @@ -115,21 +115,26 @@ class Minz_FrontController { } private function setReporting() { - $conf = Minz_Configuration::get('system'); - switch($conf->environment) { - case 'production': - error_reporting(E_ALL); - ini_set('display_errors', 'Off'); - ini_set('log_errors', 'On'); - break; - case 'development': - error_reporting(E_ALL); - ini_set('display_errors', 'On'); - ini_set('log_errors', 'On'); - break; - case 'silent': - error_reporting(0); - break; + $envType = getenv('FRESHRSS_ENV'); + if ($envType == '') { + $conf = Minz_Configuration::get('system'); + $envType = $conf->environment; + } + switch ($envType) { + case 'development': + error_reporting(E_ALL); + ini_set('display_errors', 'On'); + ini_set('log_errors', 'On'); + break; + case 'silent': + error_reporting(0); + break; + case 'production': + default: + error_reporting(E_ALL); + ini_set('display_errors', 'Off'); + ini_set('log_errors', 'On'); + break; } } } -- cgit v1.2.3 From 3c49986ec895595edc632da0f14419199ce47667 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 26 Oct 2019 11:19:42 +0200 Subject: New environment variable COPY_LOG_TO_SYSLOG (#2591) * New environment variable COPY_LOG_TO_SYSLOG False by default. Makes it easy to monitor all logs from Syslog or STDERR (e.g. docker logs). * Suggestion of native constants --- Docker/Dockerfile | 3 ++- Docker/Dockerfile-Alpine | 1 + Docker/Dockerfile-QEMU-ARM | 1 + Docker/entrypoint.sh | 1 + constants.php | 1 + lib/Minz/Log.php | 44 ++++++++++++++++++-------------------------- 6 files changed, 24 insertions(+), 27 deletions(-) (limited to 'Docker/Dockerfile-Alpine') diff --git a/Docker/Dockerfile b/Docker/Dockerfile index 19923bcf1..6dbebccb0 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -43,10 +43,11 @@ RUN a2dismod -f alias autoindex negotiation status && \ RUN sed -r -i "/^\s*(CustomLog|ErrorLog|Listen) /s/^/#/" /etc/apache2/apache2.conf && \ sed -r -i "/^\s*Listen /s/^/#/" /etc/apache2/ports.conf && \ touch /var/www/FreshRSS/Docker/env.txt && \ - echo "17,47 * * * * . /var/www/FreshRSS/Docker/env.txt; \ + echo "7,37 * * * * . /var/www/FreshRSS/Docker/env.txt; \ su www-data -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' \ 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" | crontab - +ENV COPY_LOG_TO_SYSLOG On ENV COPY_SYSLOG_TO_STDERR On ENV CRON_MIN '' ENV FRESHRSS_ENV '' diff --git a/Docker/Dockerfile-Alpine b/Docker/Dockerfile-Alpine index 3b1f1a394..4afad0949 100644 --- a/Docker/Dockerfile-Alpine +++ b/Docker/Dockerfile-Alpine @@ -43,6 +43,7 @@ RUN rm -f /etc/apache2/conf.d/languages.conf /etc/apache2/conf.d/info.conf \ su apache -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' \ 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" | crontab - +ENV COPY_LOG_TO_SYSLOG On ENV COPY_SYSLOG_TO_STDERR On ENV CRON_MIN '' ENV FRESHRSS_ENV '' diff --git a/Docker/Dockerfile-QEMU-ARM b/Docker/Dockerfile-QEMU-ARM index f7389fcbc..30b1e205b 100644 --- a/Docker/Dockerfile-QEMU-ARM +++ b/Docker/Dockerfile-QEMU-ARM @@ -59,6 +59,7 @@ RUN update-ca-certificates -f # Useful with the `--squash` build option RUN rm /usr/bin/qemu-* /var/www/FreshRSS/Docker/qemu-* +ENV COPY_LOG_TO_SYSLOG On ENV COPY_SYSLOG_TO_STDERR On ENV CRON_MIN '' ENV FRESHRSS_ENV '' diff --git a/Docker/entrypoint.sh b/Docker/entrypoint.sh index dcbd7e231..02338c35e 100755 --- a/Docker/entrypoint.sh +++ b/Docker/entrypoint.sh @@ -12,6 +12,7 @@ find /etc/php*/ -name php.ini -exec sed -r -i "\\#^;?upload_max_filesize#s#^.*#u if [ -n "$CRON_MIN" ]; then ( echo "export TZ=$TZ" + echo "export COPY_LOG_TO_SYSLOG=$COPY_LOG_TO_SYSLOG" echo "export COPY_SYSLOG_TO_STDERR=$COPY_SYSLOG_TO_STDERR" ) >/var/www/FreshRSS/Docker/env.txt crontab -l | sed -r "\\#FreshRSS#s#^[^ ]+ #$CRON_MIN #" | crontab - diff --git a/constants.php b/constants.php index 76a320616..2ccf91358 100644 --- a/constants.php +++ b/constants.php @@ -32,6 +32,7 @@ safe_define('FRESHRSS_USERAGENT', 'FreshRSS/' . FRESHRSS_VERSION . ' (' . PHP_OS // PHP text output compression http://php.net/ob_gzhandler (better to do it at Web server level) safe_define('PHP_COMPRESSION', false); +safe_define('COPY_LOG_TO_STDERR', filter_var(getenv('COPY_LOG_TO_STDERR'), FILTER_VALIDATE_BOOLEAN)); // For cases when syslog is not available safe_define('COPY_SYSLOG_TO_STDERR', filter_var(getenv('COPY_SYSLOG_TO_STDERR'), FILTER_VALIDATE_BOOLEAN)); diff --git a/lib/Minz/Log.php b/lib/Minz/Log.php index a8dbf8350..3e6a25f27 100644 --- a/lib/Minz/Log.php +++ b/lib/Minz/Log.php @@ -8,26 +8,14 @@ * La classe Log permet de logger des erreurs */ class Minz_Log { - /** - * Les différents niveau de log - * ERROR erreurs bloquantes de l'application - * WARNING erreurs pouvant géner le bon fonctionnement, mais non bloquantes - * NOTICE erreurs mineures ou messages d'informations - * DEBUG Informations affichées pour le déboggage - */ - const ERROR = 2; - const WARNING = 4; - const NOTICE = 8; - const DEBUG = 16; - /** * Enregistre un message dans un fichier de log spécifique * Message non loggué si * - environment = SILENT - * - level = WARNING et environment = PRODUCTION - * - level = NOTICE et environment = PRODUCTION + * - level = LOG_WARNING et environment = PRODUCTION + * - level = LOG_NOTICE et environment = PRODUCTION * @param $information message d'erreur / information à enregistrer - * @param $level niveau d'erreur + * @param $level niveau d'erreur https://php.net/function.syslog * @param $file_name fichier de log * @throws Minz_PermissionDeniedException */ @@ -41,7 +29,7 @@ class Minz_Log { if (! ($env === 'silent' || ($env === 'production' - && ($level >= Minz_Log::NOTICE)))) { + && ($level >= LOG_NOTICE)))) { if ($file_name === null) { $username = Minz_Session::param('currentUser', ''); if ($username == '') { @@ -51,16 +39,16 @@ class Minz_Log { } switch ($level) { - case Minz_Log::ERROR : + case LOG_ERR : $level_label = 'error'; break; - case Minz_Log::WARNING : + case LOG_WARNING : $level_label = 'warning'; break; - case Minz_Log::NOTICE : + case LOG_NOTICE : $level_label = 'notice'; break; - case Minz_Log::DEBUG : + case LOG_DEBUG : $level_label = 'debug'; break; default : @@ -71,6 +59,10 @@ class Minz_Log { . ' [' . $level_label . ']' . ' --- ' . $information . "\n"; + if (defined('COPY_LOG_TO_SYSLOG') && COPY_LOG_TO_SYSLOG) { + syslog($level, '[' . $username . '] ' . $log); + } + self::ensureMaxLogSize($file_name); if (file_put_contents($file_name, $log, FILE_APPEND | LOCK_EX) === false) { @@ -120,8 +112,8 @@ class Minz_Log { $msg_get = str_replace("\n", '', '$_GET content : ' . print_r($_GET, true)); $msg_post = str_replace("\n", '', '$_POST content : ' . print_r($_POST, true)); - self::record($msg_get, Minz_Log::DEBUG, $file_name); - self::record($msg_post, Minz_Log::DEBUG, $file_name); + self::record($msg_get, LOG_DEBUG, $file_name); + self::record($msg_post, LOG_DEBUG, $file_name); } /** @@ -129,15 +121,15 @@ class Minz_Log { * Parameters are the same of those of the record() method. */ public static function debug($msg, $file_name = null) { - self::record($msg, Minz_Log::DEBUG, $file_name); + self::record($msg, LOG_DEBUG, $file_name); } public static function notice($msg, $file_name = null) { - self::record($msg, Minz_Log::NOTICE, $file_name); + self::record($msg, LOG_NOTICE, $file_name); } public static function warning($msg, $file_name = null) { - self::record($msg, Minz_Log::WARNING, $file_name); + self::record($msg, LOG_WARNING, $file_name); } public static function error($msg, $file_name = null) { - self::record($msg, Minz_Log::ERROR, $file_name); + self::record($msg, LOG_ERR, $file_name); } } -- cgit v1.2.3