Setup do Ambiente Local¶
Guia passo a passo para configurar o ambiente de desenvolvimento local do projeto UNICEF Portugal.
Pré-requisitos¶
| Ferramenta | Versão mínima | Notas |
|---|---|---|
| Visual Studio | 2019 | Com workload ASP.NET e desenvolvimento web |
| Docker Desktop | - | Para SQL Server local |
| Git | - | Acesso ao Azure DevOps |
| Azure CLI | - | Para acesso a recursos Azure (backups, etc.) |
1. Clonar o repositório¶
git clone https://dev.azure.com/double-pt/Unicef/_git/Unicef C:/repos/unicef
cd C:/repos/unicef
# O repositório é um bare repo, criar working copy:
git worktree add ../unicef-work main
cd ../unicef-work
2. Configurar SQL Server com Docker¶
Iniciar uma instância de SQL Server 2019 via Docker na porta 1434 (para não conflitar com eventuais instâncias locais na porta 1433):
docker run \
-e "ACCEPT_EULA=Y" \
-e "SA_PASSWORD=Str0ngP@ss!" \
-p 1434:1433 \
--name unicef-sql \
-d mcr.microsoft.com/mssql/server:2019-latest
Para verificar que o container está a correr:
docker ps --filter name=unicef-sql
3. Importar bases de dados¶
Instalar sqlpackage (se necessário)¶
dotnet tool install -g microsoft.sqlpackage
Importar a base de dados Umbraco¶
O ficheiro databaseUmb.bacpac tem aproximadamente 60MB e a importação demora cerca de 1 minuto:
sqlpackage /Action:Import \
/SourceFile:"databaseUmb.bacpac" \
/TargetServerName:localhost,1434 \
/TargetDatabaseName:unc \
/TargetUser:sa \
/TargetPassword:'Str0ngP@ss!' \
/TargetTrustServerCertificate:True
Importar a base de dados EasyPay¶
O ficheiro databaseEasyPay.bacpac tem aproximadamente 1MB:
sqlpackage /Action:Import \
/SourceFile:"databaseEasyPay.bacpac" \
/TargetServerName:localhost,1434 \
/TargetDatabaseName:EasyPay \
/TargetUser:sa \
/TargetPassword:'Str0ngP@ss!' \
/TargetTrustServerCertificate:True
4. Configurar connection strings¶
Editar o ficheiro Web/Web.config e atualizar a secção connectionStrings:
<connectionStrings>
<remove name="umbracoDbDSN" />
<add name="umbracoDbDSN"
connectionString="Server=localhost,1434;Database=unc;User Id=sa;Password=Str0ngP@ss!"
providerName="System.Data.SqlClient" />
<add name="Payments"
connectionString="Server=localhost,1434;Database=EasyPay;User Id=sa;Password=Str0ngP@ss!"
providerName="System.Data.SqlClient" />
</connectionStrings>
Atenção
Não fazer commit destas alterações ao Web.config. Estas connection strings são apenas para desenvolvimento local.
5. Restaurar pacotes NuGet¶
O projeto usa o modelo antigo de packages.config. Alguns pacotes são proprietários (CreateIt.Toolkit) e não existem no nuget.org.
# Descarregar nuget.exe
curl -sL -o nuget.exe https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
# Restaurar pacotes
./nuget.exe restore UNC.PublicPortal.sln
Resolvido na branch feature/local-dev-setup
A branch feature/local-dev-setup no Azure DevOps já inclui o NuGet.config e os pacotes CreateIt.Toolkit necessários. Se estiver a usar esta branch, o NuGet restore funciona sem passos adicionais.
Pacotes CreateIt.Toolkit (apenas se necessário manualmente)
Os pacotes CreateIt.Toolkit.UmbracoCms, CreateIt.Toolkit.UmbracoCms.Foyer e CreateIt.Toolkit.Mvc são proprietários e não estão disponíveis no NuGet público. Os DLLs podem ser obtidos a partir do site em produção via Kudu:
# Obter credenciais de deploy
az webapp deployment list-publishing-credentials \
--name uncwebprd --resource-group unc-prd \
--subscription 2e6c7ed6-c6f8-4058-901c-c3113a4df82a \
--query "{user:publishingUserName,pass:publishingPassword}" -o json
# Descarregar DLLs do site em produção
curl -u '$uncwebprd:<password>' \
"https://uncwebprd.scm.azurewebsites.net/api/vfs/site/wwwroot/bin/CreateIt.Toolkit.UmbracoCms.dll" \
-o packages/CreateIt.Toolkit.UmbracoCms.2.2.4/lib/net452/CreateIt.Toolkit.UmbracoCms.dll
curl -u '$uncwebprd:<password>' \
"https://uncwebprd.scm.azurewebsites.net/api/vfs/site/wwwroot/bin/CreateIt.Toolkit.UmbracoCms.Foyer.dll" \
-o packages/CreateIt.Toolkit.UmbracoCms.Foyer.2018.6.28.1/lib/net452/CreateIt.Toolkit.UmbracoCms.Foyer.dll
curl -u '$uncwebprd:<password>' \
"https://uncwebprd.scm.azurewebsites.net/api/vfs/site/wwwroot/bin/CreateIt.Toolkit.Mvc.dll" \
-o packages/CreateIt.Toolkit.Mvc.2018.6.28.1/lib/net452/CreateIt.Toolkit.Mvc.dll
Criar as pastas de destino antes de executar os comandos acima.
6. Compilar e executar¶
- Abrir
UNC.PublicPortal.slnno Visual Studio 2019 (recomendado para .NET Framework 4.5.2) - Build: Ctrl+Shift+B
- Executar com debug: F5 (usa IIS Express na porta SSL 44388)
- O site abre em
https://localhost:44388
Como funciona o frontend
O AngularJS não corre como processo separado. É carregado pelo template Umbraco StartView.cshtml, que serve a página HTML com o ng-app="unicef". O Angular faz bootstrap e toma conta da navegação, chamando a API /umbraco/Api/ContentApi/GetData/ para cada página. Ver secção AngularJS Frontend para mais detalhes.
Obtenção de Backups da Base de Dados¶
Não utilizar os ficheiros .bacpac do repositório
Os ficheiros databaseUmb.bacpac e databaseEasyPay.bacpac existentes no repositório são antigos e não devem ser utilizados para desenvolvimento ativo. A presença de ficheiros binários grandes no repositório Git é uma má prática que aumenta desnecessariamente o tamanho do clone. Estes ficheiros devem ser removidos do repositório numa futura limpeza.
Para trabalhar com dados atualizados, exportar um backup fresco diretamente da base de dados Azure SQL.
Obter backup fresco da produção¶
az sql db export \
--name uncdb-prd \
--server uncsqlsrv-prd \
--resource-group unc-prd \
--subscription 2e6c7ed6-c6f8-4058-901c-c3113a4df82a \
--storage-key-type StorageAccessKey \
--storage-key "<key>" \
--storage-uri "https://uncstorageprd.blob.core.windows.net/backups/uncdb-prd.bacpac" \
--admin-user "<admin>" \
--admin-password "<password>"
Substituir <key>, <admin> e <password> pelos valores reais (disponíveis junto da equipa — o Key Vault unc-prd-vault existe mas não é utilizado pelo projeto).
Media (imagens)¶
As imagens do site estão no Azure Blob Storage (uncstorageprd, container media, ~4.023 ficheiros, ~2.2 GB). O site funciona sem imagens locais, mas para desenvolvimento visual completo:
mkdir -p Web/media
az storage blob download-batch \
--destination Web/media --source media \
--account-name uncstorageprd \
--subscription 2e6c7ed6-c6f8-4058-901c-c3113a4df82a
Nota
Algumas imagens referenciadas no conteúdo podem não existir no blob storage (referências órfãs). Isto não afeta o funcionamento do site — apenas resultam em imagens em falta (404).
Problemas Conhecidos¶
"Unable to load virtual directory"¶
Causa: A pasta .vs/ contém configuração de IIS Express com caminhos inválidos.
Solução: Fechar o Visual Studio, eliminar a pasta .vs/ na raiz do projeto e reabrir.
rm -rf .vs/
Pacotes NuGet "CreateIt.Toolkit" não encontrados¶
Causa: São pacotes proprietários do desenvolvedor original (CreateIT/BetacodeTech) e não existem no NuGet público.
Solução: Usar a branch feature/local-dev-setup que já inclui o NuGet.config e os pacotes .nupkg. Alternativamente, descarregar os DLLs directamente da produção via Kudu API (ver secção 5).
Primeiro arranque demora 1-2 minutos¶
Causa: O Umbraco 7 reconstrói a cache XML de conteúdo na primeira execução. Com ~4.468 nós e tabelas com centenas de milhares de registos, este processo é demorado.
Solução: Aguardar. Após o primeiro arranque, os carregamentos seguintes são mais rápidos (desde que o processo não seja terminado).
Imagens em falta (404)¶
Causa: Imagens referenciadas no conteúdo que podem não existir no blob storage ou que estão em caminhos diferentes localmente.
Solução: Descarregar media do blob storage (ver secção acima). Algumas imagens podem ser referências órfãs — isto não afeta o funcionamento.
Estrutura do projeto¶
UNC.PublicPortal.sln
├── Web/ # Projeto principal (Umbraco + API controllers)
│ ├── Views/ # Razor views do Umbraco
│ ├── Controllers/ # API e MVC controllers
│ ├── Assets/ # CSS, imagens estáticas
│ ├── App_Plugins/ # Plugins Umbraco
│ ├── App_Data/ # Dados runtime Umbraco
│ └── Web.config # Configuração principal
├── Business/ # ViewModels e lógica de negócio
├── Definitions/ # Modelos e interfaces
├── DB/ # Projeto SQL Server
├── PaymentsManager/ # Gestão de pagamentos
├── Payments/ # DAL para pagamentos
├── Templates/ # AngularJS frontend
│ ├── app/ # Source (index.html, Assets/js/, Assets/ngviews/)
│ └── dist/ # Build de produção (minificado)
├── MassiveLuceneAnalyser/ # Analisador Lucene personalizado
├── databaseUmb.bacpac # Backup da BD Umbraco
└── databaseEasyPay.bacpac # Backup da BD EasyPay
Descrição dos projetos¶
| Projeto | Descrição |
|---|---|
| Web | Projeto principal ASP.NET com Umbraco CMS. Contém controllers, views Razor e configuração |
| Business | Camada de lógica de negócio e ViewModels partilhados |
| Definitions | Modelos de dados e interfaces/contratos |
| DB | Projeto SQL Server Database (schema e migrations) |
| PaymentsManager | Lógica de gestão de pagamentos (EasyPay, PayPal) |
| Payments | Data Access Layer para a base de dados de pagamentos |
| Templates | Frontend AngularJS — páginas públicas do site |
| MassiveLuceneAnalyser | Analisador Lucene personalizado para pesquisa no site |