@@ -23,6 +23,8 @@ services:
2323 << : *common
2424 image : " mintlayer/node-daemon:latest"
2525 command : " node-daemon ${NETWORK:-mainnet}"
26+ labels :
27+ com.centurylinklabs.watchtower.enable : " true"
2628 environment :
2729 << : [*common-env, *node-rpc-env]
2830 RUST_LOG : " ${RUST_LOG:-info}"
@@ -43,6 +45,8 @@ services:
4345 << : *common
4446 image : " mintlayer/wallet-rpc-daemon:latest"
4547 command : " ${WALLET_RPC_CMD:-wallet-rpc-daemon mainnet}"
48+ labels :
49+ com.centurylinklabs.watchtower.enable : " true"
4650 depends_on :
4751 - node-daemon
4852 environment :
@@ -70,11 +74,21 @@ services:
7074 # Web GUI (Astro SSR app)
7175 # ─────────────────────────────────────────
7276 web-gui :
73- image : " mintlayer/gui-x:latest"
77+ build :
78+ context : ./app
79+ dockerfile : Dockerfile
7480 depends_on :
7581 - wallet-rpc-daemon
82+ volumes :
83+ # Read-only access to wallet data for file backup download
84+ - " ./mintlayer-data:/app/mintlayer-data:ro"
85+ # Shared with wallet-rpc-daemon's /home/mintlayer/ so uploaded wallet files
86+ # are accessible to the daemon at /home/mintlayer/uploads/<filename>
87+ - " ./mintlayer-data/uploads:/app/uploads"
88+ # Server-side preferences (SQLite) — persists across browsers and restarts
89+ - " ./mintlayer-data/prefs:/app/prefs"
7690 ports :
77- - " 127.0.0.1: 4321:4321"
91+ - " ${WEB_GUI_PORT:- 4321} :4321"
7892 environment :
7993 WALLET_RPC_URL : " http://wallet-rpc-daemon:3034"
8094 WALLET_RPC_USERNAME : " ${WALLET_RPC_USERNAME}"
@@ -90,11 +104,33 @@ services:
90104 UI_PASSWORD_HASH : " ${UI_PASSWORD_HASH}"
91105 UI_TOTP_SECRET : " ${UI_TOTP_SECRET}"
92106 SESSION_SECRET : " ${SESSION_SECRET}"
107+ WALLET_RPC_CMD : " ${WALLET_RPC_CMD:-}"
93108 INDEXER_ENABLED : " ${INDEXER_ENABLED:-false}"
94109 HOST : " 0.0.0.0"
95110 PORT : " 4321"
96111 restart : unless-stopped
97112
113+ # ─────────────────────────────────────────
114+ # Optional: Watchtower — auto-update Mintlayer images (profile: watchtower)
115+ # Checks Docker Hub daily at 04:00 and restarts any container whose image
116+ # has changed. The web-gui (locally built) is intentionally excluded.
117+ # Start with: docker compose --profile watchtower up -d
118+ # ─────────────────────────────────────────
119+ watchtower :
120+ image : containrrr/watchtower
121+ volumes :
122+ - /var/run/docker.sock:/var/run/docker.sock
123+ command : >
124+ --schedule "0 0 4 * * *"
125+ --cleanup
126+ --label-enable
127+ environment :
128+ WATCHTOWER_NOTIFICATIONS : shoutrrr
129+ WATCHTOWER_NOTIFICATION_URL : " ${WATCHTOWER_NOTIFICATION_URL:-}"
130+ profiles :
131+ - watchtower
132+ restart : unless-stopped
133+
98134 # ─────────────────────────────────────────
99135 # Optional: wallet-cli (profile: wallet_cli)
100136 # Usage: docker compose run --rm wallet-cli
@@ -132,6 +168,8 @@ services:
132168 api-blockchain-scanner-daemon :
133169 << : *common
134170 image : " mintlayer/api-blockchain-scanner-daemon:latest"
171+ labels :
172+ com.centurylinklabs.watchtower.enable : " true"
135173 depends_on :
136174 - node-daemon
137175 - postgres
@@ -152,9 +190,13 @@ services:
152190
153191 api-web-server :
154192 image : " mintlayer/api-web-server:latest"
193+ labels :
194+ com.centurylinklabs.watchtower.enable : " true"
155195 depends_on :
156196 - postgres
157197 - node-daemon
198+ ports :
199+ - " ${API_WEB_SERVER_PORT:-3000}:3000"
158200 environment :
159201 ML_API_WEB_SRV_NETWORK : " ${NETWORK:-mainnet}"
160202 ML_API_WEB_SRV_BIND_ADDRESS : " 0.0.0.0:3000"
0 commit comments