Moodle e Docker - novas Ideias

Moodle e Docker - novas Ideias

por Sammuel Cavalcante Cavalcante -
Número de respostas: 10

Olá, galera.
Sou um iniciante no mundo moodle e docker.
Conseguir rodar o moodle em docker. Está funcionando até o momento.
Estou divulgando as configurações que utilizei.
E gostaria de obter novas ideias. Talvez eu tenha esquecido algum detalhe. O algo que possa otimizar o dockerfile.

***************************1º PASSO**************************************
docker volume create moodle-man-vol
docker volume create moodle-man-arch

***************************2º PASSO******************************************
docker run -d \
--name moodle-man-db \
-p 1001:3306 \
--mount src=moodle-man-vol,dst=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD="moodle_password" \
-e MYSQL_DATABASE="moodle" \
-e MYSQL_USER="moodle_user" \
-e MYSQL_PASSWORD="moodle_pass" \
mysql:5.7.30

***************************3º PASSO - Criar Dockerfile*******************************************

#cria a imagem de PHP com apache
FROM php:7.4-apache

RUN apt-get update \
&& apt-get install -y wget unzip

RUN docker-php-ext-install -j$(nproc) mysqli

RUN set -eux; apt-get update; apt-get install -y libzip-dev

#descarrega  instala as librarias
RUN apt-get update \
  && apt-get install -f -y --no-install-recommends \
  rsync \
  netcat \
  curl \
  libicu-dev \
  libmemcached-dev \
  libz-dev \
  libpq-dev \
  libjpeg-dev \
  libfreetype6-dev \
  libmcrypt-dev \
  libbz2-dev \
  libjpeg62-turbo-dev \
  gnupg \
  libldap2-dev \
  libpng-dev \
  libxslt-dev \
  unixodbc-dev \
  uuid-dev \
  ghostscript \
  libaio1 \
  libgss3 \
  libicu63 \
  libxslt1.1 \
  locales \
  sassc \
  unixodbc \
  unzip \
  zip \
  libmemcached11 \
  libldap-2.4-2 

#instalação de extensões de php para que funcione corretamente
RUN docker-php-ext-configure soap --enable-soap \
&& docker-php-ext-configure bcmath --enable-bcmath \
&& docker-php-ext-configure pcntl --enable-pcntl \
&& docker-php-ext-configure zip \
&& docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \
&& docker-php-ext-install -j$(nproc) zip opcache pgsql intl soap xmlrpc bcmath pcntl sockets ldap 

RUN docker-php-ext-configure gd \
    --with-freetype=/usr/include/ \
    --with-jpeg=/usr/include/ \
    --enable-gd

RUN docker-php-ext-install gd

RUN pecl install apcu igbinary memcached mongodb redis uuid xmlrpc-beta \
&& docker-php-ext-enable apcu igbinary memcached mongodb redis uuid xmlrpc

RUN apt-get autopurge -y \
    && apt-get autoremove -y \
    && apt-get autoclean \
   
RUN apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*

WORKDIR /var/www/html

#decarrega a versão do moodle e descomprime
RUN wget https://download.moodle.org/download.php/direct/stable310/moodle-latest-310.tgz \
&& tar -zxvf moodle-latest-310.tgz \
&& chmod 0755 /var/www/html -R

#Dar permissões de usuário a pasta
RUN chown www-data.www-data /var/www/html -R

# Cria a pasta do arquivo moodledata e dá permissões
RUN mkdir /var/www/moodledata && \ 
chmod 0770 /var/www/moodledata -R

#dá permissões de usuario a pasta moodle data
RUN chown www-data /var/www/moodledata -R

EXPOSE 80
  
  
  
***************************4º PASSO - Criar imagem*******************************************
docker build -t moodle-pmac:1.0 .


**************5º PASSO - Criar Container da Aplicação e associar à imagem************************
docker run -d \
--name moodle-man-app \
-p 9090:80 \
--mount src=moodle-man-arch,dst=/var/www/moodledata \
-e MOODLE_DATABASE_NAME="moodle" \
-e MOODLE_DATABASE_USER="moodle_user" \
-e MOODLE_DATABASE_PASSSWORD="moodle_pass" \
-e MOODLE_DATABASE_HOST="moodle-man-db" \
moodle-pmac:1.0

*******************************6º PASSO - Criar conexões*****************************************
docker network create --attachable moodle-network
docker network connect moodle-network moode-man-db
docker network connect moodle-network moodle-man-app
docker restart moodle-man-app
docker restart moodle-man-db
*****************************9º Passo - Configurar o Cron***************************************
O cron.php é o script que roda todas as tarefas essencias para o bom funcionamento do moodle.

apt-get update
apt-get cron
cd /etc
nano crontab


#adicione a seguinte linha em crontab
*/1 * * * * root php -q -f /var/www/html/moodle/admin/cli/cron.php > /var/log/moodle_cron.log

#reinicie o serviço cron
/etc/init.d/cron restart

Contagem das avaliações:  -
Em resposta à Sammuel Cavalcante Cavalcante

Re: Moodle e Docker - novas Ideias

por Eduardo Kraus -
Imagem de Plugin developers
E porque usar Docker?

Ele trará mais um software para você gerenciar e não trará nenhum ganho ao Moodle. Apenas mais problemas.
Contagem das avaliações:  (1)
Em resposta à Eduardo Kraus

Re: Moodle e Docker - novas Ideias

por Ronoaldo Pereira -
Na prática, podemos usar qualquer ferramenta na configuração do seu servidor Moodle, especialmente aquelas que mais conhecemos.

