Plataforma Drupal usada nos sites da FFLCH.
Construindo a imagem e subindo o ecosistema com o banco de dados:
docker compose up --build
docker exec -it drupalfflch composer install
docker exec -it drupalfflch ./vendor/bin/drush site-install fflchprofile \
--db-url=mysql://drupalfflch:drupalfflch@mariadb/drupalfflch \
--site-name="fflch" \
--site-mail="fflch@localhost" \
--account-name="fflch" \
--account-pass="fflch" \
--account-mail="fflch@localhost" --yes
Trocar senha:
docker exec -it drupalfflch ./vendor/bin/drush user:password fflch "fflch"
Acessar http://127.0.0.1:8000 com usuário: fflch e senha: fflch
Verificando se há atualizações para os módulos/temas/biliotecas:
composer outdated -D
Lembre-se que ao alterar a versão de um módulo deve-se verificar se há patches aplicados no mesmo na seção extra.patches do composer.json.
Módulos que estão em composer.json para avaliar:
composer show -D | tr -s ' ' | cut -d' ' -f1| grep ^drupal | cut -d'/' -f2
Removendo módulo:
- Remover do /web/profiles/contrib/fflchprofile/modules/fflch_configs/src/installed.txt caso lá ele esteja
- Remover do composer.json
- "A quente" remover da plataforma que está no ar em web/profiles/contrib/fflchprofile/modules/fflch_configs/src/installed.txt para ele não ser instalado novamente na rodada do cron
- com drush pm-uninstall desabilitar o módulos de todos sites que estão no ar
- subir nova plataforma já sem o módulo e migrar os sites
As vezes, novas configurações são incorporadas ao site modelo, para aplicar essa nova configuração pode-se fazer:
drush @cjc.fflch.usp.br config-set aegan.settings slideshow_display '0' --yes
O mesmo comando para todos sites na pasta sites:
for i in $(ls|grep fflch); do drush @$i config-set aegan.settings slideshow_display '0' --yes ;done
Situação contrária: configurações que precisaram ser removidas, algumas recorrentes:
drush @cea.fflch.usp.br config-delete languageicons.settings
drush @cea.fflch.usp.br config-delete captcha.captcha_point.user_pass
drush @cea.fflch.usp.br config-delete captcha.settings
drush @cea.fflch.usp.br config-delete captcha.captcha_point.user_login_form
Há dois tipos de configurações:
- instalação: aplicada somente na criação do site
- sincronização: aplicadas a cada rodada do cron
As configurações de instalação estão definidas em arquivos .yml no diretório fflchprofile/config/install.
As configurações de sincronização estão em fflchprofile/modules/fflch_configs/config/mandatory.
Passos para fazer modificações:
- Identificar os arquivos .yml que executam a modificação
- Salvar e commitar esses arquivos na pasta modules/fflch_configs/config/mandatory ou *fflchprofile/config/install
Dica para capturar os arquivos yml que estão relacionados as configurações:
./vendor/bin/drush config-export --destination="~/antes"
Fazer mudanças na interface do site e exportar nova configuração:
./vendor/bin/drush config-export --destination="~/depois"
Vejam os arquivos alterados:
diff -qr ~/antes/ ~/depois
Suponha que teve alteração em editor.editor.full_html.yml:
vimdiff ~/antes/editor.editor.full_html.yml ~/depois/editor.editor.full_html.yml
Usando o meld para fazer as comparações:
sudo apt install meld
meld ~/antes ~/depois
Modelo de como acrescentar patches no composer.json:
"extra": {
"patches": {
"drupal/editor_file": {
"3057895 - Uploaded files are not permanent":
"https://www.drupal.org/files/issues/2019-05-29/file-upload-marked-permanent-3057895-2.patch"
}
}
}
Essa correção dever ser feita no ambiente dev e depois transposta para produção. Aplicar o patch disponínel https://www.drupal.org/project/drupal/issues/3011276#comment-13228934 e depois rodar:
./vendor/bin/drush config-get language.pt-br:system.site
./vendor/bin/drush config-delete language.pt-br:system.site slogan
./vendor/bin/drush config-delete language.pt-br:system.site name
./vendor/bin/drush config-delete language.pt-br:system.site page.front home-pt-br
Para subir um dump na máquina local, algumas configurações devem ser deletadas:
./vendor/bin/drush config-delete system.file path
sites migrados do d7 contém um problema de campos não poderem ser traduzidos pois o langcode está com und (undefinided). Para corrigir:
drush @filosofia.fflch.usp.br config-set field.storage.node.field_banca langcode pt-br --yes
No servidor antigo já foram removidos os seguintes módulos:
Não ativados, remoção direta na produção:
cd web/modules/contrib/
rm -rf media_entity feeds_youtube
O módulo theme_permission vamos desativar, mas quando estivermos no drupal 10 podemos ativá-lo novamente.
Os módulos cpf, libraries e form_placeholder serão desativados e removidos
for i in `ls|grep fflch`; do drush @$i pm-uninstall cpf form_placeholder theme_permission libraries --yes; done
cd web/modules/contrib/
rm -rf cpf form_placeholder
Removendo markdown:
for i in `ls|grep fflch`; do drush @$i cim --partial --source=/var/aegir/platforms/drupal8916a/web/profiles/contrib/fflchprofile/modules/fflch_configs/config/mandatory --yes; done
for i in `ls|grep fflch`; do drush @$i pm-uninstall ckeditor_markdown markdown --yes; done
for i in `ls|grep fflch`; do drush @$i config:set system.theme default fflch --yes; done
for i in `ls|grep fflch`; do drush @$i config:set languageicons.settings path 'modules/contrib/languageicons/flags/*.png' -y; done
Apagar configurações órfãs nos sites com probelma:
site='SITE.fflch.usp.br'
for j in `drush @$site cim --partial --source=/var/aegir/platforms/drupal8916a/web/profiles/contrib/fflchprofile/modules/fflch_configs/config/mandatory --yes 2>&1 | paste -sd ' '| grep -oP 'Configuration <em[^>]*>\K[^<]+'`; do
drush @$site config:set $j chave valor --yes
drush @$site config:delete $j --yes
done
Pós removoção da configurações problemáticas:
drush @ppgh.fflch.usp.br config:set system.theme default fflch --yes
drush @ppgh.fflch.usp.br config:set languageicons.settings path 'modules/contrib/languageicons/flags/*.png' -y
Considerar usar:
drush webform:repair
Habilitar sanitização?
drush config:set file.settings filename_sanitization.replace_whitespace true -y drush config:set file.settings filename_sanitization.lowercase true -y
Inicializa S3:
NODE_ID=$(docker exec drupalfflch_garage /garage status | grep -E "^[0-9a-f]" | awk '{print $1}')
docker exec drupalfflch_garage /garage layout assign $NODE_ID -c 10G -z zone1
docker exec drupalfflch_garage /garage layout apply --version 1
key:
docker exec drupalfflch_garage /garage key create drupal
cria bucket e expoe na porta 3902:
docker exec drupalfflch_garage /garage bucket create drupal
docker exec drupalfflch_garage /garage bucket website --allow drupal
Permissões:
docker exec drupalfflch_garage /garage bucket allow --read --write drupal --key drupal
Key ID: GKb718b6060b294443377e41ee Secret key: 02a250b5b0bedf5408717334f953aea86c68b701209562d551734423f810c793
docker exec -it drupalfflch composer require 'drupal/s3fs:^3.0' docker exec -it drupalfflch ./vendor/bin/drush en s3fs --yes docker exec -it drupalfflch vendor/bin/drush s3fs:refresh-cache
docker exec -it drupalfflch chown -R www-data:www-data /var/www/html/web/sites/default/files /tmp
docker exec -it drupalfflch chmod -R 775 /var/www/html/web/sites/default/files /tmp
docker exec -it drupalfflch vendor/bin/drush config:set s3fs.settings use_s3_for_public true -y docker exec -it drupalfflch vendor/bin/drush config:set s3fs.settings use_s3_for_private true -y docker exec -it drupalfflch vendor/bin/drush config:set system.file default_scheme s3fs -y
docker exec -it drupalfflch vendor/bin/drush s3fs:copy-local --scheme=all --yes docker exec -it drupalfflch vendor/bin/drush s3fs-refresh-cache
Exemplo de web/sites/default/settings.php:
// --- Configuração do S3 File System (s3fs) com Prefixos (dev) ---
// 1. Credenciais $settings['s3fs.access_key'] = 'GKb718b6060b294443377e41ee'; $settings['s3fs.secret_key'] = '02a250b5b0bedf5408717334f953aea86c68b701209562d551734423f810c793';
// Fallback no objeto de configuração do s3fs $config['s3fs.settings']['key'] = 'GKb718b6060b294443377e41ee'; $config['s3fs.settings']['secret'] = '02a250b5b0bedf5408717334f953aea86c68b701209562d551734423f810c793';
// 2. Bucket e Região $config['s3fs.settings']['bucket'] = 'drupal'; $config['s3fs.settings']['region'] = 'garage'; $config['s3fs.settings']['use_customlocation'] = TRUE; $config['s3fs.settings']['customlocation'] = 'garage';
// 3. Pastas / Prefixos $config['s3fs.settings']['public_folder'] = 'public'; $config['s3fs.settings']['private_folder'] = 'private';
// 4. Parâmetros de Protocolo e Endpoint para Garage S3 $config['s3fs.settings']['use_customhost'] = TRUE; $config['s3fs.settings']['hostname'] = 'garage:3900'; $config['s3fs.settings']['use_path_style_endpoint'] = TRUE; $config['s3fs.settings']['use_https'] = FALSE; // HTTP para dev local
// 5. Ajustes de Compatibilidade e Performance $config['s3fs.settings']['ignore_s3_check'] = TRUE; $config['s3fs.settings']['use_versioning'] = FALSE; $config['s3fs.settings']['disable_version_sync'] = TRUE; $config['s3fs.settings']['presigned_urls'] = FALSE; // Drupal faz a entrega dos privados em dev $config['s3fs.settings']['no_rewrite_cssjs'] = TRUE;
// 6. Redirecionar cache de traduções para o disco local (evita lentidão) $config['locale.settings']['translation']['path'] = '/tmp/languages'; $config['system.file']['path']['temporary'] = '/tmp';
// 7. Domínio público das imagens (Porta 3900 para dev) $config['s3fs.settings']['domain'] = '127.0.0.1:3900/drupal';
// 8. Ativar a substituição dos esquemas nativos $config['s3fs.settings']['use_s3_for_public'] = TRUE; $config['s3fs.settings']['use_s3_for_private'] = TRUE; $settings['s3fs.use_s3_for_public'] = TRUE; $settings['s3fs.use_s3_for_private'] = TRUE;
// 9. Instruct s3fs to not request public-read ACLs on PutObject $settings['s3fs.upload_as_private'] = TRUE; $config['s3fs.settings']['upload_as_private'] = TRUE; $settings['file_private_path'] = 'sites/default/files/private';
docker exec -it drupalfflch_garage /garage bucket alias drupal localhost -> não entendi direito, mas funcionou
acessa arquivo: http://localhost:3902/public/arquivo.pdf