From 8ac7b9056b02bc63616f7e0e4ac3194128ce2814 Mon Sep 17 00:00:00 2001 From: esoe Date: Wed, 30 Oct 2024 11:52:17 +0300 Subject: [PATCH] qq --- README.md | 20 ++++++++++ base/docker-compose.yaml | 11 +++--- moodle/SETUP.md | 45 ++++++++++++++++++++-- moodle/clear.ps1 | 20 ++++++++++ moodle/distro/moodle | 1 + moodle/docker-compose.yaml | 26 +++++++++++++ moodle/dockerfile | 73 ++++++++++++++++++++++++++++++++++++ moodle/foreground-apache2.sh | 13 +++++++ moodle/init.ps1 | 5 +++ moodle/install.ps1 | 13 +++++++ moodle/run.ps1 | 27 +++++++++++++ 11 files changed, 246 insertions(+), 8 deletions(-) create mode 100644 moodle/clear.ps1 create mode 160000 moodle/distro/moodle create mode 100644 moodle/docker-compose.yaml create mode 100644 moodle/dockerfile create mode 100644 moodle/foreground-apache2.sh create mode 100644 moodle/init.ps1 create mode 100644 moodle/install.ps1 create mode 100644 moodle/run.ps1 diff --git a/README.md b/README.md index 8054673..7db3ce0 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ source - api для работы с СУБД storage - api для работы с файловой системой auth - авторизация пользователей (для администрирования или просмотра результатов) log - консолидированная работа с логами сервисов +proxy - nginx, для ограничения доступа к сервисам извне +cron - обновление данных moodle ### целевые: quiz - прохождение теста/опроса @@ -16,6 +18,7 @@ learn - просмотр контента admin - администрирование платформы results - предоставление результатов moodle - +nginx - ## тома exam-base @@ -25,3 +28,20 @@ exam-storage ## сети exam-net + +# useful links +## пример развертывания мудл в контейнере (moodle-postgres-apache) +[sample](https://github.com/nicusX/dockerised-moodledev/blob/master/README.md) + +# cron +[review](https://habr.com/ru/companies/redmadrobot/articles/305364/) + +## nginx +[setup reverce proxy](https://www.docker.com/blog/how-to-use-the-official-nginx-docker-image/) +[nginx in foregroun mode](https://www.uptimia.com/questions/how-to-run-nginx-in-the-foreground-within-a-docker-container) + +## postgres +[setup postgres](https://habr.com/ru/articles/578744/) + +Копируем скрипты для инициализации дополнительной базы данных для мудла: +COPY init.sql /docker-entrypoint-initdb.d/ \ No newline at end of file diff --git a/base/docker-compose.yaml b/base/docker-compose.yaml index f43e94a..9928190 100644 --- a/base/docker-compose.yaml +++ b/base/docker-compose.yaml @@ -1,4 +1,4 @@ -# version: "3.7" +version: "3.7" services: exam-base: build: @@ -14,14 +14,15 @@ services: volumes: - exam-base:${PGDATA} - exam-prebase:/var/lib/postgresql/data + - ./scripts/init-database.sh:/docker-entrypoint-initdb.d/init-database.sh ports: - "5430:5432" restart: unless-stopped volumes: - exam-base: - external: true - exam-prebase: - external: true + exam-base: + external: true + exam-prebase: + external: true networks: default: name: exam-net diff --git a/moodle/SETUP.md b/moodle/SETUP.md index 0003045..2bf69fc 100644 --- a/moodle/SETUP.md +++ b/moodle/SETUP.md @@ -1,18 +1,54 @@ +# Развертывание платформы +.\clear.ps1 +.\init.ps1 +.\run.ps1 +.\install.ps1 + +после выполнения этих скриптов платформа развернута и готова к эксплуатации и подключению к ней сторонних сервисов + +# порядок развертывания контйнера moodle +1. поднять контейнер + - скопировать скрипты настройки контейнера в контейнер + - дать разрешение на запуск скриптов + - установить необходимое для работы moodle ПО + - скачать moodle (чтобы не качать каждый раз можно попробовать копировать репозиторий) + - настроить доступ к файлам moodle (/var/www/html) + - настроить apache2 + - запустить apache2 +2. инициировать moodle (install-moodle.ps1) +3. + # получение дистрибутива +из ветки MOODLE_405_STABLE git clone -b MOODLE_405_STABLE git://git.moodle.org/moodle.git +из ветки main (последняя версия) +git clone git://git.moodle.org/moodle.git + + # postgres -настроен в отдельном контейнере -нужна база moodle -нужен пользователь moodle +сервер настроен в отдельном контейнере платформы: +- нужна база moodle +- нужен пользователь moodle + +Требуется доставить postgresql-client, для обращения контейнера к внешней базе: +``` +user# sudo apt-get install postgresql-client +``` # PHP + ``` user# sudo apt-get install php-fpm php-curl php-gd php-xmlrpc php-intl php-xml php-zip php-mbstring php-soap php-pgsql ``` +# apache2 +настраивается в контейнере moodle + + # nginx +настраивается как внешний proxi для платформы берем контейнер докера с предустановленым nginx, доставляем php, @@ -20,3 +56,6 @@ user# sudo apt-get install php-fpm php-curl php-gd php-xmlrpc php-intl php-xml p копируем файлы преднастроек nginx, moodle монтируем том moodledata даем соответствующие права директориям + +# moodle +RUN DEBIAN_FRONTEND=noninteractive apt-get install -y -q package \ No newline at end of file diff --git a/moodle/clear.ps1 b/moodle/clear.ps1 new file mode 100644 index 0000000..41e0690 --- /dev/null +++ b/moodle/clear.ps1 @@ -0,0 +1,20 @@ +$container_name = "moodle" +$image_name = "moodle" +$build_name = "moodle" +$code_location = "C:\Users\devuser\Documents\code\exam\moodle" +# тома +$moodle_data = "moodle-data" +$moodle_html = "moodle-html" + +# Остановить и удалить существующий контейнер +docker stop $container_name +docker rm $container_name + +# Удалить существующий образ +docker rmi $image_name + +# удалить тома +docker volume rm $moodle_data +docker volume rm $moodle_html + +docker builder prune --force \ No newline at end of file diff --git a/moodle/distro/moodle b/moodle/distro/moodle new file mode 160000 index 0000000..149a477 --- /dev/null +++ b/moodle/distro/moodle @@ -0,0 +1 @@ +Subproject commit 149a4779030de22fbe21bd70d35e1eea017d9ed4 diff --git a/moodle/docker-compose.yaml b/moodle/docker-compose.yaml new file mode 100644 index 0000000..cfc407a --- /dev/null +++ b/moodle/docker-compose.yaml @@ -0,0 +1,26 @@ +version: "3.7" +services: + moodle: + build: + context: ../moodle + dockerfile: dockerfile + tty: true + image: moodle + container_name: moodle + volumes: + - moodle-data:/var/moodledata + - moodle-html:/var/www/html + ports: + - "90:80" + - "9443:443" + restart: unless-stopped +volumes: + moodle-data: + external: true + moodle-html: + external: true +networks: + default: + name: exam-net + external: true + driver: bridge \ No newline at end of file diff --git a/moodle/dockerfile b/moodle/dockerfile new file mode 100644 index 0000000..5a0380d --- /dev/null +++ b/moodle/dockerfile @@ -0,0 +1,73 @@ +ARG VERSION=latest +FROM ubuntu:${VERSION} + +# Сведения о контейнере +LABEL author="esoe" +LABEL description="moodle image for exam" +LABEL version="1.0" + +# VOLUME ["/var/moodledata", "/var/www/html"] +# EXPOSE 80 443 + +# Let the container know that there is no tty +# ENV DEBIAN_FRONTEND noninteractive + +# This should be overridden on running moodle container +ENV MOODLE_URL http://moodle:80 +# ENV MOODLE_URL http://192.168.99.100:8080 + +COPY ./foreground-apache2.sh /etc/apache2/foreground.sh + +# обновление пакетов +RUN apt-get update -y +RUN apt-get -u upgrade -y + +# установка пакетов, необходимых для развертывания и работы moodle +RUN apt-get install pwgen -y +RUN apt-get install curl -y +RUN apt-get install git -y +RUN apt-get install unzip -y +RUN apt-get install vim -y +RUN apt-get install wget -y +RUN apt-get install postgresql-client -y +RUN apt-get install software-properties-common -y + +# установка php 8.1 +RUN add-apt-repository ppa:ondrej/php +RUN apt-get update +RUN apt-get install php8.1 -y +RUN apt-get install libapache2-mod-php8.1 -y +RUN apt-get install php8.1-fpm php8.1-curl php8.1-gd php8.1-xmlrpc php8.1-intl php8.1-xml php8.1-zip php8.1-mbstring php8.1-soap php8.1-pgsql -y +## настройка php +RUN echo "max_input_vars=5000" >> /etc/php/8.1/cli/php.ini + +# установка apache2 +RUN apt-get install apache2 -y +## дописываем в конец apache2.conf новый параметр +RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf +RUN echo "max_input_vars=5000" >> /etc/php/8.1/apache2/php.ini + +# подготовка пакета moodle +RUN echo "содержимое /var/www/html:" +## проверка содержимого /var/www/html +RUN ls --recursive /var/www/html +## очистить директорию /var/www/html перед скачиванием moodle +RUN rm -rf /var/www/html/* +## клонировать moodle +# RUN git clone -b MOODLE_405_STABLE https://git.in.moodle.com/moodle/moodle.git /var/www/html +COPY ./distro/moodle /var/www/html +## устанавливаем владельцем директории пользователя www-data +RUN chown -R www-data:www-data /var/www/html + +# Enable SSL, moodle requires it +## if using proxy, don't need actually secure connection +RUN a2enmod ssl && a2ensite default-ssl + +# запуск apache2 +## право на исполнение скрипта запуска apache2 +RUN chmod +x /etc/apache2/foreground.sh +## запуск apache2 +CMD ["bash","/etc/apache2/foreground.sh"] + +# далее: +# в ручную запускаем скрипт инсталяции moodle .\install \ No newline at end of file diff --git a/moodle/foreground-apache2.sh b/moodle/foreground-apache2.sh new file mode 100644 index 0000000..8c1648f --- /dev/null +++ b/moodle/foreground-apache2.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# скрипт, используемый контейнером для запуска apache2 в фоновом режиме + +echo "placeholder" > /var/moodledata/placeholder +chown -R www-data:www-data /var/moodledata +chmod 777 /var/moodledata + +read pid cmd state ppid pgrp session tty_nr tpgid rest < /proc/self/stat +trap "kill -TERM -$pgrp; exit" EXIT TERM KILL SIGKILL SIGTERM SIGQUIT + +source /etc/apache2/envvars +tail -F /var/log/apache2/* & +exec apachectl -D FOREGROUND \ No newline at end of file diff --git a/moodle/init.ps1 b/moodle/init.ps1 new file mode 100644 index 0000000..423c927 --- /dev/null +++ b/moodle/init.ps1 @@ -0,0 +1,5 @@ +# инициализация томов +docker volume create moodle-data +docker volume create moodle-html + +# .\run.ps1 \ No newline at end of file diff --git a/moodle/install.ps1 b/moodle/install.ps1 new file mode 100644 index 0000000..5c353c4 --- /dev/null +++ b/moodle/install.ps1 @@ -0,0 +1,13 @@ +#!/bin/pwsh + +# Set up Moodle in container + +$adminUser = "admin" +$adminPassword = "admin" +$siteName = "exam" +$siteShort = "exam" +$lang = "ru" + +docker exec -it -u www-data moodle /usr/bin/php /var/www/html/admin/cli/install_database.php --agree-license --adminuser=$adminUser --adminpass=$adminPassword --fullname=$siteName --shortname=$siteShort --lang=$lang + +Write-Host "Admin account: $adminUser/$adminPassword" \ No newline at end of file diff --git a/moodle/run.ps1 b/moodle/run.ps1 new file mode 100644 index 0000000..aaecc94 --- /dev/null +++ b/moodle/run.ps1 @@ -0,0 +1,27 @@ +# Переменные +$container_name = "moodle" +$image_name = "moodle" +$build_name = "moodle" +$code_location = "C:\Users\devuser\Documents\code\exam\moodle" + +# Остановить и удалить существующий контейнер +docker stop $container_name +docker rm $container_name + +# Удалить существующий образ +docker rmi $image_name + +# Перейти в каталог с проектом +Set-Location $code_location + +# Собрать jar с помощью Maven +# mvn clean package + +# Запустить контейнер с помощью docker-compose +docker-compose up -d + +# Пауза скрипта +# Pause + +# Запуск скрипта инсталяции moodle +# .\install.ps1 \ No newline at end of file