Dockerfile 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. # Stage 1:
  2. # - Copy Shaarli sources
  3. # - Build documentation
  4. FROM python:3-alpine as docs
  5. ADD . /usr/src/app/shaarli
  6. RUN cd /usr/src/app/shaarli \
  7. && apk add --no-cache gcc musl-dev \
  8. && pip install --no-cache-dir mkdocs \
  9. && mkdocs build --clean
  10. # Stage 2:
  11. # - Resolve PHP dependencies with Composer
  12. FROM composer:latest as composer
  13. COPY --from=docs /usr/src/app/shaarli /app/shaarli
  14. RUN cd shaarli \
  15. && composer --prefer-dist --no-dev install
  16. # Stage 3:
  17. # - Frontend dependencies
  18. FROM node:12-alpine as node
  19. COPY --from=composer /app/shaarli shaarli
  20. RUN cd shaarli \
  21. && yarnpkg install \
  22. && yarnpkg run build \
  23. && rm -rf node_modules
  24. # Stage 4:
  25. # - Shaarli image
  26. FROM alpine:3.16
  27. LABEL maintainer="Shaarli Community"
  28. RUN apk --update --no-cache add \
  29. ca-certificates \
  30. nginx \
  31. php8 \
  32. php8-ctype \
  33. php8-curl \
  34. php8-fpm \
  35. php8-gd \
  36. php8-gettext \
  37. php8-iconv \
  38. php8-intl \
  39. php8-json \
  40. php8-ldap \
  41. php8-mbstring \
  42. php8-openssl \
  43. php8-session \
  44. php8-xml \
  45. php8-simplexml \
  46. php8-zlib \
  47. s6
  48. COPY .docker/nginx.conf /etc/nginx/nginx.conf
  49. COPY .docker/php-fpm.conf /etc/php8/php-fpm.conf
  50. COPY .docker/services.d /etc/services.d
  51. RUN rm -rf /etc/php8/php-fpm.d/www.conf \
  52. && sed -i 's/post_max_size.*/post_max_size = 10M/' /etc/php8/php.ini \
  53. && sed -i 's/upload_max_filesize.*/upload_max_filesize = 10M/' /etc/php8/php.ini
  54. WORKDIR /var/www
  55. COPY --from=node /shaarli shaarli
  56. RUN chown -R nginx:nginx . \
  57. && ln -sf /dev/stdout /var/log/nginx/shaarli.access.log \
  58. && ln -sf /dev/stderr /var/log/nginx/shaarli.error.log
  59. VOLUME /var/www/shaarli/cache
  60. VOLUME /var/www/shaarli/data
  61. EXPOSE 80
  62. ENTRYPOINT ["/bin/s6-svscan", "/etc/services.d"]
  63. CMD []