Merge pull request #1158 from virtualtam/master-dockerfile

Master: Build the Docker images from the local sources
This commit is contained in:
VirtualTam 2018-06-20 16:59:29 +02:00 committed by GitHub
commit 6325e74caa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 89 additions and 263 deletions

51
.dockerignore Normal file
View file

@ -0,0 +1,51 @@
# Docker-ignore
.dev
.git
.github
tests
# Shaarli runtime resources
cache/*
data/*
pagecache/*
tmp/*
# Eclipse project files
.settings
.buildpath
.project
# Raintpl generated pages
*.rtpl.php
# 3rd-party dependencies
vendor/
# Release archives
*.tar.gz
*.zip
inc/languages/*/LC_MESSAGES/shaarli.mo
# Development and test resources
coverage
doxygen
sandbox
phpmd.html
# User plugin configuration
plugins/*/config.php
# 3rd party themes
tpl/*
!tpl/default
!tpl/vintage
# Front end
node_modules
tpl/default/js
tpl/default/css
tpl/default/fonts
tpl/default/img
tpl/vintage/js
tpl/vintage/css
tpl/vintage/img

4
.gitattributes vendored
View file

@ -33,7 +33,9 @@ Dockerfile text
.travis.yml export-ignore .travis.yml export-ignore
doc/**/*.json export-ignore doc/**/*.json export-ignore
doc/**/*.md export-ignore doc/**/*.md export-ignore
docker/ export-ignore .docker/ export-ignore
.dockerignore export-ignore
Dockerfile* export-ignore
Doxyfile export-ignore Doxyfile export-ignore
Makefile export-ignore Makefile export-ignore
node_modules/ export-ignore node_modules/ export-ignore

View file

@ -1,13 +1,20 @@
# Stage 1: # Stage 1:
# - Get Shaarli sources # - Copy Shaarli sources
# - Resolve PHP dependencies with Composer # - Build documentation
FROM composer:latest as composer FROM python:3-alpine as docs
RUN curl -L https://github.com/shaarli/Shaarli/archive/master.tar.gz | tar xzf - \ ADD . /usr/src/app/shaarli
&& mv Shaarli-master shaarli \ RUN cd /usr/src/app/shaarli \
&& cd shaarli \ && pip install --no-cache-dir mkdocs \
&& composer --prefer-dist --no-dev install && mkdocs build
# Stage 2: # Stage 2:
# - Resolve PHP dependencies with Composer
FROM composer:latest as composer
COPY --from=docs /usr/src/app/shaarli /app/shaarli
RUN cd shaarli \
&& composer --prefer-dist --no-dev install
# Stage 3:
# - Frontend dependencies # - Frontend dependencies
FROM node:9.9-alpine as node FROM node:9.9-alpine as node
COPY --from=composer /app/shaarli shaarli COPY --from=composer /app/shaarli shaarli
@ -16,7 +23,7 @@ RUN cd shaarli \
&& yarn run build \ && yarn run build \
&& rm -rf node_modules && rm -rf node_modules
# Stage 3: # Stage 4:
# - Shaarli image # - Shaarli image
FROM alpine:3.6 FROM alpine:3.6
LABEL maintainer="Shaarli Community" LABEL maintainer="Shaarli Community"
@ -39,9 +46,9 @@ RUN apk --update --no-cache add \
php7-zlib \ php7-zlib \
s6 s6
COPY nginx.conf /etc/nginx/nginx.conf COPY .docker/nginx.conf /etc/nginx/nginx.conf
COPY php-fpm.conf /etc/php7/php-fpm.conf COPY .docker/php-fpm.conf /etc/php7/php-fpm.conf
COPY services.d /etc/services.d COPY .docker/services.d /etc/services.d
RUN rm -rf /etc/php7/php-fpm.d/www.conf \ RUN rm -rf /etc/php7/php-fpm.d/www.conf \
&& sed -i 's/post_max_size.*/post_max_size = 10M/' /etc/php7/php.ini \ && sed -i 's/post_max_size.*/post_max_size = 10M/' /etc/php7/php.ini \

View file

@ -1,5 +1,5 @@
FROM lsiobase/alpine.armhf:3.6 FROM lsiobase/alpine.armhf:3.6
MAINTAINER Shaarli Community LABEL maintainer="Shaarli Community"
RUN apk --update --no-cache add \ RUN apk --update --no-cache add \
ca-certificates \ ca-certificates \
@ -21,9 +21,9 @@ RUN apk --update --no-cache add \
php7-zlib \ php7-zlib \
s6 s6
COPY nginx.conf /etc/nginx/nginx.conf COPY .docker/nginx.conf /etc/nginx/nginx.conf
COPY php-fpm.conf /etc/php7/php-fpm.conf COPY .docker/php-fpm.conf /etc/php7/php-fpm.conf
COPY services.d /etc/services.d COPY .docker/services.d /etc/services.d
RUN curl -sS https://getcomposer.org/installer | php7 -- --install-dir=/usr/local/bin --filename=composer \ RUN curl -sS https://getcomposer.org/installer | php7 -- --install-dir=/usr/local/bin --filename=composer \
&& rm -rf /etc/php7/php-fpm.d/www.conf \ && rm -rf /etc/php7/php-fpm.d/www.conf \

