Dockerfile 7.11 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
FROM debian:trixie
ARG MOODLE_DATABASE_ROOT_PASSWORD
ARG MOODLE_DATABASE_NAME
ARG MOODLE_DATABASE_USER
ARG MOODLE_DATABASE_PASSWORD
ARG MOODLE_DATABASE_HOST
ARG MOODLE_BASE_DIR
ARG MOODLE_BASE_DIR_DATA

ENV MOODLE_DATABASE_ROOT_PASSWORD ${MOODLE_DATABASE_ROOT_PASSWORD}
ENV MOODLE_DATABASE_NAME ${MOODLE_DATABASE_NAME}
ENV MOODLE_DATABASE_USER ${MOODLE_DATABASE_USER}
ENV MOODLE_DATABASE_PASSWORD ${MOODLE_DATABASE_PASSWORD}
ENV MOODLE_DATABASE_HOST ${MOODLE_DATABASE_HOST}
ENV MOODLE_BASE_DIR ${MOODLE_BASE_DIR}
ENV MOODLE_BASE_DIR_DATA ${MOODLE_BASE_DIR_DATA}

# Installing necessary packages
RUN apt-get update && apt-get upgrade -y && \
20
    apt-get install -y apache2 php libapache2-mod-php php-mysqli php-mysql php-xml php-pdo php-pdo-mysql mariadb-client mariadb-server wget unzip p7zip-full python3 python3-pip iputils-ping php-mbstring graphviz aspell ghostscript clamav php8.2-pspell php8.2-curl php8.2-gd php8.2-intl php8.2-mysql php8.2-xml php8.2-xmlrpc php8.2-ldap php8.2-zip php8.2-soap php8.2-mbstring openssl git nano supervisor php-xdebug ca-certificates && \
