diff options
| author | 2019-03-31 16:38:46 +0200 | |
|---|---|---|
| committer | 2019-03-31 16:38:46 +0200 | |
| commit | d413f67dd28738f4a6d8cf036e00714737f757b8 (patch) | |
| tree | 1509f631dc8814bcf85d907a292ddd6437a2efcd /Docker | |
| parent | 8dcdde6251ae4dfc690b1a014488df125c5e5cdc (diff) | |
| parent | 2a935516d850d63a215f9650b96ede102311f7ca (diff) | |
Merge pull request #2298 from FreshRSS/dev1.14.0
FreshRSS 1.14.0
Diffstat (limited to 'Docker')
| -rw-r--r-- | Docker/Dockerfile | 44 | ||||
| -rw-r--r-- | Docker/Dockerfile-Alpine | 34 | ||||
| -rw-r--r-- | Docker/FreshRSS.Apache.conf | 1 | ||||
| -rw-r--r-- | Docker/README.md | 68 |
4 files changed, 103 insertions, 44 deletions
diff --git a/Docker/Dockerfile b/Docker/Dockerfile index a4be9fd84..56623b001 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -1,28 +1,31 @@ -FROM alpine:3.8 +FROM ubuntu:18.10 ENV TZ UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone -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-pdo_sqlite php7-pdo_mysql php7-pdo_pgsql +RUN apt update && \ + apt install --no-install-recommends -y \ + ca-certificates cron \ + apache2 libapache2-mod-php \ + php-curl php-intl php-mbstring php-xml php-zip \ + php-sqlite3 php-mysql php-pgsql && \ + rm -rf /var/lib/apt/lists/ -RUN mkdir -p /var/www/FreshRSS /run/apache2/ +RUN mkdir -p /var/www/FreshRSS /run/apache2/ /run/php/ WORKDIR /var/www/FreshRSS COPY . /var/www/FreshRSS -COPY ./Docker/*.Apache.conf /etc/apache2/conf.d/ - -RUN rm -f /etc/apache2/conf.d/languages.conf /etc/apache2/conf.d/info.conf \ - /etc/apache2/conf.d/status.conf /etc/apache2/conf.d/userdir.conf && \ - sed -r -i "/^\s*LoadModule .*mod_(alias|autoindex|negotiation|status).so$/s/^/#/" \ - /etc/apache2/httpd.conf && \ - sed -r -i "/^\s*#\s*LoadModule .*mod_(deflate|expires|headers|mime|setenvif).so$/s/^\s*#//" \ - /etc/apache2/httpd.conf && \ - sed -r -i "/^\s*(CustomLog|ErrorLog|Listen) /s/^/#/" \ - /etc/apache2/httpd.conf && \ - echo "17,37 * * * * su apache -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" >> \ +COPY ./Docker/*.Apache.conf /etc/apache2/sites-available/ + +RUN a2dismod -f alias autoindex negotiation status && \ + a2enmod deflate expires headers mime setenvif && \ + a2disconf '*' && \ + a2dissite '*' && \ + a2ensite 'FreshRSS*' + +RUN sed -r -i "/^\s*(CustomLog|ErrorLog|Listen) /s/^/#/" /etc/apache2/apache2.conf && \ + sed -r -i "/^\s*Listen /s/^/#/" /etc/apache2/ports.conf && \ + echo "17,37 su apache -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" >> \ /var/spool/cron/crontabs/root ENV COPY_SYSLOG_TO_STDERR On @@ -30,5 +33,6 @@ ENV CRON_MIN '' ENTRYPOINT ["./Docker/entrypoint.sh"] EXPOSE 80 -CMD ([ -z "$CRON_MIN" ] || crond -d 6) && \ - exec httpd -D FOREGROUND +CMD ([ -z "$CRON_MIN" ] || cron) && \ + . /etc/apache2/envvars && \ + exec apache2 -D FOREGROUND diff --git a/Docker/Dockerfile-Alpine b/Docker/Dockerfile-Alpine new file mode 100644 index 000000000..cd0f521a0 --- /dev/null +++ b/Docker/Dockerfile-Alpine @@ -0,0 +1,34 @@ +FROM alpine:3.9 + +ENV TZ UTC + +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-pdo_sqlite php7-pdo_mysql php7-pdo_pgsql + +RUN mkdir -p /var/www/FreshRSS /run/apache2/ +WORKDIR /var/www/FreshRSS + +COPY . /var/www/FreshRSS +COPY ./Docker/*.Apache.conf /etc/apache2/conf.d/ + +RUN rm -f /etc/apache2/conf.d/languages.conf /etc/apache2/conf.d/info.conf \ + /etc/apache2/conf.d/status.conf /etc/apache2/conf.d/userdir.conf && \ + sed -r -i "/^\s*LoadModule .*mod_(alias|autoindex|negotiation|status).so$/s/^/#/" \ + /etc/apache2/httpd.conf && \ + sed -r -i "/^\s*#\s*LoadModule .*mod_(deflate|expires|headers|mime|setenvif).so$/s/^\s*#//" \ + /etc/apache2/httpd.conf && \ + sed -r -i "/^\s*(CustomLog|ErrorLog|Listen) /s/^/#/" \ + /etc/apache2/httpd.conf && \ + echo "17,37 * * * * su apache -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" >> \ + /var/spool/cron/crontabs/root + +ENV COPY_SYSLOG_TO_STDERR On +ENV CRON_MIN '' +ENTRYPOINT ["./Docker/entrypoint.sh"] + +EXPOSE 80 +CMD ([ -z "$CRON_MIN" ] || crond -d 6) && \ + exec httpd -D FOREGROUND diff --git a/Docker/FreshRSS.Apache.conf b/Docker/FreshRSS.Apache.conf index 80f6389d8..6621ff16f 100644 --- a/Docker/FreshRSS.Apache.conf +++ b/Docker/FreshRSS.Apache.conf @@ -4,6 +4,7 @@ DocumentRoot /var/www/FreshRSS/p/ CustomLog /dev/stdout combined ErrorLog /dev/stderr AllowEncodedSlashes On +ServerTokens OS <Directory /> AllowOverride None diff --git a/Docker/README.md b/Docker/README.md index ac745c49d..3cfb05c69 100644 --- a/Docker/README.md +++ b/Docker/README.md @@ -10,21 +10,6 @@ sh get-docker.sh ``` -## Optional: Build Docker image of FreshRSS -Optional, as a *less recent* online image can be automatically fetched during the next step (run), -but online images are not available for as many platforms (e.g. Raspberry Pi / ARM) as if you build yourself. - -```sh -# First time only -git clone https://github.com/FreshRSS/FreshRSS.git - -cd ./FreshRSS/ -git pull -sudo docker pull alpine:3.8 -sudo docker build --tag freshrss/freshrss -f Docker/Dockerfile . -``` - - ## Create an isolated network ```sh sudo docker network create freshrss-network @@ -36,10 +21,12 @@ Here is the recommended configuration using automatic [Let’s Encrypt](https:// ```sh sudo docker volume create traefik-letsencrypt +sudo docker volume create traefik-tmp # Just change your e-mail address in the command below: sudo docker run -d --restart unless-stopped --log-opt max-size=10m \ -v traefik-letsencrypt:/etc/traefik/acme \ + -v traefik-tmp:/tmp \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ --net freshrss-network \ -p 80:80 \ @@ -59,6 +46,8 @@ See [more information about Docker and Let’s Encrypt in Træfik](https://docs. Example using the built-in refresh cron job (see further below for alternatives). You must first chose a domain (DNS) or sub-domain, e.g. `freshrss.example.net`. +> **N.B.:** For platforms other than x64 (Intel, AMD), such as ARM (e.g. Raspberry Pi), see the section *Build Docker image* further below. + ```sh sudo docker volume create freshrss-data @@ -121,15 +110,6 @@ Browse to your server https://freshrss.example.net/ to complete the installation or use the command line described below. -## Command line - -```sh -sudo docker exec --user apache -it freshrss php ./cli/list-users.php -``` - -See the [CLI documentation](../cli/) for all the other commands. - - ## How to update ```sh @@ -145,6 +125,42 @@ sudo docker rm freshrss_old ``` +## [Docker tags](https://hub.docker.com/r/freshrss/freshrss/tags) +The tags correspond to FreshRSS branches and versions: +* `:latest` (default) is the `master` branch, more stable +* `:dev` is the `dev` branch, rolling release +* `:x.y.z` are specific FreshRSS releases + +### Linux: Ubuntu vs. Alpine +Our default image is based on [Ubuntu](https://www.ubuntu.com/server). We offer an alternative based on [Alpine](https://alpinelinux.org/) (with the `-alpine` tag suffix). +In [our tests](https://github.com/FreshRSS/FreshRSS/pull/2205), Ubuntu is ~3 times faster, +while Alpine is ~2.5 times [smaller on disk](https://hub.docker.com/r/freshrss/freshrss/tags) (and much faster to build). + + +## Optional: Build Docker image of FreshRSS +Building your own Docker image is optional because online images can be fetched automatically. +Note that prebuilt images are less recent and only available for x64 (Intel, AMD) platforms. + +```sh +# First time only +git clone https://github.com/FreshRSS/FreshRSS.git + +cd ./FreshRSS/ +git pull +sudo docker pull ubuntu:18.10 +sudo docker build --tag freshrss/freshrss -f Docker/Dockerfile . +``` + + +## Command line + +```sh +sudo docker exec --user apache -it freshrss php ./cli/list-users.php +``` + +See the [CLI documentation](../cli/) for all the other commands. + + ## Debugging ```sh @@ -289,6 +305,10 @@ server { proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; proxy_read_timeout 90; + + # Forward the Authorization header for the Google Reader API. + proxy_set_header Authorization $http_authorization; + proxy_pass_header Authorization; } } ``` |
