Merge pull request #152 from GeiserX/lynxprompt-smtp-https

LynxPrompt: fix the stack so people can sign in
This commit is contained in:
Alicia Sykes authored and GitHub committed 2026-10-15 11:26:03 +01:00
commit 4784f6c42e
2 files changed
+92 -43

No files matched your search

+40 -5
View File
@@ -45,28 +45,63 @@
"description": "Self-hostable AI config management platform for AGENTS.md, CLAUDE.md, Cursor rules, and 30+ AI assistant formats. Source: https://github.com/GeiserX/LynxPrompt",
"env": [
{
"default": "",
"label": "Session secret \u2014 generate with: openssl rand -base64 32",
"description": "Generate with: openssl rand -hex 32",
"label": "Session secret (required)",
"name": "NEXTAUTH_SECRET"
},
{
"default": "http://localhost:3000",
"label": "Public base URL",
"description": "Generate with: openssl rand -hex 24",
"label": "Database password (required)",
"name": "DB_PASSWORD"
},
{
"description": "Such as http://192.168.1.10:3000 or https://lynxprompt.example.com",
"label": "Address you open it on (required)",
"name": "APP_URL"
},
{
"description": "Sign-in is a link sent by mail",
"label": "SMTP server (required)",
"name": "SMTP_HOST"
},
{
"description": "From address of the sign-in mails",
"label": "Sender address (required)",
"name": "SMTP_FROM"
},
{
"default": "587",
"description": "465 uses TLS",
"label": "SMTP port",
"name": "SMTP_PORT"
},
{
"default": "",
"label": "Super-admin account email",
"description": "Leave empty if the server needs no login",
"label": "SMTP user",
"name": "SMTP_USER"
},
{
"default": "",
"label": "SMTP password",
"name": "SMTP_PASSWORD"
},
{
"default": "",
"description": "This address becomes super-admin on its first sign-in",
"label": "Super-admin email",
"name": "SUPERADMIN_EMAIL"
}
],
"logo": "https://avatars.githubusercontent.com/u/9169332",
"name": "lynxprompt",
"note": "LynxPrompt listens on port 3000 and keeps its database in the pgdata volume and uploaded images in the uploads volume. Sign-in is a link sent by mail, so fill in the SMTP fields, and set APP_URL to the address you open it on. Generate the secrets with openssl rand -hex 32 and openssl rand -hex 24. All options: https://github.com/GeiserX/LynxPrompt/blob/main/env.example",
"platform": "linux",
"repository": {
"stackfile": "sources/stacks/lynxprompt.yml",
"url": "https://github.com/lissy93/portainer-templates"
},
"restart_policy": "unless-stopped",
"title": "LynxPrompt",
"type": 3
}
+52 -38
View File
@@ -1,46 +1,60 @@
services:
postgres:
image: postgres:18-alpine
restart: unless-stopped
volumes:
# Postgres 18 refuses a mount at /var/lib/postgresql/data.
- pgdata:/var/lib/postgresql
environment:
POSTGRES_DB: lynxprompt
POSTGRES_USER: lynxprompt
POSTGRES_PASSWORD: ${DB_PASSWORD:?DB_PASSWORD must be set}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U lynxprompt -d lynxprompt"]
interval: 5s
timeout: 5s
retries: 5
lynxprompt:
image: drumsergio/lynxprompt:2.1.0
image: drumsergio/lynxprompt:2.1.40
platform: linux/amd64
restart: unless-stopped
ports:
- "3000:3000"
environment:
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
- APP_URL=${APP_URL:-http://localhost:3000}
- NEXTAUTH_URL=${APP_URL:-http://localhost:3000}
- SUPERADMIN_EMAIL=${SUPERADMIN_EMAIL:-}
- DB_PASSWORD=lynxprompt
- DB_APP_HOST=postgres
- DB_APP_USER=lynxprompt
- DB_APP_PASSWORD=lynxprompt
- DB_APP_NAME=lynxprompt
- DB_USERS_HOST=postgres
- DB_USERS_USER=lynxprompt
- DB_USERS_PASSWORD=lynxprompt
- DB_USERS_NAME=lynxprompt
- DB_BLOG_HOST=postgres
- DB_BLOG_USER=lynxprompt
- DB_BLOG_PASSWORD=lynxprompt
- DB_BLOG_NAME=lynxprompt
- DB_SUPPORT_HOST=postgres
- DB_SUPPORT_USER=lynxprompt
- DB_SUPPORT_PASSWORD=lynxprompt
- DB_SUPPORT_NAME=lynxprompt
- ENABLE_USER_REGISTRATION=true
- ENABLE_EMAIL_AUTH=true
- ENABLE_PASSKEYS=true
depends_on:
- postgres
postgres:
image: postgres:17-alpine
restart: unless-stopped
environment:
- POSTGRES_DB=lynxprompt
- POSTGRES_USER=lynxprompt
- POSTGRES_PASSWORD=lynxprompt
volumes:
- postgres-data:/var/lib/postgresql/data
- uploads:/data/uploads
depends_on:
postgres:
condition: service_healthy
environment:
# One database per Prisma schema; the app creates the other three on first start.
DB_APP_HOST: postgres
DB_APP_USER: lynxprompt
DB_APP_PASSWORD: ${DB_PASSWORD}
DB_APP_NAME: lynxprompt
DB_USERS_HOST: postgres
DB_USERS_USER: lynxprompt
DB_USERS_PASSWORD: ${DB_PASSWORD}
DB_USERS_NAME: lynxprompt_users
DB_BLOG_HOST: postgres
DB_BLOG_USER: lynxprompt
DB_BLOG_PASSWORD: ${DB_PASSWORD}
DB_BLOG_NAME: lynxprompt_blog
DB_SUPPORT_HOST: postgres
DB_SUPPORT_USER: lynxprompt
DB_SUPPORT_PASSWORD: ${DB_PASSWORD}
DB_SUPPORT_NAME: lynxprompt_support
NEXTAUTH_SECRET: ${NEXTAUTH_SECRET:?NEXTAUTH_SECRET must be set}
NEXTAUTH_URL: ${APP_URL:?APP_URL must be set}
APP_URL: ${APP_URL:?APP_URL must be set}
SUPERADMIN_EMAIL: ${SUPERADMIN_EMAIL:-}
# Sign-in is a link sent by mail, so SMTP is needed to log in.
SMTP_HOST: ${SMTP_HOST:?SMTP_HOST must be set}
SMTP_PORT: ${SMTP_PORT:-587}
SMTP_USER: ${SMTP_USER:-}
SMTP_PASSWORD: ${SMTP_PASSWORD:-}
SMTP_FROM: ${SMTP_FROM:?SMTP_FROM must be set}
volumes:
postgres-data:
pgdata:
uploads: