-
-
Notifications
You must be signed in to change notification settings - Fork 30
Expand file tree
/
Copy pathdocker-compose.ghcr.yml
More file actions
114 lines (107 loc) · 3.62 KB
/
Copy pathdocker-compose.ghcr.yml
File metadata and controls
114 lines (107 loc) · 3.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# PayrollEngine Docker Stack — pre-built images from GitHub Container Registry
#
# Prerequisites:
# 1. Login to ghcr.io:
# echo "<your-pat>" | docker login ghcr.io -u <github-username> --password-stdin
# 2. Create a .env file with:
# DB_PASSWORD=PayrollStrongPass789
#
# Usage:
# docker compose -f docker-compose.ghcr.yml up -d
# docker compose -f docker-compose.ghcr.yml down
# docker compose -f docker-compose.ghcr.yml down -v # also removes database volume
name: payroll-engine
services:
db:
image: mcr.microsoft.com/mssql/server:2022-latest
platform: linux/amd64
container_name: payroll-db
environment:
ACCEPT_EULA: 'Y'
MSSQL_SA_PASSWORD: '${DB_PASSWORD}'
MSSQL_PID: 'Developer'
ports:
- "1433:1433"
volumes:
- mssql-data:/var/opt/mssql
# Extract DB scripts from Backend image into shared volume
sql-copy:
image: ghcr.io/payroll-engine/payrollengine.backend:latest
container_name: payrollengine-sql-copy
entrypoint: /bin/sh
command: -c "cp /sql/ModelCreate.sql /sql/ModelUpdate.sql /shared/"
volumes:
- sql-scripts:/shared
db-init:
image: mcr.microsoft.com/mssql/server:2022-latest
platform: linux/amd64
container_name: payrollengine-db-init
depends_on:
db:
condition: service_started
sql-copy:
condition: service_completed_successfully
environment:
DB_PASSWORD: '${DB_PASSWORD}'
entrypoint:
- /bin/sh
- -c
- |
set -e
echo 'Waiting for database to be ready...'
sleep 30
SQLCMD=/opt/mssql-tools18/bin/sqlcmd
$$SQLCMD -S db -U sa -P "$$DB_PASSWORD" -C -Q "SELECT @@VERSION" \
|| { echo 'Database connection failed'; exit 1; }
DB_EXISTS=$$($$SQLCMD -S db -U sa -P "$$DB_PASSWORD" -C -h -1 -W \
-Q "SET NOCOUNT ON; SELECT COUNT(*) FROM sys.databases WHERE name = 'PayrollEngine'")
DB_EXISTS=$$(echo "$$DB_EXISTS" | tr -d '[:space:]')
if [ "$$DB_EXISTS" = "0" ]; then
echo 'Database not found - running ModelCreate.sql...'
$$SQLCMD -S db -U sa -P "$$DB_PASSWORD" -C \
-Q "CREATE DATABASE PayrollEngine COLLATE SQL_Latin1_General_CP1_CS_AS"
$$SQLCMD -S db -U sa -P "$$DB_PASSWORD" -C -d PayrollEngine -i /sql/ModelCreate.sql
echo 'Database created.'
else
echo 'Database exists - running ModelUpdate.sql...'
$$SQLCMD -S db -U sa -P "$$DB_PASSWORD" -C -d PayrollEngine -i /sql/ModelUpdate.sql
echo 'Database update completed.'
fi
volumes:
- sql-scripts:/sql:ro
backend-api:
image: ghcr.io/payroll-engine/payrollengine.backend:latest
container_name: payroll-backend-api
ports:
- "5001:8080"
environment:
ASPNETCORE_URLS: 'http://+:8080'
ASPNETCORE_ENVIRONMENT: 'Development'
PayrollServerConfiguration__EnableSwagger: 'true'
ConnectionStrings__PayrollDatabaseConnection: >-
Server=db;Database=PayrollEngine;User Id=sa;
Password=${DB_PASSWORD};TrustServerCertificate=True;
depends_on:
db-init:
condition: service_completed_successfully
volumes:
- backend-logs:/app/logs
webapp:
image: ghcr.io/payroll-engine/payrollengine.webapp:latest
container_name: payroll-webapp
ports:
- "8081:8080"
environment:
ASPNETCORE_URLS: 'http://+:8080'
ASPNETCORE_ENVIRONMENT: 'Development'
ApiSettings__BaseUrl: 'http://backend-api:8080'
depends_on:
- backend-api
restart: unless-stopped
volumes:
- webapp-logs:/app/logs
volumes:
mssql-data:
sql-scripts:
backend-logs:
webapp-logs: