Przejdź do treści

Lokalne usługi deweloperskie

Przegląd

Backend wymaga trzech lokalnych usług do developmentu: 1. SQL Server - baza danych 2. Azurite - emulator Azure Storage 3. MailHog - SMTP server do testowania emaili

Wszystkie uruchamiane są przez Docker Compose.

Docker Compose

Uruchomienie wszystkich usług

cd masaku-api/docker

# Uruchom w tle
docker-compose up -d

# Uruchom z logami
docker-compose up

# Sprawdź status
docker-compose ps

# Zatrzymaj
docker-compose down

Uruchomienie pojedynczej usługi

# Tylko SQL Server
docker-compose up -d sql

# Tylko Azurite
docker-compose up -d azurite

# Tylko MailHog
docker-compose up -d mailhog

SQL Server

Informacje

  • Port: 1433
  • Login: sa
  • Password: Masaku123
  • Database: Masaku

Połączenie

Connection string:

Server=localhost,1433;Database=Masaku;User=sa;Password=Masaku123;TrustServerCertificate=True

DBeaver: 1. New Connection → SQL Server 2. Host: localhost 3. Port: 1433 4. Database: Masaku 5. Username: sa 6. Password: Masaku123 7. Driver properties: trustServerCertificate=true

sqlcmd (CLI):

sqlcmd -S localhost,1433 -U sa -P Masaku123 -d Masaku

# Przykładowe query
1> SELECT TOP 5 * FROM Users;
2> GO

Zarządzanie danymi

# Backup bazy
docker exec masaku-sql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Masaku123 -Q "BACKUP DATABASE Masaku TO DISK = '/var/opt/mssql/backup/masaku.bak'"

# Restore bazy
docker exec masaku-sql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Masaku123 -Q "RESTORE DATABASE Masaku FROM DISK = '/var/opt/mssql/backup/masaku.bak' WITH REPLACE"

# Reset bazy (usuń wszystkie dane)
docker exec masaku-sql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Masaku123 -Q "DROP DATABASE Masaku; CREATE DATABASE Masaku;"

Troubleshooting

Błąd: Login failed for user 'sa' - Sprawdź czy hasło to Masaku123 - Sprawdź czy TrustServerCertificate=True jest w connection string

Błąd: Cannot connect to SQL Server

# Sprawdź czy kontener działa
docker ps | grep sql

# Restart
docker-compose restart sql

# Logi
docker-compose logs sql

Azurite (Azure Storage Emulator)

Informacje

  • Blob Service: localhost:10000
  • Queue Service: localhost:10001
  • Table Service: localhost:10002
  • Account Name: devstoreaccount1
  • Account Key: Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==

Connection String

UseDevelopmentStorage=true;DevelopmentStorageProxyUri=http://127.0.0.1

Azure Storage Explorer

  1. Otwórz Azure Storage Explorer
  2. Kliknij "Connect to Azure Storage"
  3. Wybierz "Local storage emulator"
  4. Default settings:
  5. Blob: localhost:10000
  6. Queue: localhost:10001
  7. Table: localhost:10002
  8. Connect

Przykłady użycia

Przeglądanie kontenerów:

# Użyj Azure Storage Explorer lub az CLI
az storage container list --connection-string "UseDevelopmentStorage=true"

Upload pliku:

az storage blob upload \
  --connection-string "UseDevelopmentStorage=true" \
  --container-name documents \
  --name test.pdf \
  --file ./test.pdf

Troubleshooting

Błąd: Cannot connect to Azurite

# Sprawdź czy działa
docker ps | grep azurite

# Restart
docker-compose restart azurite

# Sprawdź porty
lsof -i :10000

Czyszczenie danych:

# Zatrzymaj Azurite
docker-compose stop azurite

# Usuń wolumeny
docker volume rm docker_azurite-data

# Uruchom ponownie
docker-compose up -d azurite

MailHog (Email Testing)

Informacje

  • SMTP Port: 1025
  • Web UI: http://localhost:8025
  • API: http://localhost:8025/api

Użycie

W appsettings:

{
  "Email": {
    "SmtpHost": "localhost",
    "SmtpPort": 1025,
    "From": "noreply@masaku-local.com"
  }
}

Web UI: Otwórz http://localhost:8025 w przeglądarce aby zobaczyć wszystkie wysłane emaile.

API:

# Pobierz wszystkie emaile
curl http://localhost:8025/api/v2/messages

# Usuń wszystkie emaile
curl -X DELETE http://localhost:8025/api/v1/messages

Testowanie emaili

# Wyślij testowego emaila
curl -X POST http://localhost:8025/api/v2/messages \
  -d "from=test@example.com" \
  -d "to=user@example.com" \
  -d "subject=Test" \
  -d "body=Hello World"

Sprawdź w Web UI: http://localhost:8025

Troubleshooting

Nie widzę emaili w UI: - Sprawdź czy aplikacja używa portu 1025 (nie 25 czy 587) - Sprawdź czy MailHog działa: docker ps | grep mailhog - Sprawdź logi: docker-compose logs mailhog

Zarządzanie wszystkimi usługami

Status

cd masaku-api/docker

# Status wszystkich kontenerów
docker-compose ps

# Zużycie zasobów
docker stats

Logi

# Logi wszystkich usług
docker-compose logs

# Follow logs
docker-compose logs -f

# Logi konkretnej usługi
docker-compose logs sql
docker-compose logs azurite
docker-compose logs mailhog

Restart

# Restart wszystkich usług
docker-compose restart

# Restart konkretnej usługi
docker-compose restart sql

Czyszczenie

# Zatrzymaj i usuń kontenery
docker-compose down

# Usuń również wolumeny (UWAGA: traci dane!)
docker-compose down -v

# Restart od zera
docker-compose down -v
docker-compose up -d

Weryfikacja całego setupu

# 1. Sprawdź czy wszystkie usługi działają
docker-compose ps

# 2. Test SQL Server
sqlcmd -S localhost,1433 -U sa -P Masaku123 -Q "SELECT @@VERSION"

# 3. Test Azurite
curl http://localhost:10000/devstoreaccount1?comp=list

# 4. Test MailHog
curl http://localhost:8025/api/v2/messages

# 5. Uruchom API
cd ../Masaku.API
dotnet run

# 6. Sprawdź Swagger
open http://localhost:5000/swagger

Jeśli wszystkie kroki przeszły pomyślnie, środowisko jest gotowe!

Dalsze kroki

Dalsze zasoby