One command to a running iPlus system: SQL Server 2019 + the iPlus service + the
browser client. No local SQL Server install, no .mdf files.
# 1. Configure (edit the SA password!)
cp deploy/docker/.env.example deploy/docker/.env
# 2. Build the artifacts the images consume
./build/publish-release.sh --platform browser,service --keep-intermediate
# 3. Generate the initial install script (needs sqlpackage + a reference DB)
dotnet run --project gip.tool.dbscript -c Release -- \
generate -c "<reference-db-connection-string>" \
-o ./artifacts/release/initial-install-iplus.sql --suite-version 5.0.0
# 4. Start
docker compose -f deploy/docker/docker-compose.yml --env-file deploy/docker/.env up -d
# 5. Open http://localhost:8080| Service | Image | Purpose |
|---|---|---|
sqlserver |
mcr.microsoft.com/mssql/server:2019-latest |
Database |
mssql-init |
same | Applies initial-install-iplus.sql once, then exits |
iplus-service |
built from Dockerfile.service |
iPlus server (WCF + SQL Tunnel) |
iplus-browser |
built from Dockerfile.browser |
nginx serving the WASM client |
The images consume the output of build/publish-release.sh, so the container and
the GitHub Release artifact are byte-identical. Building inside the image would
require the Avalonia fork checkout and produce a second, divergent build.
--keep-intermediate is required: it keeps the raw publish folders in
artifacts/release/.work/, which the Dockerfiles copy from.
mssql-init runs docker-init-db.sh:
- waits for SQL Server to accept connections,
- skips everything when the database already exists (existing installations only
run the incremental
DbScriptsupdates), - otherwise creates the database and applies
initial-install-iplus.sql, - writes a marker file into the
mssql-init-statevolume so the script is never applied twice.
The service renders /app/ConnectionStrings.config from environment variables at
start-up (entrypoint-service.sh), so the database
password is never baked into an image or committed.
| Variable | Default | Meaning |
|---|---|---|
MSSQL_SA_PASSWORD |
— (required) | SQL Server SA password |
IPLUS_DB_NAME |
iPlusV5 |
Database name |
IPLUS_VERSION |
5.0.0 |
Must match the artifacts from publish-release.sh |
IPLUS_HTTP_PORT |
8080 |
Published browser client port |
IPLUS_TUNNEL_PORT |
8751 |
Published SQL Tunnel port |
TZ |
UTC |
Container timezone |
Put *.gip license files into deploy/docker/licenses/; the directory is mounted
read-only at /app/licenses. Without a license the system runs in evaluation mode.
This bundle is for evaluation and development:
- Use a managed SQL Server instead of the container for production.
- Put a TLS-terminating reverse proxy in front of the browser client.
- Do not expose the SQL Server port publicly.
- Replace the default
superuserpassword created by the initial install script.