summaryrefslogtreecommitdiff
path: root/Docker
diff options
context:
space:
mode:
Diffstat (limited to 'Docker')
-rw-r--r--Docker/Dockerfile44
-rw-r--r--Docker/Dockerfile-Alpine34
-rw-r--r--Docker/FreshRSS.Apache.conf1
-rw-r--r--Docker/README.md68
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;
}
}
```