View file

@ -8,7 +8,7 @@ Read first:
### Docker test images ### Docker test images
Test Dockerfiles are located under `docker/tests/<distribution>/Dockerfile`, Test Dockerfiles are located under `tests/docker/<distribution>/Dockerfile`,
and can be used to build Docker images to run Shaarli test suites under common and can be used to build Docker images to run Shaarli test suites under common
Linux environments. Linux environments.
@ -27,7 +27,7 @@ What's behind the curtains:
- test PHP dependencies (OS packages) - test PHP dependencies (OS packages)
- Composer - Composer
- the local workspace is mapped to the container's `/shaarli/` directory, - the local workspace is mapped to the container's `/shaarli/` directory,
- the files are rsync'd to so tests are run using a standard Linux user account - the files are rsync'd so tests are run using a standard Linux user account
(running tests as `root` would bypass permission checks and may hide issues) (running tests as `root` would bypass permission checks and may hide issues)
- the tests are run inside the container. - the tests are run inside the container.
@ -36,7 +36,7 @@ What's behind the curtains:
```bash ```bash
# build the Debian 9 Docker image # build the Debian 9 Docker image
$ cd /path/to/shaarli $ cd /path/to/shaarli
$ cd docker/test/debian9 $ cd tests/docker/debian9
$ docker build -t shaarli-test:debian9 . $ docker build -t shaarli-test:debian9 .
``` ```

View file

