Implantação #168
AbertaRI - Repositório Institucional (Dsapce)
Adicionado por Charles Miller de Góis Oliveira 3 meses atrás. Atualizado 9 dias atrás.
75%
Descrição
O repositório Institucional da Universidade do Estado do Rio Grande do Norte (UERN) é um espaço digital que reúne e organiza toda a produçao intelectual desenvolvida pela comunidade academica da instituiçao, inclusindo trabalhos de docentes, técnicos e alunos.:
Nossa missão principal é armazenar, preservar e garantir o acesso livre e online a esses conteúdos, tornando-os disponíveis para a comunidade científica e para a sociedade em geral.
Para assegurar a organização e a perenidade desse acervo, o Repositório Institucional da UERN é guiado por uma política interna de informação técnico-científica, estabelecida por meio de resoluções e normas específicas que regulamentam a submissão, a gestão e a disseminação dos materiais.
Subtarefas 4 (1 aberta — 3 fechadas)
CD Atualizado por Charles Miller de Góis Oliveira há 3 meses Ações #1
- Subtarefa #169 adicionado
EG Atualizado por Eric Diego Matozo Gonçalves Gonçalves há 3 meses Ações #2
- Situação alterado de Nova para Em Atendimento
Domínios do Repositório e Importador já acessíveis externamente.
Estudo da integração entre ambos, bem como importação de arquivos no importador, em análise.
CD Atualizado por Charles Miller de Góis Oliveira há 2 meses Ações #3
- Subtarefa #50 adicionado
CD Atualizado por Charles Miller de Góis Oliveira há 2 meses Ações #4
- Subtarefa #202 adicionado
CD Atualizado por Charles Miller de Góis Oliveira há aproximadamente 1 mês Ações #5
- Subtarefa #278 adicionado
EG Atualizado por Eric Diego Matozo Gonçalves Gonçalves há 22 dias Ações #6
Registro de preocupação técnica e administrativa — DSpace¶
Antes da entrega definitiva do DSpace em produção, registro preocupação quanto ao status atual do ambiente.
Embora o sistema esteja funcional nos fluxos testados e já venha sendo utilizado pela biblioteca em alguns procedimentos, entendo que isso ainda não configura entrega definitiva, homologação final ou aceite formal da solução.
Pontos pendentes¶
-
Ausência, até onde se tem conhecimento, de rotina formal e validada de backup e restauração envolvendo:
- banco de dados;
- arquivos depositados;
- configurações;
- customizações realizadas.
-
Necessidade de avaliação dos acessos estranhos observados no ambiente, possivelmente bots ou tentativas de raspagem.
-
Necessidade de formalização do status atual do sistema.
Risco identificado¶
Sem backup e restauração previamente validados, qualquer perda de dados, indisponibilidade, problema em arquivos depositados ou inconsistência em trabalhos pode gerar cobrança institucional sobre a solução e sobre as equipes envolvidas.
Encaminhamento sugerido¶
Formalizar o ambiente como uso assistido/operação inicial, com pendências conhecidas, até que sejam validados os pontos críticos de backup, restauração e exposição do ambiente.
Caso a decisão seja avançar para produção plena mesmo com essas pendências, recomenda-se que essa decisão seja formalizada pela gestão, pela instituição e pelas áreas envolvidas, incluindo a biblioteca, com ciência dos riscos registrados.
EG Atualizado por Eric Diego Matozo Gonçalves Gonçalves há 15 dias · Editado Ações #7
Arquitetura proposta¶
Arquitetura mínima recomendada para organizar o ambiente DSpace com separação de responsabilidades:
VM 1 — Aplicação / Produção
- Nginx
- DSpace Angular frontend
- Tomcat / DSpace REST backend
- Solr, provisoriamente
VM 2 — Banco / Produção
- PostgreSQL 16
- Banco dspace
VM 3 — Homologação / Desenvolvimento e testes
- Ambiente para validar deploy, restore, permissões, Nginx, Tomcat, Solr e importações
- Deve usar banco próprio de teste, não o banco de produção
VM 4 — Backup
- Destino dos backups do PostgreSQL
- Backup do assetstore
- Backup das configurações
- Backup de Nginx, Tomcat e systemd
- Retenção mínima
Observação importante: a VM de backup não deve ser o único destino final se estiver no mesmo host/storage da produção. O ideal é manter cópia adicional em armazenamento externo, outro host, NAS ou storage institucional.
Frente 1 — Inventário do ambiente atual¶
Itens identificados¶
-
Backend DSpace:
/dspace -
Código/fonte instalado:
/dspace/DSpace-dspace-8.1 -
Backend implantado no Tomcat:
/opt/tomcat/webapps/server/opt/tomcat/webapps/server-boot.jar
-
Assetstore:
/dspace/assetstore- Dono:
dspace:dspace - Tamanho:
755M
- Dono:
-
Banco PostgreSQL:
- Versão: PostgreSQL
16.14 - Cluster:
16-main - Host/porta:
localhost:5432 - Banco:
dspace - Usuário:
dspace - Tamanho:
14 MB
- Versão: PostgreSQL
-
Configurações DSpace:
/dspace/config/dspace/config/local.cfg/dspace/config/dspace.cfg/dspace/config/submission-forms.xml/dspace/config/item-submission.xml/dspace/config/modules/authentication.cfg
-
Configurações Nginx:
/etc/nginx/etc/nginx/sites-enabled/defaultserver_name repositorio.apps.uern.br/ -> http://localhost:4000/server/ -> http://localhost:8080/server/client_max_body_size 1G
-
Serviço backend:
tomcat.service- Origem:
/etc/init.d/tomcat - Status:
active/running - Porta:
8080
-
Serviço frontend:
dspace-ui.service- Unit:
/etc/systemd/system/dspace-ui.service - Usuário:
dspace - WorkingDirectory:
/dspace-8-angular - ExecStart:
/usr/bin/node /dspace-8-angular/dist/server/main - Porta:
4000
-
Customizações locais/repositórios:
- Frontend:
/home/sti/git-repos/dspace-angular-uern - Backend:
/home/sti/git-repos/dspace-backend-uern - Deploy/configs:
/home/sti/git-repos/dspace-deploy-uern
- Frontend:
Frente 2 — Backup completo¶
Objetivo: criar uma cópia recuperável dos componentes essenciais do DSpace antes de qualquer alteração em permissões, Tomcat, portas, Nginx ou serviços.
2.1 Backup imediato do PostgreSQL¶
-
Identificar nome da base, usuário e versão do PostgreSQL
- Banco:
dspace - Usuário:
dspace - Versão: PostgreSQL
16.14 - Host/porta:
localhost:5432
- Banco:
-
Criar backup lógico com
pg_dump -
Criar backup dos objetos globais com
pg_dumpall --globals-only -
Validar se o dump foi gerado sem erro
-
Validar leitura do dump com
pg_restore -l -
Gerar checksum dos arquivos
-
Registrar comando usado, data, horário, tamanho do arquivo e local de armazenamento
-
Copiar backup para destino externo à VM de aplicação
Observação: o pg_dump será usado como backup inicial/manual por ser simples, direto e adequado para uma primeira camada de segurança antes das correções.
2.2 Avaliar implantação do pgBackRest¶
-
Avaliar uso do
pgBackRestpara rotina permanente de backup do PostgreSQL - Definir se o pgBackRest será executado a partir da VM do banco ou integrado à VM de backup
- Definir repositório de backup
- Definir política de retenção
- Avaliar arquivamento de WAL
- Documentar procedimento de restore
- Testar restore em ambiente separado
Observação: o pgBackRest é recomendado para uma estratégia mais robusta de backup do PostgreSQL, especialmente para backup físico, retenção e recuperação por ponto no tempo. Ele não substitui o backup do assetstore nem das configurações do DSpace.
2.3 Backup do assetstore¶
-
Identificar caminho real do assetstore:
/dspace/assetstore
-
Criar backup completo do diretório
-
Preservar permissões, donos e timestamps
-
Registrar tamanho total e quantidade aproximada de arquivos
-
Copiar backup para a VM de backup
-
Copiar backup para destino externo adicional, se disponível
Observação: o assetstore é obrigatório no backup porque contém os arquivos depositados no DSpace, como PDFs e demais binários.
2.4 Backup das configurações do DSpace¶
-
Criar backup de
/dspace/config -
Incluir
local.cfg -
Incluir
dspace.cfg -
Incluir
submission-forms.xml -
Incluir
item-submission.xml -
Incluir
modules/authentication.cfg - Incluir configurações de metadados, autenticação, Solr, logs, submissão e demais customizações locais
- Preservar permissões originais
- Copiar backup para a VM de backup
2.5 Backup do frontend Angular¶
-
Criar backup de
/dspace-8-angular/config -
Criar backup do
distatualmente em produção -
Registrar versão/commit do código usado no frontend, se disponível
-
Registrar origem do código:
/home/sti/git-repos/dspace-angular-uern
-
Copiar backup para a VM de backup
2.6 Backup do Tomcat¶
-
Criar backup de
/opt/tomcat/conf -
Criar backup de
/opt/tomcat/webapps -
Incluir:
/opt/tomcat/webapps/server/opt/tomcat/webapps/server-boot.jar
-
Registrar ownership e permissões atuais de
/opt/tomcat -
Registrar versão do Tomcat e Java
-
Copiar backup para a VM de backup
2.7 Backup do Nginx¶
-
Criar backup de
/etc/nginx -
Criar backup de
/etc/nginx/sites-enabled/default -
Registrar configuração ativa com
nginx -T -
Validar configuração com
nginx -t - Copiar backup para a VM de backup
2.8 Backup dos serviços systemd/init¶
-
Criar backup da definição do serviço
tomcat.service -
Criar backup de
/etc/init.d/tomcat -
Criar backup da unit do frontend
dspace-ui.service - Criar backup da unit do Solr, se existir
-
Registrar saída de
systemctl catpara cada serviço - Copiar backup para a VM de backup
2.9 Destino do backup¶
- Definir local temporário do backup na VM de aplicação
- Definir VM de backup como destino principal
- Definir destino externo adicional, se possível
- Garantir que o backup não fique apenas no mesmo disco/servidor da produção
- Restringir acesso aos arquivos de backup, pois podem conter senhas e dados sensíveis
Arquitetura esperada:
VM Aplicação -> VM Backup -> Storage externo/outro host
VM Banco -> VM Backup -> Storage externo/outro host
2.10 Retenção mínima¶
-
Definir retenção mínima dos backups manuais
-
Definir retenção da rotina permanente
-
Separar política para:
- banco PostgreSQL
- assetstore
- configurações
- Nginx
- Tomcat
- systemd
- frontend
-
Documentar quem é responsável por verificar a execução dos backups
Sugestão inicial de retenção mínima:
Backups manuais críticos: manter até conclusão das correções
Backup diário: 7 dias
Backup semanal: 4 semanas
Backup mensal: 3 a 6 meses
Essa retenção deve ser validada com a política institucional.
2.11 Validação mínima¶
- Confirmar que os arquivos foram gerados
- Confirmar tamanho plausível dos backups
- Listar conteúdo dos arquivos compactados
- Testar leitura dos arquivos
-
Validar dump do PostgreSQL com
pg_restore -l - Validar checksums
- Testar restore do banco em ambiente separado
- Registrar limitações caso o restore completo ainda não tenha sido testado
Frente 3 — Restore validado¶
Objetivo: provar que o backup é recuperável antes de corrigir os riscos de produção.
Arquitetura alvo desta frente:
VM 3 — Homologação / Testes
Itens¶
- Criar VM de homologação/testes
- Instalar dependências necessárias
- Restaurar banco PostgreSQL em banco de teste
- Restaurar assetstore
- Restaurar configurações do DSpace
- Restaurar configurações do frontend
- Restaurar configurações do Tomcat
- Restaurar configurações do Nginx
- Subir backend
- Subir frontend
- Subir Nginx
- Validar login
- Validar busca
- Validar acesso a item
- Validar abertura/download de PDF
- Validar importação
- Validar permissões
- Registrar problemas encontrados no restore
Observação: a VM de homologação não deve apontar para o banco de produção.
Frente 4 — Deploy controlado¶
Objetivo: formalizar como alterações saem dos repositórios Git e chegam à produção, reduzindo risco de erro manual.
Itens¶
- Documentar deploy atual do frontend
- Documentar deploy atual do backend
- Documentar deploy atual do Nginx
- Documentar ownership correto dos diretórios de produção
- Criar procedimento de rollback do frontend
- Criar procedimento de rollback do backend
- Criar procedimento de rollback do Nginx
- Testar deploy primeiro na VM de homologação
- Só aplicar em produção após validação
Fluxo alvo¶
Git/repositório -> build em ambiente controlado -> homologação -> produção
Repositórios identificados¶
Frontend: /home/sti/git-repos/dspace-angular-uern
Backend: /home/sti/git-repos/dspace-backend-uern
Deploy: /home/sti/git-repos/dspace-deploy-uern
Frente 5 — Evolução de arquitetura¶
Objetivo: sair do modelo improvisado e caminhar para uma arquitetura mais segura, testável e recuperável.
5.1 Separação de VMs¶
- Avaliar separação do banco em VM própria
- Definir VM de aplicação
- Definir VM de banco
- Definir VM de homologação/testes
- Definir VM de backup
- Definir regras de rede entre as VMs
- Definir política de acesso administrativo
Arquitetura alvo:
VM Aplicação
- Nginx
- Frontend Angular
- Tomcat / Backend DSpace
- Solr, inicialmente
VM Banco
- PostgreSQL
- Acesso liberado apenas para VM Aplicação e VM Backup
VM Homologação/Testes
- Ambiente isolado para restore, deploy e validações
- Banco próprio de teste
VM Backup
- Recebe backups do banco, assetstore e configurações
- Deve replicar para storage externo ou outro host
5.2 Rede e exposição¶
-
Garantir que somente
80e443fiquem expostas publicamente -
Restringir Tomcat
8080para acesso interno/local -
Restringir Solr
8983para acesso interno/local -
Restringir PostgreSQL
5432para IPs autorizados - Configurar redirect global HTTP -> HTTPS
- Revisar firewall entre as VMs
Fluxo esperado:
Usuário externo -> Nginx 443 -> Frontend/Backend
Nginx -> localhost:4000
Nginx -> localhost:8080/server/
Backend -> PostgreSQL
Backend -> Solr
Backup -> PostgreSQL/arquivos, conforme política definida
5.3 Backup permanente¶
- Avaliar pgBackRest para PostgreSQL
- Definir rotina de backup do assetstore
- Definir rotina de backup das configurações
- Definir retenção
- Definir cópia externa
- Criar rotina de verificação periódica
- Agendar teste de restore
5.4 Containerização¶
- Avaliar containerização somente depois de backup e restore validados
- Avaliar Docker/Compose para homologação antes de produção
- Não iniciar containerização antes de corrigir backup, deploy e permissões básicas
Observação: containerização pode ajudar, mas não deve ser usada como atalho para esconder problema de backup, permissão ou arquitetura.
5.5 CI/CD¶
- Avaliar pipeline de build do frontend
- Avaliar pipeline de build do backend
- Avaliar deploy automatizado em homologação
- Avaliar promoção manual para produção
- Exigir rollback documentado antes de automatizar produção
5.6 Monitoramento e logs¶
- Avaliar monitoramento de disponibilidade
- Avaliar monitoramento de uso de disco
- Avaliar monitoramento do PostgreSQL
- Avaliar monitoramento do Tomcat
- Avaliar monitoramento do Solr
- Avaliar centralização de logs
- Definir alertas mínimos
Alertas mínimos recomendados:
Disco cheio
Serviço Tomcat parado
Serviço dspace-ui parado
Serviço PostgreSQL parado
Serviço Solr parado
Erro 5xx no Nginx
Falha de backup
Certificado TLS próximo do vencimento
Frente 6 — Correção dos riscos pendentes pós-backup¶
Esta frente só deve iniciar após backup completo e validação mínima.
Bloco A — Tomcat e permissões do backend¶
Resolve:
1. Tomcat rodando como root
2. /opt/tomcat pertencendo ao usuário sti
3. Logs do DSpace como root:root
4. local.cfg com senha e permissão 0644
- Criar usuário dedicado para Tomcat, se necessário
- Ajustar serviço do Tomcat
-
Revisar ownership de
/opt/tomcat -
Revisar permissões de
/dspace/config/local.cfg - Validar inicialização do backend
- Validar geração de logs com usuário correto
Bloco B — Restrição de portas internas¶
Resolve:
6. Tomcat exposto em *:8080
7. Solr exposto em *:8983
- Validar proxy do Nginx para o Tomcat
- Validar configuração do DSpace para o Solr
-
Restringir
8080 -
Restringir
8983 - Validar frontend
- Validar REST API
- Validar busca/indexação
Bloco C — Frontend e HTTPS¶
Resolve:
5. config.yml do frontend como root:root
8. porta 80 sem redirect global para HTTPS
-
Ajustar ownership de
/dspace-8-angular/config/config.yml -
Validar serviço
dspace-ui - Configurar redirect HTTP -> HTTPS
- Validar acesso externo
- Validar login e navegação
EG Atualizado por Eric Diego Matozo Gonçalves Gonçalves há 9 dias Ações #8
Segue um .md completo para salvar no repo de deploy, por exemplo:
docs/hml-replicacao-producao-dspace-2026-06-16.md
Replicação do Ambiente de Produção DSpace 8.1 para HML¶
1. Objetivo¶
Este documento registra o procedimento executado para montar um ambiente de homologação do DSpace 8.1 a partir do ambiente de produção.
O objetivo foi criar uma HML funcional, próxima da produção, contendo:
- Backend DSpace 8.1;
- Frontend Angular DSpace;
- PostgreSQL restaurado;
- Assetstore restaurado;
- Solr configurado;
- Nginx como proxy reverso;
- Tomcat para o backend;
- Serviço systemd para o frontend;
- Tema institucional RIUERN;
- Idioma
pt-BR; - Importação via interface;
- Validação de busca, OAI, bitstream/PDF e item importado.
A HML ficou disponível em:
http://192.168.2.117/
Backend REST:
http://192.168.2.117/server
Banco HML:
192.168.2.174:5432/dspace
2. Premissas e decisões técnicas¶
2.1 Produção não foi copiada cegamente¶
Durante a comparação com produção, foi identificado que o Tomcat/backend DSpace em produção roda como root.
Isso explica por que, em produção, vários diretórios pertencem a dspace:dspace, mas o backend consegue escrever mesmo assim: root consegue ignorar as restrições normais de permissão.
Na HML, optou-se por um modelo mais correto:
Backend/Tomcat: tomcat
Frontend/Node: dspace
Solr: solr
Arquivos DSpace: dspace:dspace
tomcat pertence ao grupo dspace
Essa decisão evita rodar Tomcat como root.
2.2 Modelo de permissões adotado na HML¶
Os diretórios de runtime do DSpace precisam permitir escrita pelo grupo dspace, já que o Tomcat roda como tomcat, mas pertence ao grupo dspace.
Diretórios runtime principais:
/dspace/assetstore
/dspace/imports
/dspace/exports
/dspace/upload
/dspace/temp
/dspace/var
/dspace/log
Permissão final adotada:
/dspace dspace:dspace 755
/dspace/assetstore dspace:dspace 2770
/dspace/imports dspace:dspace 2770
/dspace/exports dspace:dspace 2770
/dspace/upload dspace:dspace 2770
/dspace/temp dspace:dspace 2770
/dspace/var dspace:dspace 2770
/dspace/log dspace:dspace 2770
O 2 em 2770 ativa o setgid, garantindo que arquivos e diretórios criados dentro deles mantenham o grupo dspace.
3. Inventário inicial da produção¶
Antes da montagem da HML, foram identificados no ambiente de produção:
Backend DSpace: /dspace
Código/fonte instalado: /dspace/DSpace-dspace-8.1
Backend implantado no Tomcat:
/opt/tomcat/webapps/server
/opt/tomcat/webapps/server-boot.jar
Assetstore: /dspace/assetstore
Banco PostgreSQL: PostgreSQL 16.14
Frontend Angular: /dspace-8-angular
Solr: 8.11.4
Nginx: proxy reverso
Também foram identificadas configurações relevantes:
dspace.dir=/dspace
assetstore.dir = ${dspace.dir}/assetstore
assetstore.index.primary = 0
org.dspace.app.itemexport.work.dir = ${dspace.dir}/exports
org.dspace.app.itemexport.download.dir = ${dspace.dir}/exports/download
org.dspace.app.batchitemimport.work.dir = ${dspace.dir}/imports
upload.temp.dir = ${dspace.dir}/upload
report.dir = ${dspace.dir}/reports/
log.report.dir = ${dspace.dir}/log
Outros diretórios citados em configuração:
/dspace/sitemaps
/dspace/handle-server
/dspace/var/oai
/dspace/ctqueues
4. Backup e artefatos vindos da produção¶
Foram considerados/restaurados os seguintes artefatos:
dspace_assetstore_2026-06-15_081953.tar.gz
dspace_configs_clean_2026-06-15_081953.tar.gz
SHA256SUMS_2026-06-15_081953.txt
restore-configs-2026-06-15_081953
A HML recebeu:
- banco PostgreSQL restaurado;
-
/dspace/assetstore; - configurações base do DSpace;
- repositórios Git do backend, frontend e deploy;
- configurações Solr versionadas no repo de deploy.
5. Instalação das dependências na HML¶
5.1 Java, Maven, Ant e Nginx¶
Validação final:
java -version
javac -version
mvn -version
ant -version
nginx -v
systemctl status nginx --no-pager
Resultado validado:
OpenJDK 17.0.19
javac 17.0.19
Apache Maven 3.8.7
Apache Ant 1.10.14
nginx 1.24.0
5.2 Node, npm e Yarn¶
Validação final:
node -v
npm -v
yarn -v
which node
which npm
which yarn
Resultado validado:
node: v20.20.2
npm: 11.4.2
yarn: 1.22.22
/usr/bin/node
/usr/bin/npm
/usr/bin/yarn
6. Instalação do Tomcat¶
6.1 Download¶
Foi baixado o Tomcat 10.1.42:
cd /tmp
wget https://archive.apache.org/dist/tomcat/tomcat-10/v10.1.42/bin/apache-tomcat-10.1.42.tar.gz
Validação:
ls -lh /tmp/apache-tomcat-10.1.42.tar.gz
6.2 Extração¶
sudo mkdir -p /opt/tomcat
sudo tar -xzf /tmp/apache-tomcat-10.1.42.tar.gz -C /opt/tomcat --strip-components=1
sudo chown -R tomcat:tomcat /opt/tomcat
sudo sh -c 'chmod +x /opt/tomcat/bin/*.sh'
Validação:
sudo -u tomcat /opt/tomcat/bin/version.sh
Resultado validado:
Server version: Apache Tomcat/10.1.42
JVM Version: 17.0.19
6.3 Serviço systemd do Tomcat¶
Foi criado:
/etc/systemd/system/tomcat.service
Exemplo do serviço:
[Unit]
Description=Apache Tomcat 10.1.42
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx2048M -Djava.awt.headless=true'
Environment='JAVA_OPTS=-Djava.security.egd=file:/dev/./urandom'
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
Ativação:
sudo systemctl daemon-reload
sudo systemctl enable --now tomcat
Validação:
systemctl status tomcat --no-pager -l
sudo ss -lntp | grep 8080
curl -I http://localhost:8080
7. Instalação do Solr¶
7.1 Download¶
Foi usado Solr 8.11.4:
ls -lh /tmp/solr-8.11.4.tgz
tar -tzf /tmp/solr-8.11.4.tgz | head -n 20
7.2 Diretórios¶
sudo mkdir -p /var/solr/data /var/solr/logs
sudo chown -R solr:solr /var/solr
7.3 Serviço systemd do Solr¶
Foi criado:
/etc/systemd/system/solr.service
O serviço aponta para:
/opt/solr/bin/solr start -p 8983 -s /var/solr/data
7.4 Problema inicial¶
Na primeira tentativa, o Solr falhou:
Solr home directory /var/solr/data must contain a solr.xml file!
Foi necessário garantir a estrutura correta do Solr home antes de subir o serviço.
7.5 Validação final¶
systemctl status solr --no-pager -l
sudo ss -lntp | grep 8983
curl -I http://localhost:8983/solr/
Resultado validado:
Solr ativo na porta 8983
HTTP/1.1 200 OK
8. Configurações Solr do DSpace¶
8.1 Origem das configurações¶
Na produção havia:
/dspace/solr
/dspace/solr/search
/dspace/solr/oai
/dspace/solr/authority
/dspace/solr/statistics
/dspace/solr/qaevent
/dspace/solr/suggestion
Com arquivos:
schema.xml
solrconfig.xml
protwords.txt
stopwords.txt
synonyms.txt
core.properties
8.2 Versionamento no repo de deploy¶
As configurações foram copiadas para o repo:
/home/sti/git-repos/dspace-deploy-uern/solr
Commit realizado:
Versiona configurações Solr do DSpace
Arquivos versionados:
solr/authority/conf/protwords.txt
solr/authority/conf/schema.xml
solr/authority/conf/solrconfig.xml
solr/authority/conf/stopwords.txt
solr/authority/conf/synonyms.txt
solr/authority/core.properties
solr/oai/conf/protwords.txt
solr/oai/conf/schema.xml
solr/oai/conf/solrconfig.xml
solr/oai/conf/stopwords.txt
solr/oai/conf/synonyms.txt
solr/oai/core.properties
solr/qaevent/conf/protwords.txt
solr/qaevent/conf/schema.xml
solr/qaevent/conf/solrconfig.xml
solr/qaevent/conf/stopwords.txt
solr/qaevent/conf/synonyms.txt
solr/qaevent/core.properties
solr/search/conf/protwords.txt
solr/search/conf/schema.xml
solr/search/conf/solrconfig.xml
solr/search/conf/stopwords.txt
solr/search/conf/synonyms.txt
solr/search/core.properties
solr/statistics/conf/protwords.txt
solr/statistics/conf/schema.xml
solr/statistics/conf/solrconfig.xml
solr/statistics/conf/stopwords.txt
solr/statistics/conf/synonyms.txt
solr/statistics/core.properties
solr/suggestion/conf/protwords.txt
solr/suggestion/conf/schema.xml
solr/suggestion/conf/solrconfig.xml
solr/suggestion/conf/stopwords.txt
solr/suggestion/conf/synonyms.txt
solr/suggestion/core.properties
8.3 Cores Solr validados¶
Após copiar os cores para /var/solr/data, a validação mostrou:
curl -s "http://localhost:8983/solr/admin/cores?action=STATUS&wt=json" | python3 -m json.tool
Cores presentes:
authority
oai
qaevent
search
statistics
suggestion
9. Backend DSpace¶
9.1 Repositório backend¶
Repositório usado na HML:
/home/sti/git-repos/dspace-backend-uern
Código instalado em:
/dspace/DSpace-dspace-8.1
Validação:
sudo ls -ld /dspace/DSpace-dspace-8.1
sudo ls -lh /dspace/DSpace-dspace-8.1/pom.xml
sudo -u dspace bash -lc 'cd /dspace/DSpace-dspace-8.1 && git status && git log --oneline -n 3'
9.2 Classes Solr do módulo OAI¶
Foi identificado que o .gitignore estava ignorando diretórios com nome solr em qualquer profundidade por causa da entrada:
solr/
Isso ignorava indevidamente:
dspace-oai/src/main/java/org/dspace/xoai/solr
dspace-oai/src/main/java/org/dspace/xoai/services/api/solr
dspace-oai/src/main/java/org/dspace/xoai/services/impl/solr
O .gitignore foi ajustado para ignorar apenas o Solr runtime na raiz:
/solr/
Foram versionadas as classes:
dspace-oai/src/main/java/org/dspace/xoai/solr/DSpaceSolrSearch.java
dspace-oai/src/main/java/org/dspace/xoai/solr/DSpaceSolrServer.java
dspace-oai/src/main/java/org/dspace/xoai/solr/exceptions/DSpaceSolrException.java
dspace-oai/src/main/java/org/dspace/xoai/solr/exceptions/DSpaceSolrIndexerException.java
dspace-oai/src/main/java/org/dspace/xoai/solr/exceptions/SolrSearchEmptyException.java
dspace-oai/src/main/java/org/dspace/xoai/services/api/solr/SolrQueryResolver.java
dspace-oai/src/main/java/org/dspace/xoai/services/api/solr/SolrServerResolver.java
dspace-oai/src/main/java/org/dspace/xoai/services/impl/solr/DSpaceSolrQueryResolver.java
dspace-oai/src/main/java/org/dspace/xoai/services/impl/solr/DSpaceSolrServerResolver.java
Commit:
Versiona classes Solr do módulo OAI
9.3 Sincronização do repo para /dspace/DSpace-dspace-8.1
¶
sudo rsync -a --delete /home/sti/git-repos/dspace-backend-uern/ /dspace/DSpace-dspace-8.1/
sudo chown -R dspace:dspace /dspace/DSpace-dspace-8.1
Validação:
sudo -u dspace bash -lc '
cd /dspace/DSpace-dspace-8.1
git status
git log --oneline -n 3
'
9.4 Build do backend¶
sudo -u dspace bash -lc '
cd /dspace/DSpace-dspace-8.1
mvn package
'
Resultado:
BUILD SUCCESS
Total time: 02:34 min
Módulos com sucesso:
DSpace Parent Project
DSpace Services Framework
DSpace Kernel
DSpace Addon Modules
DSpace Kernel Additions and Local Customizations
DSpace IIIF
DSpace OAI-PMH
DSpace RDF
DSpace SWORD
DSpace SWORD v2
DSpace Server Webapp
DSpace Server Webapp:: Tomcat deployable WAR
DSpace Server Webapp:: Executable JAR
DSpace Assembly and Configuration
9.5 Installer gerado¶
Validação:
sudo -u dspace bash -lc '
cd /dspace/DSpace-dspace-8.1
ls -lh dspace/target/
ls -ld dspace/target/dspace-installer
find dspace/target/dspace-installer -maxdepth 2 -type f | sort | head -n 80
'
Installer:
/dspace/DSpace-dspace-8.1/dspace/target/dspace-installer
9.6 Ant update¶
Primeira execução falhou porque o installer não continha o diretório solr:
/dspace/DSpace-dspace-8.1/dspace/target/dspace-installer/solr does not exist
Correção aplicada:
sudo -u dspace bash -lc '
cd /dspace/DSpace-dspace-8.1/dspace/target/dspace-installer
mkdir -p solr
rsync -a --delete /dspace/solr/ solr/
find solr -maxdepth 3 -type f | sort
du -sh solr
'
Depois:
sudo -u dspace bash -lc '
cd /dspace/DSpace-dspace-8.1/dspace/target/dspace-installer
ant update
'
Resultado:
BUILD SUCCESSFUL
O Ant validou conexão com o banco:
Database Type: postgres
Database URL: jdbc:postgresql://192.168.2.174:5432/dspace
Database Schema: public
Database Username: dspace
Database Software: PostgreSQL version 16.14
pgcrypto installed/up-to-date: true
9.7 Configuração HML do backend¶
Arquivo:
/dspace/config/local.cfg
Valores validados:
dspace.server.url = http://192.168.2.117/server
dspace.server.ssr.url = http://localhost:8080/server
dspace.ui.url = http://192.168.2.117
db.url = jdbc:postgresql://192.168.2.174:5432/dspace
db.username = dspace
Não registrar senha do banco em documentação.
9.8 Implantação no Tomcat¶
O build gerou:
/dspace/webapps/server
/dspace/webapps/server-boot.jar
Cópia para Tomcat:
sudo systemctl stop tomcat
sudo rm -rf /opt/tomcat/webapps/*
sudo rsync -a /dspace/webapps/server/ /opt/tomcat/webapps/server/
sudo cp /dspace/webapps/server-boot.jar /opt/tomcat/webapps/server-boot.jar
sudo chown -R tomcat:tomcat /opt/tomcat/webapps
sudo systemctl start tomcat
Validação:
curl -I --max-time 20 http://localhost:8080/server/
curl -s --max-time 20 http://localhost:8080/server/api | head
Também foi testado por IP:
curl -s http://192.168.2.117:8080/server/api | grep -E "dspaceUI|dspaceServer|dspaceVersion"
Resultado correto:
"dspaceUI" : "http://192.168.2.117"
"dspaceServer" : "http://192.168.2.117/server"
"dspaceVersion" : "DSpace 8.1"
10. Nginx¶
10.1 Problema com backup em sites-enabled
¶
Foi criado backup dentro de:
/etc/nginx/sites-enabled/
Isso causou erro:
duplicate default server for 0.0.0.0:80
Correção:
sudo rm -f /etc/nginx/sites-enabled/default.bak.*
Regra definida:
Não salvar backups dentro de /etc/nginx/sites-enabled.
10.2 Configuração final do Nginx¶
Arquivo:
/etc/nginx/sites-available/default
Conteúdo usado:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name 192.168.2.117;
client_max_body_size 1G;
location /server/ {
proxy_pass http://localhost:8080/server/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
}
location / {
proxy_pass http://localhost:4000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
}
}
Aplicação:
sudo nginx -t
sudo systemctl reload nginx
Validação:
curl -I --max-time 20 http://192.168.2.117/ | head -n 5
curl -s --max-time 20 http://192.168.2.117/ | grep -i "<title" | head
curl -s --max-time 20 http://192.168.2.117/server/api | grep -E "dspaceUI|dspaceServer|dspaceVersion"
Resultado:
HTTP/1.1 200 OK
<title>Repositório DSpace :: Início</title>
"dspaceUI" : "http://192.168.2.117"
"dspaceServer" : "http://192.168.2.117/server"
"dspaceVersion" : "DSpace 8.1"
11. Frontend Angular¶
11.1 Repositório¶
Repositório:
/home/sti/git-repos/dspace-angular-uern
Validação inicial:
cd /home/sti/git-repos/dspace-angular-uern
git status
git log --oneline -n 5
node -v
npm -v
yarn -v
Commit validado:
Ajusta tela de termos de usuário final
11.2 Configuração do Angular¶
Foi criado:
config/config.yml
A partir de:
config/config.example.yml
Com ajustes principais:
ui:
ssl: false
host: localhost
port: 4000
nameSpace: /
rest:
ssl: false
host: 192.168.2.117
port: 80
nameSpace: /server
ssrBaseUrl: http://localhost:8080/server
11.3 Tema RIUERN¶
O tema existia no código:
src/themes/RIUERN
Mas o config.yml estava usando:
themes:
- name: dspace
Foi alterado para:
themes:
- name: RIUERN
11.4 Idioma pt-BR¶
A configuração inicialmente estava com:
defaultLanguage: en
E todos os idiomas ativos.
Foi ajustado para:
defaultLanguage: pt-BR
E lista reduzida:
languages:
- code: pt-BR
label: Português do Brasil
active: true
Validação posterior:
curl -s --max-time 20 http://192.168.2.117/ | grep -iE "<html|<title" | head
Resultado:
<html lang="pt-BR">
<title>Repositório DSpace :: Início</title>
11.5 Instalação de dependências¶
Como node_modules estava ausente:
cd /home/sti/git-repos/dspace-angular-uern
yarn install --frozen-lockfile
11.6 Build do frontend¶
Primeira tentativa falhou com erro de memória Node:
FATAL ERROR: Ineffective mark-compacts near heap limit
Allocation failed - JavaScript heap out of memory
Correção:
export NODE_OPTIONS="--max-old-space-size=4096"
yarn run build:prod
Script usado:
yarn run build:prod
Que executa:
NODE_ENV=production yarn run build:ssr
ng build --configuration production
ng run dspace-angular:server:production
11.7 Deploy do frontend¶
Diretório final:
/dspace-8-angular
Cópia:
sudo mkdir -p /dspace-8-angular
sudo rsync -a --delete /home/sti/git-repos/dspace-angular-uern/dist/ /dspace-8-angular/dist/
sudo rsync -a /home/sti/git-repos/dspace-angular-uern/config/ /dspace-8-angular/config/
sudo chown -R dspace:dspace /dspace-8-angular
11.8 Serviço systemd do frontend¶
Arquivo:
/etc/systemd/system/dspace-ui.service
Conteúdo:
[Unit]
Description=DSpace Angular UI
After=network.target tomcat.service
Wants=tomcat.service
[Service]
Type=simple
User=dspace
Group=dspace
WorkingDirectory=/dspace-8-angular
Environment=NODE_ENV=production
Environment=NODE_OPTIONS=--max-old-space-size=4096
ExecStart=/usr/bin/node /dspace-8-angular/dist/server/main
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Ativação:
sudo systemctl daemon-reload
sudo systemctl enable --now dspace-ui
Validação:
systemctl is-active dspace-ui
sudo ss -lntp | grep 4000
curl -I --max-time 20 http://localhost:4000/ | head -n 5
curl -s --max-time 20 http://localhost:4000/ | grep -i "<title" | head
Resultado:
active
LISTEN 127.0.0.1:4000
HTTP/1.1 200 OK
<title>DSpace Repository :: Home</title>
Depois, após idioma e tema:
<title>Repositório DSpace :: Início</title>
12. Permissões runtime corrigidas na HML¶
12.1 Problema com bitstream/PDF¶
Ao tentar abrir PDF inicialmente, apareceu erro 500 no navegador.
O teste direto do bitstream depois mostrou que o arquivo existia:
curl -L --max-time 60 \
"http://192.168.2.117/server/api/core/bitstreams/263840b4-422a-4dec-a9d2-83ab0b931faa/content" \
-o /tmp/teste-bitstream.pdf
ls -lh /tmp/teste-bitstream.pdf
file /tmp/teste-bitstream.pdf
md5sum /tmp/teste-bitstream.pdf
Resultado:
PDF document, version 1.7, 134 page(s)
MD5: b6aec76beb73a7323bf4f0b615eb8aea
O checksum bateu com o informado pela API.
12.2 Problema de escrita no assetstore¶
A importação via interface gerou erro:
DSBitStoreService.put(...)
java.io.IOException: No such file or directory
Causa: o backend via Tomcat precisava escrever no assetstore, mas o Tomcat rodava como tomcat, enquanto o assetstore era dspace:dspace.
Correção adotada:
sudo usermod -aG dspace tomcat
sudo chown -R dspace:dspace /dspace/assetstore
sudo find /dspace/assetstore -type d -exec chmod 2770 {} \;
sudo find /dspace/assetstore -type f -exec chmod 660 {} \;
sudo systemctl restart tomcat
12.3 Problema de escrita em /dspace/imports
¶
A importação depois falhou com:
Caused by: java.nio.file.AccessDeniedException: /dspace/imports
Correção aplicada:
sudo mkdir -p /dspace/imports /dspace/exports /dspace/upload /dspace/temp /dspace/var /dspace/log
sudo chown -R dspace:dspace /dspace/imports /dspace/exports /dspace/upload /dspace/temp /dspace/var /dspace/log
sudo chmod 2770 /dspace/imports /dspace/exports /dspace/upload /dspace/temp /dspace/var /dspace/log
sudo usermod -aG dspace tomcat
sudo systemctl restart tomcat
Estado final validado:
uid=999(tomcat) gid=988(tomcat) groups=988(tomcat),110(dspace)
drwxr-xr-x /dspace
drwxrws--- /dspace/assetstore
drwxrws--- /dspace/exports
drwxrws--- /dspace/imports
drwxrws--- /dspace/log
drwxrws--- /dspace/temp
drwxrws--- /dspace/upload
drwxrws--- /dspace/var
13. Indexação Solr e OAI¶
13.1 Primeira indexação¶
Antes da indexação:
search: 0
oai: 0
statistics: 12
Comandos:
sudo -u dspace /dspace/bin/dspace index-discovery -b
sudo -u dspace /dspace/bin/dspace oai import
Resultado inicial:
search: 376
oai: 38
statistics: 12
13.2 Após importação¶
Depois de importação pela interface e nova indexação:
sudo -u dspace /dspace/bin/dspace index-discovery -b
sudo -u dspace /dspace/bin/dspace oai import
Resultado:
search: 377
oai: 39
statistics: 38
Validação:
curl -s "http://localhost:8983/solr/search/select?q=*:*&rows=0&wt=json" | python3 -m json.tool | grep numFound
curl -s "http://localhost:8983/solr/oai/select?q=*:*&rows=0&wt=json" | python3 -m json.tool | grep numFound
curl -s "http://localhost:8983/solr/statistics/select?q=*:*&rows=0&wt=json" | python3 -m json.tool | grep numFound
14. Importação via interface¶
14.1 Importação testada¶
Foi usada a interface:
/admin/batch-import
ZIP usado:
ProducoesAcademicasUERN_16_06_2026_08_01.zip
Parâmetros registrados em log:
--add
--zip ProducoesAcademicasUERN_16_06_2026_08_01.zip
-v true
14.2 Erros encontrados¶
Primeiro erro:
java.io.IOException: No such file or directory
DSBitStoreService.put(...)
Causa: escrita no assetstore.
Segundo erro:
AccessDeniedException: /dspace/imports
Causa: Tomcat sem permissão efetiva de escrita em /dspace/imports.
14.3 Correção¶
Modelo final:
tomcat no grupo dspace
runtime dirs com dspace:dspace e 2770
assetstore dirs 2770
assetstore files 660
14.4 Resultado final¶
Depois da correção:
- importação funcionou;
- item importado ficou visível na UI;
- reindexação refletiu o item no Solr;
- OAI subiu para
39.
15. Validação funcional final¶
15.1 Serviços¶
Comando:
systemctl is-active nginx tomcat solr dspace-ui
Resultado:
active
active
active
active
15.2 Backend¶
Comando:
curl -s --max-time 20 http://192.168.2.117/server/api | grep -E "dspaceUI|dspaceServer|dspaceVersion"
Resultado:
"dspaceUI" : "http://192.168.2.117"
"dspaceServer" : "http://192.168.2.117/server"
"dspaceVersion" : "DSpace 8.1"
15.3 Frontend¶
Comando:
curl -s --max-time 20 http://192.168.2.117/ | grep -iE "<html|<title" | head
Resultado:
<!DOCTYPE html><html data-critters-container="" lang="pt-BR"><head>
<title>Repositório DSpace :: Início</title>
15.4 Permissões¶
Comando:
id tomcat
sudo ls -ld /dspace /dspace/assetstore /dspace/imports /dspace/exports /dspace/upload /dspace/temp /dspace/var /dspace/log
Resultado:
uid=999(tomcat) gid=988(tomcat) groups=988(tomcat),110(dspace)
drwxr-xr-x /dspace
drwxrws--- /dspace/assetstore
drwxrws--- /dspace/exports
drwxrws--- /dspace/imports
drwxrws--- /dspace/log
drwxrws--- /dspace/temp
drwxrws--- /dspace/upload
drwxrws--- /dspace/var
15.5 Solr¶
Resultado final:
search: 377
oai: 39
statistics: 38
15.6 UI¶
Foram validados manualmente:
- home;
- busca;
- visualização de item;
- visualização de PDF/bitstream;
- item importado pela interface.
16. Arquivo de evidência¶
Foi gerado log de validação na HML:
{
echo "===== DATA ====="
date
echo
echo "===== SERVIÇOS ====="
systemctl is-active nginx tomcat solr dspace-ui
echo
echo "===== URLS ====="
curl -s --max-time 20 http://192.168.2.117/server/api | grep -E "dspaceUI|dspaceServer|dspaceVersion"
curl -s --max-time 20 http://192.168.2.117/ | grep -iE "<html|<title" | head
echo
echo "===== PERMISSÕES ====="
id tomcat
sudo ls -ld /dspace /dspace/assetstore /dspace/imports /dspace/exports /dspace/upload /dspace/temp /dspace/var /dspace/log
echo
echo "===== SOLR ====="
curl -s "http://localhost:8983/solr/search/select?q=*:*&rows=0&wt=json" | python3 -m json.tool | grep numFound
curl -s "http://localhost:8983/solr/oai/select?q=*:*&rows=0&wt=json" | python3 -m json.tool | grep numFound
curl -s "http://localhost:8983/solr/statistics/select?q=*:*&rows=0&wt=json" | python3 -m json.tool | grep numFound
} | tee ~/validacao-hml-dspace-$(date +%F_%H%M%S).log
Resultado registrado:
Data: Tue Jun 16 11:20:22 UTC 2026
Serviços:
nginx: active
tomcat: active
solr: active
dspace-ui: active
Backend:
dspaceUI = http://192.168.2.117
dspaceServer = http://192.168.2.117/server
dspaceVersion = DSpace 8.1
Frontend:
lang = pt-BR
title = Repositório DSpace :: Início
Solr:
search numFound = 377
oai numFound = 39
statistics numFound = 38
17. Estado final da HML¶
A HML está funcional no fluxo básico:
[OK] Serviços ativos
[OK] Frontend acessível
[OK] Backend acessível
[OK] Tema RIUERN aplicado
[OK] Idioma pt-BR aplicado
[OK] Banco restaurado
[OK] Assetstore restaurado
[OK] Solr configurado
[OK] Solr reindexado
[OK] OAI reindexado
[OK] PDF/bitstream validado
[OK] Importação via interface funcionando
[OK] Item importado visível pela UI
[OK] Tomcat sem root
[OK] Permissões runtime ajustadas
18. Diferenças relevantes entre produção e HML¶
Produção¶
Tomcat/backend roda como root
Usuário tomcat inexistente
/dspace pertence a dspace:dspace
assetstore 750
imports 775
HML¶
Tomcat/backend roda como tomcat
tomcat pertence ao grupo dspace
/dspace pertence a dspace:dspace
assetstore 2770
imports 2770
runtime dirs 2770
Conclusão¶
A HML não replica o problema de segurança da produção. Ela mantém o backend com usuário dedicado e resolve escrita por grupo.
Esse modelo deve ser considerado como referência para futura correção da produção, mas somente com:
- backup validado;
- janela de manutenção;
- plano de rollback;
- testes de importação;
- testes de bitstream;
- testes de login;
- testes de indexação.
19. Pendências¶
19.1 DNS e HTTPS¶
A HML ainda usa HTTP por IP:
http://192.168.2.117/
Por isso o navegador indica conexão não segura.
Para homologação ampla, o correto é:
https://nome-dns-interno/
Exemplo futuro:
https://repositorio-hml.uern.br/
ou domínio interno equivalente.
Será necessário:
- DNS interno;
- certificado TLS válido;
- Nginx na porta 443;
- ajuste de
dspace.server.url; - ajuste de
dspace.ui.url; - rebuild do frontend se a URL mudar.
19.2 Versionamento no repo de deploy¶
Devem ser versionados ou documentados:
- configuração Nginx HML;
- serviço
tomcat.service; - serviço
solr.service; - serviço
dspace-ui.service; - permissões runtime;
- config Solr;
- config Angular HML, sem expor segredos;
- checklist de reindexação;
- checklist de validação.
19.3 Produção¶
Não alterar produção agora.
A produção roda Tomcat como root, o que é risco alto. A correção deve ser tratada como frente própria:
Frente futura: remover Tomcat root da produção
Essa frente exige:
- snapshot/backup;
- restauração testada;
- janela de manutenção;
- ajuste de permissões;
- troca de usuário do serviço;
- testes completos.
20. Comandos úteis para retomada¶
Ver serviços¶
systemctl is-active nginx tomcat solr dspace-ui
Ver API backend¶
curl -s --max-time 20 http://192.168.2.117/server/api | grep -E "dspaceUI|dspaceServer|dspaceVersion"
Ver frontend¶
curl -s --max-time 20 http://192.168.2.117/ | grep -iE "<html|<title" | head
Reindexar Discovery¶
sudo -u dspace /dspace/bin/dspace index-discovery -b
Reindexar OAI¶
sudo -u dspace /dspace/bin/dspace oai import
Ver contagens Solr¶
curl -s "http://localhost:8983/solr/search/select?q=*:*&rows=0&wt=json" | python3 -m json.tool | grep numFound
curl -s "http://localhost:8983/solr/oai/select?q=*:*&rows=0&wt=json" | python3 -m json.tool | grep numFound
curl -s "http://localhost:8983/solr/statistics/select?q=*:*&rows=0&wt=json" | python3 -m json.tool | grep numFound
Ver permissões principais¶
id tomcat
sudo ls -ld /dspace /dspace/assetstore /dspace/imports /dspace/exports /dspace/upload /dspace/temp /dspace/var /dspace/log
Ver log do DSpace¶
sudo tail -n 200 /dspace/log/dspace.log
Ver erros recentes¶
sudo tail -n 300 /dspace/log/dspace.log | grep -iE "ERROR|Exception|AccessDenied|No such file|Cannot create batch" -C 5
Ver log do Tomcat¶
sudo tail -n 200 /opt/tomcat/logs/catalina.out
Reiniciar frontend¶
sudo systemctl restart dspace-ui
Reiniciar backend¶
sudo systemctl restart tomcat
Reiniciar Solr¶
sudo systemctl restart solr
Recarregar Nginx¶
sudo nginx -t && sudo systemctl reload nginx
21. Checklist final de replicação¶
Para replicar novamente produção em HML, seguir esta ordem:
1. Inventariar produção.
2. Fazer backup de banco, assetstore e configs.
3. Restaurar banco em VM DB HML.
4. Restaurar assetstore em VM app HML.
5. Restaurar configs DSpace.
6. Ajustar local.cfg para IPs/URLs HML.
7. Instalar Java, Maven, Ant, Node, npm, Yarn.
8. Instalar Tomcat como usuário tomcat.
9. Instalar Solr como usuário solr.
10. Copiar/configurar cores Solr do DSpace.
11. Buildar backend.
12. Rodar ant update.
13. Copiar /dspace/webapps/server para /opt/tomcat/webapps/server.
14. Subir Tomcat.
15. Validar /server/api.
16. Configurar Angular config.yml.
17. Ativar tema RIUERN.
18. Ativar defaultLanguage pt-BR.
19. Buildar frontend com NODE_OPTIONS.
20. Copiar dist/config para /dspace-8-angular.
21. Criar serviço dspace-ui.
22. Configurar Nginx.
23. Ajustar permissões runtime.
24. Reindexar Discovery.
25. Reindexar OAI.
26. Testar busca.
27. Testar item.
28. Testar PDF.
29. Testar importação.
30. Reindexar após importação.
31. Registrar evidência final.
22. Conclusão¶
A replicação da produção para HML foi concluída com sucesso.
A HML está funcional e validada para:
- navegação;
- busca;
- visualização de item;
- visualização de PDF;
- importação;
- indexação;
- OAI;
- tema institucional;
- idioma português brasileiro.
O ambiente HML está tecnicamente mais seguro que a produção no ponto do Tomcat, pois não executa o backend como root.
Antes de homologação ampla com usuários, ainda é necessário resolver DNS/HTTPS.