|
1 | | -# Moodle Dockerfile based on official php:apache |
2 | | -# Reference: https://docs.moodle.org/501/en/Installation_quick_guide |
| 1 | +# Moodle Dockerfile based on moodlehq/moodle-php-apache |
| 2 | +# Official base image: https://hub.docker.com/r/moodlehq/moodle-php-apache |
| 3 | +# Install guide: https://docs.moodle.org/en/Installation_quick_guide |
3 | 4 |
|
4 | | -FROM php:8.2-apache |
| 5 | +FROM moodlehq/moodle-php-apache:8.3-bullseye |
5 | 6 |
|
6 | 7 | LABEL org.opencontainers.image.authors="https://www.websoft9.com" \ |
7 | | - org.opencontainers.image.description="Moodle packaged by Websoft9" \ |
8 | | - org.opencontainers.image.source="https://packaging.moodle.org/stable501/moodle-5.1.1.zip" \ |
9 | | - org.opencontainers.image.title="Moodle" \ |
10 | | - org.opencontainers.image.vendor="Websoft9 Inc." \ |
11 | | - org.opencontainers.image.version="5.1.1" |
12 | | - |
13 | | -# Moodle version |
14 | | -ENV MOODLE_VERSION=5.1.1 \ |
15 | | - MOODLE_DATA=/var/moodledata |
16 | | - |
17 | | -# Install system dependencies and PHP extensions required by Moodle |
18 | | -RUN apt-get update && apt-get install -y \ |
19 | | - # Basic tools |
20 | | - wget \ |
| 8 | + org.opencontainers.image.description="Moodle packaged by Websoft9" \ |
| 9 | + org.opencontainers.image.title="Moodle" \ |
| 10 | + org.opencontainers.image.vendor="Websoft9 Inc." \ |
| 11 | + org.opencontainers.image.version="5.1.3" |
| 12 | + |
| 13 | +ENV MOODLE_VERSION=5.1.3 \ |
| 14 | + MOODLE_DATA=/var/moodledata \ |
| 15 | + APACHE_DOCUMENT_ROOT=/var/www/html/public |
| 16 | + |
| 17 | +# Install system tools (all Moodle PHP extensions are pre-installed by base image) |
| 18 | +RUN apt-get update && apt-get install -y --no-install-recommends \ |
| 19 | + curl \ |
21 | 20 | unzip \ |
22 | | - git \ |
23 | 21 | cron \ |
24 | | - # Libraries for PHP extensions |
25 | | - libicu-dev \ |
26 | | - libpng-dev \ |
27 | | - libjpeg62-turbo-dev \ |
28 | | - libfreetype6-dev \ |
29 | | - libxml2-dev \ |
30 | | - libzip-dev \ |
31 | | - libldap2-dev \ |
32 | | - libpq-dev \ |
33 | | - libonig-dev \ |
34 | | - libxslt1-dev \ |
35 | | - libcurl4-openssl-dev \ |
36 | | - # Database clients |
37 | 22 | default-mysql-client \ |
38 | | - postgresql-client \ |
39 | | - # Cleanup |
40 | 23 | && rm -rf /var/lib/apt/lists/* |
41 | 24 |
|
42 | | -# Configure and install PHP extensions required by Moodle |
43 | | -# GD extension |
44 | | -RUN docker-php-ext-configure gd --with-freetype --with-jpeg \ |
45 | | - && docker-php-ext-install -j$(nproc) gd |
46 | | - |
47 | | -# Install other extensions |
48 | | -RUN docker-php-ext-install -j$(nproc) \ |
49 | | - intl \ |
50 | | - mysqli \ |
51 | | - pgsql \ |
52 | | - pdo_mysql \ |
53 | | - pdo_pgsql \ |
54 | | - opcache \ |
55 | | - zip \ |
56 | | - soap \ |
57 | | - mbstring \ |
58 | | - exif |
59 | | - |
60 | | -# LDAP extension (configure separately to avoid path issues) |
61 | | -RUN docker-php-ext-configure ldap \ |
62 | | - && docker-php-ext-install ldap |
63 | | - |
64 | | -# Install additional recommended PHP extensions |
65 | | -RUN pecl install redis \ |
66 | | - && docker-php-ext-enable redis |
67 | | - |
68 | | -# Configure PHP settings for Moodle |
69 | | -RUN { \ |
70 | | - echo 'file_uploads = On'; \ |
71 | | - echo 'memory_limit = 512M'; \ |
72 | | - echo 'upload_max_filesize = 512M'; \ |
73 | | - echo 'post_max_size = 512M'; \ |
74 | | - echo 'max_execution_time = 600'; \ |
75 | | - echo 'max_input_vars = 5000'; \ |
76 | | - echo 'max_input_time = 600'; \ |
77 | | - echo 'session.save_handler = files'; \ |
78 | | - echo 'session.auto_start = 0'; \ |
79 | | - echo 'session.gc_maxlifetime = 1440'; \ |
80 | | - echo 'zend.exception_ignore_args = On'; \ |
81 | | - } > /usr/local/etc/php/conf.d/moodle.ini |
82 | | - |
83 | | -# Configure OPcache for performance |
84 | | -RUN { \ |
85 | | - echo 'opcache.enable = 1'; \ |
86 | | - echo 'opcache.memory_consumption = 128'; \ |
87 | | - echo 'opcache.interned_strings_buffer = 8'; \ |
88 | | - echo 'opcache.max_accelerated_files = 4000'; \ |
89 | | - echo 'opcache.revalidate_freq = 60'; \ |
90 | | - echo 'opcache.fast_shutdown = 1'; \ |
91 | | - } > /usr/local/etc/php/conf.d/opcache-recommended.ini |
92 | | - |
93 | 25 | # Enable Apache modules |
94 | | -RUN a2enmod rewrite expires headers ssl |
95 | | - |
96 | | -# Configure Apache DocumentRoot to use /public directory (Moodle 5.0+ requirement) |
97 | | -RUN sed -i 's|DocumentRoot /var/www/html|DocumentRoot /var/www/html/public|g' /etc/apache2/sites-available/000-default.conf \ |
98 | | - && sed -i 's|<Directory /var/www/>|<Directory /var/www/html/>\n Options Indexes FollowSymLinks\n AllowOverride All\n Require all granted\n</Directory>\n<Directory /var/www/html/public/>|g' /etc/apache2/apache2.conf |
| 26 | +RUN a2enmod rewrite expires headers |
99 | 27 |
|
100 | | -# Create moodledata directory with proper permissions |
| 28 | +# Create Moodle data directory with correct permissions |
101 | 29 | RUN mkdir -p ${MOODLE_DATA} \ |
102 | 30 | && chown -R www-data:www-data ${MOODLE_DATA} \ |
103 | | - && chmod -R 0777 ${MOODLE_DATA} |
| 31 | + && chmod 777 ${MOODLE_DATA} |
104 | 32 |
|
105 | | -# Download and extract Moodle |
| 33 | +# Download Moodle source code |
| 34 | +# For CI/CD: no proxy needed. For local builds behind a firewall: |
| 35 | +# docker build --network=host --build-arg CURL_PROXY=socks5h://127.0.0.1:1080 ... |
| 36 | +ARG CURL_PROXY= |
106 | 37 | WORKDIR /var/www/html |
107 | | -RUN wget -O moodle.zip "https://packaging.moodle.org/stable501/moodle-${MOODLE_VERSION}.zip" \ |
108 | | - && unzip -q moodle.zip \ |
109 | | - && mv moodle/* moodle/.??* . 2>/dev/null || true \ |
110 | | - && rmdir moodle \ |
111 | | - && rm moodle.zip \ |
112 | | - && chown -R www-data:www-data /var/www/html \ |
113 | | - && chmod -R 0755 /var/www/html |
| 38 | +RUN curl ${CURL_PROXY:+--proxy "$CURL_PROXY"} -fsSL -o /tmp/moodle.zip \ |
| 39 | + "https://packaging.moodle.org/stable501/moodle-${MOODLE_VERSION}.zip" \ |
| 40 | + && unzip -q /tmp/moodle.zip -d /tmp/moodle_src \ |
| 41 | + && cp -a /tmp/moodle_src/moodle/. /var/www/html/ \ |
| 42 | + && rm -rf /tmp/moodle.zip /tmp/moodle_src \ |
| 43 | + && chown -R www-data:www-data /var/www/html |
114 | 44 |
|
115 | | -# Setup cron job for Moodle |
116 | | -RUN echo "* * * * * www-data /usr/local/bin/php /var/www/html/admin/cli/cron.php >/dev/null" >> /etc/crontab |
| 45 | +# Moodle scheduled task (cron) |
| 46 | +RUN echo "* * * * * www-data /usr/local/bin/php /var/www/html/admin/cli/cron.php >/dev/null 2>&1" \ |
| 47 | + >> /etc/crontab |
117 | 48 |
|
118 | | -# Create entrypoint script |
119 | 49 | COPY docker-entrypoint.sh /usr/local/bin/ |
120 | 50 | RUN chmod +x /usr/local/bin/docker-entrypoint.sh |
121 | 51 |
|
|
0 commit comments