21
22
23
    apt-get clean && rm -rf /var/lib/apt/lists/*

# Setting necessary php params
24
25
26
#RUN echo "mysql.default_socket=/run/mysqld/mysqld.sock" >> /etc/php/8.2/cli/php.ini
RUN echo "mysql.default_socket=/run/mysqld/mysqld.sock" >> /etc/php/8.2/apache2/php.ini
RUN echo "max_input_vars = 5000" >> /etc/php/8.2/apache2/php.ini
27
28
RUN echo "max_input_vars = 5000" >> /etc/php/8.2/cli/php.ini

29
30
31
32
33
34
35
# Setting Xdebug
#RUN echo "zend_extension=xdebug.so" >> /etc/php/8.2/apache2/php.ini
#RUN echo "xdebug.mode=debug" >> /etc/php/8.2/apache2/php.ini
#RUN echo "xdebug.start_with_request=yes" >> /etc/php/8.2/apache2/php.ini
#RUN echo "xdebug.client_host=host.docker.internal" >> /etc/php/8.2/apache2/php.ini
#RUN echo "xdebug.client_port=9003" >> /etc/php/8.2/apache2/php.ini

36
# Starting Apache server
37
RUN chmod 1777 /tmp
38

39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# Add necessary packages for adding Python 3 repository and installing curl
RUN apt-get update && apt-get install -y curl software-properties-common gnupg2 dirmngr --no-install-recommends

# Add the repository
RUN add-apt-repository 'deb https://deb.debian.org/debian/dists/trixie/ trixie main'

# Update package lists after adding the repository
RUN apt-get update

# Installing necessary Python dependencies & Flask
RUN apt-get install -y python3-venv python3-pip python3-matplotlib
RUN python3 -m venv /opt/myenv
RUN /opt/myenv/bin/python3 -m pip install --upgrade pip
#RUN /opt/myenv/bin/python3 -m pip install matplotlib Flask torch sklearn-learn
COPY requirements.txt /opt/myenv/
54

55
WORKDIR /var/www/html/moodle
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
RUN /opt/myenv/bin/python3 -m pip install -r /opt/myenv/requirements.txt
RUN /opt/myenv/bin/python3 -m pip install --upgrade setuptools wheel

# Copy the api.py script into the container
COPY api.py /var/www/html/moodle/api.py
COPY install_moodle.sh /var/www/html/moodle/install_moodle.sh
RUN chmod +x /var/www/html/moodle/install_moodle.sh

RUN mkdir -p /asyst
# Download and extract the ASYST archive
#RUN curl -o asyst.zip -L https://transfer.hft-stuttgart.de/gitlab/ulrike.pado/ASYST/-/archive/main/ASYST-main.zip && \
#    7z x asyst.zip -o/asyst && \
#    mv /asyst/ASYST-main/* /asyst && \
#    rm -rf /asyst/ASYST-main asyst.zip

# Set permissions (if necessary)
RUN chown -R www-data:www-data /asyst
RUN chmod -R 755 /asyst

COPY ./asyst /var/www/html/moodle/asyst
RUN ln -s /var/www/html/moodle/asyst/Source/Skript /var/www/html/moodle/Skript

# Installing Moodle Setting correct acces rules
79
RUN mkdir -p ${MOODLE_BASE_DIR} && \
80
    wget -qO-  https://packaging.moodle.org/stable403/moodle-4.3.4.tgz | tar xz -C ${MOODLE_BASE_DIR} --strip-components=1
81
82

RUN chown -R www-data:www-data ${MOODLE_BASE_DIR} && \
83
84
    find ${MOODLE_BASE_DIR} -type d -exec chmod 755 {} \; && \
    find ${MOODLE_BASE_DIR} -type f -exec chmod 644 {} \; && \
85
86
87
88
89
    mkdir -p ${MOODLE_BASE_DIR_DATA} && \
    chown -R www-data:www-data ${MOODLE_BASE_DIR_DATA} && \
    chmod -R 755 ${MOODLE_BASE_DIR_DATA}

# Copying of beeing developed Plugin
90
COPY asystgrade ${MOODLE_BASE_DIR}/local/asystgrade
91
92

# Setting correct acces rules for Plugin
93
94
#RUN chown -R www-data:www-data ${MOODLE_BASE_DIR}/local/asystgrade && \
RUN chmod -R 755 ${MOODLE_BASE_DIR}/local/asystgrade
95
96
97
98

# Making Symlink for MariaDB Socket
RUN ln -s /run/mysqld/mysqld.sock /tmp/mysql.sock

99
RUN echo "ServerName modhost" >> /etc/apache2/apache2.conf
100

101
102
103
104
# Apache Settings for HTTP
RUN echo  \
    "<VirtualHost *:80>\n" \
        "ServerName www.moodle.loc\n" \
105
        "ServerAlias www.moodle.loc\n" \
106
107
        "DocumentRoot ${MOODLE_BASE_DIR}\n" \
        "<Directory ${MOODLE_BASE_DIR}>\n" \
108
109
110
111
        "  Options +FollowSymlinks\n" \
        "  AllowOverride All\n" \
        "  Require all granted\n" \
        "</Directory>\n" \
112
113
114
115
116
117
    "</VirtualHost>\n" \
        "ErrorLog /var/log/apache2/error.log\n" \
        "CustomLog /var/log/apache2/access.log combined\n" \
#        "RewriteEngine On\n" \
#        "RewriteCond %{HTTPS} !=on\n" \
#        "RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]\n" \
118
119
120
121
122
    > /etc/apache2/sites-enabled/000-default.conf

# Setting Apache
RUN a2enmod rewrite

123
124
125
126
127
128
# Generate a self-signed SSL certificate (replace example.com with your domain)
RUN openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /etc/ssl/private/apache-selfsigned.key \
    -out /etc/ssl/certs/apache-selfsigned.crt \
    -subj "/C=EU/ST=Berlin/L=Berlin/O=HFT/CN=www.moodle.loc"

129
130
131
132
133
134
135
136
137
138
139
140
# Установка корневых сертификатов
RUN update-ca-certificates

RUN curl -O https://curl.se/ca/cacert.pem \
    && mv cacert.pem /etc/ssl/certs/cacert.pem \

# Настройка php.ini для OpenSSL
RUN echo "openssl.cafile=/etc/ssl/certs/ca-certificates.crt" >> /etc/php/8.2/cli/php.ini \
    && echo "openssl.capath=/etc/ssl/certs" >> /etc/php/8.2/cli/php.ini \
    && echo "openssl.cafile=/etc/ssl/certs/ca-certificates.crt" >> /etc/php/8.2/apache2/php.ini \
    && echo "openssl.capath=/etc/ssl/certs" >> /etc/php/8.2/apache2/php.ini \

141
142
143
144
145
# Configure SSL virtual host
RUN echo  \
    "<VirtualHost *:443>\n" \
        "ServerName www.moodle.loc\n" \
        "ServerAlias www.moodle.loc\n" \
146
147
        "DocumentRoot ${MOODLE_BASE_DIR}\n" \
        "<Directory ${MOODLE_BASE_DIR}>\n" \
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
        "  Options +FollowSymlinks\n" \
        "  AllowOverride All\n" \
        "  Require all granted\n" \
        "</Directory>\n" \
        "SSLEngine on\n" \
        "SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt\n" \
        "SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key\n" \
        "ErrorLog /var/log/apache2/error.log\n" \
        "CustomLog /var/log/apache2/access.log combined\n" \
    "</VirtualHost>\n" \
    > /etc/apache2/sites-enabled/default-ssl.conf

# Opening 000-default.conf for edit
RUN sed -i '/<\/VirtualHost>/i \
RewriteEngine On \n\
RewriteCond %{SERVER_PORT} 80 \n\
RewriteRule ^(.*)$ https://www.moodle.loc/$1 [R,L] \n\
' /etc/apache2/sites-enabled/000-default.conf

# Enable SSL module in Apache
RUN a2enmod ssl
169

170
171
172
# Adding entry to /etc/hosts
#RUN echo "127.0.0.1 ${MOODLE_WWWROOT##https://}" >> /etc/hosts

173
#Opening ports
174
EXPOSE 80 443 5000
175

176
177
178
179
# Setting up supervisord
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# Running supervisord
180
CMD ["/usr/bin/supervisord"]