Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8d0ad0a6fc | ||
|
|
820cd31362 |
@@ -6,13 +6,12 @@ New PR of [Template Name]
|
||||
|
||||
Before submitting this PR, please make sure that:
|
||||
|
||||
- [ ] I have read the suggestions in the README.md file https://github.com/Dokploy/templates?tab=readme-ov-file#general-requirements-when-creating-a-template
|
||||
- [ ] I have read the suggestions in the README.md file https://github.com/Dokploy/templates?tab=readme-ov-file#general-suggestions-when-creating-a-template
|
||||
- [ ] I have tested the template in my instance, so the maintainers don't spend time trying to figure out what's wrong.
|
||||
- [ ] I have added tests that demonstrate that my correction works or that my new feature works.
|
||||
|
||||
## Issues related (if applicable)
|
||||
|
||||
Close automatically the related issues using the keywords: `closes #ISSUE_NUMBER`
|
||||
Close automatically the related issues using the keywords: `closes #ISSUE_NUMBER`, `fixes #ISSUE_NUMBER`, `resolves #ISSUE_NUMBER`
|
||||
|
||||
|
||||
## Screenshots or Videos
|
||||
Example: `closes #123`
|
||||
@@ -8,6 +8,7 @@ Key components:
|
||||
|
||||
- **Blueprints**: Self-contained templates with `docker-compose.yml` (service definitions) and `template.toml` (Dokploy-specific configuration for domains, env vars, mounts).
|
||||
- **meta.json**: Centralized index of all templates, aggregated from blueprint metadata. Entries include `id`, `name`, `version`, `description`, `logo`, `links`, and `tags`.
|
||||
- **app/**: Vite-based React frontend for local preview/development (runs at http://localhost:5173). Copies blueprints and meta.json to dist during build.
|
||||
- **Scripts**: Node.js tools in root and `build-scripts/` for maintaining `meta.json` (deduplication, sorting, validation).
|
||||
|
||||
Data flow: New templates added to `blueprints/` → Metadata updated in `meta.json` → Processing scripts ensure consistency → App builds include static blueprints/meta for preview.
|
||||
@@ -21,6 +22,7 @@ The "why": Enables rapid, standardized deployment of 200+ OSS apps on Dokploy wi
|
||||
- `docker-compose.yml`: Standard Docker Compose v3.8. Avoid `ports`, `container_name`, `networks`—Dokploy handles isolation via internal networks.
|
||||
- `template.toml`: Defines variables (e.g., `${domain}`), domains (service:port → host), env vars, and mounts. Use helpers like `${password:32}`, `${uuid}`, `${jwt:secret_var}`.
|
||||
- `logo.svg/png`: Service icon, referenced in `meta.json`.
|
||||
- `app/vite.config.ts`: Configures build to copy `blueprints/*` and `meta.json` to dist root for static serving.
|
||||
- `dedupe-and-sort-meta.js`: Standalone script—reads `meta.json`, removes duplicate `id`s (keeps first), sorts by `id` (case-insensitive), creates timestamped backup.
|
||||
- `build-scripts/process-meta.js`: Advanced processor with CLI options (`--verbose`, `--no-backup`, `--input`/`--output`), JSON schema validation (required: `id`, `name`, `version`, `description`, `links.github`, `logo`, `tags` array).
|
||||
|
||||
@@ -30,8 +32,6 @@ Exemplary blueprint: `blueprints/ghost/`—`docker-compose.yml` exposes port 236
|
||||
|
||||
1. **Add/Update Template**:
|
||||
|
||||
- **REQUIREMENT**: Service **MUST** be open source. Only add templates for applications with an open-source license (e.g., MIT, Apache, GPL, AGPL). Proprietary or closed-source services are not allowed.
|
||||
- **Verify Docker Images**: Before using any Docker image in `docker-compose.yml`, verify it exists using `docker manifest inspect <image:tag>` (e.g., `docker manifest inspect docker.io/bitnami/discourse:3.5.0`). This ensures the image is available and prevents deployment failures.
|
||||
- Create `blueprints/<id>/` (e.g., `ghost`).
|
||||
- Implement `docker-compose.yml` (single service typical; use volumes for persistence).
|
||||
- Configure `template.toml`—reference vars in `[config.domains]`, `[config.env]`, `[config.mounts]`.
|
||||
@@ -39,7 +39,14 @@ Exemplary blueprint: `blueprints/ghost/`—`docker-compose.yml` exposes port 236
|
||||
- Run `node dedupe-and-sort-meta.js --backup` to validate/sort.
|
||||
- Commit; PR triggers Dokploy preview (base64 import for testing).
|
||||
|
||||
2. **CI/CD**:
|
||||
2. **Local Development**:
|
||||
|
||||
- App: `cd app && pnpm install && pnpm dev` (Vite dev server).
|
||||
- Meta processing: `npm run process-meta` or `make process-meta` (uses Makefile targets: `validate`, `check`, `build`).
|
||||
- Build app: `cd app && pnpm build`—copies blueprints/meta to `dist/` for static hosting.
|
||||
- Test template: Use PR preview URL or local Dokploy instance; import base64 from template card.
|
||||
|
||||
3. **CI/CD**:
|
||||
- `.github/workflows/validate-meta.yml` (if present): Runs validation on push/PR—fails on duplicates, invalid JSON, missing fields.
|
||||
- Integrate processing: Add `npm run process-meta` to build steps; use `--no-backup` in CI.
|
||||
|
||||
@@ -47,22 +54,20 @@ No tests in repo—focus on manual validation via scripts and Dokploy deploys. D
|
||||
|
||||
## Conventions and Patterns
|
||||
|
||||
- **Open Source Requirement**: **ALL services MUST be open source**. Only applications with open-source licenses (MIT, Apache, GPL, AGPL, etc.) are allowed. Proprietary or closed-source services are strictly prohibited.
|
||||
- **Template IDs**: Lowercase, kebab-case (e.g., `active-pieces`); unique across repo—enforced by dedupe script.
|
||||
- **Docker Compose**: Minimal—omit `ports` (Dokploy proxies), persistent volumes (e.g., `- db-data:/var/lib/postgresql/data`). Services named after folder (e.g., `ghost` service).
|
||||
- **Docker Compose**: Minimal—omit `ports` (Dokploy proxies), `restart: unless-stopped`, persistent volumes (e.g., `- db-data:/var/lib/postgresql/data`). Services named after folder (e.g., `ghost` service).
|
||||
- **template.toml**:
|
||||
- Variables: `[variables] main_domain = "${domain}"`; use helpers for secrets (`${password:64}`, `${base64:32}`).
|
||||
- Domains: `[[config.domains]] serviceName = "<service>" port = 80 host = "${main_domain}"` (path="/" optional).
|
||||
- Env: `[[config.env]]` array of "KEY=VALUE" strings, interpolating vars (e.g., "DB_PASSWORD=${db_pass}").
|
||||
- **URL Variables**: When environment variables require URLs (e.g., `WEB_URL`, `NEXTAUTH_URL`, `PUBLIC_URL`), **always use HTTP by default** (e.g., `"http://${main_domain}"`). HTTPS should only be used if explicitly required by the application or when using a reverse proxy with SSL termination.
|
||||
- Mounts: `[[config.mounts]] filePath = "/etc/config" content = """multi-line\ncontent"""`.
|
||||
- JWT helper: `${jwt:secret_var:payload_var}` for auth tokens; payload as JSON string with `exp: ${timestamps:YYYY-MM-DDTHH:mm:ssZ}`.
|
||||
- **Meta.json**: Entries as JSON objects; tags array of lowercase strings (e.g., ["monitoring", "database"]); links object with `github`, `website`, `docs`.
|
||||
- **No Networks**: Rely on Dokploy's isolated deployments—avoid explicit `networks:`.
|
||||
- **Versions**: Pin images to specific versions in `docker-compose.yml` (e.g., `ghost:5.82.0-alpine`); match in `meta.json.version`. **NEVER use `latest` tag**—it can break templates when upstream images change unexpectedly. **Always verify image exists** using `docker manifest inspect <image:tag>` before committing.
|
||||
- **Versions**: Pin images to specific versions in `docker-compose.yml` (e.g., `ghost:5.82.0-alpine`); match in `meta.json.version`.
|
||||
- **Logos**: SVG preferred; size ~128x128; file name in `meta.json.logo` (e.g., "ghost.svg").
|
||||
|
||||
Cross-component: Templates are independent and ship as static blueprints/meta.
|
||||
Cross-component: No runtime communication—templates independent. App consumes static blueprints/meta for UI rendering (e.g., search, cards via React components in `app/src/`).
|
||||
|
||||
## Integration Points
|
||||
|
||||
|
||||
@@ -5,6 +5,10 @@ on:
|
||||
workflows: [Build Preview Deployment]
|
||||
types:
|
||||
- completed
|
||||
pull_request:
|
||||
branches:
|
||||
- canary
|
||||
|
||||
permissions:
|
||||
actions: read
|
||||
deployments: write
|
||||
|
||||
@@ -1,121 +0,0 @@
|
||||
name: Validate Docker Compose Files
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- canary
|
||||
paths:
|
||||
- 'blueprints/**/docker-compose.yml'
|
||||
- 'blueprints/**/template.toml'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
validate-docker-compose:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up Docker Compose
|
||||
run: docker compose version
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20.16.0
|
||||
|
||||
- name: Set up pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 8
|
||||
|
||||
- name: Install dependencies
|
||||
run: cd build-scripts && pnpm install
|
||||
|
||||
- name: Detect changed blueprints
|
||||
id: changed
|
||||
run: |
|
||||
BASE_SHA=$(git merge-base HEAD origin/${{ github.base_ref }})
|
||||
|
||||
# Obtener todos los blueprints que tienen cambios (en docker-compose.yml o template.toml)
|
||||
CHANGED_BLUEPRINTS=$(git diff --name-only --diff-filter=ACMRT $BASE_SHA HEAD | \
|
||||
grep -E 'blueprints/[^/]+/(docker-compose\.yml|template\.toml)$' | \
|
||||
sed 's|blueprints/\([^/]*\)/.*|\1|' | \
|
||||
sort -u)
|
||||
|
||||
echo "Changed blueprints:"
|
||||
echo "$CHANGED_BLUEPRINTS" | while read blueprint; do
|
||||
[ -n "$blueprint" ] && echo " - $blueprint"
|
||||
done
|
||||
|
||||
# Guardar lista de blueprints (una por línea)
|
||||
echo "blueprints<<EOF" >> $GITHUB_OUTPUT
|
||||
echo "$CHANGED_BLUEPRINTS" >> $GITHUB_OUTPUT
|
||||
echo "EOF" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Validate blueprints
|
||||
run: |
|
||||
BLUEPRINTS="${{ steps.changed.outputs.blueprints }}"
|
||||
|
||||
if [ -z "$BLUEPRINTS" ] || [ "$BLUEPRINTS" = "" ]; then
|
||||
echo "ℹ️ No blueprints changed, skipping validation"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
ERROR=0
|
||||
|
||||
# Convertir a array para evitar problemas con subshells
|
||||
mapfile -t BLUEPRINT_ARRAY <<< "$BLUEPRINTS"
|
||||
|
||||
# Iterar sobre cada blueprint
|
||||
for blueprint in "${BLUEPRINT_ARRAY[@]}"; do
|
||||
[ -z "$blueprint" ] && continue
|
||||
|
||||
BLUEPRINT_PATH="blueprints/$blueprint"
|
||||
COMPOSE_FILE="$BLUEPRINT_PATH/docker-compose.yml"
|
||||
TOML_FILE="$BLUEPRINT_PATH/template.toml"
|
||||
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "📦 Validating: $blueprint"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
|
||||
# 1. Validar best practices de docker-compose.yml
|
||||
if [ ! -f "$COMPOSE_FILE" ]; then
|
||||
echo "⚠️ WARNING: docker-compose.yml not found"
|
||||
ERROR=1
|
||||
continue
|
||||
fi
|
||||
echo "🔍 Validating docker-compose.yml best practices..."
|
||||
if ! (cd build-scripts && pnpm exec tsx validate-docker-compose.ts --file "../$COMPOSE_FILE" --verbose); then
|
||||
ERROR=1
|
||||
continue
|
||||
fi
|
||||
|
||||
# 3. Validar template.toml
|
||||
if [ -f "$TOML_FILE" ]; then
|
||||
echo "🔍 Validating template.toml..."
|
||||
if ! (cd build-scripts && pnpm exec tsx validate-template.ts --dir "../$BLUEPRINT_PATH" --verbose); then
|
||||
ERROR=1
|
||||
continue
|
||||
fi
|
||||
else
|
||||
echo "⚠️ WARNING: template.toml not found"
|
||||
ERROR=1
|
||||
continue
|
||||
fi
|
||||
|
||||
echo "✅ All validations passed for $blueprint"
|
||||
done
|
||||
|
||||
if [ $ERROR -eq 1 ]; then
|
||||
echo ""
|
||||
echo "❌ Validation failed for one or more blueprints"
|
||||
exit 1
|
||||
else
|
||||
echo ""
|
||||
echo "✅ All blueprints validated successfully"
|
||||
fi
|
||||
@@ -1,3 +0,0 @@
|
||||
node_modules
|
||||
package-lock.json
|
||||
meta.json.backup.*
|
||||
@@ -1,222 +0,0 @@
|
||||
# AGENTS.md: AI Collaboration Guide
|
||||
|
||||
This document provides essential context for AI models interacting with this project. Adhering to these guidelines will ensure consistency and maintain code quality.
|
||||
|
||||
## 1. Project Overview & Purpose
|
||||
|
||||
- **Primary Goal:** This is the official repository for Dokploy Open Source Templates, maintaining Docker Compose templates for deploying 200+ open-source applications via Dokploy (a self-hosted PaaS alternative to Heroku). The project enables rapid, standardized deployment of OSS applications without manual configuration.
|
||||
- **Business Domain:** Self-hosted Platform as a Service (PaaS), DevOps tooling, containerized application deployment, and open-source software distribution.
|
||||
|
||||
## 2. Core Technologies & Stack
|
||||
|
||||
- **Languages:** JavaScript (Node.js), TypeScript (React frontend), YAML (Docker Compose), TOML (template configuration), JSON (metadata), Shell (build scripts).
|
||||
- **Frameworks & Runtimes:** Node.js runtime, Vite 5.x (for React 19.x frontend), Docker Compose v3.8+, React Router 7.x.
|
||||
- **Databases:** No direct database usage in core project (templates may include various databases like PostgreSQL, MySQL, Redis, etc.).
|
||||
- **Key Libraries/Dependencies:**
|
||||
- **Core:** `nodemon` for development, custom Node.js scripts for meta processing.
|
||||
- **Frontend:** `fuse.js` (fuzzy search), `zustand` (state management), `@iarna/toml` (TOML parsing), `shadcn/ui` components, `@radix-ui` primitives, `@codemirror` (code editor), `react-router-dom`, `tailwindcss`.
|
||||
- **Build:** `vite-plugin-static-copy` for copying blueprints to dist.
|
||||
- **Platforms:** Linux (primary), Docker containers, Dokploy PaaS, Web browsers (for frontend preview), Cloudflare Pages (for PR previews).
|
||||
- **Package Manager:** npm for root project, pnpm for frontend (`app/` directory).
|
||||
|
||||
## 3. Architectural Patterns
|
||||
|
||||
- **Overall Architecture:** Template collection and management system with decentralized blueprint architecture. Each blueprint is a self-contained Docker Compose application with Dokploy-specific configuration.
|
||||
- **Directory Structure Philosophy:**
|
||||
- `/blueprints`: Contains all deployable application templates, each as a subdirectory with `docker-compose.yml`, `template.toml`, and logo files. Each blueprint is independent with no shared state.
|
||||
- `/app`: Vite + React + TypeScript frontend for local preview and development.
|
||||
- `/src/components`: React components (UI components in `/ui` subdirectory using shadcn/ui).
|
||||
- `/src/hooks`: Custom React hooks (e.g., `useFuseSearch.ts` for fuzzy search).
|
||||
- `/src/store`: Zustand state management store.
|
||||
- `/src/lib`: Utility functions and helpers.
|
||||
- `/build-scripts`: Advanced meta.json processing tools with CLI options and JSON schema validation.
|
||||
- `/.github/workflows`: CI/CD workflows for validation, preview builds, and deployments.
|
||||
- Root level: Core processing scripts (`dedupe-and-sort-meta.js`), metadata index (`meta.json`), build configuration (`Makefile`, `package.json`).
|
||||
- **Module Organization:** Node.js scripts for metadata processing, React components for frontend UI, Docker Compose files for service definitions, TOML files for Dokploy configuration. Frontend uses component-based architecture with hooks for business logic and Zustand for global state.
|
||||
|
||||
## 4. Coding Conventions & Style Guide
|
||||
|
||||
- **Formatting:** JavaScript follows standard conventions with 2-space indentation. TypeScript in frontend uses ESLint configuration. YAML uses 2-space indentation. TOML files use standard formatting.
|
||||
- **Naming Conventions:**
|
||||
- Variables, functions: camelCase (`myVariable`, `myFunction`)
|
||||
- React components: PascalCase (`TemplateGrid`, `SearchBar`)
|
||||
- Constants: SCREAMING_SNAKE_CASE (`MAX_BUFFER_SIZE`)
|
||||
- Template IDs: lowercase, kebab-case (`activepieces`, `ghost`) - **MUST** be unique across repository
|
||||
- Files: snake_case for scripts (`dedupe-and-sort-meta.js`), PascalCase for React components (`TemplateGrid.tsx`), kebab-case for directories (`build-scripts`)
|
||||
- Docker services: **MUST** match blueprint folder name exactly (e.g., `ghost` service in `blueprints/ghost/`)
|
||||
- **API Design:**
|
||||
- **Backend:** Procedural scripting approach with CLI interfaces. Template system uses declarative configuration over imperative code.
|
||||
- **Frontend:** Component-based React architecture with hooks for logic separation. Zustand for centralized state management. Custom hooks encapsulate complex logic (e.g., `useFuseSearch` for search functionality).
|
||||
- **Common Patterns & Idioms:**
|
||||
- **Metaprogramming:** Minimal use of advanced JavaScript features in scripts, focusing on simple, maintainable code.
|
||||
- **Memory Management:** Relies on Node.js garbage collection and React's automatic memory management.
|
||||
- **Polymorphism:** Uses JavaScript prototype-based objects and functional programming patterns. React components use composition over inheritance.
|
||||
- **Type Safety:**
|
||||
- Backend scripts: JavaScript with JSDoc comments for documentation.
|
||||
- Frontend: TypeScript with strict type checking enabled.
|
||||
- **Concurrency:**
|
||||
- Backend: Synchronous processing model for meta.json operations.
|
||||
- Frontend: React's concurrent rendering, `useDeferredValue` for debouncing, `useEffect` for async operations.
|
||||
- **State Management:** Zustand store pattern with selectors for optimal re-renders. URL params synced with search state via React Router.
|
||||
- **Error Handling:**
|
||||
- Backend: Node.js error-first callback pattern and try-catch blocks. Scripts validate JSON structure and fail fast on errors.
|
||||
- Frontend: Error boundaries for React components, try-catch for async operations, user-friendly error messages via toast notifications.
|
||||
|
||||
## 5. Key Files & Entrypoints
|
||||
|
||||
- **Main Entrypoints:**
|
||||
- **Backend:** `dedupe-and-sort-meta.js` - Primary script for processing meta.json file.
|
||||
- **Frontend:** `app/src/main.tsx` - React application entry point.
|
||||
- **Configuration:**
|
||||
- `package.json` - Root Node.js project configuration and npm scripts.
|
||||
- `app/package.json` - Frontend dependencies and pnpm scripts.
|
||||
- `meta.json` - Centralized template registry (200+ entries).
|
||||
- `Makefile` - Build automation with targets for processing, validation, and cleanup.
|
||||
- `app/vite.config.ts` - Vite build configuration with static copy plugin.
|
||||
- `app/tsconfig.json` - TypeScript compiler configuration.
|
||||
- **CI/CD Pipeline:**
|
||||
- `.github/workflows/validate-meta.yml` - Validates meta.json structure, duplicates, and sort order.
|
||||
- `.github/workflows/build-preview.yml` - Builds preview deployments for PRs.
|
||||
- `.github/workflows/deploy-preview.yml` - Deploys previews to Cloudflare Pages.
|
||||
|
||||
## 6. Development & Testing Workflow
|
||||
|
||||
- **Local Development Environment:**
|
||||
- **Install dependencies**
|
||||
|
||||
```bash
|
||||
# Root project
|
||||
npm install
|
||||
|
||||
# Frontend (uses pnpm)
|
||||
cd app && pnpm install
|
||||
```
|
||||
|
||||
- **Process meta.json** (CRITICAL: Run after ANY meta.json edits)
|
||||
```bash
|
||||
npm run process-meta
|
||||
# or
|
||||
make process-meta
|
||||
# or
|
||||
node dedupe-and-sort-meta.js
|
||||
```
|
||||
- **Validate without modifying**
|
||||
```bash
|
||||
npm run validate-meta
|
||||
# or
|
||||
make validate
|
||||
```
|
||||
- **Quick check for duplicates/sort status**
|
||||
```bash
|
||||
make check
|
||||
```
|
||||
- **Clean backup files**
|
||||
```bash
|
||||
make clean
|
||||
```
|
||||
- **Task Configuration:**
|
||||
- **NPM Scripts:** Run `npm run` to list available scripts. Key scripts:
|
||||
- `process-meta`: Remove duplicates and sort meta.json
|
||||
- `process-meta-verbose`: Process with detailed output
|
||||
- `validate-meta`: Validate structure without changes
|
||||
- **Makefile Targets:** Run `make help` to list targets. Key targets:
|
||||
- `process-meta`: Process meta.json
|
||||
- `validate`: Validate without modifying
|
||||
- `check`: Quick duplicate/sort check
|
||||
- `build`: Full build process
|
||||
- `clean`: Remove backup files
|
||||
- **Testing:** No formal unit testing framework. Validation occurs through:
|
||||
- Script-based validation of meta.json structure and schema
|
||||
- Manual testing via Dokploy preview deployments (import base64 from PR preview)
|
||||
- JSON schema validation in `build-scripts/process-meta.js`
|
||||
- TypeScript compilation errors caught during build
|
||||
- ESLint for code quality in frontend
|
||||
- **CI/CD Process:**
|
||||
- **On meta.json changes:** Validates structure, checks for duplicates, verifies sort order, compares processed vs original.
|
||||
- **On PR creation:** Builds preview deployment, generates base64 import for testing in Dokploy.
|
||||
- **Preview testing:** Use PR description link → Search template → Copy base64 → Import in Dokploy instance.
|
||||
|
||||
## 7. Specific Instructions for AI Collaboration
|
||||
|
||||
- **Contribution Guidelines:**
|
||||
- Follow existing Dokploy template structure strictly. Each blueprint must be independent with no shared state.
|
||||
- **CRITICAL:** Always run `node dedupe-and-sort-meta.js` or `npm run process-meta` after ANY meta.json edits.
|
||||
- Test templates in Dokploy preview before submitting PRs (use base64 import from PR preview).
|
||||
- Add logo file (SVG preferred, ~128x128px) to blueprint folder.
|
||||
- Ensure template `id` in meta.json exactly matches blueprint folder name (lowercase kebab-case).
|
||||
- **Docker Compose Conventions (CRITICAL):**
|
||||
|
||||
- **Version:** MUST be `3.8`
|
||||
- **NEVER include:** `ports` (use `expose` only), `container_name`, `networks` (Dokploy handles isolation)
|
||||
- **ALWAYS include:** `restart: unless-stopped` or `restart: always`, persistent volumes
|
||||
- **Service naming:** MUST match blueprint folder name exactly
|
||||
- **Example:**
|
||||
```yaml
|
||||
version: "3.8"
|
||||
services:
|
||||
ghost:
|
||||
image: ghost:6-alpine
|
||||
restart: always
|
||||
volumes:
|
||||
- ghost:/var/lib/ghost/content
|
||||
volumes:
|
||||
ghost:
|
||||
```
|
||||
|
||||
- **template.toml Conventions:**
|
||||
|
||||
- **Variables:** Define in `[variables]` section, use helpers for secrets
|
||||
- **Domains:** `[[config.domains]]` with `serviceName`, `port`, `host` (path optional)
|
||||
- **Env:** Array of strings: `env = ["KEY=VALUE", "DB_PASSWORD=${db_pass}"]`
|
||||
- **Available helpers:** `${domain}`, `${password:length}`, `${base64:length}`, `${hash:length}`, `${uuid}`, `${randomPort}`, `${email}`, `${username}`, `${timestamp}`, `${timestamps:datetime}`, `${timestampms:datetime}`, `${jwt:secret_var:payload_var}`
|
||||
- **JWT helper example:** `${jwt:mysecret:mypayload}` with payload containing `exp: ${timestamps:2030-01-01T00:00:00Z}`
|
||||
- **Volume bind mounts (in docker-compose.yml):** When mounting host paths, do NOT use absolute paths like `"/folder:/path/in/container"`. Use relative paths instead:
|
||||
```yaml
|
||||
# Invalid
|
||||
volumes:
|
||||
- "/folder:/path/in/container" ❌
|
||||
# Valid
|
||||
volumes:
|
||||
- "../files/my-database:/var/lib/mysql" ✅
|
||||
- "../files/my-configs:/etc/my-app/config" ✅
|
||||
```
|
||||
|
||||
- **meta.json Requirements:**
|
||||
|
||||
- **Required fields:** `id`, `name`, `version`, `description`, `links` (with `github`), `logo`, `tags` (array)
|
||||
- **Tags:** Lowercase strings (e.g., `["monitoring", "database"]`)
|
||||
- **Version:** MUST match Docker image version in docker-compose.yml
|
||||
- **Logo:** Filename only (e.g., `"ghost.jpeg"`), file must exist in blueprint folder
|
||||
|
||||
- **Frontend Development:**
|
||||
|
||||
- Use TypeScript with strict type checking
|
||||
- Follow React hooks patterns, avoid class components
|
||||
- Use Zustand selectors for state access to optimize re-renders
|
||||
- Fuse.js searches across `name`, `description`, `tags`, `id` fields
|
||||
- Use shadcn/ui components for consistency
|
||||
- Sync URL params with search state via React Router
|
||||
|
||||
- **Security:**
|
||||
|
||||
- Be mindful of security when handling template configurations
|
||||
- NEVER hardcode secrets in templates - use Dokploy's variable system with helpers
|
||||
- Pin Docker images to specific versions to avoid supply chain attacks
|
||||
- Validate user input in frontend before processing
|
||||
|
||||
- **Dependencies:**
|
||||
|
||||
- When adding new templates, ensure Docker images are pinned to specific versions
|
||||
- Update meta.json with exact version matching Docker Compose image version
|
||||
- For frontend dependencies: Use `pnpm add <package>` in `app/` directory
|
||||
- For root dependencies: Use `npm install <package>` in root directory
|
||||
|
||||
- **Commit Messages:** Follow conventional commit patterns (e.g., `feat:`, `fix:`, `docs:`, `chore:`).
|
||||
|
||||
- **Common Pitfalls to Avoid:**
|
||||
1. Forgetting to process meta.json after editing (CI will fail)
|
||||
2. Template ID mismatch between meta.json and folder name
|
||||
3. Including `ports`, `container_name`, or `networks` in docker-compose.yml
|
||||
4. Using object syntax for env vars in template.toml (must be array of strings)
|
||||
5. Logo file missing or filename mismatch in meta.json
|
||||
6. Version mismatch between meta.json and docker-compose.yml image tag
|
||||
@@ -20,11 +20,6 @@ This project adheres to the [Contributor Covenant Code of Conduct](https://www.c
|
||||
|
||||
For larger changes or questions, open an issue first to discuss your ideas.
|
||||
|
||||
### Pull Request Guidelines
|
||||
|
||||
- **Keep PRs small and focused.** Avoid very large PRs; prefer several smaller PRs (e.g., one template or one logical change per PR). This speeds up review and keeps the history clear.
|
||||
- **Test before submitting.** Any PR that has not been tested by the contributor will be closed. This keeps the PR queue tidy and ensures that only contributions that have been verified by their authors are considered.
|
||||
|
||||
## Adding a New Template
|
||||
|
||||
To add a new template, follow these steps:
|
||||
@@ -153,6 +148,7 @@ Use these in `${}` for dynamic values:
|
||||
|
||||
- Omit explicit ports; let Dokploy handle exposure.
|
||||
- Use persistent volumes for data (e.g., databases).
|
||||
- Set `restart: unless-stopped` for services.
|
||||
|
||||
- **Template.toml**:
|
||||
|
||||
|
||||
@@ -170,7 +170,7 @@ We have a few helpers that are very common when creating a template, these are:
|
||||
|
||||
|
||||
|
||||
## General Requirements when creating a template
|
||||
## General Suggestions when creating a template
|
||||
|
||||
- Don't use this way in your docker compose file:
|
||||
|
||||
@@ -225,4 +225,4 @@ services:
|
||||
6. Now you can click on the Deploy Button and wait for the deployment to finish, and try to access to the service, if everything is correct you should access to the service and see the template working.
|
||||
|
||||
|
||||
use the command `node dedupe-and-sort-meta.js` to deduplicate and sort the meta.json file.
|
||||
use the command `node dedupe-and-sort-meta.js` to deduplicate and sort the meta.json file.
|
||||
@@ -9,7 +9,6 @@ services:
|
||||
- ACKEE_USERNAME=${ACKEE_USERNAME}
|
||||
- ACKEE_PASSWORD=${ACKEE_PASSWORD}
|
||||
- ACKEE_MONGODB=${ACKEE_MONGODB}
|
||||
|
||||
mongo:
|
||||
image: mongo:4
|
||||
environment:
|
||||
@@ -18,7 +17,6 @@ services:
|
||||
volumes:
|
||||
- mongo-data:/data/db
|
||||
|
||||
|
||||
volumes:
|
||||
mongo-data:
|
||||
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
|
||||
## Instructions
|
||||
|
||||
We don't have nothing to show here....
|
||||
@@ -10,7 +10,6 @@ serviceName = "ackee"
|
||||
port = 3000
|
||||
host = "${domain}"
|
||||
|
||||
|
||||
[config.env]
|
||||
ACKEE_USERNAME = "${ACKEE_USERNAME}"
|
||||
ACKEE_PASSWORD = "${ACKEE_PASSWORD}"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
version: '3.3'
|
||||
services:
|
||||
alist:
|
||||
image: xhofe/alist:v3.55.0
|
||||
image: xhofe/alist:v3.41.0
|
||||
volumes:
|
||||
- alist-data:/opt/alist/data
|
||||
environment:
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
# Example: Any-Sync-Bundle with embedded MongoDB and Redis (all-in-one image)
|
||||
#
|
||||
# Usage:
|
||||
# docker compose -f compose.aio.yml up -d
|
||||
#
|
||||
# The bundle image already contains MongoDB and Redis. Only the bundle service is required
|
||||
|
||||
services:
|
||||
any-sync-bundle:
|
||||
image: ghcr.io/grishy/any-sync-bundle:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "33010:33010"
|
||||
- "33020:33020/udp"
|
||||
volumes:
|
||||
- ./data:/data
|
||||
environment:
|
||||
# Advertise addresses clients should use. Replace with your server hostname/IP.
|
||||
ANY_SYNC_BUNDLE_INIT_EXTERNAL_ADDRS: "192.168.100.9"
|
||||
|
Before Width: | Height: | Size: 50 KiB |
@@ -1,4 +0,0 @@
|
||||
[config]
|
||||
domains = []
|
||||
mounts = []
|
||||
env = []
|
||||
@@ -1,10 +1,6 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
appsmith:
|
||||
image: appsmith/appsmith-ee:v1.94
|
||||
image: index.docker.io/appsmith/appsmith-ee:v1.29
|
||||
volumes:
|
||||
- appsmith-data:/appsmith-stacks
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
appsmith-data:
|
||||
- ../files/stacks:/appsmith-stacks
|
||||
|
||||
@@ -6,32 +6,31 @@ x-logging: &x-logging
|
||||
options:
|
||||
max-file: "5"
|
||||
max-size: "10m"
|
||||
|
||||
services:
|
||||
appwrite:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
image: appwrite/appwrite:1.6.1
|
||||
container_name: appwrite
|
||||
<<: *x-logging
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.constraint-label-stack=appwrite
|
||||
volumes:
|
||||
- appwrite-uploads:/storage/uploads:rw
|
||||
- appwrite-imports:/storage/imports:rw
|
||||
- appwrite-cache:/storage/cache:rw
|
||||
- appwrite-config:/storage/config:rw
|
||||
- appwrite-certificates:/storage/certificates:rw
|
||||
- appwrite-functions:/storage/functions:rw
|
||||
- appwrite-sites:/storage/sites:rw
|
||||
- appwrite-builds:/storage/builds:rw
|
||||
depends_on:
|
||||
- mariadb
|
||||
- redis
|
||||
# - clamav
|
||||
environment:
|
||||
- _APP_ENV
|
||||
- _APP_WORKER_PER_CORE
|
||||
- _APP_LOCALE
|
||||
- _APP_COMPRESSION_MIN_SIZE_BYTES
|
||||
- _APP_CONSOLE_WHITELIST_ROOT
|
||||
- _APP_CONSOLE_WHITELIST_EMAILS
|
||||
- _APP_CONSOLE_SESSION_ALERTS
|
||||
@@ -44,14 +43,10 @@ services:
|
||||
- _APP_OPTIONS_ABUSE
|
||||
- _APP_OPTIONS_ROUTER_PROTECTION
|
||||
- _APP_OPTIONS_FORCE_HTTPS
|
||||
- _APP_OPTIONS_ROUTER_FORCE_HTTPS
|
||||
- _APP_OPTIONS_FUNCTIONS_FORCE_HTTPS
|
||||
- _APP_OPENSSL_KEY_V1
|
||||
- _APP_DOMAIN
|
||||
- _APP_DOMAIN_TARGET_CNAME
|
||||
- _APP_DOMAIN_TARGET_AAAA
|
||||
- _APP_DOMAIN_TARGET_A
|
||||
- _APP_DOMAIN_TARGET_CAA
|
||||
- _APP_DNS
|
||||
- _APP_DOMAIN_TARGET
|
||||
- _APP_DOMAIN_FUNCTIONS
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
@@ -78,7 +73,6 @@ services:
|
||||
- _APP_STORAGE_S3_SECRET
|
||||
- _APP_STORAGE_S3_REGION
|
||||
- _APP_STORAGE_S3_BUCKET
|
||||
- _APP_STORAGE_S3_ENDPOINT
|
||||
- _APP_STORAGE_DO_SPACES_ACCESS_KEY
|
||||
- _APP_STORAGE_DO_SPACES_SECRET
|
||||
- _APP_STORAGE_DO_SPACES_REGION
|
||||
@@ -95,26 +89,21 @@ services:
|
||||
- _APP_STORAGE_WASABI_SECRET
|
||||
- _APP_STORAGE_WASABI_REGION
|
||||
- _APP_STORAGE_WASABI_BUCKET
|
||||
- _APP_COMPUTE_SIZE_LIMIT
|
||||
- _APP_FUNCTIONS_SIZE_LIMIT
|
||||
- _APP_FUNCTIONS_TIMEOUT
|
||||
- _APP_SITES_TIMEOUT
|
||||
- _APP_COMPUTE_BUILD_TIMEOUT
|
||||
- _APP_COMPUTE_CPUS
|
||||
- _APP_COMPUTE_MEMORY
|
||||
- _APP_FUNCTIONS_BUILD_TIMEOUT
|
||||
- _APP_FUNCTIONS_CPUS
|
||||
- _APP_FUNCTIONS_MEMORY
|
||||
- _APP_FUNCTIONS_RUNTIMES
|
||||
- _APP_SITES_RUNTIMES
|
||||
- _APP_DOMAIN_SITES
|
||||
- _APP_EXECUTOR_SECRET
|
||||
- _APP_EXECUTOR_HOST
|
||||
- _APP_LOGGING_CONFIG
|
||||
- _APP_MAINTENANCE_INTERVAL
|
||||
- _APP_MAINTENANCE_DELAY
|
||||
- _APP_MAINTENANCE_START_TIME
|
||||
- _APP_MAINTENANCE_RETENTION_EXECUTION
|
||||
- _APP_MAINTENANCE_RETENTION_CACHE
|
||||
- _APP_MAINTENANCE_RETENTION_ABUSE
|
||||
- _APP_MAINTENANCE_RETENTION_AUDIT
|
||||
- _APP_MAINTENANCE_RETENTION_AUDIT_CONSOLE
|
||||
- _APP_MAINTENANCE_RETENTION_USAGE_HOURLY
|
||||
- _APP_MAINTENANCE_RETENTION_SCHEDULES
|
||||
- _APP_SMS_PROVIDER
|
||||
@@ -131,25 +120,94 @@ services:
|
||||
- _APP_MIGRATIONS_FIREBASE_CLIENT_ID
|
||||
- _APP_MIGRATIONS_FIREBASE_CLIENT_SECRET
|
||||
- _APP_ASSISTANT_OPENAI_API_KEY
|
||||
|
||||
appwrite-console:
|
||||
image: appwrite/console:5.0.12
|
||||
container_name: appwrite-console
|
||||
<<: *x-logging
|
||||
image: appwrite/console:7.4.7
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.constraint-label-stack=appwrite"
|
||||
environment:
|
||||
- _APP_ENV
|
||||
- _APP_WORKER_PER_CORE
|
||||
- _APP_LOCALE
|
||||
- _APP_CONSOLE_WHITELIST_ROOT
|
||||
- _APP_CONSOLE_WHITELIST_EMAILS
|
||||
- _APP_CONSOLE_SESSION_ALERTS
|
||||
- _APP_CONSOLE_WHITELIST_IPS
|
||||
- _APP_CONSOLE_HOSTNAMES
|
||||
- _APP_SYSTEM_EMAIL_NAME
|
||||
- _APP_SYSTEM_EMAIL_ADDRESS
|
||||
- _APP_EMAIL_SECURITY
|
||||
- _APP_SYSTEM_RESPONSE_FORMAT
|
||||
- _APP_OPTIONS_ABUSE
|
||||
- _APP_OPTIONS_ROUTER_PROTECTION
|
||||
- _APP_OPTIONS_FORCE_HTTPS
|
||||
- _APP_OPTIONS_FUNCTIONS_FORCE_HTTPS
|
||||
- _APP_OPENSSL_KEY_V1
|
||||
- _APP_DOMAIN
|
||||
- _APP_DOMAIN_TARGET
|
||||
- _APP_DOMAIN_FUNCTIONS
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_DB_HOST
|
||||
- _APP_DB_PORT
|
||||
- _APP_DB_SCHEMA
|
||||
- _APP_DB_USER
|
||||
- _APP_DB_PASS
|
||||
- _APP_SMTP_HOST
|
||||
- _APP_SMTP_PORT
|
||||
- _APP_SMTP_SECURE
|
||||
- _APP_SMTP_USERNAME
|
||||
- _APP_SMTP_PASSWORD
|
||||
- _APP_USAGE_STATS
|
||||
- _APP_STORAGE_LIMIT
|
||||
- _APP_STORAGE_PREVIEW_LIMIT
|
||||
- _APP_STORAGE_ANTIVIRUS
|
||||
- _APP_STORAGE_ANTIVIRUS_HOST
|
||||
- _APP_STORAGE_ANTIVIRUS_PORT
|
||||
- _APP_STORAGE_DEVICE
|
||||
- _APP_STORAGE_S3_ACCESS_KEY
|
||||
- _APP_STORAGE_S3_SECRET
|
||||
- _APP_STORAGE_S3_REGION
|
||||
- _APP_STORAGE_S3_BUCKET
|
||||
- _APP_STORAGE_DO_SPACES_ACCESS_KEY
|
||||
- _APP_STORAGE_DO_SPACES_SECRET
|
||||
- _APP_STORAGE_DO_SPACES_REGION
|
||||
- _APP_STORAGE_DO_SPACES_BUCKET
|
||||
- _APP_STORAGE_BACKBLAZE_ACCESS_KEY
|
||||
- _APP_STORAGE_BACKBLAZE_SECRET
|
||||
- _APP_STORAGE_BACKBLAZE_REGION
|
||||
- _APP_STORAGE_BACKBLAZE_BUCKET
|
||||
- _APP_STORAGE_LINODE_ACCESS_KEY
|
||||
- _APP_STORAGE_LINODE_SECRET
|
||||
- _APP_STORAGE_LINODE_REGION
|
||||
- _APP_STORAGE_LINODE_BUCKET
|
||||
- _APP_STORAGE_WASABI_ACCESS_KEY
|
||||
- _APP_STORAGE_WASABI_SECRET
|
||||
- _APP_STORAGE_WASABI_REGION
|
||||
- _APP_STORAGE_WASABI_BUCKET
|
||||
|
||||
appwrite-realtime:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
image: appwrite/appwrite:1.6.1
|
||||
entrypoint: realtime
|
||||
container_name: appwrite-realtime
|
||||
<<: *x-logging
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.constraint-label-stack=appwrite"
|
||||
networks:
|
||||
- dokploy-network
|
||||
depends_on:
|
||||
- mariadb
|
||||
- redis
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.constraint-label-stack=appwrite"
|
||||
environment:
|
||||
- _APP_ENV
|
||||
- _APP_WORKER_PER_CORE
|
||||
@@ -169,10 +227,13 @@ services:
|
||||
- _APP_LOGGING_CONFIG
|
||||
|
||||
appwrite-worker-audits:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
image: appwrite/appwrite:1.6.1
|
||||
entrypoint: worker-audits
|
||||
<<: *x-logging
|
||||
container_name: appwrite-worker-audits
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
depends_on:
|
||||
- redis
|
||||
- mariadb
|
||||
@@ -192,10 +253,13 @@ services:
|
||||
- _APP_LOGGING_CONFIG
|
||||
|
||||
appwrite-worker-webhooks:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
image: appwrite/appwrite:1.6.1
|
||||
entrypoint: worker-webhooks
|
||||
<<: *x-logging
|
||||
container_name: appwrite-worker-webhooks
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
depends_on:
|
||||
- redis
|
||||
- mariadb
|
||||
@@ -217,10 +281,13 @@ services:
|
||||
- _APP_LOGGING_CONFIG
|
||||
|
||||
appwrite-worker-deletes:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
image: appwrite/appwrite:1.6.1
|
||||
entrypoint: worker-deletes
|
||||
<<: *x-logging
|
||||
container_name: appwrite-worker-deletes
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
depends_on:
|
||||
- redis
|
||||
- mariadb
|
||||
@@ -228,7 +295,6 @@ services:
|
||||
- appwrite-uploads:/storage/uploads:rw
|
||||
- appwrite-cache:/storage/cache:rw
|
||||
- appwrite-functions:/storage/functions:rw
|
||||
- appwrite-sites:/storage/sites:rw
|
||||
- appwrite-builds:/storage/builds:rw
|
||||
- appwrite-certificates:/storage/certificates:rw
|
||||
environment:
|
||||
@@ -249,7 +315,6 @@ services:
|
||||
- _APP_STORAGE_S3_SECRET
|
||||
- _APP_STORAGE_S3_REGION
|
||||
- _APP_STORAGE_S3_BUCKET
|
||||
- _APP_STORAGE_S3_ENDPOINT
|
||||
- _APP_STORAGE_DO_SPACES_ACCESS_KEY
|
||||
- _APP_STORAGE_DO_SPACES_SECRET
|
||||
- _APP_STORAGE_DO_SPACES_REGION
|
||||
@@ -271,16 +336,16 @@ services:
|
||||
- _APP_EXECUTOR_HOST
|
||||
- _APP_MAINTENANCE_RETENTION_ABUSE
|
||||
- _APP_MAINTENANCE_RETENTION_AUDIT
|
||||
- _APP_MAINTENANCE_RETENTION_AUDIT_CONSOLE
|
||||
- _APP_MAINTENANCE_RETENTION_EXECUTION
|
||||
- _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
|
||||
- _APP_EMAIL_CERTIFICATES
|
||||
|
||||
appwrite-worker-databases:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
image: appwrite/appwrite:1.6.1
|
||||
entrypoint: worker-databases
|
||||
<<: *x-logging
|
||||
container_name: appwrite-worker-databases
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
depends_on:
|
||||
- redis
|
||||
- mariadb
|
||||
@@ -300,18 +365,19 @@ services:
|
||||
- _APP_LOGGING_CONFIG
|
||||
|
||||
appwrite-worker-builds:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
image: appwrite/appwrite:1.6.1
|
||||
entrypoint: worker-builds
|
||||
<<: *x-logging
|
||||
container_name: appwrite-worker-builds
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
depends_on:
|
||||
- redis
|
||||
- mariadb
|
||||
volumes:
|
||||
- appwrite-functions:/storage/functions:rw
|
||||
- appwrite-sites:/storage/sites:rw
|
||||
- appwrite-builds:/storage/builds:rw
|
||||
- appwrite-uploads:/storage/uploads:rw
|
||||
environment:
|
||||
- _APP_ENV
|
||||
- _APP_WORKER_PER_CORE
|
||||
@@ -332,20 +398,18 @@ services:
|
||||
- _APP_VCS_GITHUB_PRIVATE_KEY
|
||||
- _APP_VCS_GITHUB_APP_ID
|
||||
- _APP_FUNCTIONS_TIMEOUT
|
||||
- _APP_SITES_TIMEOUT
|
||||
- _APP_COMPUTE_BUILD_TIMEOUT
|
||||
- _APP_COMPUTE_CPUS
|
||||
- _APP_COMPUTE_MEMORY
|
||||
- _APP_COMPUTE_SIZE_LIMIT
|
||||
- _APP_FUNCTIONS_BUILD_TIMEOUT
|
||||
- _APP_FUNCTIONS_CPUS
|
||||
- _APP_FUNCTIONS_MEMORY
|
||||
- _APP_FUNCTIONS_SIZE_LIMIT
|
||||
- _APP_OPTIONS_FORCE_HTTPS
|
||||
- _APP_OPTIONS_ROUTER_FORCE_HTTPS
|
||||
- _APP_OPTIONS_FUNCTIONS_FORCE_HTTPS
|
||||
- _APP_DOMAIN
|
||||
- _APP_STORAGE_DEVICE
|
||||
- _APP_STORAGE_S3_ACCESS_KEY
|
||||
- _APP_STORAGE_S3_SECRET
|
||||
- _APP_STORAGE_S3_REGION
|
||||
- _APP_STORAGE_S3_BUCKET
|
||||
- _APP_STORAGE_S3_ENDPOINT
|
||||
- _APP_STORAGE_DO_SPACES_ACCESS_KEY
|
||||
- _APP_STORAGE_DO_SPACES_SECRET
|
||||
- _APP_STORAGE_DO_SPACES_REGION
|
||||
@@ -362,13 +426,15 @@ services:
|
||||
- _APP_STORAGE_WASABI_SECRET
|
||||
- _APP_STORAGE_WASABI_REGION
|
||||
- _APP_STORAGE_WASABI_BUCKET
|
||||
- _APP_DOMAIN_SITES
|
||||
|
||||
appwrite-worker-certificates:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
image: appwrite/appwrite:1.6.1
|
||||
entrypoint: worker-certificates
|
||||
<<: *x-logging
|
||||
container_name: appwrite-worker-certificates
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
depends_on:
|
||||
- redis
|
||||
- mariadb
|
||||
@@ -380,11 +446,7 @@ services:
|
||||
- _APP_WORKER_PER_CORE
|
||||
- _APP_OPENSSL_KEY_V1
|
||||
- _APP_DOMAIN
|
||||
- _APP_DOMAIN_TARGET_CNAME
|
||||
- _APP_DOMAIN_TARGET_AAAA
|
||||
- _APP_DOMAIN_TARGET_A
|
||||
- _APP_DOMAIN_TARGET_CAA
|
||||
- _APP_DNS
|
||||
- _APP_DOMAIN_TARGET
|
||||
- _APP_DOMAIN_FUNCTIONS
|
||||
- _APP_EMAIL_CERTIFICATES
|
||||
- _APP_REDIS_HOST
|
||||
@@ -399,10 +461,13 @@ services:
|
||||
- _APP_LOGGING_CONFIG
|
||||
|
||||
appwrite-worker-functions:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
image: appwrite/appwrite:1.6.1
|
||||
entrypoint: worker-functions
|
||||
<<: *x-logging
|
||||
container_name: appwrite-worker-functions
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
depends_on:
|
||||
- redis
|
||||
- mariadb
|
||||
@@ -423,10 +488,9 @@ services:
|
||||
- _APP_DB_USER
|
||||
- _APP_DB_PASS
|
||||
- _APP_FUNCTIONS_TIMEOUT
|
||||
- _APP_SITES_TIMEOUT
|
||||
- _APP_COMPUTE_BUILD_TIMEOUT
|
||||
- _APP_COMPUTE_CPUS
|
||||
- _APP_COMPUTE_MEMORY
|
||||
- _APP_FUNCTIONS_BUILD_TIMEOUT
|
||||
- _APP_FUNCTIONS_CPUS
|
||||
- _APP_FUNCTIONS_MEMORY
|
||||
- _APP_EXECUTOR_SECRET
|
||||
- _APP_EXECUTOR_HOST
|
||||
- _APP_USAGE_STATS
|
||||
@@ -435,10 +499,13 @@ services:
|
||||
- _APP_LOGGING_CONFIG
|
||||
|
||||
appwrite-worker-mails:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
image: appwrite/appwrite:1.6.1
|
||||
entrypoint: worker-mails
|
||||
<<: *x-logging
|
||||
container_name: appwrite-worker-mails
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
depends_on:
|
||||
- redis
|
||||
environment:
|
||||
@@ -462,14 +529,15 @@ services:
|
||||
- _APP_SMTP_USERNAME
|
||||
- _APP_SMTP_PASSWORD
|
||||
- _APP_LOGGING_CONFIG
|
||||
- _APP_DOMAIN
|
||||
- _APP_OPTIONS_FORCE_HTTPS
|
||||
|
||||
appwrite-worker-messaging:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
image: appwrite/appwrite:1.6.1
|
||||
entrypoint: worker-messaging
|
||||
container_name: appwrite-worker-messaging
|
||||
<<: *x-logging
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
volumes:
|
||||
- appwrite-uploads:/storage/uploads:rw
|
||||
depends_on:
|
||||
@@ -495,7 +563,6 @@ services:
|
||||
- _APP_STORAGE_S3_SECRET
|
||||
- _APP_STORAGE_S3_REGION
|
||||
- _APP_STORAGE_S3_BUCKET
|
||||
- _APP_STORAGE_S3_ENDPOINT
|
||||
- _APP_STORAGE_DO_SPACES_ACCESS_KEY
|
||||
- _APP_STORAGE_DO_SPACES_SECRET
|
||||
- _APP_STORAGE_DO_SPACES_REGION
|
||||
@@ -514,12 +581,13 @@ services:
|
||||
- _APP_STORAGE_WASABI_BUCKET
|
||||
|
||||
appwrite-worker-migrations:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
image: appwrite/appwrite:1.6.1
|
||||
entrypoint: worker-migrations
|
||||
<<: *x-logging
|
||||
container_name: appwrite-worker-migrations
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- appwrite-imports:/storage/imports:rw
|
||||
networks:
|
||||
- dokploy-network
|
||||
depends_on:
|
||||
- mariadb
|
||||
environment:
|
||||
@@ -527,11 +595,7 @@ services:
|
||||
- _APP_WORKER_PER_CORE
|
||||
- _APP_OPENSSL_KEY_V1
|
||||
- _APP_DOMAIN
|
||||
- _APP_DOMAIN_TARGET_CNAME
|
||||
- _APP_DOMAIN_TARGET_AAAA
|
||||
- _APP_DOMAIN_TARGET_A
|
||||
- _APP_DOMAIN_TARGET_CAA
|
||||
- _APP_DNS
|
||||
- _APP_DOMAIN_TARGET
|
||||
- _APP_EMAIL_SECURITY
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
@@ -547,21 +611,20 @@ services:
|
||||
- _APP_MIGRATIONS_FIREBASE_CLIENT_SECRET
|
||||
|
||||
appwrite-task-maintenance:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
image: appwrite/appwrite:1.6.1
|
||||
entrypoint: maintenance
|
||||
<<: *x-logging
|
||||
container_name: appwrite-task-maintenance
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
depends_on:
|
||||
- redis
|
||||
environment:
|
||||
- _APP_ENV
|
||||
- _APP_WORKER_PER_CORE
|
||||
- _APP_DOMAIN
|
||||
- _APP_DOMAIN_TARGET_CNAME
|
||||
- _APP_DOMAIN_TARGET_AAAA
|
||||
- _APP_DOMAIN_TARGET_A
|
||||
- _APP_DOMAIN_TARGET_CAA
|
||||
- _APP_DNS
|
||||
- _APP_DOMAIN_TARGET
|
||||
- _APP_DOMAIN_FUNCTIONS
|
||||
- _APP_OPENSSL_KEY_V1
|
||||
- _APP_REDIS_HOST
|
||||
@@ -578,15 +641,17 @@ services:
|
||||
- _APP_MAINTENANCE_RETENTION_CACHE
|
||||
- _APP_MAINTENANCE_RETENTION_ABUSE
|
||||
- _APP_MAINTENANCE_RETENTION_AUDIT
|
||||
- _APP_MAINTENANCE_RETENTION_AUDIT_CONSOLE
|
||||
- _APP_MAINTENANCE_RETENTION_USAGE_HOURLY
|
||||
- _APP_MAINTENANCE_RETENTION_SCHEDULES
|
||||
|
||||
appwrite-task-stats-resources:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
entrypoint: stats-resources
|
||||
appwrite-worker-usage:
|
||||
image: appwrite/appwrite:1.6.1
|
||||
entrypoint: worker-usage
|
||||
container_name: appwrite-worker-usage
|
||||
<<: *x-logging
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
depends_on:
|
||||
- redis
|
||||
- mariadb
|
||||
@@ -605,39 +670,15 @@ services:
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_USAGE_STATS
|
||||
- _APP_LOGGING_CONFIG
|
||||
- _APP_DATABASE_SHARED_TABLES
|
||||
- _APP_STATS_RESOURCES_INTERVAL
|
||||
- _APP_USAGE_AGGREGATION_INTERVAL
|
||||
|
||||
appwrite-worker-stats-resources:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
entrypoint: worker-stats-resources
|
||||
appwrite-worker-usage-dump:
|
||||
image: appwrite/appwrite:1.6.1
|
||||
entrypoint: worker-usage-dump
|
||||
container_name: appwrite-worker-usage-dump
|
||||
<<: *x-logging
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- redis
|
||||
- mariadb
|
||||
environment:
|
||||
- _APP_ENV
|
||||
- _APP_WORKER_PER_CORE
|
||||
- _APP_OPENSSL_KEY_V1
|
||||
- _APP_DB_HOST
|
||||
- _APP_DB_PORT
|
||||
- _APP_DB_SCHEMA
|
||||
- _APP_DB_USER
|
||||
- _APP_DB_PASS
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_USAGE_STATS
|
||||
- _APP_LOGGING_CONFIG
|
||||
- _APP_STATS_RESOURCES_INTERVAL
|
||||
|
||||
appwrite-worker-stats-usage:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
entrypoint: worker-stats-usage
|
||||
<<: *x-logging
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
depends_on:
|
||||
- redis
|
||||
- mariadb
|
||||
@@ -659,10 +700,13 @@ services:
|
||||
- _APP_USAGE_AGGREGATION_INTERVAL
|
||||
|
||||
appwrite-task-scheduler-functions:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
image: appwrite/appwrite:1.6.1
|
||||
entrypoint: schedule-functions
|
||||
container_name: appwrite-task-scheduler-functions
|
||||
<<: *x-logging
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
depends_on:
|
||||
- mariadb
|
||||
- redis
|
||||
@@ -681,10 +725,13 @@ services:
|
||||
- _APP_DB_PASS
|
||||
|
||||
appwrite-task-scheduler-executions:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
image: appwrite/appwrite:1.6.1
|
||||
entrypoint: schedule-executions
|
||||
container_name: appwrite-task-scheduler-executions
|
||||
<<: *x-logging
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
depends_on:
|
||||
- mariadb
|
||||
- redis
|
||||
@@ -703,10 +750,13 @@ services:
|
||||
- _APP_DB_PASS
|
||||
|
||||
appwrite-task-scheduler-messages:
|
||||
image: appwrite/appwrite:1.8.0
|
||||
image: appwrite/appwrite:1.6.1
|
||||
entrypoint: schedule-messages
|
||||
container_name: appwrite-task-scheduler-messages
|
||||
<<: *x-logging
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
depends_on:
|
||||
- mariadb
|
||||
- redis
|
||||
@@ -725,48 +775,44 @@ services:
|
||||
- _APP_DB_PASS
|
||||
|
||||
appwrite-assistant:
|
||||
image: appwrite/assistant:0.8.3
|
||||
image: appwrite/assistant:0.4.0
|
||||
container_name: appwrite-assistant
|
||||
<<: *x-logging
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
environment:
|
||||
- _APP_ASSISTANT_OPENAI_API_KEY
|
||||
|
||||
appwrite-browser:
|
||||
image: appwrite/browser:0.2.4
|
||||
<<: *x-logging
|
||||
restart: unless-stopped
|
||||
|
||||
openruntimes-executor:
|
||||
container_name: openruntimes-executor
|
||||
hostname: exc1
|
||||
<<: *x-logging
|
||||
restart: unless-stopped
|
||||
stop_signal: SIGINT
|
||||
image: openruntimes/executor:0.7.22
|
||||
image: openruntimes/executor:0.6.11
|
||||
networks:
|
||||
- dokploy-network
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- appwrite-builds:/storage/builds:rw
|
||||
- appwrite-functions:/storage/functions:rw
|
||||
- appwrite-sites:/storage/sites:rw
|
||||
# Host mount necessary to share files between executor and runtimes.
|
||||
# It's not possible to share mount file between 2 containers without host mount (copying is too slow)
|
||||
- /tmp:/tmp:rw
|
||||
environment:
|
||||
- OPR_EXECUTOR_INACTIVE_TRESHOLD=$_APP_COMPUTE_INACTIVE_THRESHOLD
|
||||
- OPR_EXECUTOR_MAINTENANCE_INTERVAL=$_APP_COMPUTE_MAINTENANCE_INTERVAL
|
||||
- OPR_EXECUTOR_NETWORK=$_APP_COMPUTE_RUNTIMES_NETWORK
|
||||
- OPR_EXECUTOR_INACTIVE_TRESHOLD=$_APP_FUNCTIONS_INACTIVE_THRESHOLD
|
||||
- OPR_EXECUTOR_MAINTENANCE_INTERVAL=$_APP_FUNCTIONS_MAINTENANCE_INTERVAL
|
||||
- OPR_EXECUTOR_NETWORK=$_APP_FUNCTIONS_RUNTIMES_NETWORK
|
||||
- OPR_EXECUTOR_DOCKER_HUB_USERNAME=$_APP_DOCKER_HUB_USERNAME
|
||||
- OPR_EXECUTOR_DOCKER_HUB_PASSWORD=$_APP_DOCKER_HUB_PASSWORD
|
||||
- OPR_EXECUTOR_ENV=$_APP_ENV
|
||||
- OPR_EXECUTOR_RUNTIMES=$_APP_FUNCTIONS_RUNTIMES,$_APP_SITES_RUNTIMES
|
||||
- OPR_EXECUTOR_RUNTIMES=$_APP_FUNCTIONS_RUNTIMES
|
||||
- OPR_EXECUTOR_SECRET=$_APP_EXECUTOR_SECRET
|
||||
- OPR_EXECUTOR_RUNTIME_VERSIONS=v5
|
||||
- OPR_EXECUTOR_LOGGING_CONFIG=$_APP_LOGGING_CONFIG
|
||||
- OPR_EXECUTOR_STORAGE_DEVICE=$_APP_STORAGE_DEVICE
|
||||
- OPR_EXECUTOR_STORAGE_S3_ACCESS_KEY=$_APP_STORAGE_S3_ACCESS_KEY
|
||||
- OPR_EXECUTOR_STORAGE_S3_SECRET=$_APP_STORAGE_S3_SECRET
|
||||
- OPR_EXECUTOR_STORAGE_S3_REGION=$_APP_STORAGE_S3_REGION
|
||||
- OPR_EXECUTOR_STORAGE_S3_BUCKET=$_APP_STORAGE_S3_BUCKET
|
||||
- OPR_EXECUTOR_STORAGE_S3_ENDPOINT=$_APP_STORAGE_S3_ENDPOINT
|
||||
- OPR_EXECUTOR_STORAGE_DO_SPACES_ACCESS_KEY=$_APP_STORAGE_DO_SPACES_ACCESS_KEY
|
||||
- OPR_EXECUTOR_STORAGE_DO_SPACES_SECRET=$_APP_STORAGE_DO_SPACES_SECRET
|
||||
- OPR_EXECUTOR_STORAGE_DO_SPACES_REGION=$_APP_STORAGE_DO_SPACES_REGION
|
||||
@@ -785,9 +831,12 @@ services:
|
||||
- OPR_EXECUTOR_STORAGE_WASABI_BUCKET=$_APP_STORAGE_WASABI_BUCKET
|
||||
|
||||
mariadb:
|
||||
image: mariadb:10.11 # fix issues when upgrading using: mysql_upgrade -u root -p
|
||||
image: mariadb:10.11
|
||||
container_name: appwrite-mariadb
|
||||
<<: *x-logging
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dokploy-network
|
||||
volumes:
|
||||
- appwrite-mariadb:/var/lib/mysql:rw
|
||||
environment:
|
||||
@@ -800,30 +849,39 @@ services:
|
||||
|
||||
redis:
|
||||
image: redis:7.2.4-alpine
|
||||
container_name: appwrite-redis
|
||||
<<: *x-logging
|
||||
restart: unless-stopped
|
||||
command: >
|
||||
redis-server
|
||||
--maxmemory 512mb
|
||||
--maxmemory-policy allkeys-lru
|
||||
--maxmemory-samples 5
|
||||
--maxmemory 512mb
|
||||
--maxmemory-policy allkeys-lru
|
||||
--maxmemory-samples 5
|
||||
networks:
|
||||
- dokploy-network
|
||||
volumes:
|
||||
- appwrite-redis:/data:rw
|
||||
|
||||
# clamav:
|
||||
# image: appwrite/clamav:1.2.0
|
||||
# restart: unless-stopped
|
||||
# volumes:
|
||||
# - appwrite-uploads:/storage/uploads
|
||||
# Uncomment and configure if ClamAV is needed
|
||||
# clamav:
|
||||
# image: appwrite/clamav:1.2.0
|
||||
# container_name: appwrite-clamav
|
||||
# restart: unless-stopped
|
||||
# networks:
|
||||
# - dokploy-network
|
||||
# volumes:
|
||||
# - appwrite-uploads:/storage/uploads
|
||||
|
||||
volumes:
|
||||
appwrite-mariadb:
|
||||
appwrite-redis:
|
||||
appwrite-cache:
|
||||
appwrite-uploads:
|
||||
appwrite-imports:
|
||||
appwrite-certificates:
|
||||
appwrite-functions:
|
||||
appwrite-sites:
|
||||
appwrite-builds:
|
||||
appwrite-config:
|
||||
|
||||
networks:
|
||||
dokploy-network:
|
||||
external: true
|
||||
|
||||
@@ -1,11 +1,5 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
functions_domain = "functions.${main_domain}"
|
||||
sites_domain = "sites.${main_domain}"
|
||||
openssl_key = "${password:32}"
|
||||
db_root_pw = "${password:32}"
|
||||
db_user_pw = "${password:32}"
|
||||
executor_secret = "${password:32}"
|
||||
|
||||
[config]
|
||||
env = [
|
||||
@@ -14,19 +8,11 @@ env = [
|
||||
"_APP_OPTIONS_ABUSE=enabled",
|
||||
"_APP_OPTIONS_FORCE_HTTPS=disabled",
|
||||
"_APP_OPTIONS_FUNCTIONS_FORCE_HTTPS=disabled",
|
||||
"_APP_OPTIONS_ROUTER_FORCE_HTTPS=disabled",
|
||||
"_APP_OPTIONS_ROUTER_PROTECTION=disabled",
|
||||
"_APP_OPENSSL_KEY_V1=${openssl_key}",
|
||||
"_APP_OPENSSL_KEY_V1=your-secret-key",
|
||||
"_APP_DOMAIN=${main_domain}",
|
||||
"_APP_CUSTOM_DOMAIN_DENY_LIST=example.com,test.com,app.example.com",
|
||||
"_APP_DOMAIN_FUNCTIONS=${functions_domain}",
|
||||
"_APP_DOMAIN_SITES=${sites_domain}",
|
||||
"_APP_DOMAIN_TARGET=localhost",
|
||||
"_APP_DOMAIN_TARGET_CNAME=localhost",
|
||||
"_APP_DOMAIN_TARGET_AAAA=::1",
|
||||
"_APP_DOMAIN_TARGET_A=127.0.0.1",
|
||||
"_APP_DOMAIN_TARGET_CAA=",
|
||||
"_APP_DNS=8.8.8.8",
|
||||
"_APP_DOMAIN_FUNCTIONS=${main_domain}",
|
||||
"_APP_DOMAIN_TARGET=${main_domain}",
|
||||
"_APP_CONSOLE_WHITELIST_ROOT=enabled",
|
||||
"_APP_CONSOLE_WHITELIST_EMAILS=",
|
||||
"_APP_CONSOLE_WHITELIST_IPS=",
|
||||
@@ -46,8 +32,6 @@ env = [
|
||||
"_APP_USAGE_DATABASE_INTERVAL=900",
|
||||
"_APP_WORKER_PER_CORE=6",
|
||||
"_APP_CONSOLE_SESSION_ALERTS=disabled",
|
||||
"_APP_COMPRESSION_ENABLED=enabled",
|
||||
"_APP_COMPRESSION_MIN_SIZE_BYTES=1024",
|
||||
"_APP_REDIS_HOST=redis",
|
||||
"_APP_REDIS_PORT=6379",
|
||||
"_APP_REDIS_USER=",
|
||||
@@ -56,8 +40,8 @@ env = [
|
||||
"_APP_DB_PORT=3306",
|
||||
"_APP_DB_SCHEMA=appwrite",
|
||||
"_APP_DB_USER=user",
|
||||
"_APP_DB_PASS=${db_user_pw}",
|
||||
"_APP_DB_ROOT_PASS=${db_root_pw}",
|
||||
"_APP_DB_PASS=password",
|
||||
"_APP_DB_ROOT_PASS=rootsecretpassword",
|
||||
"_APP_INFLUXDB_HOST=influxdb",
|
||||
"_APP_INFLUXDB_PORT=8086",
|
||||
"_APP_STATSD_HOST=telegraf",
|
||||
@@ -79,7 +63,6 @@ env = [
|
||||
"_APP_STORAGE_S3_SECRET=",
|
||||
"_APP_STORAGE_S3_REGION=us-east-1",
|
||||
"_APP_STORAGE_S3_BUCKET=",
|
||||
"_APP_STORAGE_S3_ENDPOINT=",
|
||||
"_APP_STORAGE_DO_SPACES_ACCESS_KEY=",
|
||||
"_APP_STORAGE_DO_SPACES_SECRET=",
|
||||
"_APP_STORAGE_DO_SPACES_REGION=us-east-1",
|
||||
@@ -97,36 +80,27 @@ env = [
|
||||
"_APP_STORAGE_WASABI_REGION=eu-central-1",
|
||||
"_APP_STORAGE_WASABI_BUCKET=",
|
||||
"_APP_FUNCTIONS_SIZE_LIMIT=30000000",
|
||||
"_APP_COMPUTE_SIZE_LIMIT=30000000",
|
||||
"_APP_FUNCTIONS_BUILD_SIZE_LIMIT=2000000000",
|
||||
"_APP_FUNCTIONS_TIMEOUT=900",
|
||||
"_APP_FUNCTIONS_BUILD_TIMEOUT=900",
|
||||
"_APP_COMPUTE_BUILD_TIMEOUT=900",
|
||||
"_APP_FUNCTIONS_CONTAINERS=10",
|
||||
"_APP_FUNCTIONS_CPUS=0",
|
||||
"_APP_COMPUTE_CPUS=0",
|
||||
"_APP_FUNCTIONS_MEMORY=0",
|
||||
"_APP_COMPUTE_MEMORY=0",
|
||||
"_APP_FUNCTIONS_MEMORY_SWAP=0",
|
||||
"_APP_FUNCTIONS_RUNTIMES=node-16.0,php-8.0,python-3.9,ruby-3.0",
|
||||
"_APP_EXECUTOR_SECRET=${executor_secret}",
|
||||
"_APP_EXECUTOR_SECRET=your-secret-key",
|
||||
"_APP_EXECUTOR_HOST=http://exc1/v1",
|
||||
"_APP_EXECUTOR_RUNTIME_NETWORK=appwrite_runtimes",
|
||||
"_APP_FUNCTIONS_ENVS=node-16.0,php-7.4,python-3.9,ruby-3.0",
|
||||
"_APP_FUNCTIONS_INACTIVE_THRESHOLD=60",
|
||||
"_APP_COMPUTE_INACTIVE_THRESHOLD=60",
|
||||
"DOCKERHUB_PULL_USERNAME=",
|
||||
"DOCKERHUB_PULL_PASSWORD=",
|
||||
"DOCKERHUB_PULL_EMAIL=",
|
||||
"OPEN_RUNTIMES_NETWORK=appwrite_runtimes",
|
||||
"_APP_FUNCTIONS_RUNTIMES_NETWORK=dokploy-network",
|
||||
"_APP_COMPUTE_RUNTIMES_NETWORK=dokploy-network",
|
||||
"_APP_FUNCTIONS_RUNTIMES_NETWORK=runtimes",
|
||||
"_APP_DOCKER_HUB_USERNAME=",
|
||||
"_APP_DOCKER_HUB_PASSWORD=",
|
||||
"_APP_FUNCTIONS_MAINTENANCE_INTERVAL=3600",
|
||||
"_APP_COMPUTE_MAINTENANCE_INTERVAL=3600",
|
||||
"_APP_SITES_TIMEOUT=900",
|
||||
"_APP_SITES_RUNTIMES=static-1,node-22,flutter-3.29",
|
||||
"_APP_VCS_GITHUB_APP_NAME=",
|
||||
"_APP_VCS_GITHUB_PRIVATE_KEY=",
|
||||
"_APP_VCS_GITHUB_APP_ID=",
|
||||
@@ -135,11 +109,9 @@ env = [
|
||||
"_APP_VCS_GITHUB_WEBHOOK_SECRET=",
|
||||
"_APP_MAINTENANCE_INTERVAL=86400",
|
||||
"_APP_MAINTENANCE_DELAY=0",
|
||||
"_APP_MAINTENANCE_START_TIME=00:00",
|
||||
"_APP_MAINTENANCE_RETENTION_CACHE=2592000",
|
||||
"_APP_MAINTENANCE_RETENTION_EXECUTION=1209600",
|
||||
"_APP_MAINTENANCE_RETENTION_AUDIT=1209600",
|
||||
"_APP_MAINTENANCE_RETENTION_AUDIT_CONSOLE=15778800",
|
||||
"_APP_MAINTENANCE_RETENTION_ABUSE=86400",
|
||||
"_APP_MAINTENANCE_RETENTION_USAGE_HOURLY=8640000",
|
||||
"_APP_MAINTENANCE_RETENTION_SCHEDULES=86400",
|
||||
@@ -158,18 +130,6 @@ port = 80
|
||||
host = "${main_domain}"
|
||||
path = "/"
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "appwrite"
|
||||
port = 80
|
||||
host = "${sites_domain}"
|
||||
path = "/"
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "appwrite"
|
||||
port = 80
|
||||
host = "${functions_domain}"
|
||||
path = "/"
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "appwrite-console"
|
||||
port = 80
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
autobase-console:
|
||||
image: autobase/console:2.5.2
|
||||
image: autobase/console:2.3.0
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80"
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
<svg width="600" height="530" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M135.72 44.03C202.216 93.951 273.74 195.17 300 249.49c26.262-54.316 97.782-155.54 164.28-205.46C512.26 8.009 590-19.862 590 68.825c0 17.712-10.155 148.79-16.111 170.07-20.703 73.984-96.144 92.854-163.25 81.433 117.3 19.964 147.14 86.092 82.697 152.22-122.39 125.59-175.91-31.511-189.63-71.766-2.514-7.38-3.69-10.832-3.708-7.896-.017-2.936-1.193.516-3.707 7.896-13.714 40.255-67.233 197.36-189.63 71.766-64.444-66.128-34.605-132.26 82.697-152.22-67.108 11.421-142.55-7.45-163.25-81.433C20.15 217.613 9.997 86.535 9.997 68.825c0-88.687 77.742-60.816 125.72-24.795z" fill="#1185fe"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 665 B |
@@ -1,48 +0,0 @@
|
||||
services:
|
||||
pds:
|
||||
image: 'ghcr.io/bluesky-social/pds:0.4.182'
|
||||
volumes:
|
||||
- pds-data:/pds
|
||||
environment:
|
||||
- SERVICE_URL_PDS_3000
|
||||
- PDS_HOSTNAME
|
||||
- PDS_JWT_SECRET
|
||||
- PDS_ADMIN_PASSWORD
|
||||
- 'PDS_ADMIN_EMAIL=${PDS_ADMIN_EMAIL}'
|
||||
- PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX
|
||||
- 'PDS_DATA_DIRECTORY=${PDS_DATA_DIRECTORY:-/pds}'
|
||||
- 'PDS_BLOBSTORE_DISK_LOCATION=${PDS_DATA_DIRECTORY:-/pds}/blocks'
|
||||
- 'PDS_BLOB_UPLOAD_LIMIT=${PDS_BLOB_UPLOAD_LIMIT:-104857600}'
|
||||
- 'PDS_DID_PLC_URL=${PDS_DID_PLC_URL:-https://plc.directory}'
|
||||
- 'PDS_EMAIL_FROM_ADDRESS=${PDS_EMAIL_FROM_ADDRESS}'
|
||||
- 'PDS_EMAIL_SMTP_URL=${PDS_EMAIL_SMTP_URL}'
|
||||
- 'PDS_BSKY_APP_VIEW_URL=${PDS_BSKY_APP_VIEW_URL:-https://api.bsky.app}'
|
||||
- 'PDS_BSKY_APP_VIEW_DID=${PDS_BSKY_APP_VIEW_DID:-did:web:api.bsky.app}'
|
||||
- 'PDS_REPORT_SERVICE_URL=${PDS_REPORT_SERVICE_URL:-https://mod.bsky.app/xrpc/com.atproto.moderation.createReport}'
|
||||
- 'PDS_REPORT_SERVICE_DID=${PDS_REPORT_SERVICE_DID:-did:plc:ar7c4by46qjdydhdevvrndac}'
|
||||
- 'PDS_CRAWLERS=${PDS_CRAWLERS:-https://bsky.network}'
|
||||
- 'LOG_ENABLED=${LOG_ENABLED:-true}'
|
||||
command: |
|
||||
sh -c '
|
||||
set -euo pipefail
|
||||
echo "Installing required packages and pdsadmin..."
|
||||
apk add --no-cache openssl curl bash jq coreutils gnupg util-linux-misc >/dev/null
|
||||
curl -o /usr/local/bin/pdsadmin.sh https://raw.githubusercontent.com/bluesky-social/pds/main/pdsadmin.sh
|
||||
chmod 700 /usr/local/bin/pdsadmin.sh
|
||||
ln -sf /usr/local/bin/pdsadmin.sh /usr/local/bin/pdsadmin
|
||||
echo "Creating an empty pds.env file so pdsadmin works..."
|
||||
touch /pds/pds.env
|
||||
echo "Launching PDS, enjoy!..."
|
||||
exec node --enable-source-maps index.js
|
||||
'
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD
|
||||
- wget
|
||||
- '--spider'
|
||||
- 'http://127.0.0.1:3000/xrpc/_health'
|
||||
interval: 5s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
volumes:
|
||||
pds-data:
|
||||
@@ -1,36 +0,0 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
admin_password = "${password:32}"
|
||||
jwt_secret = "${jwt:32}"
|
||||
rotation_key = "${jwt:32}"
|
||||
data_directory = "/pds"
|
||||
blob_upload_limit = "104857600"
|
||||
log_enabled = "true"
|
||||
|
||||
[config]
|
||||
mounts = []
|
||||
env = [
|
||||
"PDS_ADMIN_PASSWORD=${admin_password}",
|
||||
"PDS_HOSTNAME=${main_domain}",
|
||||
"PDS_JWT_SECRET=${jwt_secret}",
|
||||
"PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX=${rotation_key}",
|
||||
"PDS_ADMIN_EMAIL=",
|
||||
"PDS_EMAIL_FROM_ADDRESS=",
|
||||
"PDS_EMAIL_SMTP_URL=",
|
||||
"PDS_DATA_DIRECTORY=${data_directory}",
|
||||
"PDS_BLOBSTORE_DISK_LOCATION=${data_directory}/blocks",
|
||||
"PDS_BLOB_UPLOAD_LIMIT=${blob_upload_limit}",
|
||||
"PDS_DID_PLC_URL=https://plc.directory",
|
||||
"PDS_BSKY_APP_VIEW_URL=https://api.bsky.app",
|
||||
"PDS_BSKY_APP_VIEW_DID=did:web:api.bsky.app",
|
||||
"PDS_REPORT_SERVICE_URL=https://mod.bsky.app/xrpc/com.atproto.moderation.createReport",
|
||||
"PDS_REPORT_SERVICE_DID=did:plc:ar7c4by46qjdydhdevvrndac",
|
||||
"PDS_CRAWLERS=https://bsky.network",
|
||||
"LOG_ENABLED=${log_enabled}"
|
||||
]
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "pds"
|
||||
port = 3000
|
||||
host = "${main_domain}"
|
||||
path = "/"
|
||||
@@ -1,8 +1,8 @@
|
||||
services:
|
||||
|
||||
apps:
|
||||
image: budibase/apps:3.23.47
|
||||
image: budibase.docker.scarf.sh/budibase/apps:3.5.3
|
||||
restart: unless-stopped
|
||||
|
||||
environment:
|
||||
SELF_HOSTED: 1
|
||||
LOG_LEVEL: info
|
||||
@@ -39,10 +39,10 @@ services:
|
||||
timeout: 15s
|
||||
retries: 5
|
||||
start_period: 10s
|
||||
|
||||
worker:
|
||||
image: budibase/worker:3.23.47
|
||||
image: budibase.docker.scarf.sh/budibase/worker:3.2.25
|
||||
restart: unless-stopped
|
||||
|
||||
environment:
|
||||
SELF_HOSTED: 1
|
||||
LOG_LEVEL: info
|
||||
@@ -78,10 +78,10 @@ services:
|
||||
timeout: 15s
|
||||
retries: 5
|
||||
start_period: 10s
|
||||
|
||||
minio:
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
image: minio/minio:RELEASE.2024-11-07T00-52-20Z
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
- 'minio_data:/data'
|
||||
environment:
|
||||
@@ -98,10 +98,10 @@ services:
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
|
||||
proxy:
|
||||
image: budibase/proxy:3.23.47
|
||||
image: budibase/proxy:3.2.25
|
||||
restart: unless-stopped
|
||||
|
||||
environment:
|
||||
PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND: 10
|
||||
PROXY_RATE_LIMIT_API_PER_SECOND: 20
|
||||
@@ -130,10 +130,10 @@ services:
|
||||
timeout: 15s
|
||||
retries: 5
|
||||
start_period: 10s
|
||||
|
||||
couchdb:
|
||||
image: budibase/couchdb:v3.3.3
|
||||
restart: unless-stopped
|
||||
|
||||
environment:
|
||||
COUCHDB_USER: budibase
|
||||
COUCHDB_PASSWORD: ${BB_COUCHDB_PASSWORD}
|
||||
@@ -150,9 +150,9 @@ services:
|
||||
start_period: 10s
|
||||
volumes:
|
||||
- 'couchdb3_data:/opt/couchdb/data'
|
||||
|
||||
redis:
|
||||
image: redis:8.4-alpine
|
||||
image: redis:7.2-alpine
|
||||
|
||||
restart: unless-stopped
|
||||
command: 'redis-server --requirepass "${BB_REDIS_PASSWORD}"'
|
||||
volumes:
|
||||
@@ -168,9 +168,25 @@ services:
|
||||
timeout: 15s
|
||||
retries: 5
|
||||
start_period: 10s
|
||||
watchtower:
|
||||
restart: unless-stopped
|
||||
|
||||
image: containrrr/watchtower:1.7.1
|
||||
volumes:
|
||||
- '/var/run/docker.sock:/var/run/docker.sock'
|
||||
command: '--debug --http-api-update bbapps bbworker bbproxy'
|
||||
environment:
|
||||
WATCHTOWER_HTTP_API: true
|
||||
WATCHTOWER_HTTP_API_TOKEN: ${BB_WATCHTOWER_PASSWORD}
|
||||
WATCHTOWER_CLEANUP: true
|
||||
labels:
|
||||
- com.centurylinklabs.watchtower.enable=false
|
||||
|
||||
networks:
|
||||
dokploy-network:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
minio_data:
|
||||
couchdb3_data:
|
||||
redis_data:
|
||||
redis_data:
|
||||
@@ -17,9 +17,6 @@ services:
|
||||
S3_INTERNAL_ENDPOINT: "http://minio:3902"
|
||||
expose:
|
||||
- 3000
|
||||
depends_on:
|
||||
- ps-mysql
|
||||
- minio
|
||||
|
||||
ps-mysql:
|
||||
image: mysql:8.0
|
||||
@@ -37,10 +34,11 @@ services:
|
||||
- ps-mysql:/var/lib/mysql
|
||||
|
||||
minio:
|
||||
image: quay.io/minio/minio:RELEASE.2025-05-24T17-08-30Z
|
||||
image: bitnami/minio:latest
|
||||
restart: unless-stopped
|
||||
command: server /bitnami/minio/data --address ":3902" --console-address ":3903"
|
||||
environment:
|
||||
MINIO_API_PORT_NUMBER: 3902
|
||||
MINIO_CONSOLE_PORT_NUMBER: 3903
|
||||
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
|
||||
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
|
||||
expose:
|
||||
@@ -49,11 +47,6 @@ services:
|
||||
volumes:
|
||||
- minio-data:/bitnami/minio/data
|
||||
- minio-certs:/certs
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:3902/minio/health/ready"]
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
|
||||
volumes:
|
||||
ps-mysql:
|
||||
|
||||
@@ -4,6 +4,8 @@ x-base-config: &base-config
|
||||
image: chatwoot/chatwoot:v4.0.3
|
||||
volumes:
|
||||
- chatwoot-storage:/app/storage
|
||||
networks:
|
||||
- dokploy-network
|
||||
environment:
|
||||
- FRONTEND_URL=${FRONTEND_URL}
|
||||
- SECRET_KEY_BASE=${SECRET_KEY_BASE}
|
||||
@@ -61,6 +63,10 @@ services:
|
||||
volumes:
|
||||
- chatwoot-redis-data:/data
|
||||
|
||||
networks:
|
||||
dokploy-network:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
chatwoot-storage:
|
||||
chatwoot-postgres-data:
|
||||
|
||||
|
Before Width: | Height: | Size: 12 KiB |
@@ -1,81 +0,0 @@
|
||||
services:
|
||||
chirpstack:
|
||||
image: chirpstack/chirpstack:4
|
||||
command: -c /etc/chirpstack
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ../files/chirpstack:/etc/chirpstack
|
||||
ports:
|
||||
- 8080
|
||||
environment:
|
||||
- MQTT_BROKER_HOST=mosquitto
|
||||
- REDIS_HOST=redis
|
||||
- POSTGRESQL_HOST=postgres
|
||||
depends_on:
|
||||
- postgres
|
||||
- mosquitto
|
||||
- redis
|
||||
|
||||
chirpstack-gateway-bridge:
|
||||
image: chirpstack/chirpstack-gateway-bridge:4
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ../files/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge
|
||||
ports:
|
||||
- 1700/udp
|
||||
environment:
|
||||
- INTEGRATION__MQTT__EVENT_TOPIC_TEMPLATE=eu868/gateway/{{ .GatewayID }}/event/{{ .EventType }}
|
||||
- INTEGRATION__MQTT__STATE_TOPIC_TEMPLATE=eu868/gateway/{{ .GatewayID }}/state/{{ .StateType }}
|
||||
- INTEGRATION__MQTT__COMMAND_TOPIC_TEMPLATE=eu868/gateway/{{ .GatewayID }}/command/#
|
||||
depends_on:
|
||||
- mosquitto
|
||||
|
||||
chirpstack-gateway-bridge-basicstation:
|
||||
image: chirpstack/chirpstack-gateway-bridge:4
|
||||
command: -c /etc/chirpstack-gateway-bridge/chirpstack-gateway-bridge-basicstation-eu868.toml
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ../files/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge
|
||||
ports:
|
||||
- 3001
|
||||
depends_on:
|
||||
- mosquitto
|
||||
|
||||
chirpstack-rest-api:
|
||||
image: chirpstack/chirpstack-rest-api:4
|
||||
restart: unless-stopped
|
||||
command: --server chirpstack:8080 --bind 0.0.0.0:8090 --insecure
|
||||
ports:
|
||||
- 8090
|
||||
depends_on:
|
||||
- chirpstack
|
||||
|
||||
postgres:
|
||||
image: postgres:14-alpine
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- postgresqldata:/var/lib/postgresql/data
|
||||
- ../files/postgresql/initdb:/docker-entrypoint-initdb.d
|
||||
environment:
|
||||
- POSTGRES_USER=chirpstack
|
||||
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
|
||||
- POSTGRES_DB=chirpstack
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
restart: unless-stopped
|
||||
command: redis-server --save 300 1 --save 60 100 --appendonly no
|
||||
volumes:
|
||||
- redisdata:/data
|
||||
|
||||
mosquitto:
|
||||
image: eclipse-mosquitto:2
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ../files/mosquitto/config/:/mosquitto/config/
|
||||
ports:
|
||||
- 1883
|
||||
|
||||
volumes:
|
||||
postgresqldata:
|
||||
redisdata:
|
||||
@@ -1,8 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 116" preserveAspectRatio="xMidYMid meet">
|
||||
<path fill="#FFF" d="m202.357 49.394-5.311-2.124C172.085 103.434 72.786 69.289 66.81 85.997c-.996 11.286 54.227 2.146 93.706 4.059 12.039.583 18.076 9.671 12.964 24.484l10.069.031c11.615-36.209 48.683-17.73 50.232-29.68-2.545-7.857-42.601 0-31.425-35.497Z"/>
|
||||
<path fill="#F4811F" d="M176.332 108.348c1.593-5.31 1.062-10.622-1.593-13.809-2.656-3.187-6.374-5.31-11.154-5.842L71.17 87.634c-.531 0-1.062-.53-1.593-.53-.531-.532-.531-1.063 0-1.594.531-1.062 1.062-1.594 2.124-1.594l92.946-1.062c11.154-.53 22.839-9.56 27.087-20.182l5.312-13.809c0-.532.531-1.063 0-1.594C191.203 20.182 166.772 0 138.091 0 111.535 0 88.697 16.995 80.73 40.896c-5.311-3.718-11.684-5.843-19.12-5.31-12.747 1.061-22.838 11.683-24.432 24.43-.531 3.187 0 6.374.532 9.56C16.996 70.107 0 87.103 0 108.348c0 2.124 0 3.718.531 5.842 0 1.063 1.062 1.594 1.594 1.594h170.489c1.062 0 2.125-.53 2.125-1.594l1.593-5.842Z"/>
|
||||
<path fill="#FAAD3F" d="M205.544 48.863h-2.656c-.531 0-1.062.53-1.593 1.062l-3.718 12.747c-1.593 5.31-1.062 10.623 1.594 13.809 2.655 3.187 6.373 5.31 11.153 5.843l19.652 1.062c.53 0 1.062.53 1.593.53.53.532.53 1.063 0 1.594-.531 1.063-1.062 1.594-2.125 1.594l-20.182 1.062c-11.154.53-22.838 9.56-27.087 20.182l-1.063 4.78c-.531.532 0 1.594 1.063 1.594h70.108c1.062 0 1.593-.531 1.593-1.593 1.062-4.25 2.124-9.03 2.124-13.81 0-27.618-22.838-50.456-50.456-50.456"/>
|
||||
<text x="128" y="65" text-anchor="middle" dominant-baseline="middle" font-size="32" font-family="Arial, Helvetica, sans-serif" font-weight="bold" fill="#fff">
|
||||
DDNS
|
||||
</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.6 KiB |
@@ -1,16 +0,0 @@
|
||||
# For more details, see:
|
||||
# - https://github.com/favonia/cloudflare-ddns
|
||||
services:
|
||||
cloudflare-ddns:
|
||||
image: favonia/cloudflare-ddns:1
|
||||
network_mode: host
|
||||
restart: unless-stopped
|
||||
user: "1000:1000"
|
||||
read_only: true
|
||||
cap_drop: [all]
|
||||
security_opt: [no-new-privileges:true]
|
||||
environment:
|
||||
- CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN:?}
|
||||
- DOMAINS=${DOMAINS:?}
|
||||
- PROXIED=false
|
||||
- IP6_PROVIDER=none
|
||||
@@ -1,9 +0,0 @@
|
||||
variables = {}
|
||||
|
||||
[config]
|
||||
domains = []
|
||||
mounts = []
|
||||
|
||||
[config.env]
|
||||
CLOUDFLARE_API_TOKEN = "<INSERT YOUR TOKEN>"
|
||||
DOMAINS = "example.org,www.example.org,example.io"
|
||||
@@ -3,14 +3,14 @@ services:
|
||||
image: 'cloudflare/cloudflared:latest'
|
||||
environment:
|
||||
# Don't forget to set this in your Dokploy Environment
|
||||
- 'TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN:?}'
|
||||
- 'TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN}'
|
||||
network_mode: host
|
||||
restart: unless-stopped
|
||||
command: [
|
||||
"tunnel",
|
||||
|
||||
# More tunnel run parameters here:
|
||||
# https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/cloudflared-parameters/run-parameters/
|
||||
# https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/configure-tunnels/tunnel-run-parameters/
|
||||
"--no-autoupdate",
|
||||
#"--protocol", "http2",
|
||||
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
variables = {}
|
||||
|
||||
[config]
|
||||
isolated = false
|
||||
domains = []
|
||||
env = ["CLOUDFLARE_TUNNEL_TOKEN=\"<INSERT TOKEN>\""]
|
||||
mounts = []
|
||||
|
||||
[config.env]
|
||||
CLOUDFLARE_TUNNEL_TOKEN = ""
|
||||
|
||||
|
Before Width: | Height: | Size: 6.8 KiB |
@@ -1,48 +0,0 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
cloudreve:
|
||||
image: cloudreve/cloudreve:4.10.1
|
||||
depends_on:
|
||||
postgresql:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_started
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- CR_CONF_Database.Type=postgres
|
||||
- CR_CONF_Database.Host=postgresql
|
||||
- CR_CONF_Database.User=${POSTGRES_USER}
|
||||
- CR_CONF_Database.Password=${POSTGRES_PASSWORD}
|
||||
- CR_CONF_Database.Name=${POSTGRES_DB}
|
||||
- CR_CONF_Database.Port=5432
|
||||
- CR_CONF_Redis.Server=redis:6379
|
||||
volumes:
|
||||
- cloudreve_data:/cloudreve/data
|
||||
|
||||
postgresql:
|
||||
image: postgres:17
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_USER
|
||||
- POSTGRES_PASSWORD
|
||||
- POSTGRES_DB
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
|
||||
redis:
|
||||
image: redis:8.4.0
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
|
||||
volumes:
|
||||
cloudreve_data:
|
||||
postgres_data:
|
||||
redis_data:
|
||||
@@ -1,16 +0,0 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
db_password = "${password:32}"
|
||||
db_user = "cloudreve"
|
||||
db_name = "cloudreve"
|
||||
|
||||
[config]
|
||||
[[config.domains]]
|
||||
serviceName = "cloudreve"
|
||||
port = 5212
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
POSTGRES_PASSWORD = "${db_password}"
|
||||
POSTGRES_USER = "${db_user}"
|
||||
POSTGRES_DB = "${db_name}"
|
||||
@@ -7,6 +7,8 @@ services:
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- db:/var/lib/matrix-conduit/
|
||||
networks:
|
||||
- dokploy-network
|
||||
environment:
|
||||
CONDUIT_SERVER_NAME: ${MATRIX_SUBDOMAIN}
|
||||
CONDUIT_DATABASE_PATH: /var/lib/matrix-conduit/
|
||||
@@ -23,3 +25,7 @@ services:
|
||||
CONDUIT_CONFIG: '' # Ignore this
|
||||
volumes:
|
||||
db:
|
||||
|
||||
networks:
|
||||
dokploy-network:
|
||||
external: true
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
services:
|
||||
backend:
|
||||
image: ghcr.io/get-convex/convex-backend:5cdea511cd6527a95dd24152ea0d3c3bb2ab379f
|
||||
expose:
|
||||
- "3210"
|
||||
- "3211"
|
||||
image: ghcr.io/get-convex/convex-backend:33cef775a8a6228cbacee4a09ac2c4073d62ed13
|
||||
ports:
|
||||
- "${PORT:-3210}:3210"
|
||||
- "${SITE_PROXY_PORT:-3211}:3211"
|
||||
volumes:
|
||||
- data:/convex/data
|
||||
environment:
|
||||
@@ -14,7 +14,7 @@ services:
|
||||
- CONVEX_CLOUD_ORIGIN=${CONVEX_CLOUD_ORIGIN:-http://127.0.0.1:3210}
|
||||
- CONVEX_SITE_ORIGIN=${CONVEX_SITE_ORIGIN:-http://127.0.0.1:3211}
|
||||
- DATABASE_URL=${DATABASE_URL:-}
|
||||
- DISABLE_BEACON=${DISABLE_BEACON:-FALSE}
|
||||
- DISABLE_BEACON=${DISABLE_BEACON:-}
|
||||
- REDACT_LOGS_TO_CLIENT=${REDACT_LOGS_TO_CLIENT:-}
|
||||
- RUST_LOG=${RUST_LOG:-info}
|
||||
- RUST_BACKTRACE=${RUST_BACKTRACE:-}
|
||||
@@ -24,9 +24,9 @@ services:
|
||||
start_period: 5s
|
||||
|
||||
dashboard:
|
||||
image: ghcr.io/get-convex/convex-dashboard:5cdea511cd6527a95dd24152ea0d3c3bb2ab379f
|
||||
expose:
|
||||
- "6791"
|
||||
image: ghcr.io/get-convex/convex-dashboard:33cef775a8a6228cbacee4a09ac2c4073d62ed13
|
||||
ports:
|
||||
- "${DASHBOARD_PORT:-6791}:6791"
|
||||
environment:
|
||||
- NEXT_PUBLIC_DEPLOYMENT_URL=${NEXT_PUBLIC_DEPLOYMENT_URL:-http://127.0.0.1:3210}
|
||||
depends_on:
|
||||
|
||||
@@ -45,6 +45,10 @@ services:
|
||||
PUBLISH_COMMANDS: "true"
|
||||
SUPER: ${SUPER_USERS}
|
||||
|
||||
networks:
|
||||
dokploy-network:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
tickets-mysql-data:
|
||||
tickets-app-data:
|
||||
@@ -32,7 +32,7 @@ services:
|
||||
restart: unless-stopped
|
||||
|
||||
discourse-app:
|
||||
image: docker.io/bitnamilegacy/discourse:3.5.0
|
||||
image: docker.io/bitnami/discourse:3.3.2
|
||||
|
||||
volumes:
|
||||
- discourse-data:/bitnami/discourse
|
||||
@@ -59,7 +59,7 @@ services:
|
||||
restart: unless-stopped
|
||||
|
||||
discourse-sidekiq:
|
||||
image: docker.io/bitnamilegacy/discourse:3.5.0
|
||||
image: docker.io/bitnami/discourse:3.3.2
|
||||
|
||||
volumes:
|
||||
- discourse-sidekiq-data:/bitnami/discourse
|
||||
|
||||
@@ -34,6 +34,10 @@ services:
|
||||
volumes:
|
||||
- redis_docmost_data:/data
|
||||
|
||||
networks:
|
||||
dokploy-network:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
docmost:
|
||||
db_docmost_data:
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
services:
|
||||
dokploy-monitoring:
|
||||
image: dokploy/monitoring:canary
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- .env
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- monitoring-data:/app/data
|
||||
volumes:
|
||||
monitoring-data: {}
|
||||
@@ -1,21 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="128" height="128">
|
||||
<!-- Background circle -->
|
||||
<circle cx="50" cy="50" r="48" fill="#E6522C" stroke="#CC4A1F" stroke-width="2"/>
|
||||
|
||||
<!-- Prometheus flame icon adapted for monitoring -->
|
||||
<path d="M50 15 L60 35 L80 35 L65 48 L72 68 L50 55 L28 68 L35 48 L20 35 L40 35 Z"
|
||||
fill="#FFF" opacity="0.95"/>
|
||||
|
||||
<!-- Graph/Chart lines representing monitoring -->
|
||||
<path d="M 20 75 L 30 65 L 40 70 L 50 60 L 60 65 L 70 55 L 80 60"
|
||||
stroke="#FFF" stroke-width="3" fill="none" stroke-linecap="round" opacity="0.8"/>
|
||||
|
||||
<!-- Data points on the graph -->
|
||||
<circle cx="20" cy="75" r="2.5" fill="#FFF"/>
|
||||
<circle cx="30" cy="65" r="2.5" fill="#FFF"/>
|
||||
<circle cx="40" cy="70" r="2.5" fill="#FFF"/>
|
||||
<circle cx="50" cy="60" r="2.5" fill="#FFF"/>
|
||||
<circle cx="60" cy="65" r="2.5" fill="#FFF"/>
|
||||
<circle cx="70" cy="55" r="2.5" fill="#FFF"/>
|
||||
<circle cx="80" cy="60" r="2.5" fill="#FFF"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 979 B |
@@ -1,17 +0,0 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
monitoring_token = "${password:32}"
|
||||
callback_url = "http://dokploy:3000/api/trpc/notification.receiveNotification"
|
||||
server_type = "Dokploy"
|
||||
refresh_rate = "30"
|
||||
retention_days = "7"
|
||||
cpu_threshold = "80"
|
||||
memory_threshold = "85"
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "dokploy-monitoring"
|
||||
port = 3001
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
METRICS_CONFIG = "{\"server\":{\"refreshRate\":${refresh_rate},\"port\":3001,\"type\":\"${server_type}\",\"token\":\"${monitoring_token}\",\"urlCallback\":\"${callback_url}\",\"retentionDays\":${retention_days},\"cronJob\":\"0 0 * * *\",\"thresholds\":{\"cpu\":${cpu_threshold},\"memory\":${memory_threshold}},\"prometheus\":{\"enabled\":true}},\"containers\":{\"refreshRate\":${refresh_rate},\"services\":{\"include\":[],\"exclude\":[]}}}"
|
||||
@@ -1,40 +0,0 @@
|
||||
services:
|
||||
dolibarr:
|
||||
image: dolibarr/dolibarr:21.0.0
|
||||
restart: always
|
||||
environment:
|
||||
DOLI_DB_HOST: db
|
||||
DOLI_DB_NAME: $DB_NAME
|
||||
DOLI_DB_USER: $DB_USER
|
||||
DOLI_DB_PASSWORD: $DB_PASSWORD
|
||||
DOLI_URL_ROOT: ${DOLIBARR_HOST}
|
||||
DOLI_ADMIN_LOGIN: admin
|
||||
DOLI_ADMIN_PASSWORD: $ADMIN_PASSWORD
|
||||
volumes:
|
||||
- dolibarr_documents:/var/www/documents
|
||||
- dolibarr_html:/var/www/html
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
|
||||
db:
|
||||
image: mariadb:10.11
|
||||
restart: always
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
|
||||
MYSQL_DATABASE: $DB_NAME
|
||||
MYSQL_USER: $DB_USER
|
||||
MYSQL_PASSWORD: $DB_PASSWORD
|
||||
volumes:
|
||||
- db_data:/var/lib/mysql
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "healthcheck.sh --connect --innodb_initialized"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
|
||||
volumes:
|
||||
dolibarr_documents:
|
||||
dolibarr_html:
|
||||
db_data:
|
||||
@@ -1 +0,0 @@
|
||||
<svg width="625.57" height="144.4" viewBox="0 0 176.55 40.754" xmlns="http://www.w3.org/2000/svg"><g stroke-width=".265"><path d="m90.28 4.132v22.06c0 4.053.955 7.353 2.864 9.902 1.098 1.469 2.491 2.637 4.178 3.504 1.703.867 3.445 1.144 5.228 1.159 2.894.023 6.707-1.086 8.976-3.84 2.291-2.78 3.653-5.92 3.653-9.795 0-3.787-1.202-7.03-3.605-9.716-2.386-2.69-5.26-4.03-8.617-4.03-.541 0-2.386.06-2.386.06l.066 10.08s1.526.004 2.178.004c.923 0 1.703.371 2.339 1.115.637.725.955 1.628.955 2.708 0 1.044-.342 1.938-1.027 2.681-.668.725-1.488 1.089-2.459 1.089-2.276 0-3.414-1.761-3.414-5.283v-21.688h-8.928zm-90.28.259v36.24l9.692.106v-25.937h3.271c5.554 0 8.331 2.468 8.331 7.406 0 5.256-1.707 7.84-7.357 7.87l-2.67.014v10.644c1.32.005 2.381.023 2.971.023 5.01 0 9.03-1.651 12.21-5.12 3.183-3.469 4.776-7.945 4.776-13.433 0-5.734-1.863-10.273-5.585-13.618-3.135-2.796-7.472-4.195-13.01-4.195h-12.628zm62.45.024v36.34h8.928v-36.34h-8.928m-16.02 8.787c-3.597 0-6.62 1.328-9.07 3.982-2.451 2.637-3.676 5.893-3.676 9.769 0 3.805 1.225 7.06 3.676 9.769 2.451 2.69 5.403 4.03 8.857 4.03s6.398-1.345 8.833-4.03c2.451-2.69 3.676-5.946 3.676-9.769 0-3.77-1.209-7-3.628-9.69-2.402-2.708-5.292-4.061-8.666-4.061m127.38.424c-3.135 0-5.641 1.142-7.519 3.425-1.878 2.265-2.817 5.31-2.817 9.132v14.573h8.928v-12.662c0-2.761.812-4.141 2.435-4.141.509 0 1.703-.02 1.703-.02l.008-10.304s-2.038-.003-2.738-.003zm-15.66.0001c-3.135 0-5.642 1.141-7.52 3.424-1.878 2.265-2.817 5.31-2.817 9.132v14.573h8.928v-12.662c0-2.761.811-4.141 2.434-4.141.509 0 1.679-.028 1.679-.028v-10.296s-2-.002-2.704-.002m-27.977.026c-3.453 0-6.39 1.336-8.808 4.01-2.402 2.672-3.605 5.928-3.605 9.769 0 3.947 1.194 7.23 3.581 9.85 2.386 2.619 5.371 3.477 8.952 3.477h1.947l.041-9.373s-1.376.029-2.155.029c-.955 0-1.743-.354-2.364-1.061-.621-.708-.931-1.61-.931-2.708 0-1.044.342-1.947 1.026-2.708.684-.761 1.496-1.141 2.435-1.141 1.035 0 1.855.416 2.459 1.247.621.832.935 1.947.931 3.345l-.033 12.37h8.945l.017-13.09c0-4.336-1.114-7.752-3.342-10.247-2.212-2.513-5.244-3.77-9.09-3.77m-53.585.116v26.987h8.928v-26.987h-8.928m-30.395 9.228c.971 0 1.79.39 2.459 1.168.668.761 1 1.699 1 2.814 0 1.097-.342 2.035-1.027 2.814-.668.779-1.48 1.168-2.434 1.168-.939 0-1.751-.39-2.435-1.168-.668-.779-1-1.717-1-2.814 0-1.115.335-2.053 1-2.814.668-.779 1.48-1.168 2.435-1.168" fill="#263c5c"/><g fill="#007b8c"><path d="m153.43-.041l-2.088 9.501h.713l2.083-9.501h-.707m4.608 0c-.635 0-1.218.186-1.749.558-.527.368-.935.908-1.223 1.623-.285.71-.428 1.544-.428 2.5 0 .877.126 1.699.378 2.463.256.765.626 1.35 1.111 1.755.488.401 1.12.601 1.896.601.75 0 1.384-.261 1.901-.783.521-.527.881-1.289 1.081-2.288l-.953-.307c-.131.773-.382 1.356-.752 1.748s-.822.589-1.356.589c-.439 0-.847-.144-1.223-.432-.377-.288-.655-.723-.835-1.304-.177-.585-.265-1.268-.265-2.05 0-.606.075-1.193.226-1.761.151-.573.411-1.028.781-1.366.373-.338.837-.508 1.39-.508.481 0 .881.153 1.199.458.318.305.56.792.727 1.46l.939-.282c-.193-.848-.535-1.506-1.027-1.974-.491-.468-1.097-.702-1.818-.702m-26.586.157v9.188h5.374v-1.084h-4.421v-3.127h3.984v-1.079h-3.984v-2.814h4.254v-1.085h-5.207m6.705 0v9.188h.953v-4.08h1.105c.246 0 .422.015.53.044.147.046.292.127.433.244.144.117.306.322.486.614.18.293.409.715.688 1.266l.953 1.911h1.199l-1.253-2.5c-.249-.489-.513-.896-.791-1.222-.131-.15-.323-.303-.575-.458.691-.121 1.202-.405 1.533-.852s.496-.997.496-1.648c0-.506-.1-.968-.3-1.385-.2-.418-.466-.708-.8-.871-.334-.167-.822-.251-1.464-.251h-3.194m7.251 0v9.188h.953v-3.736h1.847c1.018 0 1.723-.269 2.113-.808.39-.543.584-1.204.584-1.987 0-.455-.073-.874-.221-1.254-.144-.38-.336-.675-.575-.884-.239-.213-.535-.357-.889-.432-.252-.059-.617-.088-1.095-.088h-2.717m16.788 0v9.188h.953v-4.08h1.105c.246 0 .423.015.531.044.147.046.291.127.432.244.144.117.307.322.487.614s.409.715.688 1.266l.953 1.911h1.199l-1.253-2.5c-.249-.489-.512-.896-.791-1.222-.131-.15-.323-.303-.575-.458.691-.121 1.202-.405 1.533-.852s.496-.997.496-1.648c0-.506-.1-.968-.3-1.385-.2-.418-.467-.708-.801-.871-.334-.167-.822-.251-1.464-.251h-3.193m7.222 0v9.188h.918v-7.821l2.083 7.821h.86l2.093-7.69v7.69h.919v-9.188h-1.283l-1.724 6.393c-.174.648-.301 1.139-.383 1.473-.072-.302-.186-.754-.344-1.36l-1.705-6.506h-1.435m-30.31 1.016h2.279c.534 0 .923.14 1.169.42.249.28.374.637.374 1.072 0 .297-.064.573-.192.827-.128.251-.315.435-.56.551-.246.113-.586.169-1.022.169h-2.048v-3.04m24.04 0h2.279c.534 0 .924.14 1.169.42.249.28.373.637.373 1.072 0 .297-.064.573-.191.827-.128.251-.315.435-.56.551-.246.113-.587.169-1.022.169h-2.048v-3.04m-16.786.069h1.842c.432 0 .728.027.889.081.249.088.449.269.599.545.154.272.231.601.231.984 0 .531-.129.942-.388 1.235s-.696.439-1.311.439h-1.862v-3.284"/><ellipse cx="81.02" cy="6.143" rx="4.619" ry="4.794"/></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4.6 KiB |
@@ -1,23 +0,0 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
db_name = "dolibarr"
|
||||
db_user = "dolibarr"
|
||||
db_password = "${password:32}"
|
||||
db_root_password = "${password:32}"
|
||||
admin_password = "${password:32}"
|
||||
|
||||
[config]
|
||||
env = [
|
||||
"DOLIBARR_HOST=${main_domain}",
|
||||
"DB_NAME=${db_name}",
|
||||
"DB_USER=${db_user}",
|
||||
"DB_PASSWORD=${db_password}",
|
||||
"DB_ROOT_PASSWORD=${db_root_password}",
|
||||
"ADMIN_PASSWORD=${admin_password}"
|
||||
]
|
||||
mounts = []
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "dolibarr"
|
||||
port = 80
|
||||
host = "${main_domain}"
|
||||
@@ -51,5 +51,9 @@ services:
|
||||
DRAWIO_GITLAB_SECRET: ${DRAWIO_GITLAB_SECRET}
|
||||
DRAWIO_GITLAB_URL: ${DRAWIO_GITLAB_URL}
|
||||
DRAWIO_CLOUD_CONVERT_APIKEY: ${DRAWIO_CLOUD_CONVERT_APIKEY}
|
||||
networks:
|
||||
dokploy-network:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
fonts_volume:
|
||||
@@ -1,29 +0,0 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
easyappointments:
|
||||
image: alextselegidis/easyappointments:1.5.0
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- BASE_URL=http://${DOMAIN}
|
||||
- DB_HOST=mysql
|
||||
- DB_NAME=easyappointments
|
||||
- DB_USERNAME=root
|
||||
- DB_PASSWORD=${DB_PASSWORD}
|
||||
volumes:
|
||||
- easyappointments:/var/www/html
|
||||
depends_on:
|
||||
- mysql
|
||||
|
||||
mysql:
|
||||
image: mysql:8.0
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
|
||||
- MYSQL_DATABASE=easyappointments
|
||||
volumes:
|
||||
- mysql:/var/lib/mysql
|
||||
|
||||
volumes:
|
||||
easyappointments:
|
||||
mysql:
|
||||
|
Before Width: | Height: | Size: 5.4 KiB |
@@ -1,13 +0,0 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
db_password = "${password:32}"
|
||||
|
||||
[config]
|
||||
[[config.domains]]
|
||||
serviceName = "easyappointments"
|
||||
port = 80
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
DOMAIN = "${main_domain}"
|
||||
DB_PASSWORD = "${db_password}"
|
||||
@@ -1,58 +0,0 @@
|
||||
# This templates requires additional traefik port mapping and entry point
|
||||
# for port 8883 (mqtts over TCP)
|
||||
#
|
||||
# For the full instructions, refer to:
|
||||
# - https://github.com/Dokploy/dokploy/discussions/3126
|
||||
#
|
||||
# The initial login credentials are:
|
||||
# - USERNAME: admin
|
||||
# - PASSWORD: public
|
||||
|
||||
services:
|
||||
emqx:
|
||||
image: emqx/emqx-enterprise:6.0.1
|
||||
hostname: node1.emqx.com
|
||||
environment:
|
||||
EMQX_NODE_NAME: emqx@node1.emqx.com
|
||||
expose:
|
||||
- 1883 # MQTT
|
||||
- 8083 # WS
|
||||
- 18083 # Dashboard
|
||||
volumes:
|
||||
- emqx_data:/opt/emqx/data
|
||||
- emqx_log:/opt/emqx/log
|
||||
networks:
|
||||
dokploy-network:
|
||||
aliases:
|
||||
- emqx-service
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
labels:
|
||||
# MQTT over TLS
|
||||
- "traefik.tcp.routers.emqx-mqtts.entrypoints=mqtts"
|
||||
- "traefik.tcp.routers.emqx-mqtts.rule=HostSNI(`broker.yourdomain.com`)" # Change domain
|
||||
- "traefik.tcp.routers.emqx-mqtts.tls.certresolver=letsencrypt"
|
||||
- "traefik.tcp.routers.emqx-mqtts.service=emqx-service"
|
||||
- "traefik.tcp.services.emqx-service.loadbalancer.server.port=1883"
|
||||
|
||||
#
|
||||
# Optional Web UI:
|
||||
# - https://github.com/emqx/MQTTX/tree/main/web
|
||||
#
|
||||
# mqttx-web:
|
||||
# image: emqx/mqttx-web:latest
|
||||
# expose:
|
||||
# - 80
|
||||
#
|
||||
|
||||
volumes:
|
||||
emqx_data:
|
||||
emqx_log:
|
||||
|
||||
networks:
|
||||
dokploy-network:
|
||||
external: true
|
||||
@@ -1,6 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="40 22 240 277">
|
||||
<g fill="#5551F4" fill-rule="evenodd">
|
||||
<path d="M214.8 107.087H112.496v.021c-.142-.006-.282-.021-.425-.021-5.311 0-9.616 4.293-9.616 9.589 0 5.295 4.305 9.588 9.616 9.588.143 0 .283-.015.425-.022v.022H214.8c5.31 0 9.615-4.293 9.615-9.588 0-5.296-4.305-9.59-9.615-9.59m0 91.341H112.496v.02c-.142-.005-.282-.02-.425-.02-5.311 0-9.616 4.293-9.616 9.588s4.305 9.588 9.616 9.588c.143 0 .283-.015.425-.02v.02H214.8c5.31 0 9.615-4.293 9.615-9.588s-4.305-9.588-9.615-9.588m-26.876-36.082c0-5-3.84-9.101-8.739-9.545v-.044h-87.72v.022c-.142-.006-.281-.022-.425-.022-5.31 0-9.615 4.293-9.615 9.59 0 5.295 4.305 9.588 9.615 9.588.144 0 .283-.016.426-.022v.022h87.719v-.045c4.899-.442 8.739-4.544 8.739-9.544"/>
|
||||
<path fill-rule="nonzero" d="M280 91.25 160 22 40 91.25v138.5L160 299l120-69.25zM160 42.712l102.049 58.894V219.38L160 278.276 57.939 219.38V101.606z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 940 B |
@@ -1,11 +0,0 @@
|
||||
[variables]
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "emqx"
|
||||
port = 18083
|
||||
host = "emqx.yourdomain.com"
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "emqx"
|
||||
port = 8083
|
||||
host = "broker.yourdomain.com"
|
||||
@@ -1,25 +1,18 @@
|
||||
services:
|
||||
enshrouded:
|
||||
image: mornedhels/enshrouded-server:latest
|
||||
container_name: enshrouded
|
||||
hostname: enshrouded
|
||||
image: sknnr/enshrouded-dedicated-server:latest
|
||||
restart: unless-stopped
|
||||
stop_grace_period: 90s
|
||||
ports:
|
||||
- "15637:15637/udp"
|
||||
- "27015:27015/udp"
|
||||
volumes:
|
||||
- enshrouded-persistent-data:/opt/enshrouded
|
||||
# only add ntsync device if your kernel supports it (6.14 or newer)
|
||||
# devices:
|
||||
# - /dev/ntsync:/dev/ntsync
|
||||
environment:
|
||||
- SERVER_NAME=${SERVER_NAME}
|
||||
- SERVER_PASSWORD=${SERVER_PASSWORD}
|
||||
- SERVER_SLOT_COUNT=6
|
||||
- UPDATE_CRON=0 3 * * *
|
||||
- PUID=4711
|
||||
- PGID=4711
|
||||
- PORT=15637
|
||||
- SERVER_SLOTS=6
|
||||
- SERVER_IP=0.0.0.0
|
||||
volumes:
|
||||
- enshrouded-persistent-data:/home/steam/enshrouded/savegame
|
||||
|
||||
volumes:
|
||||
enshrouded-persistent-data:
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
evolution-api:
|
||||
image: evoapicloud/evolution-api:latest
|
||||
image: atendai/evolution-api:v2.1.2
|
||||
restart: always
|
||||
volumes:
|
||||
- evolution-instances:/evolution/instances
|
||||
@@ -47,6 +47,11 @@ services:
|
||||
volumes:
|
||||
- evolution-redis-data:/data
|
||||
|
||||
|
||||
networks:
|
||||
dokploy-network:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
evolution-instances:
|
||||
evolution-postgres-data:
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
excalidraw:
|
||||
restart: unless-stopped
|
||||
image: excalidraw/excalidraw:latest
|
||||
healthcheck:
|
||||
test:
|
||||
|
||||
@@ -124,6 +124,15 @@ services:
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
networks:
|
||||
- backend
|
||||
- dokploy-network
|
||||
|
||||
networks:
|
||||
backend:
|
||||
driver: bridge
|
||||
dokploy-network:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
nuq_pg_data:
|
||||
@@ -20,3 +20,7 @@ services:
|
||||
volumes:
|
||||
glpi-mysql-data:
|
||||
glpi-www-data:
|
||||
|
||||
networks:
|
||||
dokploy-network:
|
||||
external: true
|
||||
@@ -1,7 +1,7 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
grafana:
|
||||
image: grafana/grafana-enterprise:12.4
|
||||
image: grafana/grafana-enterprise:9.5.20
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- grafana-storage:/var/lib/grafana
|
||||
|
||||
@@ -1,18 +1,13 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
server:
|
||||
image: docker.io/awinterstein/habitica-server:latest
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
mongo:
|
||||
condition: service_healthy
|
||||
- mongo
|
||||
environment:
|
||||
NODE_DB_URI: "mongodb://${MONGO_HABITICA_USER}:${MONGO_HABITICA_PASSWORD}@mongo/habitica?authSource=habitica"
|
||||
INVITE_ONLY: "${INVITE_ONLY}"
|
||||
EMAIL_SERVER_URL: "${EMAIL_SERVER_URL}"
|
||||
EMAIL_SERVER_PORT: "${EMAIL_SERVER_PORT}"
|
||||
EMAIL_SERVER_AUTH_USER: "${EMAIL_SERVER_AUTH_USER}"
|
||||
EMAIL_SERVER_AUTH_PASSWORD: "${EMAIL_SERVER_AUTH_PASSWORD}"
|
||||
ADMIN_EMAIL: "${ADMIN_EMAIL}"
|
||||
- NODE_DB_URI=mongodb://mongo/habitica
|
||||
|
||||
client:
|
||||
image: docker.io/awinterstein/habitica-client:latest
|
||||
@@ -25,64 +20,12 @@ services:
|
||||
mongo:
|
||||
image: docker.io/mongo:latest
|
||||
restart: unless-stopped
|
||||
command: >
|
||||
bash -c "
|
||||
echo \"${MONGO_KEYFILE_CONTENT}\" > /etc/mongo-keyfile &&
|
||||
chown 999:999 /etc/mongo-keyfile &&
|
||||
chmod 400 /etc/mongo-keyfile &&
|
||||
exec docker-entrypoint.sh mongod --replSet rs --bind_ip_all --port 27017 --keyFile /etc/mongo-keyfile
|
||||
"
|
||||
environment:
|
||||
MONGO_INITDB_ROOT_USERNAME: ${MONGO_ADMIN_USER}
|
||||
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ADMIN_PASSWORD}
|
||||
MONGO_KEYFILE_CONTENT: ${MONGO_KEYFILE_CONTENT}
|
||||
MONGO_HABITICA_USER: ${MONGO_HABITICA_USER}
|
||||
MONGO_HABITICA_PASSWORD: ${MONGO_HABITICA_PASSWORD}
|
||||
# ---------------------------------------------------------
|
||||
# SMART HEALTHCHECK: Auto-fixes Hostname Mismatches for replicaSet
|
||||
# ---------------------------------------------------------
|
||||
command: ["--replSet", "rs", "--bind_ip_all", "--port", "27017"]
|
||||
healthcheck:
|
||||
test: |
|
||||
mongosh --port 27017 --quiet -u "${MONGO_ADMIN_USER}" -p "${MONGO_ADMIN_PASSWORD}" --authenticationDatabase admin --eval "
|
||||
try {
|
||||
// 1. Hostname Fix
|
||||
const config = rs.conf();
|
||||
const currentHost = require('os').hostname() + ':27017';
|
||||
if (config.members[0].host !== currentHost) {
|
||||
config.members[0].host = currentHost;
|
||||
rs.reconfig(config, { force: true });
|
||||
}
|
||||
|
||||
// 2. User Creation Logic
|
||||
const targetDb = db.getSiblingDB('habitica');
|
||||
const hUser = process.env.MONGO_HABITICA_USER;
|
||||
const hPass = process.env.MONGO_HABITICA_PASSWORD;
|
||||
|
||||
// We can only check/create users if we are Primary
|
||||
if (rs.isMaster().ismaster) {
|
||||
if (!targetDb.getUser(hUser)) {
|
||||
print('Creating missing user ' + hUser + '...');
|
||||
targetDb.createUser({ user: hUser, pwd: hPass, roles: ['readWrite'] });
|
||||
}
|
||||
// SUCCESS: User exists and we are Primary
|
||||
quit(0);
|
||||
} else {
|
||||
// We are not Primary yet (still electing), so we cannot confirm user exists.
|
||||
// Fail the check so the dependent app waits.
|
||||
print('Waiting for Primary state...');
|
||||
quit(1);
|
||||
}
|
||||
} catch (err) {
|
||||
// If not initialized, initiate and FAIL this check so we wait for the next cycle
|
||||
try {
|
||||
rs.initiate({ _id: 'rs', members: [{ _id: 0, host: require('os').hostname() + ':27017' }] });
|
||||
} catch (e) {}
|
||||
quit(1);
|
||||
}
|
||||
"
|
||||
interval: 5s
|
||||
timeout: 10s
|
||||
retries: 20
|
||||
test: echo "try { rs.status() } catch (err) { rs.initiate() }" | mongosh --port 27017 --quiet
|
||||
interval: 10s
|
||||
timeout: 30s
|
||||
retries: 30
|
||||
volumes:
|
||||
- habitica-mongo-data:/data/db
|
||||
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
mail_password = "${password:32}"
|
||||
mongo_key = "${base64:756}"
|
||||
mongo_admin_password = "${password}"
|
||||
mongo_habitica_password = "${password}"
|
||||
|
||||
[config]
|
||||
[[config.domains]]
|
||||
@@ -12,21 +9,16 @@ port = 80
|
||||
host = "habitica.${main_domain}"
|
||||
|
||||
[config.env]
|
||||
BASE_URL = "https://habitica.${main_domain}"
|
||||
INVITE_ONLY = "false"
|
||||
EMAIL_SERVER_URL = "mail.example.com"
|
||||
EMAIL_SERVER_PORT = "587"
|
||||
EMAIL_SERVER_AUTH_USER = "mail_user"
|
||||
EMAIL_SERVER_AUTH_PASSWORD = "${mail_password}"
|
||||
MONGO_KEYFILE_CONTENT = "${mongo_key}"
|
||||
MONGO_ADMIN_USER = "admin"
|
||||
MONGO_ADMIN_PASSWORD = "${mongo_admin_password}"
|
||||
MONGO_HABITICA_USER = "habitica"
|
||||
MONGO_HABITICA_PASSWORD = "${mongo_habitica_password}"
|
||||
ADMIN_EMAIL = "no-reply@${main_domain}"
|
||||
|
||||
BASE_URL="https://habitica.${main_domain}"
|
||||
INVITE_ONLY="false"
|
||||
EMAIL_SERVER_URL="mail.example.com"
|
||||
EMAIL_SERVER_PORT="587"
|
||||
EMAIL_SERVER_AUTH_USER="mail_user"
|
||||
EMAIL_SERVER_AUTH_PASSWORD="${mail_password}"
|
||||
|
||||
[[config.mounts]]
|
||||
serviceName = "mongo"
|
||||
type = "volume"
|
||||
source = "habitica-mongo-data"
|
||||
target = "/data/db"
|
||||
target = "/data/db"
|
||||
@@ -36,5 +36,9 @@ services:
|
||||
volumes:
|
||||
- pg_hi-events_data:/var/lib/postgresql/data
|
||||
|
||||
networks:
|
||||
dokploy-network:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
pg_hi-events_data:
|
||||
@@ -1,76 +0,0 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
imgproxy:
|
||||
image: darthsim/imgproxy:v3.30.1
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
IMGPROXY_KEY: ${IMGPROXY_KEY}
|
||||
IMGPROXY_SALT: ${IMGPROXY_SALT}
|
||||
IMGPROXY_ENABLE_WEBP_DETECTION: ${IMGPROXY_ENABLE_WEBP_DETECTION:-true}
|
||||
IMGPROXY_ENFORCE_WEBP: ${IMGPROXY_ENFORCE_WEBP:-true}
|
||||
IMGPROXY_TTL: ${IMGPROXY_TTL:-30600}
|
||||
IMGPROXY_DEVELOPMENT_ERRORS_MODE: ${IMGPROXY_DEVELOPMENT_ERRORS_MODE:-false}
|
||||
IMGPROXY_READ_TIMEOUT: ${IMGPROXY_READ_TIMEOUT:-10}
|
||||
IMGPROXY_WRITE_TIMEOUT: ${IMGPROXY_WRITE_TIMEOUT:-10}
|
||||
IMGPROXY_KEEP_ALIVE_TIMEOUT: ${IMGPROXY_KEEP_ALIVE_TIMEOUT:-10}
|
||||
IMGPROXY_DOWNLOAD_TIMEOUT: ${IMGPROXY_DOWNLOAD_TIMEOUT:-5}
|
||||
IMGPROXY_CONCURRENCY: ${IMGPROXY_CONCURRENCY:-}
|
||||
IMGPROXY_MAX_CLIENTS: ${IMGPROXY_MAX_CLIENTS:-10}
|
||||
IMGPROXY_SO_REUSEPORT: ${IMGPROXY_SO_REUSEPORT:-}
|
||||
IMGPROXY_USER_AGENT: ${IMGPROXY_USER_AGENT:-}
|
||||
IMGPROXY_USE_ETAG: ${IMGPROXY_USE_ETAG:-true}
|
||||
IMGPROXY_QUALITY: ${IMGPROXY_QUALITY:-80}
|
||||
IMGPROXY_ALLOWED_SOURCES: ${IMGPROXY_ALLOWED_SOURCES}
|
||||
IMGPROXY_ALLOW_ORIGIN: ${IMGPROXY_ALLOW_ORIGIN:-*}
|
||||
IMGPROXY_MAX_SRC_FILE_SIZE: ${IMGPROXY_MAX_SRC_FILE_SIZE:-20971520}
|
||||
IMGPROXY_MAX_SRC_RESOLUTION: ${IMGPROXY_MAX_SRC_RESOLUTION:-50}
|
||||
IMGPROXY_LOG_LEVEL: ${IMGPROXY_LOG_LEVEL:-error}
|
||||
|
||||
nginx:
|
||||
image: nginx:1.28.2-alpine
|
||||
restart: unless-stopped
|
||||
expose:
|
||||
- 80
|
||||
environment:
|
||||
NGINX_CACHE_LEVELS: ${NGINX_CACHE_LEVELS:-1:2}
|
||||
NGINX_CACHE_KEYS_ZONE_SIZE: ${NGINX_CACHE_KEYS_ZONE_SIZE:-32m}
|
||||
NGINX_CACHE_MAX_SIZE: ${NGINX_CACHE_MAX_SIZE:-500m}
|
||||
NGINX_CACHE_INACTIVE: ${NGINX_CACHE_INACTIVE:-30d}
|
||||
NGINX_CACHE_USE_TEMP_PATH: ${NGINX_CACHE_USE_TEMP_PATH:-off}
|
||||
NGINX_CACHE_EXPIRES: ${NGINX_CACHE_EXPIRES:-30d}
|
||||
depends_on:
|
||||
- imgproxy
|
||||
volumes:
|
||||
- nginx-cache:/tmp/cache
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- |
|
||||
cat <<EOF > /etc/nginx/conf.d/default.conf
|
||||
proxy_cache_path /tmp/cache levels=$${NGINX_CACHE_LEVELS} keys_zone=my_cache:$${NGINX_CACHE_KEYS_ZONE_SIZE} max_size=$${NGINX_CACHE_MAX_SIZE} inactive=$${NGINX_CACHE_INACTIVE} use_temp_path=$${NGINX_CACHE_USE_TEMP_PATH};
|
||||
|
||||
server {
|
||||
listen 80 default_server;
|
||||
listen [::]:80 default_server;
|
||||
|
||||
location / {
|
||||
expires $${NGINX_CACHE_EXPIRES};
|
||||
access_log off;
|
||||
set \$$handle_webp 0;
|
||||
if (\$$http_accept ~* "image/webp") {
|
||||
set \$$handle_webp 1;
|
||||
}
|
||||
proxy_cache my_cache;
|
||||
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
|
||||
proxy_cache_background_update on;
|
||||
proxy_cache_lock on;
|
||||
proxy_cache_key "\$$scheme\$$host\$$uri\$$handle_webp";
|
||||
server_tokens off;
|
||||
proxy_pass http://imgproxy:8080;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
exec nginx -g 'daemon off;'
|
||||
|
||||
volumes:
|
||||
nginx-cache:
|
||||
|
Before Width: | Height: | Size: 4.5 KiB |
@@ -1,56 +0,0 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
imgproxy_key = "${hash:128}"
|
||||
imgproxy_salt = "${hash:128}"
|
||||
imgproxy_allowed_sources = "http://${main_domain},https://${main_domain}"
|
||||
imgproxy_quality = "80"
|
||||
imgproxy_ttl = "30600"
|
||||
imgproxy_max_src_file_size = "20971520"
|
||||
imgproxy_max_src_resolution = "50"
|
||||
imgproxy_log_level = "error"
|
||||
imgproxy_max_clients = "10"
|
||||
imgproxy_allow_origin = "*"
|
||||
imgproxy_enable_webp_detection = "true"
|
||||
imgproxy_enforce_webp = "true"
|
||||
imgproxy_use_etag = "true"
|
||||
nginx_cache_levels = "1:2"
|
||||
nginx_cache_keys_zone_size = "32m"
|
||||
nginx_cache_max_size = "500m"
|
||||
nginx_cache_inactive = "30d"
|
||||
nginx_cache_use_temp_path = "off"
|
||||
nginx_cache_expires = "30d"
|
||||
|
||||
[config]
|
||||
[[config.domains]]
|
||||
serviceName = "nginx"
|
||||
port = 80
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
IMGPROXY_KEY = "${imgproxy_key}"
|
||||
IMGPROXY_SALT = "${imgproxy_salt}"
|
||||
IMGPROXY_ENABLE_WEBP_DETECTION = "${imgproxy_enable_webp_detection}"
|
||||
IMGPROXY_ENFORCE_WEBP = "${imgproxy_enforce_webp}"
|
||||
IMGPROXY_TTL = "${imgproxy_ttl}"
|
||||
IMGPROXY_DEVELOPMENT_ERRORS_MODE = "false"
|
||||
IMGPROXY_READ_TIMEOUT = "10"
|
||||
IMGPROXY_WRITE_TIMEOUT = "10"
|
||||
IMGPROXY_KEEP_ALIVE_TIMEOUT = "10"
|
||||
IMGPROXY_DOWNLOAD_TIMEOUT = "5"
|
||||
IMGPROXY_CONCURRENCY = ""
|
||||
IMGPROXY_MAX_CLIENTS = "${imgproxy_max_clients}"
|
||||
IMGPROXY_SO_REUSEPORT = ""
|
||||
IMGPROXY_USER_AGENT = ""
|
||||
IMGPROXY_USE_ETAG = "${imgproxy_use_etag}"
|
||||
IMGPROXY_QUALITY = "${imgproxy_quality}"
|
||||
IMGPROXY_ALLOWED_SOURCES = "${imgproxy_allowed_sources}"
|
||||
IMGPROXY_ALLOW_ORIGIN = "${imgproxy_allow_origin}"
|
||||
IMGPROXY_MAX_SRC_FILE_SIZE = "${imgproxy_max_src_file_size}"
|
||||
IMGPROXY_MAX_SRC_RESOLUTION = "${imgproxy_max_src_resolution}"
|
||||
IMGPROXY_LOG_LEVEL = "${imgproxy_log_level}"
|
||||
NGINX_CACHE_LEVELS = "${nginx_cache_levels}"
|
||||
NGINX_CACHE_KEYS_ZONE_SIZE = "${nginx_cache_keys_zone_size}"
|
||||
NGINX_CACHE_MAX_SIZE = "${nginx_cache_max_size}"
|
||||
NGINX_CACHE_INACTIVE = "${nginx_cache_inactive}"
|
||||
NGINX_CACHE_USE_TEMP_PATH = "${nginx_cache_use_temp_path}"
|
||||
NGINX_CACHE_EXPIRES = "${nginx_cache_expires}"
|
||||
@@ -96,6 +96,10 @@ services:
|
||||
]
|
||||
restart: always
|
||||
|
||||
networks:
|
||||
dokploy-network:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
immich-model-cache:
|
||||
immich-postgres:
|
||||
|
||||
@@ -3,7 +3,7 @@ services:
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
image: infisical/infisical:v0.135.0-postgres
|
||||
image: infisical/infisical:v0.90.1-postgres
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- ENCRYPTION_KEY
|
||||
@@ -20,6 +20,7 @@ services:
|
||||
command: npm run migration:latest
|
||||
pull_policy: always
|
||||
|
||||
|
||||
backend:
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
@@ -29,7 +30,7 @@ services:
|
||||
condition: service_started
|
||||
db-migration:
|
||||
condition: service_completed_successfully
|
||||
image: infisical/infisical:v0.135.0-postgres
|
||||
image: infisical/infisical:v0.90.1-postgres
|
||||
pull_policy: always
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
@@ -76,5 +77,7 @@ volumes:
|
||||
pg_infisical_data:
|
||||
redis_infisical_data:
|
||||
|
||||
|
||||
networks:
|
||||
dokploy-network:
|
||||
external: true
|
||||
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
services:
|
||||
postgres:
|
||||
image: ghcr.io/instantdb/postgresql:postgresql-16-pg-hint-plan
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
POSTGRES_USER: ${POSTGRES_USER}
|
||||
POSTGRES_DB: ${POSTGRES_DB}
|
||||
volumes:
|
||||
- backend-db:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD", "pg_isready", "-U", "${POSTGRES_USER}"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
command:
|
||||
- "postgres"
|
||||
- "-c"
|
||||
- "wal_level=logical"
|
||||
- "-c"
|
||||
- "max_replication_slots=4"
|
||||
- "-c"
|
||||
- "max_wal_senders=4"
|
||||
- "-c"
|
||||
- "shared_preload_libraries=pg_hint_plan"
|
||||
- "-c"
|
||||
- "random_page_cost=1.1"
|
||||
server:
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
image: hari1367709/instantdb-server:latest
|
||||
restart: unless-stopped
|
||||
working_dir: /app
|
||||
environment:
|
||||
DATABASE_URL: "postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}"
|
||||
NREPL_BIND_ADDRESS: "0.0.0.0"
|
||||
PORT: "8888"
|
||||
HOST: "0.0.0.0"
|
||||
# AWS Credentials for KMS (required for InstantDB)
|
||||
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
|
||||
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
|
||||
AWS_REGION: ${AWS_REGION:-us-east-1}
|
||||
# Force unbuffered output for logs
|
||||
PYTHONUNBUFFERED: "1"
|
||||
NODE_ENV: "production"
|
||||
command: ["java", "-Djava.awt.headless=true", "-server", "-jar", "target/instant-standalone.jar"]
|
||||
ports:
|
||||
- "8888"
|
||||
- "6005"
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:8888/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
volumes:
|
||||
backend-db:
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="512" height="512" fill="black"/>
|
||||
<rect x="97.0973" y="91.3297" width="140" height="330" fill="white"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 223 B |
@@ -1,29 +0,0 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
postgres_password = "${password:32}"
|
||||
postgres_user = "instant"
|
||||
postgres_db = "instant"
|
||||
aws_access_key_id = "FILL-YOUR-CREDENTIALS"
|
||||
aws_secret_access_key = "FILL-YOUR-CREDENTIALS"
|
||||
aws_region = "us-east-1"
|
||||
|
||||
[config]
|
||||
env = [
|
||||
"POSTGRES_PASSWORD=${postgres_password}",
|
||||
"POSTGRES_USER=${postgres_user}",
|
||||
"POSTGRES_DB=${postgres_db}",
|
||||
"DATABASE_URL=postgresql://${postgres_user}:${postgres_password}@postgres:5432/${postgres_db}",
|
||||
"NREPL_BIND_ADDRESS=0.0.0.0",
|
||||
"PORT=8888",
|
||||
"HOST=0.0.0.0",
|
||||
"AWS_ACCESS_KEY_ID=${aws_access_key_id}",
|
||||
"AWS_SECRET_ACCESS_KEY=${aws_secret_access_key}",
|
||||
"AWS_REGION=${aws_region}",
|
||||
]
|
||||
mounts = []
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "server"
|
||||
port = 8888
|
||||
host = "${main_domain}"
|
||||
|
||||
@@ -20,7 +20,8 @@ services:
|
||||
image: invoiceshelf/invoiceshelf:nightly
|
||||
|
||||
volumes:
|
||||
- invoiceshelf-storage:/var/www/html/storage
|
||||
- invoiceshelf-app-data:/data
|
||||
- invoiceshelf-app-conf:/conf
|
||||
environment:
|
||||
- PHP_TZ=UTC
|
||||
- TIMEZONE=UTC
|
||||
@@ -46,6 +47,11 @@ services:
|
||||
invoiceshelf-postgres:
|
||||
condition: service_healthy
|
||||
|
||||
networks:
|
||||
dokploy-network:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
invoiceshelf-postgres-data:
|
||||
invoiceshelf-storage:
|
||||
invoiceshelf-app-data:
|
||||
invoiceshelf-app-conf:
|
||||
@@ -1,17 +0,0 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
ipfs:
|
||||
image: ipfs/kubo:latest
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- IPFS_PROFILE=server
|
||||
volumes:
|
||||
- ipfs_data:/data/ipfs
|
||||
- ipfs_staging:/export
|
||||
ports:
|
||||
- 4001
|
||||
- 8080
|
||||
- 5001
|
||||
volumes:
|
||||
ipfs_data: {}
|
||||
ipfs_staging: {}
|
||||
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="34.3 0 443.4 512"><defs><linearGradient id="a" x1="84.315" x2="527.72" y1="771.51" y2="771.51" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#4a9ea1"/></linearGradient><linearGradient id="b" x1="99.675" x2="512.36" y1="771.48" y2="771.48" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#63d3d7"/></linearGradient></defs><path fill="url(#a)" d="m84.315 899.51 221.7 128 221.7-128v-256l-221.7-127.99-221.7 128z" transform="translate(-50.017 -515.51)"/><path fill="url(#b)" d="m283.13 546.35-160.74 92.806a38.4 38.4 0 0 1 0 8.59l160.75 92.805c13.554-10 32.043-10 45.597 0l160.75-92.807a38.3 38.3 0 0 1-.001-8.588l-160.74-92.806c-13.554 10.001-32.044 10.001-45.599 0zm221.79 127.03L344 767.22c1.884 16.739-7.361 32.751-22.799 39.489l.18 184.58a38.4 38.4 0 0 1 7.439 4.294l160.75-92.805c-1.884-16.739 7.36-32.752 22.799-39.49v-185.61a38.4 38.4 0 0 1-7.44-4.294zm-397.81 1.032a38.4 38.4 0 0 1-7.438 4.295v185.61c15.438 6.738 24.683 22.75 22.799 39.489l160.74 92.806a38.4 38.4 0 0 1 7.44-4.295v-185.61c-15.439-6.738-24.684-22.75-22.8-39.49l-160.74-92.81z" transform="translate(-50.017 -515.51)"/><path fill-opacity=".251" d="m256 512 221.7-128V128L256 256z"/><path fill-opacity=".039" d="M256 512V256L34.3 128v256z"/><path fill-opacity=".13" d="m34.298 128 221.7 128 221.7-128-221.7-128z"/><path fill="#fff" d="M103.09 186h-29.2v141.2h29.2zm50.88 141.2v-51.8c7.2.6 14.4.6 20.4.6 41.6 0 53.6-20.6 53.6-46 0-30.8-22-44-56-44h-47.2v141.2zm15.8-71.8c-5.4 0-13.4 0-15.8-.2v-48h18.2c17.6 0 27.6 8.4 27.6 23.8v.4c0 12-4.4 24-30 24M327.95 186h-88.6v141.2h29.2V265h55.4v-21.2h-55.6v-36.4h57.6zm95.56 27.6 7.6-19.6c-11.4-8.2-26.8-11.2-46.2-11.2-28.2 0-51.4 13.2-51.4 40.2 0 24.2 17.8 33.8 35.6 39.6l17.8 6c12.2 4.2 22.2 8.2 22.2 21.4 0 12-10.4 16.8-26.2 16.8-16 0-33.2-4.8-43-11l-7.6 21.2c12.8 8.2 29 12.2 50.8 12.2 31 0 55-13.6 55-42.6 0-27-20.6-35.6-41.4-42.6l-19.4-6.4c-8.4-2.8-14.8-6.6-14.8-17.4 0-11 9-15.4 22.4-15.4 16.4 0 29.2 3 38.6 8.8"/></svg>
|
||||
|
Before Width: | Height: | Size: 2.0 KiB |
@@ -1,25 +0,0 @@
|
||||
[variables]
|
||||
gateway_domain = "${domain}"
|
||||
api_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
env = []
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "ipfs"
|
||||
port = 8080
|
||||
host = "${gateway_domain}"
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "ipfs"
|
||||
port = 5001
|
||||
host = "${api_domain}"
|
||||
|
||||
[[config.mounts]]
|
||||
filePath = "/container-init.d/001-configure-api.sh"
|
||||
content = """
|
||||
#!/bin/sh
|
||||
ipfs config Addresses.API /ip4/0.0.0.0/tcp/5001
|
||||
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
|
||||
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "POST", "GET"]'
|
||||
"""
|
||||
@@ -1,13 +0,0 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
jenkins:
|
||||
image: jenkins/jenkins:latest
|
||||
volumes:
|
||||
- jenkins-home:/var/jenkins_home
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
ports:
|
||||
- 8080
|
||||
|
||||
volumes:
|
||||
jenkins-home: {}
|
||||
|
Before Width: | Height: | Size: 22 KiB |
@@ -1,12 +0,0 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
env = {}
|
||||
mounts = []
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "jenkins"
|
||||
port = 8080
|
||||
host = "${main_domain}"
|
||||
|
||||
@@ -40,6 +40,10 @@ services:
|
||||
start_period: 30s
|
||||
|
||||
|
||||
networks:
|
||||
dokploy-network:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
kimai-data:
|
||||
mysql-data:
|
||||
@@ -1,23 +0,0 @@
|
||||
services:
|
||||
kokoro-tts:
|
||||
build:
|
||||
context: https://github.com/remsky/Kokoro-FastAPI.git#master
|
||||
dockerfile: docker/cpu/Dockerfile
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 8880
|
||||
environment:
|
||||
- MODEL_PATH=/app/models
|
||||
- DEVICE=${DEVICE:-cpu}
|
||||
- HOST=0.0.0.0
|
||||
- PORT=8880
|
||||
volumes:
|
||||
- kokoro-models:/app/models
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:8880/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 60s
|
||||
volumes:
|
||||
kokoro-models:
|
||||
@@ -1,12 +0,0 @@
|
||||
<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="64" height="64" rx="12" fill="#3B82F6"/>
|
||||
<path d="M16 24C16 20.6863 18.6863 18 22 18H42C45.3137 18 48 20.6863 48 24V40C48 43.3137 45.3137 46 42 46H22C18.6863 46 16 43.3137 16 40V24Z" fill="white"/>
|
||||
<path d="M24 28H40V32H24V28Z" fill="#3B82F6"/>
|
||||
<path d="M24 34H36V38H24V34Z" fill="#3B82F6"/>
|
||||
<circle cx="32" cy="42" r="2" fill="#3B82F6"/>
|
||||
<path d="M20 22L44 22" stroke="#3B82F6" stroke-width="2" stroke-linecap="round"/>
|
||||
<path d="M20 26L44 26" stroke="#3B82F6" stroke-width="2" stroke-linecap="round"/>
|
||||
<path d="M20 30L44 30" stroke="#3B82F6" stroke-width="2" stroke-linecap="round"/>
|
||||
<path d="M20 34L44 34" stroke="#3B82F6" stroke-width="2" stroke-linecap="round"/>
|
||||
<path d="M20 38L44 38" stroke="#3B82F6" stroke-width="2" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 885 B |
@@ -1,72 +0,0 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
device = "cpu"
|
||||
|
||||
[config]
|
||||
env = [
|
||||
"DEVICE=${device}",
|
||||
"MODEL_PATH=/app/models",
|
||||
"HOST=0.0.0.0",
|
||||
"PORT=8880",
|
||||
"PYTHONUNBUFFERED=1",
|
||||
"UV_SYSTEM_PYTHON=1"
|
||||
]
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "kokoro-tts"
|
||||
port = 8880
|
||||
host = "${main_domain}"
|
||||
path = "/"
|
||||
|
||||
[[config.mounts]]
|
||||
filePath = "README.md"
|
||||
content = """# Kokoro TTS FastAPI
|
||||
|
||||
This template provides a Dockerized FastAPI wrapper for the Kokoro-82M text-to-speech model.
|
||||
|
||||
## Features
|
||||
|
||||
- Multi-language support (English, Japanese, Chinese)
|
||||
- OpenAI-compatible speech endpoint
|
||||
- CPU and GPU support
|
||||
- Web interface for monitoring
|
||||
- RESTful API with comprehensive documentation
|
||||
- Streaming audio generation
|
||||
- Word-level timestamps and phonemes
|
||||
|
||||
## Usage
|
||||
|
||||
- **Web Interface**: Access the web UI at `https://${main_domain}/web`
|
||||
- **API Documentation**: Available at `https://${main_domain}/docs`
|
||||
- **Health Check**: Monitor service health at `https://${main_domain}/health`
|
||||
|
||||
## Configuration
|
||||
|
||||
The service runs on port 8880 and supports both CPU and GPU inference.
|
||||
For GPU support, ensure your Dokploy instance has NVIDIA GPU support enabled.
|
||||
|
||||
## API Endpoints
|
||||
|
||||
- `POST /v1/audio/speech` - Generate speech from text (OpenAI compatible)
|
||||
- `POST /dev/captioned_speech` - Generate speech with timestamps
|
||||
- `POST /dev/phonemize` - Convert text to phonemes
|
||||
- `POST /dev/generate_from_phonemes` - Generate audio from phonemes
|
||||
- `GET /health` - Health check endpoint
|
||||
- `GET /docs` - Interactive API documentation
|
||||
- `GET /web` - Web interface
|
||||
|
||||
## Model Information
|
||||
|
||||
- Model: Kokoro-82M
|
||||
- License: Apache-2.0
|
||||
- Repository: https://github.com/remsky/Kokoro-FastAPI
|
||||
- HuggingFace Model: https://huggingface.co/hexgrad/Kokoro-82M
|
||||
|
||||
## Notes
|
||||
|
||||
- This template builds the image from source during deployment
|
||||
- Uses CPU-optimized Dockerfile by default
|
||||
- Initial build may take several minutes due to model download
|
||||
- Ensure sufficient disk space for model storage
|
||||
- For GPU support, change dockerfile path to `docker/gpu/Dockerfile` in docker-compose.yml
|
||||
"""
|
||||
@@ -1,13 +0,0 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
komari:
|
||||
image: ghcr.io/komari-monitor/komari:latest
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- komari-data:/app/data
|
||||
environment:
|
||||
- ADMIN_USERNAME
|
||||
- ADMIN_PASSWORD
|
||||
|
||||
volumes:
|
||||
komari-data: {}
|
||||
|
Before Width: | Height: | Size: 40 KiB |
@@ -1,15 +0,0 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
admin_password = "${password:16}"
|
||||
|
||||
[config]
|
||||
mounts = []
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "komari"
|
||||
port = 25_774
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
ADMIN_USERNAME = "admin"
|
||||
ADMIN_PASSWORD = "${admin_password}"
|
||||
@@ -7,7 +7,7 @@ services:
|
||||
environment:
|
||||
DB_FILENAME: "/var/lib/kutt/data.sqlite"
|
||||
JWT_SECRET: ${JWT_SECRET}
|
||||
DEFAULT_DOMAIN: ${DEFAULT_DOMAIN}
|
||||
DEFAULT_DOMAIN: ${DOMAIN}
|
||||
TRUST_PROXY: ${TRUST_PROXY}
|
||||
DISALLOW_ANONYMOUS_LINKS: ${DISALLOW_ANONYMOUS_LINKS}
|
||||
CUSTOM_DOMAIN_USE_HTTPS: ${CUSTOM_DOMAIN_USE_HTTPS}
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
services:
|
||||
fix-perms:
|
||||
image: busybox:1.36
|
||||
command: >
|
||||
sh -c "mkdir -p /opt/Lavalink/plugins &&
|
||||
chmod -R 0777 /opt/Lavalink/plugins || true &&
|
||||
chown -R 1000:1000 /opt/Lavalink/plugins || true &&
|
||||
echo perms-fixed && sleep 1"
|
||||
volumes:
|
||||
- "../files/plugins/:/opt/Lavalink/plugins/"
|
||||
- "../files/application.yml:/opt/Lavalink/application.yml"
|
||||
restart: "no"
|
||||
lavalink:
|
||||
image: ghcr.io/lavalink-devs/lavalink:4
|
||||
depends_on:
|
||||
- fix-perms
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
_JAVA_OPTIONS: "${_JAVA_OPTIONS:--Xmx6G}"
|
||||
LAVALINK_SERVER_PASSWORD: "${LAVALINK_SERVER_PASSWORD:-youshallnotpass}"
|
||||
SERVER_PORT: "${SERVER_PORT:-2333}"
|
||||
volumes:
|
||||
- "../files/application.yml:/opt/Lavalink/application.yml:rw"
|
||||
- "../files/plugins/:/opt/Lavalink/plugins/:rw"
|
||||
ports:
|
||||
- ${SERVER_PORT}
|
||||
|
||||
healthcheck:
|
||||
test: >
|
||||
sh -c 'wget --header="Authorization: ${LAVALINK_SERVER_PASSWORD}" -qO- http://127.0.0.1:${SERVER_PORT}/v4/info >/dev/null 2>&1 || exit 1'
|
||||
interval: 100s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
|
||||
entrypoint: >
|
||||
sh -c 'until [ -w /opt/Lavalink/plugins ] ; do
|
||||
echo "waiting for /opt/Lavalink/plugins to be writable";
|
||||
sleep 1;
|
||||
done;
|
||||
exec java -jar /opt/Lavalink/Lavalink.jar'
|
||||
@@ -1,50 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 100 100"
|
||||
width="100%"
|
||||
height="100%"
|
||||
version="1.1"
|
||||
id="svg13"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs7">
|
||||
<linearGradient
|
||||
id="grad"
|
||||
x1="0"
|
||||
y1="0"
|
||||
x2="100"
|
||||
y2="100"
|
||||
spreadMethod="pad"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#ff8c00"
|
||||
id="stop2"
|
||||
style="stop-color:#fa9800;stop-opacity:1;" />
|
||||
<stop
|
||||
offset="100"
|
||||
stop-color="#ff0000"
|
||||
id="stop4"
|
||||
style="stop-color:#ff005e;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect
|
||||
width="100%"
|
||||
height="100%"
|
||||
fill="url(#grad)"
|
||||
id="rect9"
|
||||
x="0"
|
||||
y="0"
|
||||
rx="14"
|
||||
ry="14"
|
||||
style="fill:url(#grad)" />
|
||||
<path
|
||||
style="vector-effect:none;fill:#ffffff;fill-opacity:1;stroke-width:1.27808;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 57,25 h 13 l -7,27 h 12 l -2,8.5 H 48 Z"
|
||||
id="path724-5" />
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke-width:1.33907;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="m 37.5,25 h 14 l -10,40 H 72 L 70,75 H 25 Z"
|
||||
id="path724" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB |
@@ -1,123 +0,0 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
server_port = "2333"
|
||||
lavalink_server_password = "${password}"
|
||||
|
||||
[config]
|
||||
[[config.mounts]]
|
||||
filePath = "./application.yml"
|
||||
content = """
|
||||
server: # REST and WS server
|
||||
port: 2333
|
||||
address: 0.0.0.0
|
||||
http2:
|
||||
enabled: false
|
||||
plugins:
|
||||
# name: # Name of the plugin
|
||||
# some_key: some_value # Some key-value pair for the plugin
|
||||
# another_key: another_value
|
||||
lavalink:
|
||||
plugins:
|
||||
# - dependency: "com.github.username.pluginName:pluginName-plugin:x.y.z"
|
||||
# snapshot: false
|
||||
# pluginsDir: "/opt/Lavalink/plugins"
|
||||
# defaultPluginRepository: "https://maven.lavalink.dev/releases"
|
||||
# defaultPluginSnapshotRepository: "https://maven.lavalink.dev/snapshots"
|
||||
server:
|
||||
password: "youshallnotpass"
|
||||
sources:
|
||||
# The default Youtube source is now deprecated and won't receive further updates. Please use https://github.com/lavalink-devs/youtube-source#plugin instead.
|
||||
youtube: true
|
||||
bandcamp: true
|
||||
soundcloud: true
|
||||
twitch: true
|
||||
vimeo: true
|
||||
nico: true
|
||||
http: true
|
||||
local: false
|
||||
filters:
|
||||
volume: true
|
||||
equalizer: true
|
||||
karaoke: true
|
||||
timescale: true
|
||||
tremolo: true
|
||||
vibrato: true
|
||||
distortion: true
|
||||
rotation: true
|
||||
channelMix: true
|
||||
lowPass: true
|
||||
nonAllocatingFrameBuffer: false
|
||||
bufferDurationMs: 400
|
||||
frameBufferDurationMs: 5000
|
||||
opusEncodingQuality: 10
|
||||
resamplingQuality: LOW
|
||||
trackStuckThresholdMs: 10000
|
||||
useSeekGhosting: true
|
||||
youtubePlaylistLoadLimit: 6
|
||||
playerUpdateInterval: 5
|
||||
youtubeSearchEnabled: true
|
||||
soundcloudSearchEnabled: true
|
||||
gc-warnings: true
|
||||
#ratelimit:
|
||||
#ipBlocks: ["1.0.0.0/8", "..."] # list of ip blocks
|
||||
#excludedIps: ["...", "..."] # ips which should be explicit excluded from usage by lavalink
|
||||
#strategy: "RotateOnBan" # RotateOnBan | LoadBalance | NanoSwitch | RotatingNanoSwitch
|
||||
#searchTriggersFail: true # Whether a search 429 should trigger marking the ip as failing
|
||||
#retryLimit: -1 # -1 = use default lavaplayer value | 0 = infinity | >0 = retry will happen this numbers times
|
||||
#youtubeConfig: # Required for avoiding all age restrictions by YouTube, some restricted videos still can be played without.
|
||||
#email: "" # Email of Google account
|
||||
#password: "" # Password of Google account
|
||||
#httpConfig: # Useful for blocking bad-actors from ip-grabbing your music node and attacking it, this way only the http proxy will be attacked
|
||||
#proxyHost: "localhost" # Hostname of the proxy, (ip or domain)
|
||||
#proxyPort: 3128 # Proxy port, 3128 is the default for squidProxy
|
||||
#proxyUser: "" # Optional user for basic authentication fields, leave blank if you don't use basic auth
|
||||
#proxyPassword: "" # Password for basic authentication
|
||||
timeouts:
|
||||
connectTimeoutMs: 3000
|
||||
connectionRequestTimeoutMs: 3000
|
||||
socketTimeoutMs: 3000
|
||||
|
||||
metrics:
|
||||
prometheus:
|
||||
enabled: false
|
||||
endpoint: /metrics
|
||||
|
||||
sentry:
|
||||
dsn: ""
|
||||
environment: ""
|
||||
# tags:
|
||||
# some_key: some_value
|
||||
# another_key: another_value
|
||||
|
||||
logging:
|
||||
file:
|
||||
path: ./logs/
|
||||
|
||||
level:
|
||||
root: INFO
|
||||
lavalink: INFO
|
||||
|
||||
request:
|
||||
enabled: true
|
||||
includeClientInfo: true
|
||||
includeHeaders: false
|
||||
includeQueryString: true
|
||||
includePayload: true
|
||||
maxPayloadLength: 10000
|
||||
|
||||
|
||||
logback:
|
||||
rollingpolicy:
|
||||
max-file-size: 1GB
|
||||
max-history: 30
|
||||
"""
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "lavalink"
|
||||
port = 2_333
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
_JAVA_OPTIONS = "-Xmx6G"
|
||||
LAVALINK_SERVER_PASSWORD = "${lavalink_server_password}"
|
||||
SERVER_PORT = "${server_port}"
|
||||
@@ -1,110 +0,0 @@
|
||||
# LibreChat Docker Compose for Dokploy Template
|
||||
# Setting up authentication: "npm run create-user", refer to https://www.librechat.ai/docs/configuration/authentication
|
||||
|
||||
services:
|
||||
librechat:
|
||||
image: ghcr.io/danny-avila/librechat-dev:latest
|
||||
restart: always
|
||||
depends_on:
|
||||
- mongodb
|
||||
- rag_api
|
||||
environment:
|
||||
# Server Configuration
|
||||
- HOST=0.0.0.0
|
||||
- PORT=${PORT:-3080}
|
||||
# Domain Configuration
|
||||
- DOMAIN_CLIENT=${DOMAIN_CLIENT}
|
||||
- DOMAIN_SERVER=${DOMAIN_SERVER}
|
||||
# Database and Search Configuration
|
||||
- MONGO_URI=mongodb://mongodb:27017/LibreChat
|
||||
- MEILI_HOST=http://meilisearch:7700
|
||||
- SEARCH=true
|
||||
- NO_INDEX=true
|
||||
- MEILI_NO_ANALYTICS=true
|
||||
- MEILI_MASTER_KEY=${MEILI_MASTER_KEY}
|
||||
# Security & Sessions
|
||||
- JWT_SECRET=${JWT_SECRET}
|
||||
- JWT_REFRESH_SECRET=${JWT_REFRESH_SECRET}
|
||||
- CREDS_KEY=${CREDS_KEY}
|
||||
- CREDS_IV=${CREDS_IV}
|
||||
- RAG_PORT=${RAG_PORT:-8000}
|
||||
- RAG_API_URL=http://rag_api:${RAG_PORT:-8000}
|
||||
# API Keys and Secrets
|
||||
- OPENAI_API_KEY=${OPENAI_API_KEY}
|
||||
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
|
||||
- OPENROUTER_KEY=${OPENROUTER_KEY}
|
||||
- GOOGLE_KEY=${GOOGLE_KEY}
|
||||
- ENDPOINTS=google,openAI,assistants,azureOpenAI,anthropic
|
||||
# ... Additional Endpoints
|
||||
# UI
|
||||
- APP_TITLE=${APP_TITLE:-LibreChat}
|
||||
- CUSTOM_FOOTER=${CUSTOM_FOOTER:-Made with ❤️ by LibreChat}
|
||||
- ALLOW_EMAIL_LOGIN=${ALLOW_EMAIL_LOGIN:-true}
|
||||
- ALLOW_SOCIAL_LOGIN=${ALLOW_SOCIAL_LOGIN:-false}
|
||||
- ALLOW_REGISTRATION=${ALLOW_REGISTRATION:-false}
|
||||
volumes:
|
||||
- type: bind
|
||||
source: ../files/librechat.yaml
|
||||
target: /app/librechat.yaml
|
||||
- librechat_data:/app/client/public/images
|
||||
- librechat_data:/app/uploads
|
||||
- librechat_data:/app/logs
|
||||
|
||||
mongodb:
|
||||
image: mongo
|
||||
restart: always
|
||||
volumes:
|
||||
- mongo_data:/data/db
|
||||
command: mongod --noauth
|
||||
|
||||
meilisearch:
|
||||
image: getmeili/meilisearch:v1.12.3
|
||||
restart: always
|
||||
environment:
|
||||
- MEILI_HOST=http://meilisearch:7700
|
||||
- MEILI_NO_ANALYTICS=true
|
||||
- MEILI_MASTER_KEY=${MEILI_MASTER_KEY}
|
||||
volumes:
|
||||
- meili_data:/meili_data
|
||||
|
||||
vectordb:
|
||||
image: pgvector/pgvector:0.8.0-pg15-trixie
|
||||
environment:
|
||||
- POSTGRES_DB=${POSTGRES_DB:-mydatabase}
|
||||
- POSTGRES_USER=${POSTGRES_USER:-myuser}
|
||||
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-mypassword}
|
||||
restart: always
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
|
||||
rag_api:
|
||||
image: ghcr.io/danny-avila/librechat-rag-api-dev-lite:latest
|
||||
environment:
|
||||
- DB_HOST=vectordb
|
||||
- VECTOR_DB_TYPE=pgvector
|
||||
- POSTGRES_DB=${POSTGRES_DB:-mydatabase}
|
||||
- POSTGRES_USER=${POSTGRES_USER:-myuser}
|
||||
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-mypassword}
|
||||
- RAG_PORT=${RAG_PORT:-8000}
|
||||
- OPENAI_API_KEY=${OPENAI_API_KEY}
|
||||
- RAG_OPENAI_API_KEY=${RAG_OPENAI_API_KEY}
|
||||
- GOOGLE_KEY=${GOOGLE_KEY}
|
||||
- RAG_GOOGLE_API_KEY=${RAG_GOOGLE_API_KEY}
|
||||
- JWT_SECRET=${JWT_SECRET}
|
||||
- COLLECTION_NAME=${COLLECTION_NAME:-librechat_collection}
|
||||
- CHUNK_SIZE=${CHUNK_SIZE:-1500}
|
||||
- CHUNK_OVERLAP=${CHUNK_OVERLAP:-100}
|
||||
- EMBEDDINGS_PROVIDER=${EMBEDDINGS_PROVIDER:-openai}
|
||||
- EMBEDDINGS_MODEL=${EMBEDDINGS_MODEL:-text-embedding-3-small}
|
||||
- DEBUG_RAG_API=false
|
||||
- DEBUG_PGVECTOR_QUERIES=false
|
||||
- CONSOLE_JSON=false
|
||||
restart: always
|
||||
depends_on:
|
||||
- vectordb
|
||||
|
||||
volumes:
|
||||
mongo_data:
|
||||
meili_data:
|
||||
postgres_data:
|
||||
librechat_data:
|
||||
|
Before Width: | Height: | Size: 58 KiB |
@@ -1,93 +0,0 @@
|
||||
[variables]
|
||||
# Domain Configuration
|
||||
main_domain = "${domain}"
|
||||
|
||||
# Security & Authentication
|
||||
jwt_secret = "${password:64}"
|
||||
jwt_refresh_secret = "${password:64}"
|
||||
creds_key = "f34be427ebb29de8d88c107a71546019685ed8b241d8f2ed00c3df97ad2566f0"
|
||||
creds_iv = "e2341419ec3dd3d19b13a1a87fafcbfb"
|
||||
meili_master_key = "${password:32}"
|
||||
|
||||
# Database Configuration
|
||||
mongo_password = "${password:16}"
|
||||
postgresql_password = "${password:16}"
|
||||
|
||||
[config]
|
||||
version = "1.0.0"
|
||||
# Main service domain mapping
|
||||
[[config.domains]]
|
||||
serviceName = "librechat"
|
||||
port = 3080
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
# Basic Configuration
|
||||
HOST="0.0.0.0"
|
||||
PORT="3080"
|
||||
DOMAIN_CLIENT="https://${main_domain}"
|
||||
DOMAIN_SERVER="https://${main_domain}"
|
||||
|
||||
# Search Configuration
|
||||
MEILI_MASTER_KEY="${meili_master_key}"
|
||||
|
||||
# Security
|
||||
JWT_SECRET="${jwt_secret}"
|
||||
JWT_REFRESH_SECRET="${jwt_refresh_secret}"
|
||||
CREDS_KEY="${creds_key}"
|
||||
CREDS_IV="${creds_iv}"
|
||||
|
||||
# API Keys
|
||||
OPENAI_API_KEY=""
|
||||
ANTHROPIC_API_KEY=""
|
||||
GOOGLE_KEY=""
|
||||
OPENROUTER_KEY=""
|
||||
|
||||
# Database
|
||||
POSTGRES_DB="librechat_db"
|
||||
POSTGRES_USER="librechat_user"
|
||||
POSTGRES_PASSWORD="${postgresql_password}"
|
||||
|
||||
# Security & Sessions
|
||||
|
||||
# User Interface
|
||||
APP_TITLE="LibreChat"
|
||||
CUSTOM_FOOTER="Made with ❤️ by LibreChat"
|
||||
ALLOW_EMAIL_LOGIN="true"
|
||||
ALLOW_REGISTRATION="false"
|
||||
ALLOW_SOCIAL_LOGIN="false"
|
||||
|
||||
# RAG
|
||||
RAG_OPENAI_API_KEY=""
|
||||
RAG_GOOGLE_API_KEY=""
|
||||
EMBEDDINGS_PROVIDER="openai"
|
||||
EMBEDDINGS_MODEL="text-embedding-3-small"
|
||||
|
||||
CHUNK_SIZE=1500
|
||||
CHUNK_OVERLAP=100
|
||||
|
||||
|
||||
|
||||
[[config.mounts]]
|
||||
filePath = "librechat.yaml"
|
||||
content = """
|
||||
### librechat.yaml configs ###
|
||||
|
||||
version: 1.2.8
|
||||
cache: true
|
||||
endpoints:
|
||||
custom:
|
||||
- name: "OpenRouter"
|
||||
apiKey: "${OPENROUTER_KEY}"
|
||||
baseURL: "https://openrouter.ai/api/v1"
|
||||
models:
|
||||
default: ["meta-llama/llama-3.3-70b-instruct:free"]
|
||||
fetch: true
|
||||
titleConvo: true
|
||||
titleModel: "current_model"
|
||||
summarize: false
|
||||
summaryModel: "current_model"
|
||||
forcePrompt: false
|
||||
dropParams: ["stop"]
|
||||
modelDisplayLabel: "OpenRouter"
|
||||
"""
|
||||
@@ -46,6 +46,9 @@ services:
|
||||
volumes:
|
||||
- redis-data:/data
|
||||
|
||||
networks:
|
||||
libredesk:
|
||||
|
||||
volumes:
|
||||
postgres-data:
|
||||
redis-data:
|
||||
@@ -31,6 +31,9 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
networks:
|
||||
dokploy-network:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
logto-connectors:
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
# https://docs.mage.ai/getting-started/setup#docker-compose
|
||||
#
|
||||
# The default credentials are:
|
||||
# USERNAME: admin@admin.com
|
||||
# PASSWORD: admin
|
||||
|
||||
services:
|
||||
mage-ai:
|
||||
image: mageai/mageai:0.9.78
|
||||
command: mage start ${PROJECT_NAME}
|
||||
environment:
|
||||
USER_CODE_PATH: /home/src/${PROJECT_NAME}
|
||||
ENV: ${ENV}
|
||||
expose:
|
||||
- 6789
|
||||
volumes:
|
||||
- mageai_data:/home/src/
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-s", "-f", "-o", "/dev/null", "http://localhost:6789"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
|
||||
volumes:
|
||||
mageai_data:
|
||||
@@ -1,38 +0,0 @@
|
||||
<!-- https://github.com/mage-ai/mage-ai/blob/14f0154629b33968535cf3e23bdf5fd1f4fa6957/docs/favicons/logo/m1.svg -->
|
||||
<svg width="1000" height="1000" viewBox="0 0 1000 1000" fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M458.083 24.2003C484.021 9.22512 515.978 9.22511 541.916 24.2003L891.096 225.8C917.034 240.775 933.012 268.45 933.012 298.401V701.599C933.012 731.55 917.034 759.225 891.096 774.2L541.916 975.8C515.978 990.775 484.021 990.775 458.083 975.8L108.903 774.2C82.9652 759.225 66.9868 731.55 66.9868 701.599V298.401C66.9868 268.45 82.9652 240.775 108.903 225.8L458.083 24.2003Z"
|
||||
fill="black" />
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M503.344 86.6308C498.131 85.8964 492.73 86.8879 488.024 89.6054L150.576 284.431L144.587 274.06L482.036 79.2339C493.152 72.8159 506.847 72.8159 517.964 79.2339L855.412 274.06C866.528 280.478 873.376 292.338 873.376 305.174V694.826C873.376 707.662 866.528 719.523 855.412 725.94L517.964 920.766C506.847 927.184 493.152 927.184 482.036 920.766L144.587 725.94C133.471 719.523 126.623 707.662 126.623 694.826V305.174C126.623 292.338 133.471 280.478 144.587 274.06L150.576 284.431C148.673 285.529 146.959 286.867 145.461 288.392L500 493.086L678.508 390.024L503.344 86.6308ZM522.347 95.5935L849.424 284.431C851.326 285.529 853.041 286.867 854.539 288.392L688.88 384.036L522.347 95.5935ZM138.599 317.15V694.826C138.599 697.022 138.9 699.176 139.473 701.236L305.132 605.593L138.599 317.15ZM145.461 711.607C146.959 713.133 148.673 714.471 150.576 715.569L477.652 904.407L311.12 615.964L145.461 711.607ZM496.655 913.369C501.868 914.104 507.269 913.112 511.976 910.395L849.424 715.569C851.326 714.471 853.041 713.133 854.539 711.607L500 506.914L321.491 609.976L496.655 913.369ZM861.4 682.85V305.174C861.4 302.978 861.099 300.824 860.527 298.764L694.868 394.407L861.4 682.85ZM511.976 500L684.496 400.395L857.016 699.209L511.976 500ZM142.983 300.791L488.024 500L315.503 599.605L142.983 300.791Z"
|
||||
fill="#313131" />
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M503.344 86.6308C498.131 85.8964 492.73 86.8879 488.024 89.6054L150.576 284.431L144.587 274.06L482.036 79.2339C493.152 72.8159 506.847 72.8159 517.964 79.2339L855.412 274.06C866.528 280.478 873.376 292.338 873.376 305.174V694.826C873.376 707.662 866.528 719.523 855.412 725.94L517.964 920.766C506.847 927.184 493.152 927.184 482.036 920.766L144.587 725.94C133.471 719.523 126.623 707.662 126.623 694.826V305.174C126.623 292.338 133.471 280.478 144.587 274.06L150.576 284.431C148.673 285.529 146.959 286.867 145.461 288.392L500 493.086L678.508 390.024L503.344 86.6308ZM522.347 95.5935L849.424 284.431C851.326 285.529 853.041 286.867 854.539 288.392L688.88 384.036L522.347 95.5935ZM138.599 317.15V694.826C138.599 697.022 138.9 699.176 139.473 701.236L305.132 605.593L138.599 317.15ZM145.461 711.607C146.959 713.133 148.673 714.471 150.576 715.569L477.652 904.407L311.12 615.964L145.461 711.607ZM496.655 913.369C501.868 914.104 507.269 913.112 511.976 910.395L849.424 715.569C851.326 714.471 853.041 713.133 854.539 711.607L500 506.914L321.491 609.976L496.655 913.369ZM861.4 682.85V305.174C861.4 302.978 861.099 300.824 860.527 298.764L694.868 394.407L861.4 682.85ZM511.976 500L684.496 400.395L857.016 699.209L511.976 500ZM142.983 300.791L488.024 500L315.503 599.605L142.983 300.791Z"
|
||||
fill="url(#paint0_linear_7285_95)" />
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M503.344 86.6308C498.131 85.8964 492.73 86.8879 488.024 89.6054L150.576 284.431L144.587 274.06L482.036 79.2339C493.152 72.8159 506.847 72.8159 517.964 79.2339L855.412 274.06C866.528 280.478 873.376 292.338 873.376 305.174V694.826C873.376 707.662 866.528 719.523 855.412 725.94L517.964 920.766C506.847 927.184 493.152 927.184 482.036 920.766L144.587 725.94C133.471 719.523 126.623 707.662 126.623 694.826V305.174C126.623 292.338 133.471 280.478 144.587 274.06L150.576 284.431C148.673 285.529 146.959 286.867 145.461 288.392L500 493.086L678.508 390.024L503.344 86.6308ZM522.347 95.5935L849.424 284.431C851.326 285.529 853.041 286.867 854.539 288.392L688.88 384.036L522.347 95.5935ZM138.599 317.15V694.826C138.599 697.022 138.9 699.176 139.473 701.236L305.132 605.593L138.599 317.15ZM145.461 711.607C146.959 713.133 148.673 714.471 150.576 715.569L477.652 904.407L311.12 615.964L145.461 711.607ZM496.655 913.369C501.868 914.104 507.269 913.112 511.976 910.395L849.424 715.569C851.326 714.471 853.041 713.133 854.539 711.607L500 506.914L321.491 609.976L496.655 913.369ZM861.4 682.85V305.174C861.4 302.978 861.099 300.824 860.527 298.764L694.868 394.407L861.4 682.85ZM511.976 500L684.496 400.395L857.016 699.209L511.976 500ZM142.983 300.791L488.024 500L315.503 599.605L142.983 300.791Z"
|
||||
fill="url(#paint1_linear_7285_95)" />
|
||||
<path
|
||||
d="M687.125 317.066L747.006 423.353L699.7 457.186L700.428 543.86V707.764L411.377 712.575H276.062L236.526 617.365L309.05 500.908L395.509 317.066H687.125Z"
|
||||
fill="black" />
|
||||
<path opacity="0.4"
|
||||
d="M578.227 368.959L657.132 368.96L510.123 650.724L431.219 650.724L578.227 368.959Z"
|
||||
fill="white" />
|
||||
<path
|
||||
d="M510.124 368.96L431.66 368.959L284.652 650.724H363.556L431.22 521.037V650.724H510.123V368.961L510.124 368.96Z"
|
||||
fill="white" />
|
||||
<path d="M578.228 368.96H657.131V650.724H578.228V368.96Z" fill="white" />
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_7285_95" x1="500" y1="74.4204" x2="272.155" y2="925.748"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#00FB82" stop-opacity="0" />
|
||||
<stop offset="1" stop-color="#00FB82" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_7285_95" x1="431.137" y1="500" x2="626.946" y2="191.018"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#1DE4FF" stop-opacity="0.1" />
|
||||
<stop offset="1" stop-color="#0A7BFF" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 5.8 KiB |
@@ -1,11 +0,0 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "mage-ai"
|
||||
port = 6789
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
PROJECT_NAME = "mage-ai"
|
||||
ENV = "production"
|
||||
@@ -1,131 +0,0 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
# -------------------------------------------------------------------------
|
||||
# Service 1: Database
|
||||
# -------------------------------------------------------------------------
|
||||
mysql:
|
||||
image: mysql:8.0
|
||||
command: --default-authentication-plugin=mysql_native_password
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
||||
MYSQL_DATABASE: ${MAUTIC_DB_DATABASE}
|
||||
MYSQL_USER: ${MAUTIC_DB_USER}
|
||||
MYSQL_PASSWORD: ${MAUTIC_DB_PASSWORD}
|
||||
volumes:
|
||||
- mysql_data:/var/lib/mysql
|
||||
healthcheck:
|
||||
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Service 2: Mautic Web (The Leader)
|
||||
# -------------------------------------------------------------------------
|
||||
mautic:
|
||||
image: mautic/mautic:5.1.1-apache
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
mysql:
|
||||
condition: service_healthy
|
||||
ports:
|
||||
- 80
|
||||
environment:
|
||||
- DOCKER_MAUTIC_ROLE=mautic_web
|
||||
- DOCKER_MAUTIC_RUN_MIGRATIONS=true
|
||||
- MAUTIC_DB_HOST=${MAUTIC_DB_HOST}
|
||||
- MAUTIC_DB_PORT=${MAUTIC_DB_PORT}
|
||||
- MAUTIC_DB_DATABASE=${MAUTIC_DB_DATABASE}
|
||||
- MAUTIC_DB_USER=${MAUTIC_DB_USER}
|
||||
- MAUTIC_DB_PASSWORD=${MAUTIC_DB_PASSWORD}
|
||||
- MAUTIC_URL=${MAUTIC_URL}
|
||||
- MAUTIC_TRUSTED_PROXIES=${MAUTIC_TRUSTED_PROXIES}
|
||||
- MAUTIC_MESSENGER_DSN_EMAIL=${MAUTIC_MESSENGER_DSN_EMAIL}
|
||||
- MAUTIC_MESSENGER_DSN_HIT=${MAUTIC_MESSENGER_DSN_HIT}
|
||||
- PHP_INI_DATE_TIMEZONE=${PHP_INI_DATE_TIMEZONE}
|
||||
- PHP_MEMORY_LIMIT=${PHP_MEMORY_LIMIT}
|
||||
volumes:
|
||||
- mautic_data:/var/www/html
|
||||
# AUTOMATION FIX 1: Force permissions to be correct on every start
|
||||
entrypoint: ["/bin/sh", "-c", "chown -R www-data:www-data /var/www/html && /entrypoint.sh apache2-foreground"]
|
||||
# AUTOMATION FIX 2: Check if the CONFIG FILE exists. If not, report 'unhealthy'.
|
||||
# This signals the other containers to keep waiting.
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "test -f /var/www/html/config/local.php || exit 1"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 300s # Give you 5 mins to run the installer before marking failed
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Service 3: Mautic Cron (Waits for Install)
|
||||
# -------------------------------------------------------------------------
|
||||
mautic-cron:
|
||||
image: mautic/mautic:5.1.1-apache
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
mautic:
|
||||
condition: service_healthy # AUTOMATION FIX 3: Do not start until config file exists
|
||||
environment:
|
||||
- DOCKER_MAUTIC_ROLE=mautic_cron
|
||||
- MAUTIC_DB_HOST=${MAUTIC_DB_HOST}
|
||||
- MAUTIC_DB_PORT=${MAUTIC_DB_PORT}
|
||||
- MAUTIC_DB_DATABASE=${MAUTIC_DB_DATABASE}
|
||||
- MAUTIC_DB_USER=${MAUTIC_DB_USER}
|
||||
- MAUTIC_DB_PASSWORD=${MAUTIC_DB_PASSWORD}
|
||||
- MAUTIC_URL=${MAUTIC_URL}
|
||||
- PHP_INI_DATE_TIMEZONE=${PHP_INI_DATE_TIMEZONE}
|
||||
volumes:
|
||||
- mautic_data:/var/www/html
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Service 4: Mautic Worker (Waits for Install)
|
||||
# -------------------------------------------------------------------------
|
||||
mautic-worker:
|
||||
image: mautic/mautic:5.1.1-apache
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
mautic:
|
||||
condition: service_healthy # AUTOMATION FIX 3: Do not start until config file exists
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 512M
|
||||
environment:
|
||||
- DOCKER_MAUTIC_ROLE=mautic_worker
|
||||
- DOCKER_MAUTIC_WORKERS_CONSUME_EMAIL=2
|
||||
- DOCKER_MAUTIC_WORKERS_CONSUME_HIT=2
|
||||
- DOCKER_MAUTIC_WORKERS_CONSUME_FAILED=2
|
||||
- MAUTIC_DB_HOST=${MAUTIC_DB_HOST}
|
||||
- MAUTIC_DB_PORT=${MAUTIC_DB_PORT}
|
||||
- MAUTIC_DB_DATABASE=${MAUTIC_DB_DATABASE}
|
||||
- MAUTIC_DB_USER=${MAUTIC_DB_USER}
|
||||
- MAUTIC_DB_PASSWORD=${MAUTIC_DB_PASSWORD}
|
||||
- MAUTIC_URL=${MAUTIC_URL}
|
||||
- MAUTIC_MESSENGER_DSN_EMAIL=${MAUTIC_MESSENGER_DSN_EMAIL}
|
||||
- MAUTIC_MESSENGER_DSN_HIT=${MAUTIC_MESSENGER_DSN_HIT}
|
||||
- PHP_INI_DATE_TIMEZONE=${PHP_INI_DATE_TIMEZONE}
|
||||
volumes:
|
||||
- mautic_data:/var/www/html
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Service 5: phpMyAdmin
|
||||
# -------------------------------------------------------------------------
|
||||
phpmyadmin:
|
||||
image: phpmyadmin/phpmyadmin
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
mysql:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
PMA_HOST: mysql
|
||||
PMA_PORT: 3306
|
||||
UPLOAD_LIMIT: 64M
|
||||
ports:
|
||||
- 80
|
||||
|
||||
volumes:
|
||||
mysql_data:
|
||||
mautic_data:
|
||||
@@ -1,76 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 242.6 230.8" enable-background="new 0 0 242.6 230.8" xml:space="preserve">
|
||||
<g id="tagline">
|
||||
<g>
|
||||
<path fill="#8790B8" d="M0,206.6h12.3v1.8H2.2v6.6h9.4v1.8H2.2v8H0V206.6z"/>
|
||||
<path fill="#8790B8" d="M22,213.4c-2.9,0-4.9,2.3-5,5v6.3h-2v-13h2v3.7c0.9-2.3,2.7-3.8,5-3.8V213.4z"/>
|
||||
<path fill="#8790B8" d="M25.4,218.8c0.2,2.6,2.1,4.4,4.8,4.4c1.6,0,2.8-0.5,3.7-1.4c0.4,0.4,0.8,0.8,1.1,1.1
|
||||
c-1.2,1.2-2.9,1.9-4.9,1.9c-4,0-6.7-2.7-6.7-6.6c0-3.9,2.5-6.6,6.2-6.6c3.6,0,6.1,2.7,6.1,6.6v0.6H25.4z M33.7,217.4
|
||||
c-0.1-2.5-1.8-4.1-4.1-4.1c-2.3,0-3.9,1.7-4.2,4.1H33.7z"/>
|
||||
<path fill="#8790B8" d="M39.7,218.8c0.2,2.6,2.1,4.4,4.8,4.4c1.6,0,2.8-0.5,3.7-1.4c0.4,0.4,0.8,0.8,1.1,1.1
|
||||
c-1.2,1.2-2.9,1.9-4.9,1.9c-4,0-6.7-2.7-6.7-6.6c0-3.9,2.5-6.6,6.2-6.6c3.6,0,6.1,2.7,6.1,6.6v0.6H39.7z M47.9,217.4
|
||||
c-0.1-2.5-1.8-4.1-4.1-4.1c-2.3,0-3.9,1.7-4.2,4.1H47.9z"/>
|
||||
<path fill="#8790B8" d="M67.7,227.2c-0.9,2-2,3.5-3.9,3.5c-1.2,0-2.2-0.3-2.9-1.1l1-1.1c0.4,0.4,1.1,0.5,1.8,0.5
|
||||
c1.1,0,1.8-1.1,2.4-2.5l0.9-1.8L61,211.8h2l4.8,10.7l4.9-10.7h2L67.7,227.2z"/>
|
||||
<path fill="#8790B8" d="M81.4,211.6c3.9,0,6.6,2.7,6.6,6.6c0,3.9-2.7,6.6-6.6,6.6c-3.9,0-6.6-2.7-6.6-6.6
|
||||
C74.8,214.3,77.5,211.6,81.4,211.6z M81.4,223.2c2.7,0,4.6-2,4.6-5s-1.9-5-4.6-5c-2.7,0-4.6,2-4.6,5S78.6,223.2,81.4,223.2z"/>
|
||||
<path fill="#8790B8" d="M92.1,219.4c0,2.3,1.5,3.8,3.5,3.8c2.4,0,4.1-2.2,4.1-4.8v-6.6h2v13h-2v-3.2c-0.9,2-2.7,3.4-5,3.4
|
||||
c-2.8,0-4.7-2.1-4.7-5.2v-7.9h2V219.4z"/>
|
||||
<path fill="#8790B8" d="M111.9,213.4c-2.9,0-4.9,2.3-5,5v6.3h-2v-13h2v3.7c0.9-2.3,2.7-3.8,5-3.8V213.4z"/>
|
||||
<path fill="#8790B8" d="M131.4,216.5c0-1.9-1.1-3.2-2.8-3.2c-2,0-3.5,1.7-3.5,4v7.4h-2v-13h2v2.5c0.9-1.6,2.4-2.6,4.3-2.6
|
||||
c1.7,0,3,1,3.6,2.6c0.9-1.6,2.5-2.6,4.6-2.6c2.5,0,4.2,2,4.2,4.9v8.2h-2v-8.2c0-1.9-1.1-3.2-2.8-3.2c-2,0-3.5,1.7-3.6,4v7.4h-2
|
||||
V216.5z"/>
|
||||
<path fill="#8790B8" d="M144.6,213.4c1.3-1.1,2.9-1.8,5-1.8c3.2,0,5.5,2,5.5,4.8v8.3h-2v-2.9c-0.8,1.8-2.5,3-4.7,3
|
||||
c-2.6,0-4.4-1.5-4.4-3.7c0-2.5,2.5-4.2,6.1-4.2c1,0,2,0.1,2.9,0.3v-0.8c0-1.9-1.4-3.2-3.4-3.2c-1.5,0-3,0.3-4,1.2L144.6,213.4z
|
||||
M150.2,218.2c-2.5,0-4.3,1.1-4.3,2.7c0,1.3,1.3,2.2,3.1,2.2c2.4,0,4-2.1,4-4.6C152.1,218.3,151.3,218.2,150.2,218.2z"/>
|
||||
<path fill="#8790B8" d="M165.2,213.4c-2.9,0-4.9,2.3-5,5v6.3h-2v-13h2v3.7c0.9-2.3,2.7-3.8,5-3.8V213.4z"/>
|
||||
<path fill="#8790B8" d="M167.6,224.7v-18.8h2v12.1l6.1-6.3h2.4l-5.5,5.8l6.4,7.2h-2.3l-5.3-5.9l-1.7,1.9v4H167.6z"/>
|
||||
<path fill="#8790B8" d="M181.5,218.8c0.2,2.6,2.1,4.4,4.8,4.4c1.6,0,2.8-0.5,3.7-1.4c0.4,0.4,0.8,0.8,1.1,1.1
|
||||
c-1.2,1.2-2.9,1.9-4.9,1.9c-4,0-6.7-2.7-6.7-6.6c0-3.9,2.5-6.6,6.2-6.6s6.1,2.7,6.1,6.6v0.6H181.5z M189.7,217.4
|
||||
c-0.1-2.5-1.8-4.1-4.1-4.1c-2.3,0-3.9,1.7-4.2,4.1H189.7z"/>
|
||||
<path fill="#8790B8" d="M192.9,211.8h1.9v-3h2v3h4.8v1.6h-4.8v6.8c0,1.8,1.2,3,2.8,3c0.9,0,1.6-0.3,2.1-0.8l1.1,1.1
|
||||
c-0.9,0.9-2,1.4-3.4,1.4c-2.7,0-4.6-1.9-4.6-4.7v-6.7h-1.9V211.8z"/>
|
||||
<path fill="#8790B8" d="M204.8,206.6h2v2.4h-2V206.6z M204.8,224.7v-13h2v13H204.8z"/>
|
||||
<path fill="#8790B8" d="M219.5,216.9c0-2.2-1.4-3.7-3.5-3.7c-2.5,0-4.1,2.3-4.1,5.1v6.4h-2v-13h2v3.3c0.9-2,2.7-3.4,5-3.4
|
||||
c2.8,0,4.7,2,4.7,4.9v8.2h-2V216.9z"/>
|
||||
<path fill="#8790B8" d="M225.1,227.7c0.9,0.8,2.3,1.3,4,1.3c2.7,0,4.5-1.8,4.5-4.3v-2.9c-0.9,1.8-2.6,3-4.9,3
|
||||
c-3.1,0-5.2-2.6-5.2-6.3c0-4.1,3-6.9,7.3-6.9c1.8,0,3.4,0.3,4.8,0.9v12.2c0,3.5-2.7,6-6.5,6c-2.1,0-3.8-0.7-5.1-1.9L225.1,227.7z
|
||||
M233.6,213.8c-0.9-0.3-2-0.5-3.2-0.5c-2.9,0-4.9,2.2-4.9,5.2c0,2.8,1.7,4.7,4.1,4.7c2.3,0,4-1.7,4-3.8V213.8z"/>
|
||||
<path fill="#8790B8" d="M240,219.2v-12.6h2v12.6H240z M240,221.8h2v2.9h-2V221.8z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="logo">
|
||||
<g>
|
||||
<path fill="#4E5E9E" d="M26.1,187.9v-20.8c0-5.1-2.7-9.8-8-9.8c-5.2,0-8.3,4.6-8.3,9.8v20.8H0.3V149h8.9l0.7,4.7
|
||||
c2-3.9,6.5-5.4,10.2-5.4c4.6,0,9.3,1.9,11.5,7.2c3.5-5.5,8-7.1,13-7.1c11,0,16.5,6.8,16.5,18.4v21h-9.6v-21c0-5.1-2.1-9.5-7.3-9.5
|
||||
c-5.2,0-8.4,4.5-8.4,9.6v20.8H26.1z"/>
|
||||
<path fill="#4E5E9E" d="M98.5,149.1h9.2v38.8h-9.1l-0.5-5.7c-2.2,4.6-8.3,6.8-12.6,6.9c-11.5,0.1-20-7-20-20.6
|
||||
c0-13.4,8.9-20.4,20.2-20.3c5.2,0,10.2,2.4,12.4,6.3L98.5,149.1z M75.2,168.5c0,7.4,5.1,11.8,11.5,11.8c15.1,0,15.1-23.6,0-23.6
|
||||
C80.3,156.7,75.2,161.1,75.2,168.5z"/>
|
||||
<path fill="#4E5E9E" d="M123.5,149.1v20.3c0,5.9,3.2,10.4,9.4,10.4c5.9,0,9.9-5,9.9-10.9v-19.9h9.5V188h-8.6l-0.6-5.3
|
||||
c-4,3.9-7.7,5.8-13.2,5.8c-9.3,0-16.1-7-16.1-19.1v-20.4H123.5z"/>
|
||||
<path fill="#4E5E9E" d="M174.4,138.1v11h10.7v8.3h-10.8v16.8c0,3.7,2,5.5,5,5.5c1.5,0,3.2-0.5,4.6-1.2l2.7,8.2
|
||||
c-2.8,1.1-5,1.6-8,1.7c-8.4,0.3-13.9-4.5-13.9-14.2v-16.8h-7.2v-8.3h7.2v-10L174.4,138.1z"/>
|
||||
<path fill="#4E5E9E" d="M202.7,138.1c0,7.5-11.3,7.5-11.3,0C191.4,130.7,202.7,130.7,202.7,138.1z M192.3,148.9v39h9.6v-39H192.3z
|
||||
"/>
|
||||
<path fill="#4E5E9E" d="M242.6,183c-4.5,4.4-9.2,6.1-15,6.1c-11.3,0-20.6-6.8-20.6-20.6s9.4-20.6,20.6-20.6c5.5,0,9.8,1.6,14,5.8
|
||||
l-6.1,6.4c-2.3-2-5.1-3.1-7.8-3.1c-6.5,0-11.2,4.7-11.2,11.5c0,7.4,5,11.3,11,11.3c3.1,0,6.1-0.9,8.5-3.2L242.6,183z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="brandmark">
|
||||
<g>
|
||||
<path fill="#4E5E9E" d="M121.2,119c-32.7,0-59.4-26.6-59.4-59.4S88.5,0.2,121.2,0.2c7.9,0,15.6,1.5,22.8,4.6c2,0.9,3,3.2,2.2,5.3
|
||||
c-0.9,2-3.2,3-5.3,2.2c-6.3-2.6-12.9-3.9-19.7-3.9c-28.3,0-51.3,23-51.3,51.3s23,51.3,51.3,51.3c28.3,0,51.3-23,51.3-51.3
|
||||
c0-6.1-1-12-3.1-17.6c-0.8-2.1,0.3-4.4,2.4-5.2c2.1-0.8,4.4,0.3,5.2,2.4c2.4,6.5,3.6,13.4,3.6,20.4C180.6,92.3,154,119,121.2,119z
|
||||
"/>
|
||||
</g>
|
||||
<g>
|
||||
<polygon fill="#FDB933" points="147.2,53.5 138,63.1 143.1,84.6 154.7,84.6 "/>
|
||||
</g>
|
||||
<polygon fill="#FDB933" points="143.4,25.1 146.6,28.3 121.2,55.2 99.5,32.9 87,84.6 98.6,84.6 105.5,55.9 121.2,73 154.8,36.4
|
||||
158,39.7 161.2,21.6 "/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 5.8 KiB |