@ -8,9 +8,9 @@ The images can be found in the [`shaarli/shaarli`](https://hub.docker.com/r/shaa
repository. repository.
### Available image tags ### Available image tags
- `latest`: latest branch (tarball release) - `latest`: latest branch
- `master`: master branch (tarball release) - `master`: master branch
- `stable`: stable branch (tarball release) - `stable`: stable branch
The `latest` and `master` images rely on: The `latest` and `master` images rely on:
@ -24,7 +24,13 @@ The `stable` image relies on:
- [PHP5-FPM](http://php-fpm.org/) - [PHP5-FPM](http://php-fpm.org/)
- [Nginx](http://nginx.org/) - [Nginx](http://nginx.org/)
Additional [Dockerfiles](https://github.com/shaarli/Shaarli/tree/master/docker) are provided for the `arm32v7` platform, relying on [Linuxserver.io Alpine armhf images](https://hub.docker.com/r/lsiobase/alpine.armhf/). These images must be built using [`docker build`](https://docs.docker.com/engine/reference/commandline/build/) on an `arm32v7` machine or using an emulator such as [qemu](https://resin.io/blog/building-arm-containers-on-any-x86-machine-even-dockerhub/). Additional Dockerfiles are provided for the `arm32v7` platform, relying on
[Linuxserver.io Alpine armhf
images](https://hub.docker.com/r/lsiobase/alpine.armhf/). These images must be
built using [`docker
build`](https://docs.docker.com/engine/reference/commandline/build/) on an
`arm32v7` machine or using an emulator such as
[qemu](https://resin.io/blog/building-arm-containers-on-any-x86-machine-even-dockerhub/).
### Download from DockerHub ### Download from DockerHub
```bash ```bash

View file

@ -1,49 +0,0 @@
FROM lsiobase/alpine.armhf:3.6
MAINTAINER Shaarli Community
RUN apk --update --no-cache add \
ca-certificates \
curl \
nginx \
php7 \
php7-ctype \
php7-curl \
php7-fpm \
php7-gd \
php7-iconv \
php7-intl \
php7-json \
php7-mbstring \
php7-openssl \
php7-phar \
php7-session \
php7-xml \
php7-zlib \
s6
COPY nginx.conf /etc/nginx/nginx.conf
COPY php-fpm.conf /etc/php7/php-fpm.conf
COPY services.d /etc/services.d
RUN curl -sS https://getcomposer.org/installer | php7 -- --install-dir=/usr/local/bin --filename=composer \
&& rm -rf /etc/php7/php-fpm.d/www.conf \
&& sed -i 's/post_max_size.*/post_max_size = 10M/' /etc/php7/php.ini \
&& sed -i 's/upload_max_filesize.*/upload_max_filesize = 10M/' /etc/php7/php.ini
WORKDIR /var/www
RUN curl -L https://github.com/shaarli/Shaarli/archive/latest.tar.gz | tar xzf - \
&& mv Shaarli-latest shaarli \
&& cd shaarli \
&& composer --prefer-dist --no-dev install \
&& rm -rf ~/.composer \
&& chown -R nginx:nginx . \
&& ln -sf /dev/stdout /var/log/nginx/shaarli.access.log \
&& ln -sf /dev/stderr /var/log/nginx/shaarli.error.log
VOLUME /var/www/shaarli/data
EXPOSE 80
ENTRYPOINT ["/bin/s6-svscan", "/etc/services.d"]
CMD []

View file

@ -1,54 +0,0 @@
# Stage 1:
# - Get Shaarli sources
# - Resolve PHP dependencies with Composer
FROM composer:latest as composer
RUN curl -L https://github.com/shaarli/Shaarli/archive/latest.tar.gz | tar xzf - \
&& mv Shaarli-latest shaarli \
&& cd shaarli \
&& composer --prefer-dist --no-dev install
# Stage 2:
# - Shaarli image
FROM alpine:3.6
LABEL maintainer="Shaarli Community"
RUN apk --update --no-cache add \
ca-certificates \
nginx \
php7 \
php7-ctype \
php7-curl \
php7-fpm \
php7-gd \
php7-iconv \
php7-intl \
php7-json \
php7-mbstring \
php7-openssl \
php7-session \
php7-xml \
php7-zlib \
s6
COPY nginx.conf /etc/nginx/nginx.conf
COPY php-fpm.conf /etc/php7/php-fpm.conf
COPY services.d /etc/services.d
RUN rm -rf /etc/php7/php-fpm.d/www.conf \
&& sed -i 's/post_max_size.*/post_max_size = 10M/' /etc/php7/php.ini \
&& sed -i 's/upload_max_filesize.*/upload_max_filesize = 10M/' /etc/php7/php.ini
WORKDIR /var/www
COPY --from=composer /app/shaarli shaarli
RUN chown -R nginx:nginx . \
&& ln -sf /dev/stdout /var/log/nginx/shaarli.access.log \
&& ln -sf /dev/stderr /var/log/nginx/shaarli.error.log
VOLUME /var/www/shaarli/data
EXPOSE 80
ENTRYPOINT ["/bin/s6-svscan", "/etc/services.d"]
CMD []

View file

@ -1,10 +0,0 @@
## Alpine images
- [Alpine Linux](https://www.alpinelinux.org/)
- [PHP-FPM](http://php-fpm.org/)
- [Nginx](http://nginx.org/)
### `shaarli/shaarli:latest`
- [Shaarli](https://github.com/shaarli/Shaarli), `latest` branch
### `shaarli/shaarli:master`
- [Shaarli](https://github.com/shaarli/Shaarli), `master` branch

View file

@ -1,37 +0,0 @@
FROM debian:jessie
MAINTAINER Shaarli Community
ENV TERM dumb
RUN apt-get update \
&& apt-get install --no-install-recommends -y \
ca-certificates \
curl \
nginx-light \
php5-curl \
php5-fpm \
php5-gd \
php5-intl \
supervisor \
&& apt-get clean
RUN sed -i 's/post_max_size.*/post_max_size = 10M/' /etc/php5/fpm/php.ini
RUN sed -i 's/upload_max_filesize.*/upload_max_filesize = 10M/' /etc/php5/fpm/php.ini
COPY nginx.conf /etc/nginx/nginx.conf
COPY supervised.conf /etc/supervisor/conf.d/supervised.conf
ADD https://getcomposer.org/composer.phar /usr/local/bin/composer
RUN chmod 755 /usr/local/bin/composer
WORKDIR /var/www
RUN curl -L https://github.com/shaarli/Shaarli/archive/stable.tar.gz | tar xzf - \
&& mv Shaarli-stable shaarli \
&& cd shaarli \
&& composer --prefer-dist --no-dev install
RUN rm -rf html \
&& chown -R www-data:www-data .
VOLUME /var/www/shaarli/data
EXPOSE 80
CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisor/supervisord.conf"]

View file

@ -1,5 +0,0 @@
## shaarli:stable
- [Debian 8 Jessie](https://hub.docker.com/_/debian/)
- [PHP5-FPM](http://php-fpm.org/)
- [Nginx](http://nginx.org/)
- [Shaarli (stable)](https://github.com/shaarli/Shaarli/tree/stable)

View file

@ -1,72 +0,0 @@
user www-data www-data;
daemon off;
worker_processes 4;
events {
worker_connections 768;
}
http {
include mime.types;
default_type application/octet-stream;
keepalive_timeout 20;
client_max_body_size 10m;
index index.html index.php;
server {
listen 80;
root /var/www/shaarli;
access_log /var/log/nginx/shaarli.access.log;
error_log /var/log/nginx/shaarli.error.log;
location ~ /\. {
# deny access to dotfiles
access_log off;
log_not_found off;
deny all;
}
location ~ ~$ {
# deny access to temp editor files, e.g. "script.php~"
access_log off;
log_not_found off;
deny all;
}
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
# cache static assets
expires max;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
location = /favicon.ico {
# serve the Shaarli favicon from its custom location
alias /var/www/shaarli/images/favicon.ico;
}
location / {
# Slim - rewrite URLs
try_files $uri /index.php$is_args$args;
}
location ~ (index)\.php$ {
# Slim - split URL path into (script_filename, path_info)
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# filter and proxy PHP requests to PHP-FPM
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ \.php$ {
# deny access to all other PHP scripts
deny all;
}
}
}

View file

@ -1,13 +0,0 @@
[program:php5-fpm]
command=/usr/sbin/php5-fpm -F
priority=5
autostart=true
autorestart=true
[program:nginx]
command=/usr/sbin/nginx
priority=10
autostart=true
autorestart=true
stdout_events_enabled=true
stderr_events_enabled=true