O Docker isola o software do ambiente do hospedeiro, o que traz inúmeras vantagens. Entre elas: não ter conflitos de versionamento de pacotes, poder testar diversas versões de configuração simultaneamente. Os desenvolvedores do projeto inclusive possuem alguma documentação acerca disso no Github. Além disso, se você tem o hábito de ter ambientes para teste e depois para produção, com o Docker você consegue usar a imagem produzida e validada em ambiente de testes para promover para produção (teoricamente, vide meu outro comentário na thread).

Claramente, se não temos hábito de usar o Docker, ele de fato vai dar mais problemas do que soluções. Mas isso se pode dizer de qualquer tecnologia. É como perguntar porque usar uma serra elétrica se ela não vai ajudar em nada a podar árvores, já que temos o machado? Se você não souber usar a serra elétrica irá se machucar, com certeza, mas isso não invalida o ganho de produtividade que ela traz para quem sabe usar.
Contagem das avaliações:  (1)
Em resposta à Ronoaldo Pereira

Re: Moodle e Docker - novas Ideias

por Eduardo Kraus -
Imagem de Plugin developers
Pela descrição, só é útil se tem muitos moodles diferentes no mesmo servidor. Por exemplo, um servidor compartilhado.

De mais, não vejo nenhuma vantagem em usar um software de gerenciamento que trará uma camada extra entre os softwares e o processador.
Contagem das avaliações:  (1)
Em resposta à Sammuel Cavalcante Cavalcante

Re: Moodle e Docker - novas Ideias

por Ronoaldo Pereira -

Obrigado por compartilhar! Você sabe me dizer se com este procedimento fica mais fácil o update das versões?

Eu tenho uma certa "bronca" do Moodle por conta disso. Com muita facilidade, o seu servidor fica desatualizado/vulnerável com falhas de segurança, e fazer o update é sempre doloroso. Minha esperança é que um dia será relativamente fácil o Moodle receber atualizações sem ter que efetuar um procedimento quase que cirúrgico e manual.

Com Docker eu vou tentar ao menos deixar o processo de compilar a imagem com os plugins mais automático, com talvez alguma solução de integração contínua. Mas, não sei se isso sequer faz sentido pois o Moodle não isola o estado do código totalmente (precisamos abrir o Admin para "finalizar a instalação/update") então acho que não vai dar muito certo não.

Contagem das avaliações:  (1)
Em resposta à Sammuel Cavalcante Cavalcante

Re: Moodle e Docker - novas Ideias

por Ronoaldo Pereira -
Acabo de ver que estou alguns meses atrasado nesta discussão... Desculpem por ressuscitar um post antigo... Neste caso seria mais interessante eu abrir uma nova thread?
Contagem das avaliações:  -
Em resposta à Ronoaldo Pereira

Re: Moodle e Docker - novas Ideias

por Milrak Pereira Pessoa -
Então @Ronoaldo, achou uma solução? sorriso como estás fazendo a gestão de versão aí?
Eu estava pensando em usar algo mais automatizado, estilo ci/cd do gitlab para ficar controlando/buildando versão do ambiente....
Contagem das avaliações:  -
Em resposta à Milrak Pereira Pessoa

Re: Moodle e Docker - novas Ideias

por Ronoaldo Pereira -
Então Milrak, ainda não consegui reconfigurar meu servidor, como está com bugs de segurança por estar desatualizado eu deixei ele desligado (já que não era crítico), mas o objetivo era de fato fazer a gestão por meio de CI/CD.

Minha esperança era ter alguma forma de atualizar as imagens usando docker/docker-compose, mas ainda não obtive êxito. Tem algumas configurações de nível do servidor que ficam em arquivos, e outras no banco de dados. O que complica o layout de volumes e *mounts* para isso. E a cereja do bolo é que após update temos que rodar uma "migration" no banco de dados para atualizar plugins/esquema do banco, o que dificulta o cenário de rollback para o CI/CD ficar resiliente. Enfim, parei aqui nessa fase ainda triste

Ainda não desisti e se evoluir divido com os colegas aqui no fórum.
Contagem das avaliações:  -
Em resposta à Ronoaldo Pereira

Re: Moodle e Docker - novas Ideias

por Milrak Pereira Pessoa -

Vou tentar explicar o que eu estava pensando:
1- Colocar a aplicação do moodle pra dentro da imagem do docker;

2- Criar os volumes no docker para o "moodledata" (pasta de arquivos que o moodle vai enchendo de coisas, pro gitlab não ficar pegando esse "lixo", a gente add esse diretório do .gitignore).

3- Desabilitar a instalação de plugins via moodle. (Essa é a carta mágica, que eu acho que resolve o problema...)
3.1- A instalação de novos plugins só será permitida via cli do moodle (arquivos que ficam em [...]/admin/cli/...)

4- Gerando uma nova versão:
Quando a gente subir um código com o plugin novo, a gente mesmo coloca o cli do moodle pra instalar o plugin, aí quando terminar o deploy, um admin, acesso o moodle e termina a atualização.

Eu acredito que assim seja a solução mais próxima da automatização dessas versões sorriso O que você acha?

Contagem das avaliações:  -
Em resposta à Milrak Pereira Pessoa

Re: Moodle e Docker - novas Ideias

por Leandro Engler Boçon -
Acredito que  seja a caminho certo.
Os plugins podes verificar os repositórios para adicionar e baixar via git igual para o fonte do moodle.
Deixar os diretórios moodledata e moodle fora do container em um volume.
Os respositórios mariadb e bitnami/moodle já estão num formato bom para utilização.
Só no exemplo que peguei faltou eles separarem o moodledata.
Claro que no exemplo nem arquivo de criação foi utilizado.
https://techexpert.tips/moodle/moodle-docker-installation/
Contagem das avaliações:  -