Skip to content
This repository was archived by the owner on Jul 28, 2025. It is now read-only.

Commit 3a89da9

Browse files
feat: docker-compose setup (#7)
1 parent 2cd2fee commit 3a89da9

File tree

5 files changed

+169
-2
lines changed

5 files changed

+169
-2
lines changed

.env.example

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Database Configuration
2+
DATABASE_USER=SA
3+
DATABASE_PASSWORD=YourStrong@Passw0rd
4+
DATABASE_NAME=PathwayCoordinator
5+
DATABASE_HOST=db
6+
AZURE_WEB_JOBS_STORAGE=UseDevelopmentStorage=true
7+
DatabaseConnectionString=Server=${DATABASE_HOST};Database=${DATABASE_NAME};User Id=${DATABASE_USER};Password=${DATABASE_PASSWORD};TrustServerCertificate=True
8+
AzureWebJobsStorage=UseDevelopmentStorage=true
9+
FUNCTIONS_WORKER_RUNTIME=dotnet-isolated
10+
MailboxId=X26ABC1
11+
MeshSharedKey=TestKey
12+
MeshPassword=password
13+
BSSMailBox=X26ABC1
14+
MeshApiBaseUrl=http://localhost:8700/messageexchange
15+
ASPNETCORE_ENVIRONMENT=Development
16+
DiscoveryTimerExpression=*/5 * * * *
17+
QueueUrl=http://127.0.0.1:10001
18+
19+
# API Configuration
20+
API_PORT=7071
21+
22+
# Event Grid Configuration
23+
EVENT_GRID_TOPIC_URL=https://localhost:60101/api/events
24+
EVENT_GRID_TOPIC_KEY=TheLocal+DevelopmentKey=
25+
26+
# Azurite Configuration
27+
AZURITE_ACCOUNT_KEY=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==
28+
AZURITE_CONNECTION_STRING=DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1
29+
AZURITE_BLOB_PORT=10000
30+
AZURITE_QUEUE_PORT=10001
31+
AZURITE_TABLE_PORT=10002

compose.yaml

Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,97 @@
11
services:
2-
### ✅ API (Azure Functions in .NET 9) ###
32
api:
43
container_name: "api"
54
build:
6-
context: ./src
5+
context: ./Src
76
dockerfile: ServiceLayer.API/Dockerfile
87
platform: linux/amd64
98
restart: always
109
environment:
1110
FUNCTIONS_WORKER_RUNTIME: "dotnet-isolated"
1211
AzureWebJobsStorage: "${AZURE_WEB_JOBS_STORAGE}"
1312
AzureWebJobsSecretStorageType: "files"
13+
DatabaseConnectionString: "${DatabaseConnectionString}"
14+
EVENT_GRID_TOPIC_URL: "${EVENT_GRID_TOPIC_URL}"
15+
EVENT_GRID_TOPIC_KEY: "${EVENT_GRID_TOPIC_KEY}"
1416
ports:
1517
- "${API_PORT}:80"
18+
healthcheck:
19+
test: ["CMD-SHELL", "curl -f http://localhost:80/api/health || exit 1"]
20+
interval: 30s
21+
timeout: 10s
22+
retries: 3
23+
start_period: 40s
24+
depends_on:
25+
azurite:
26+
condition: service_healthy
27+
db:
28+
condition: service_healthy
29+
networks:
30+
- backend
31+
32+
azurite:
33+
container_name: "azurite"
34+
image: mcr.microsoft.com/azure-storage/azurite:latest
35+
restart: always
36+
command: "azurite --blobHost 0.0.0.0 --queueHost 0.0.0.0 --tableHost 0.0.0.0 --location /data --debug /data/debug.log"
37+
ports:
38+
- "${AZURITE_BLOB_PORT}:10000"
39+
- "${AZURITE_QUEUE_PORT}:10001"
40+
- "${AZURITE_TABLE_PORT}:10002"
41+
healthcheck:
42+
test: ["CMD-SHELL", "/bin/sh -c 'nc -z 127.0.0.1 10000 || exit 1'"]
43+
interval: 10s
44+
timeout: 5s
45+
retries: 10
46+
start_period: 15s
47+
volumes:
48+
- azurite-data:/data
49+
networks:
50+
- backend
51+
52+
db:
53+
container_name: "db"
54+
image: mcr.microsoft.com/mssql/server:2022-latest
55+
restart: always
56+
environment:
57+
ACCEPT_EULA: "Y"
58+
MSSQL_SA_PASSWORD: "${DATABASE_PASSWORD}"
59+
MSSQL_PID: "Developer"
60+
ports:
61+
- "1433:1433"
62+
user: "root"
63+
volumes:
64+
- db-data:/var/opt/mssql
65+
healthcheck:
66+
test: ["CMD-SHELL", "pgrep -f sqlservr || exit 1"]
67+
interval: 20s
68+
timeout: 10s
69+
retries: 6
70+
start_period: 60s
71+
networks:
72+
- backend
73+
74+
db-setup:
75+
container_name: "db-setup"
76+
build:
77+
context: ./database
78+
dockerfile: Dockerfile
79+
restart: "no"
80+
environment:
81+
DATABASE_PASSWORD: "${DATABASE_PASSWORD}"
82+
depends_on:
83+
db:
84+
condition: service_healthy
1685
networks:
1786
- backend
1887

1988
networks:
2089
backend:
90+
name: backend-network
2191
driver: bridge
92+
volumes:
93+
azurite-data:
94+
name: azurite-data
95+
db-data:
96+
name: db-data
97+
driver: local

database/Dockerfile

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
FROM mcr.microsoft.com/mssql-tools:v1
2+
3+
# Use root initially to set permissions
4+
USER root
5+
WORKDIR /database
6+
COPY db-setup-entrypoint.sh /database/
7+
COPY create_database_statement.sql /database/
8+
9+
RUN chmod +x /database/db-setup-entrypoint.sh && \
10+
useradd -m -s /bin/bash mssqltools && \
11+
chown -R mssqltools:mssqltools /database
12+
13+
# Switch to non-root user for security
14+
USER mssqltools
15+
16+
ENTRYPOINT ["/database/db-setup-entrypoint.sh"]
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
USE master;
2+
GO
3+
4+
-- Check if database exists and create it if it doesn't
5+
IF NOT EXISTS (
6+
SELECT name
7+
FROM sys.databases
8+
WHERE name = N'ServiceLayer'
9+
)
10+
BEGIN
11+
CREATE DATABASE [ServiceLayer];
12+
END
13+
GO
14+
15+
USE [ServiceLayer];
16+
GO
17+
18+
-- Only try to set QUERY_STORE if SQL Server version is higher than 12 (SQL 2014)
19+
IF CAST(SERVERPROPERTY('ProductVersion') AS NVARCHAR(128)) > '12'
20+
BEGIN
21+
ALTER DATABASE [ServiceLayer] SET QUERY_STORE = ON;
22+
END
23+
GO

database/db-setup-entrypoint.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/bin/bash
2+
echo "🔧 Starting DB setup..."
3+
4+
# Check if the SQL script exists
5+
if [ ! -f /database/create_database_statement.sql ]; then
6+
echo "❌ SQL script not found!"
7+
exit 1
8+
fi
9+
10+
echo "📡 Connecting to SQL Server at db..."
11+
until /opt/mssql-tools/bin/sqlcmd -S db -U SA -P "${DATABASE_PASSWORD}" -Q "SELECT 1;" > /dev/null 2>&1
12+
do
13+
echo "⏳ Waiting for SQL Server..."
14+
sleep 5
15+
done
16+
echo "✅ SQL Server is ready."
17+
18+
# Run the SQL setup script to create the database
19+
/opt/mssql-tools/bin/sqlcmd -S db -U SA -P "${DATABASE_PASSWORD}" -d master -i /database/create_database_statement.sql
20+
21+
echo "✅ Database setup completed."

0 commit comments

Comments
 (0)