Dockerfile 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. FROM docker.iske.dk/base-image:0.0.1
  2. RUN mkdir -p /app/code
  3. WORKDIR /app/code
  4. RUN apt-get update && apt-get install -y php libapache2-mod-php crudini \
  5. php-redis \
  6. php-apcu \
  7. php-bcmath \
  8. php-bz2 \
  9. php-curl \
  10. php-date \
  11. php-dba \
  12. php-enchant \
  13. php-gd \
  14. php-geoip \
  15. php-gettext \
  16. php-imap \
  17. php-json \
  18. php-log \
  19. php-mbstring \
  20. php-mime-type \
  21. php-mysql \
  22. php-readline \
  23. php-soap \
  24. php-sql-formatter \
  25. php-sqlite3 \
  26. php-tcpdf \
  27. php-timer \
  28. php-twig \
  29. php-uuid \
  30. php-validate \
  31. php-xml \
  32. php-xml-svg \
  33. php-zip \
  34. cron \
  35. apache2-dev \
  36. build-essential \
  37. && rm -rf /var/cache/apt /var/lib/apt/lists /etc/ssh_host_*
  38. # configure apache
  39. RUN rm /etc/apache2/sites-enabled/*
  40. RUN sed -e 's,^ErrorLog.*,ErrorLog "|/bin/cat",' -i /etc/apache2/apache2.conf
  41. COPY apache/mpm_prefork.conf /etc/apache2/mods-available/mpm_prefork.conf
  42. COPY apache/lamp.conf /etc/apache2/sites-enabled/lamp.conf
  43. RUN echo "Listen 80" > /etc/apache2/ports.conf
  44. RUN a2disconf other-vhosts-access-log
  45. RUN a2enmod rewrite headers rewrite expires cache
  46. # configure mod_php
  47. RUN crudini --set /etc/php/7.2/apache2/php.ini PHP upload_max_filesize 64M && \
  48. crudini --set /etc/php/7.2/apache2/php.ini PHP post_max_size 64M && \
  49. crudini --set /etc/php/7.2/apache2/php.ini PHP memory_limit 128M && \
  50. crudini --set /etc/php/7.2/apache2/php.ini Session session.save_path /run/app/sessions && \
  51. crudini --set /etc/php/7.2/apache2/php.ini Session session.gc_probability 1 && \
  52. crudini --set /etc/php/7.2/apache2/php.ini Session session.gc_divisor 100
  53. RUN mv /etc/php/7.2/apache2/php.ini /etc/php/7.2/apache2/php.ini.orig && ln -sf /app/data/php.ini /etc/php/7.2/apache2/php.ini
  54. # install RPAF module to override HTTPS, SERVER_PORT, HTTP_HOST based on reverse proxy headers
  55. # https://www.digitalocean.com/community/tutorials/how-to-configure-nginx-as-a-web-server-and-reverse-proxy-for-apache-on-one-ubuntu-16-04-server
  56. RUN mkdir /app/code/rpaf && \
  57. curl -L https://github.com/gnif/mod_rpaf/tarball/669c3d2ba72228134ae5832c8cf908d11ecdd770 | tar -C /app/code/rpaf -xz --strip-components 1 -f - && \
  58. cd /app/code/rpaf && \
  59. make && \
  60. make install && \
  61. rm -rf /app/code/rpaf
  62. # configure rpaf
  63. RUN echo "LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf.so" > /etc/apache2/mods-available/rpaf.load && a2enmod rpaf
  64. # phpMyAdmin
  65. RUN mkdir -p /app/code/phpmyadmin && \
  66. curl -L https://files.phpmyadmin.net/phpMyAdmin/4.8.3/phpMyAdmin-4.8.3-all-languages.tar.gz | tar zxvf - -C /app/code/phpmyadmin --strip-components=1
  67. COPY phpmyadmin-config.inc.php /app/code/phpmyadmin/config.inc.php
  68. # configure cron
  69. RUN rm -rf /var/spool/cron && ln -s /run/cron /var/spool/cron
  70. # clear out the crontab
  71. RUN rm -f /etc/cron.d/* /etc/cron.daily/* /etc/cron.hourly/* /etc/cron.monthly/* /etc/cron.weekly/* && truncate -s0 /etc/crontab
  72. # ioncube. the extension dir comes from php -i | grep extension_dir
  73. # extension has to appear first, otherwise will error with "The Loader must appear as the first entry in the php.ini file"
  74. RUN mkdir /tmp/ioncube && \
  75. curl http://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz | tar zxvf - -C /tmp/ioncube && \
  76. cp /tmp/ioncube/ioncube/ioncube_loader_lin_7.2.so /usr/lib/php/20170718 && \
  77. rm -rf /tmp/ioncube && \
  78. echo "zend_extension=/usr/lib/php/20170718/ioncube_loader_lin_7.2.so" > /etc/php/7.2/apache2/conf.d/00-ioncube.ini && \
  79. echo "zend_extension=/usr/lib/php/20170718/ioncube_loader_lin_7.2.so" > /etc/php/7.2/cli/conf.d/00-ioncube.ini
  80. # configure supervisor
  81. ADD supervisor/ /etc/supervisor/conf.d/
  82. RUN sed -e 's,^logfile=.*$,logfile=/run/supervisord.log,' -i /etc/supervisor/supervisord.conf
  83. # add code
  84. COPY start.sh index.php crontab.template credentials.template phpmyadmin_login.template /app/code/
  85. # lock www-data but allow su - www-data to work
  86. RUN passwd -l www-data && usermod --shell /bin/bash --home /app/data www-data
  87. # make cloudron exec sane
  88. WORKDIR /app/data
  89. CMD [ "/app/code/start.sh" ]