install-nginx-debian.sh 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #! /usr/bin/env bash
  2. # From official Nginx Docker image, as a script to re-use it, removing internal comments
  3. # Ref: https://github.com/nginxinc/docker-nginx/blob/594ce7a8bc26c85af88495ac94d5cd0096b306f7/mainline/buster/Dockerfile
  4. # Standard set up Nginx
  5. export NGINX_VERSION=1.17.10
  6. export NJS_VERSION=0.3.9
  7. export PKG_RELEASE=1~buster
  8. set -x \
  9. && apt-get update \
  10. && apt-get install --no-install-recommends --no-install-suggests -y gnupg1 ca-certificates \
  11. && \
  12. NGINX_GPGKEY=573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62; \
  13. found=''; \
  14. for server in \
  15. ha.pool.sks-keyservers.net \
  16. hkp://keyserver.ubuntu.com:80 \
  17. hkp://p80.pool.sks-keyservers.net:80 \
  18. pgp.mit.edu \
  19. ; do \
  20. echo "Fetching GPG key $NGINX_GPGKEY from $server"; \
  21. apt-key adv --keyserver "$server" --keyserver-options timeout=10 --recv-keys "$NGINX_GPGKEY" && found=yes && break; \
  22. done; \
  23. test -z "$found" && echo >&2 "error: failed to fetch GPG key $NGINX_GPGKEY" && exit 1; \
  24. apt-get remove --purge --auto-remove -y gnupg1 && rm -rf /var/lib/apt/lists/* \
  25. && dpkgArch="$(dpkg --print-architecture)" \
  26. && nginxPackages=" \
  27. nginx=${NGINX_VERSION}-${PKG_RELEASE} \
  28. nginx-module-xslt=${NGINX_VERSION}-${PKG_RELEASE} \
  29. nginx-module-geoip=${NGINX_VERSION}-${PKG_RELEASE} \
  30. nginx-module-image-filter=${NGINX_VERSION}-${PKG_RELEASE} \
  31. nginx-module-njs=${NGINX_VERSION}.${NJS_VERSION}-${PKG_RELEASE} \
  32. " \
  33. && case "$dpkgArch" in \
  34. amd64|i386) \
  35. echo "deb https://nginx.org/packages/mainline/debian/ buster nginx" >> /etc/apt/sources.list.d/nginx.list \
  36. && apt-get update \
  37. ;; \
  38. *) \
  39. echo "deb-src https://nginx.org/packages/mainline/debian/ buster nginx" >> /etc/apt/sources.list.d/nginx.list \
  40. \
  41. && tempDir="$(mktemp -d)" \
  42. && chmod 777 "$tempDir" \
  43. \
  44. && savedAptMark="$(apt-mark showmanual)" \
  45. \
  46. && apt-get update \
  47. && apt-get build-dep -y $nginxPackages \
  48. && ( \
  49. cd "$tempDir" \
  50. && DEB_BUILD_OPTIONS="nocheck parallel=$(nproc)" \
  51. apt-get source --compile $nginxPackages \
  52. ) \
  53. \
  54. && apt-mark showmanual | xargs apt-mark auto > /dev/null \
  55. && { [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; } \
  56. \
  57. && ls -lAFh "$tempDir" \
  58. && ( cd "$tempDir" && dpkg-scanpackages . > Packages ) \
  59. && grep '^Package: ' "$tempDir/Packages" \
  60. && echo "deb [ trusted=yes ] file://$tempDir ./" > /etc/apt/sources.list.d/temp.list \
  61. && apt-get -o Acquire::GzipIndexes=false update \
  62. ;; \
  63. esac \
  64. \
  65. && apt-get install --no-install-recommends --no-install-suggests -y \
  66. $nginxPackages \
  67. gettext-base \
  68. && apt-get remove --purge --auto-remove -y ca-certificates && rm -rf /var/lib/apt/lists/* /etc/apt/sources.list.d/nginx.list \
  69. \
  70. && if [ -n "$tempDir" ]; then \
  71. apt-get purge -y --auto-remove \
  72. && rm -rf "$tempDir" /etc/apt/sources.list.d/temp.list; \
  73. fi
  74. # forward request and error logs to docker log collector
  75. ln -sf /dev/stdout /var/log/nginx/access.log \
  76. && ln -sf /dev/stderr /var/log/nginx/error.log
  77. # Standard set up Nginx finished