Fix Portainer deploy: use variable substitution instead of env_file
This commit is contained in:
@@ -4,6 +4,7 @@ All notable changes to this project are logged here, newest first. This file sta
|
|||||||
|
|
||||||
## 2026-09-04
|
## 2026-09-04
|
||||||
|
|
||||||
|
- Fixed: Portainer stack deploy failed with `env file /data/compose/44/.env not found`. Cause: `docker-compose.yml` used `env_file: - .env`, which requires a real file on disk; Portainer's UI-entered environment variables satisfy `${VAR}` substitution in the compose file but do not create that file. Changed `docker-compose.yml` to reference each setting as `${VAR:-default}` under `environment:` instead, which works both for a real local `.env` (auto-loaded by Compose for substitution) and for values entered directly in Portainer. Corrected the wrong explanation of this in `PORTAINER_DEPLOY.md`.
|
||||||
- Changed: renamed the default branch from `master` to `main`, both locally and in `PORTAINER_DEPLOY.md`'s repository reference. The old name was just `git init`'s local fallback default, not a deliberate choice.
|
- Changed: renamed the default branch from `master` to `main`, both locally and in `PORTAINER_DEPLOY.md`'s repository reference. The old name was just `git init`'s local fallback default, not a deliberate choice.
|
||||||
- Added: `PORTAINER_DEPLOY.md`, a step-by-step guide for deploying this as its own stack in Portainer, pulled straight from the Gitea repo, including how to set environment variables through Portainer's UI since `.env` is not committed.
|
- Added: `PORTAINER_DEPLOY.md`, a step-by-step guide for deploying this as its own stack in Portainer, pulled straight from the Gitea repo, including how to set environment variables through Portainer's UI since `.env` is not committed.
|
||||||
- Changed: swapped `ANTHROPIC_API_KEY` from a personal key to a company-owned key.
|
- Changed: swapped `ANTHROPIC_API_KEY` from a personal key to a company-owned key.
|
||||||
|
|||||||
@@ -18,7 +18,9 @@ Repo: `https://primegit.primecontrols-dev.com/m.mabrey/sde-meeting-toolkit.git`
|
|||||||
|
|
||||||
## Step 2: Set environment variables
|
## Step 2: Set environment variables
|
||||||
|
|
||||||
`.env` is not in the repo on purpose; it holds secrets and is listed in `.gitignore`. Portainer's stack editor has its own **Environment variables** section, below the repository settings. Add each of these as a name and value pair.
|
`.env` is not in the repo on purpose; it holds secrets and is listed in `.gitignore`. `docker-compose.yml` reads each setting through `${VARIABLE_NAME}` substitution instead of a literal `env_file`, so it works whether the value comes from a real `.env` next to the file (local and Docker Desktop use) or from Portainer's own stack settings (Git-pull use, where no `.env` file exists).
|
||||||
|
|
||||||
|
Portainer's stack editor has its own **Environment variables** section, below the repository settings. Add each of these as a name and value pair.
|
||||||
|
|
||||||
| Name | Value |
|
| Name | Value |
|
||||||
|---|---|
|
|---|---|
|
||||||
@@ -32,7 +34,7 @@ Repo: `https://primegit.primecontrols-dev.com/m.mabrey/sde-meeting-toolkit.git`
|
|||||||
| `TOKEN_USAGE_FILE` | `./data/token-usage.json` |
|
| `TOKEN_USAGE_FILE` | `./data/token-usage.json` |
|
||||||
| `MOCK_AI` | `false` |
|
| `MOCK_AI` | `false` |
|
||||||
|
|
||||||
Portainer writes these into a real `.env` file inside the stack's own directory on the host when it deploys. `docker-compose.yml` reads that same file (`env_file: - .env`), so nothing else needs to change for this to work.
|
Portainer passes these to Compose as substitution values for the `${VARIABLE_NAME}` references in `docker-compose.yml`. No `.env` file needs to exist on the host for this to work.
|
||||||
|
|
||||||
## Step 3: Deploy
|
## Step 3: Deploy
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,16 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "5173:5173"
|
- "5173:5173"
|
||||||
env_file:
|
environment:
|
||||||
- .env
|
- MOCK_AI=${MOCK_AI:-false}
|
||||||
|
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
|
||||||
|
- APP_USERS=${APP_USERS:-}
|
||||||
|
- APP_USERNAME=${APP_USERNAME:-}
|
||||||
|
- APP_PASSWORD=${APP_PASSWORD:-}
|
||||||
|
- RATE_LIMIT_MAX=${RATE_LIMIT_MAX:-20}
|
||||||
|
- RATE_LIMIT_WINDOW_MS=${RATE_LIMIT_WINDOW_MS:-300000}
|
||||||
|
- TOKEN_LIMIT_PER_USER=${TOKEN_LIMIT_PER_USER:-0}
|
||||||
|
- TOKEN_USAGE_FILE=${TOKEN_USAGE_FILE:-./data/token-usage.json}
|
||||||
volumes:
|
volumes:
|
||||||
# Persists the per-user token quota file across restarts and rebuilds.
|
# Persists the per-user token quota file across restarts and rebuilds.
|
||||||
# Without this, everyone's daily usage silently resets on every deploy.
|
# Without this, everyone's daily usage silently resets on every deploy.
|
||||||
|
|||||||
Reference in New Issue
Block a user