templates.hanzo.ai: 1030-blueprint one-click deploy catalog
Aggregates five OSS one-click/self-hosting catalogs into the Dokploy blueprint
shape the Hanzo PaaS consumes (meta.json array + blueprints/<id>/{template.toml,
docker-compose.yml,meta.json,logo}):
Dokploy 500 (MIT, verbatim) · Coolify 174 (Apache-2.0) · CapRover 161
(Apache-2.0) · CasaOS 85 (Apache-2.0) · Runtipi 110 (GPL-3.0)
Deduped by app identity; each source + app keeps its upstream license
(ATTRIBUTION.md). Deterministic aggregators + a hard validator (every
template.toml parses with the platform's toml lib, every compose parses as YAML,
meta.json is the expected array, and an over-HTTP fetch probe exercises all
1030) — 0 hard failures. Served natively by hanzoai/static on DOKS (no CDN/Pages/
Vercel); CI builds on the hanzo-build-linux-amd64 arc pool; operator App CR in
crs/ serves it at templates.hanzo.ai.
@@ -0,0 +1,10 @@
|
||||
# The image serves only meta.json + blueprints/ + the landing page. Everything
|
||||
# else (scripts, CI, CR, docs, git) stays out of the build context.
|
||||
.git/
|
||||
.github/
|
||||
scripts/
|
||||
crs/
|
||||
node_modules/
|
||||
*.md
|
||||
LICENSE
|
||||
hanzo.yml
|
||||
@@ -0,0 +1,66 @@
|
||||
name: CI/CD
|
||||
|
||||
# Build + push the templates.hanzo.ai catalog image (hanzoai/static serving the
|
||||
# blueprint catalog) to GHCR on our self-hosted arc pool. The rollout onto
|
||||
# do-sfo3-hanzo-k8s is owned by the operator App CR (universe:
|
||||
# infra/k8s/operator/crs/templates-blueprints.yaml), NOT this repo — CI only
|
||||
# produces the immutable image.
|
||||
#
|
||||
# Self-contained (mirrors hanzoai/sensei.group's proven workflow): the exact
|
||||
# `docker login` + `docker buildx build --push` steps, tag shape
|
||||
# sha-<short>-amd64 + latest. GHCR auth = the job's automatic GITHUB_TOKEN.
|
||||
# Before the build we REGENERATE meta.json from blueprints/ and VALIDATE the
|
||||
# whole catalog (every template.toml parses with `toml`, every compose parses as
|
||||
# YAML, meta.json is the array the platform expects) so a broken blueprint can
|
||||
# never reach a running pod.
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
tags: ['v*']
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: build-${{ github.ref }}
|
||||
cancel-in-progress: false
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
jobs:
|
||||
build:
|
||||
# hanzo-build-linux-amd64 = the warm-floor arc pool (minRunners:1), proven
|
||||
# active (hanzoai/world + sensei.group build here in ~2 min).
|
||||
runs-on: hanzo-build-linux-amd64
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Regenerate meta.json + validate catalog
|
||||
run: |
|
||||
cd scripts
|
||||
npm ci --no-audit --no-fund
|
||||
node generate-meta.mjs ../blueprints ../meta.json
|
||||
node validate.mjs ..
|
||||
|
||||
- name: Image tag (immutable sha-<short>-amd64)
|
||||
id: tag
|
||||
run: echo "tag=sha-$(echo ${{ github.sha }} | cut -c1-7)-amd64" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Log in to GHCR
|
||||
if: github.event_name != 'pull_request'
|
||||
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin
|
||||
|
||||
- name: Build & push image
|
||||
if: github.event_name != 'pull_request'
|
||||
run: |
|
||||
docker buildx build --platform linux/amd64 --push \
|
||||
-t ghcr.io/hanzoai/templates-blueprints:${{ steps.tag.outputs.tag }} \
|
||||
-t ghcr.io/hanzoai/templates-blueprints:latest \
|
||||
-f Dockerfile .
|
||||
echo "pushed ghcr.io/hanzoai/templates-blueprints:${{ steps.tag.outputs.tag }}"
|
||||
|
||||
- name: Build image (PR, no push)
|
||||
if: github.event_name == 'pull_request'
|
||||
run: docker buildx build --platform linux/amd64 -f Dockerfile -t templates-blueprints:pr .
|
||||
@@ -0,0 +1,6 @@
|
||||
node_modules/
|
||||
scripts/node_modules/
|
||||
*.log
|
||||
.DS_Store
|
||||
scripts/diag.mjs
|
||||
scripts/dbg.mjs
|
||||
@@ -0,0 +1,34 @@
|
||||
# Attribution
|
||||
|
||||
The blueprint catalog in this repository is **aggregated** from several
|
||||
open-source one-click / self-hosting catalogs. Blueprints are converted into the
|
||||
Dokploy blueprint shape (`template.toml` + `docker-compose.yml` + `meta.json` +
|
||||
logo) that the Hanzo PaaS consumes. **Each source retains its own license, and
|
||||
each individual application retains the license of its own upstream project.**
|
||||
Where an upstream logo was unavailable, a Hanzo mark is used as a fallback; all
|
||||
available upstream logos and app names are carried through unchanged.
|
||||
|
||||
De-duplication is by app identity (`id`); when the same app appears in more than
|
||||
one source, the first source in this priority order wins:
|
||||
**Dokploy → Coolify → CapRover → CasaOS → Runtipi**.
|
||||
|
||||
| Source | Repository | License | Notes |
|
||||
|--------|------------|---------|-------|
|
||||
| Dokploy Templates | `github.com/Dokploy/templates` | MIT | Blueprints copied verbatim (already in the target shape). |
|
||||
| Coolify | `github.com/coollabsio/coolify` (`templates/compose`) | Apache-2.0 | `SERVICE_*` magic vars mapped to Hanzo `${...}` generators; magic comments → tags. |
|
||||
| CapRover One-Click Apps | `github.com/caprover/one-click-apps` (`public/v4/apps`) | Apache-2.0 | `$$cap_*` variables mapped to `${...}`; `srv-captain--` service DNS normalized. Build-only apps dropped. |
|
||||
| CasaOS App Store | `github.com/IceWhaleTech/CasaOS-AppStore` (`Apps`) | Apache-2.0 | `x-casaos` metadata → meta.json + domain port. |
|
||||
| Runtipi App Store | `github.com/runtipi/runtipi-appstore` (`apps`) | GPL-3.0 | `config.json` → meta.json; `docker-compose.json` normalized to compose. Blueprints derived from this source are noted here as GPL-3.0-origin. |
|
||||
|
||||
## Per-app licenses
|
||||
|
||||
Every application deployed through this catalog is the property of its respective
|
||||
authors and is distributed under that application's own license (linked from each
|
||||
blueprint's `meta.json` `links.github` / `links.website`). This catalog is a
|
||||
convenience index of publicly documented deploy configurations; it does not
|
||||
relicense any application.
|
||||
|
||||
## Removal / correction
|
||||
|
||||
To correct an attribution, fix a blueprint, or request removal of an entry, open
|
||||
an issue or PR against `github.com/hanzoai/templates-blueprints`.
|
||||
@@ -0,0 +1,27 @@
|
||||
# templates.hanzo.ai — the Hanzo PaaS one-click deploy-template catalog, served
|
||||
# by the house static server (ghcr.io/hanzoai/static, a Go binary on scratch),
|
||||
# NOT nginx. hanzoai/platform (a Dokploy fork) reads this catalog over HTTP:
|
||||
#
|
||||
# GET /meta.json -> JSON ARRAY of template metadata
|
||||
# GET /blueprints/<id>/template.toml -> TOML config (parsed with `toml`)
|
||||
# GET /blueprints/<id>/docker-compose.yml -> the compose stack
|
||||
# GET /blueprints/<id>/<logo> -> the app logo asset
|
||||
#
|
||||
# static stamps `Access-Control-Allow-Origin: *` on every response, so the
|
||||
# platform (platform.hanzo.ai) can fetch the catalog from any origin. We do NOT
|
||||
# pass `-spa`: a request for a missing blueprint MUST return 404, never fall
|
||||
# through to an index page (that would corrupt the platform's parse path).
|
||||
#
|
||||
# Built on Hanzo's own arc pool (hanzo-build-linux-amd64), never on a laptop,
|
||||
# and only from ghcr.io (no Docker Hub pull, so no registry-1.docker.io flake).
|
||||
FROM ghcr.io/hanzoai/static:0.4.1
|
||||
|
||||
# The catalog: the aggregated array + every blueprint's files + logos. Only
|
||||
# these are served — the build scripts, Dockerfile and docs stay out of /public.
|
||||
COPY meta.json /public/meta.json
|
||||
COPY blueprints /public/blueprints
|
||||
COPY index.html /public/index.html
|
||||
COPY catalog.css /public/catalog.css
|
||||
|
||||
EXPOSE 3000
|
||||
ENTRYPOINT ["/static", "-port", "3000", "-root", "/public"]
|
||||
@@ -0,0 +1,27 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 Hanzo AI, Inc.
|
||||
|
||||
This license covers the AGGREGATION TOOLING and repository scaffolding in this
|
||||
project (the build scripts under scripts/, the Dockerfile, the CI, the landing
|
||||
page). The deploy-template CONTENT under blueprints/ is aggregated from upstream
|
||||
open-source catalogs, each of which retains its own license, and each individual
|
||||
application retains the license of its own project. See ATTRIBUTION.md.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,44 @@
|
||||
# templates-blueprints — AI assistant context
|
||||
|
||||
The one-click deploy-template catalog for the Hanzo PaaS, served at
|
||||
**templates.hanzo.ai** by `hanzoai/static` on `do-sfo3-hanzo-k8s`. NOT a
|
||||
CDN/Pages/Vercel site — native DOKS + operator ingress.
|
||||
|
||||
## The contract (do not break)
|
||||
|
||||
`hanzoai/platform/pkg/platform/src/templates/github.ts` fetches with
|
||||
`baseUrl=https://templates.hanzo.ai`:
|
||||
- `GET /meta.json` → JSON **array** of `{id,name,description,version,logo,links:{github,website?,docs?},tags:[]}`.
|
||||
- `GET /blueprints/<id>/template.toml` → parsed with the `toml` package → `{variables,config:{domains,env,mounts}}`.
|
||||
- `GET /blueprints/<id>/docker-compose.yml` → the compose stack.
|
||||
- `logo` is a **bare filename** resolved against `/blueprints/<id>/`.
|
||||
|
||||
Invariants:
|
||||
- `meta.json` = aggregate of every `blueprints/<id>/meta.json`; **id == dir name**.
|
||||
- static runs `-root /public` **without `-spa`** (missing files MUST 404, never
|
||||
fall through — a fallthrough corrupts the platform's parse).
|
||||
- static sets `Access-Control-Allow-Origin: *`; default CSP is fine for
|
||||
JSON/TOML/YAML/logos (no script execution here).
|
||||
|
||||
## Build / validate
|
||||
|
||||
`scripts/` holds deterministic aggregators (one per source) + `generate-meta.mjs`
|
||||
(writes the root array) + `validate.mjs` (the hard gate: parses every
|
||||
template.toml with `toml`, every compose as YAML, meta as the array, then an
|
||||
over-HTTP `fetchTemplatesList`+`fetchTemplateFiles` probe of all entries). CI runs
|
||||
generate+validate before the image build, so a broken blueprint never ships.
|
||||
"Valid + parseable" is guaranteed; per-app runtime tuning is best-effort v1.
|
||||
|
||||
## Sources (deduped by id: Dokploy→Coolify→CapRover→CasaOS→Runtipi)
|
||||
|
||||
Dokploy (MIT, verbatim) · Coolify (Apache-2.0) · CapRover (Apache-2.0) · CasaOS
|
||||
(Apache-2.0) · Runtipi (GPL-3.0). Each app keeps its upstream license — see
|
||||
ATTRIBUTION.md. Missing upstream logos fall back to a Hanzo mark.
|
||||
|
||||
## Deploy
|
||||
|
||||
CI → `ghcr.io/hanzoai/templates-blueprints:sha-<short>-amd64` (arc pool
|
||||
`hanzo-build-linux-amd64`). Rollout owned by the operator App CR
|
||||
`crs/templates-blueprints.yaml` (landed via `hanzoai/universe`), host
|
||||
`templates.hanzo.ai`, TLS via the ingress. DNS: `templates.hanzo.ai` A → the DOKS
|
||||
ingress LB.
|
||||
@@ -0,0 +1,108 @@
|
||||
# hanzoai/templates-blueprints
|
||||
|
||||
The **one-click deploy-template catalog** for the Hanzo PaaS
|
||||
([platform.hanzo.ai](https://platform.hanzo.ai)). Served at
|
||||
**https://templates.hanzo.ai** by the house static server
|
||||
([`hanzoai/static`](https://github.com/hanzoai/static)) on DOKS — no CDN, no
|
||||
Cloudflare Pages, no Vercel. The Hanzo PaaS (a Dokploy fork) reads this catalog
|
||||
to offer 1000+ open-source apps for one-click deployment.
|
||||
|
||||
## The contract (what the PaaS fetches)
|
||||
|
||||
`hanzoai/platform` `pkg/platform/src/templates/github.ts` fetches, with
|
||||
`baseUrl = https://templates.hanzo.ai`:
|
||||
|
||||
| Request | Response |
|
||||
|---------|----------|
|
||||
| `GET /meta.json` | a JSON **array** of `{ id, name, description, version, logo, links:{github,website?,docs?}, tags:string[] }` |
|
||||
| `GET /blueprints/<id>/template.toml` | TOML parsed to `{ variables, config:{domains,env,mounts} }` |
|
||||
| `GET /blueprints/<id>/docker-compose.yml` | the compose stack |
|
||||
| `GET /blueprints/<id>/<logo>` | the app logo (referenced by `meta.json.logo`, a bare filename) |
|
||||
|
||||
`meta.json` is the aggregate of every `blueprints/<id>/meta.json` (id **must**
|
||||
equal the directory name). Logos are bare filenames resolved against
|
||||
`/blueprints/<id>/`.
|
||||
|
||||
## Layout
|
||||
|
||||
```
|
||||
meta.json # generated: the array the platform serves
|
||||
blueprints/<id>/
|
||||
template.toml # variables, domains, env (Dokploy shape)
|
||||
docker-compose.yml # the stack
|
||||
meta.json # this blueprint's entry (id == dir name)
|
||||
logo.(svg|png|…) # the app logo (or a Hanzo fallback)
|
||||
index.html, catalog.css # human landing page
|
||||
scripts/ # deterministic aggregators + validator
|
||||
Dockerfile # FROM ghcr.io/hanzoai/static:0.4.1
|
||||
crs/templates-blueprints.yaml # operator App CR (spec; landed via universe)
|
||||
```
|
||||
|
||||
## Sources
|
||||
|
||||
Aggregated from five open-source catalogs, converted into the Dokploy blueprint
|
||||
shape and de-duplicated by app identity (priority Dokploy → Coolify → CapRover →
|
||||
CasaOS → Runtipi). Each source keeps its license and each app keeps its upstream
|
||||
license — see [ATTRIBUTION.md](ATTRIBUTION.md).
|
||||
|
||||
**1030 blueprints** (v1), all validated:
|
||||
|
||||
| Source | License | Blueprints |
|
||||
|--------|---------|-----------:|
|
||||
| [Dokploy Templates](https://github.com/Dokploy/templates) | MIT | 500 |
|
||||
| [Coolify](https://github.com/coollabsio/coolify) | Apache-2.0 | 174 |
|
||||
| [CapRover One-Click Apps](https://github.com/caprover/one-click-apps) | Apache-2.0 | 161 |
|
||||
| [CasaOS App Store](https://github.com/IceWhaleTech/CasaOS-AppStore) | Apache-2.0 | 85 |
|
||||
| [Runtipi App Store](https://github.com/runtipi/runtipi-appstore) | GPL-3.0 | 110 |
|
||||
| **Total (deduped by id)** | | **1030** |
|
||||
|
||||
Path to more: additional permissive catalogs (Portainer, Yacht, TrueCharts) and
|
||||
per-app tuning of converted entries land in follow-ups; the aggregators are
|
||||
deterministic and re-runnable.
|
||||
|
||||
## Build
|
||||
|
||||
Deterministic, reproducible, zero network at build time (sources are cloned into
|
||||
a scratch dir; conversion is pure):
|
||||
|
||||
```bash
|
||||
cd scripts && npm ci
|
||||
# copy Dokploy verbatim, then convert the rest into blueprints/ (each dedupes):
|
||||
node convert-coolify.mjs <coolify-repo> ../blueprints
|
||||
node convert-caprover.mjs <caprover-repo> ../blueprints
|
||||
node convert-casaos.mjs <casaos-repo> ../blueprints
|
||||
node convert-runtipi.mjs <runtipi-repo> ../blueprints
|
||||
node generate-meta.mjs ../blueprints ../meta.json # aggregate the array
|
||||
node validate.mjs .. # HARD gate — see below
|
||||
```
|
||||
|
||||
### Validation (the hard floor)
|
||||
|
||||
`scripts/validate.mjs` is the gate that CI runs before building the image:
|
||||
|
||||
1. every `template.toml` parses with the **same `toml` package** the platform uses;
|
||||
2. every `docker-compose.yml` parses as YAML with ≥1 service;
|
||||
3. `meta.json` is a valid array with every required field per entry;
|
||||
4. an **over-HTTP** probe serves the catalog and runs the platform's exact
|
||||
`fetchTemplatesList` + `fetchTemplateFiles` logic against every template
|
||||
(fetch + parse + logo resolves).
|
||||
|
||||
It exits non-zero on any hard failure, so a broken blueprint can never reach a
|
||||
running pod. "Valid + parseable" is guaranteed; individual apps may still need
|
||||
per-app tuning (PRs welcome).
|
||||
|
||||
## Deploy (native)
|
||||
|
||||
CI (`.github/workflows/cicd.yml`, arc pool `hanzo-build-linux-amd64`) regenerates
|
||||
`meta.json`, validates, then builds + pushes
|
||||
`ghcr.io/hanzoai/templates-blueprints:sha-<short>-amd64` to GHCR. The rollout
|
||||
onto `do-sfo3-hanzo-k8s` is owned by the operator App CR
|
||||
(`crs/templates-blueprints.yaml`, landed via `hanzoai/universe`), which serves it
|
||||
at `templates.hanzo.ai` with TLS. `templates.hanzo.ai` A-records to the DOKS
|
||||
ingress LB.
|
||||
|
||||
## Adding a template
|
||||
|
||||
Create `blueprints/<id>/` with `template.toml`, `docker-compose.yml`,
|
||||
`meta.json` (`id` == `<id>`) and a `logo`, then run `generate-meta.mjs` +
|
||||
`validate.mjs`. Keep the app's upstream license/attribution intact.
|
||||
@@ -0,0 +1,12 @@
|
||||
services:
|
||||
2fauth:
|
||||
image: 2fauth/2fauth:6.1.3
|
||||
environment:
|
||||
APP_KEY: SomeRandomStringOf32CharsExactly
|
||||
expose:
|
||||
- "8000"
|
||||
volumes:
|
||||
- 2fauth-2fauth:/2fauth
|
||||
restart: always
|
||||
volumes:
|
||||
2fauth-2fauth: {}
|
||||
@@ -0,0 +1,15 @@
|
||||
<svg width="256" height="256" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<rect width="256" height="256" fill="black"/>
|
||||
<mask id="mask0_777_1756" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="28" y="28" width="200" height="200">
|
||||
<path d="M128 228C183.228 228 228 183.228 228 128C228 72.7715 183.228 28 128 28C72.7715 28 28 72.7715 28 128C28 183.228 72.7715 228 128 228Z" fill="#D9D9D9"/>
|
||||
</mask>
|
||||
<g mask="url(#mask0_777_1756)">
|
||||
<path d="M256 0H0V256H256V0Z" fill="url(#pattern0_777_1756)"/>
|
||||
</g>
|
||||
<defs>
|
||||
<pattern id="pattern0_777_1756" patternContentUnits="objectBoundingBox" width="1" height="1">
|
||||
<use xlink:href="#image0_777_1756" transform="scale(0.00555556)"/>
|
||||
</pattern>
|
||||
<image id="image0_777_1756" width="180" height="180" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAAC0CAIAAACyr5FlAAAJYUlEQVR4nO2d0XWjOBSGnT37jqcCmAogFUAH0AHuwOmAdOB0gDswU4FJBeAKTM6Zh3nDnga0D5z1ZuIoi6V7JYH/72HP7DnhoqAv90oCwYMQYgHAZ/xluwHAXSAHkAI5gBTIAaRADiAFcgApkANIgRxACuQAUiAHkAI5gBTIAaRADiAFcgApkANIgRxACuQAUv623QDTdO9YLBZt255OJ9kPB0EQBMHlH5f/vRMe5v2Y4Ol0atu2ruu2bbuuOxwO+jHjOA6CIIqiKIqSJNEP6CzzlKOqqrqu67omseFr4jiOoijLsvmJMh85TqdTVVVVVf348cNKAzzPS5Iky7Isy5bLpZU2ECMmTt/3ZVmmaWr7Qv5Bmqa73c72tdFlwnI0TZPnued5tk2Q4nneer0+Ho+2L5Uik5Rjt9vFcWy7628gTdP9fm/7st3MxOQoy9L3fdt9rUgcx9NSZDJy7Pf76WrxngkpMgE5mqaZVhEZQ5qm7o9FnJaj7/v1em27HxkpiqLve9uXWYq7cux2O5dnIlT4vu9slXFRjr7vXVu34Ga9XjuYQpyT404SxjW+7zdNY/vy/4Fbcsx7hDGGzWZjuxP+wxU5+r4Pw9B21zhBmqaOlBgn5Gia5j5LiYwwDF0oMfblKMsSZlzjeZ51PyzLUZal7V5wmrIsLfaOTTkw/ByDRT+syZHnue3LPhls+WFHDphxK1b8sCAHzFDDvB+m5cAIVAfDfhiVA2boY/IunTk5mqaxfWHngMn1D0NyHI9HrHRREYahmfV1E3Lgvgk5cRwb6DgTcmB6wkFRFNwdxy4HBqF8cA9OebdDdl0XRdH5fB5/CF97Hh4eFM5+fZTdFr7H87yu6/i2XvK+n2O1Wt1kBriJ8/m8Wq0YT8CXlDabjVPtUTu7ay28hm9TLldZUSgoA0ztWcyxrAzwFReusoKCYozz+fz8/MwSmiMd7XY7p9ozoHZ211oog2PZlOVX1dnU+kkT2eKonctkC8fDsSxGL0dRFDq/5CdNZIujdi6TLbwJ8pEp8YD0dDoFQaAz2rhuj9owbUwctXOZbOFN+L4/vCKRCuIB6cvLC8ahtnh7e9tut4QBKTOHftpYIHPoQZs8KDMH0oZ1aJMHZeYIguDt7U0zCNVfvNrPXGPy7PqZY7FYhGHYtq1+nAVh5thut/pmAH0Oh0Nd1yShyOR4eXmhCgU0oaosNGWlbdvHx0f9OAuUFSL6vte/20KTOWhnUEAfkh6hyRzL5ZJqnoLMQQLNsFR/kVXnNtuY9tiNM8UWDui/ypKgrFRVpR8EkEPQL5pyCSFoN6Rcx7cbZ4otHAjDULNndTNHXddYFXWTw+GguZSuKwdqistoroYRZA7NCIAPzT9drans6XT69u2bzumvIS+9F/imslQQTmUHPM/74tuX/4tW5qC6wQOYOJ/POn2kJQdqivtADiDFmhwoK+6j00fqA1KO0egCA1IGlBus/i17prTBdIEIz263hQp0XRcEgcKB6mUFNWUqKK+Tqsvx8+dP5WOBSZT/jNXleH19VT4WmER5HUxdjl+/fikfC0xioaz8/v1b+VhgEmU51GcrTHJcz7tM7kIz2R6+NlPB+04w4ALKYw71RTBjKzZ8mYPv79u1zKHWy8gcQArkAFIgB5CiPlthwuTWI6qbampHuTY3uQaZA0iBHEAK5Jg/yrvOIMf8iaJI7UB1OfBZrtmjLoeyj7fyMIIxR6mdi+qoMXtTx5zLJCgr8ydJErUDJ5A5gC3U5eD7ehSgxcKAFJljKij/GavLofa0OzCP8phDa5c9x90Bu1uGqJ6xcOd5Dp23oWvNVvCdaffRqf5acmDY4T7W5FAuZsAYOn2EzDFzbJYV3GFxmTAMdZajdJfPDVSWMfdW1O6JXN/duI5z88s7JXG4r9KnaPaOrhxZlmlGAHxo9o7ui/G7rvv+/btOhA+4ttLA93wo9zqH5qsEF/qZIwgCrHa4iX5SJ7hlv1qt9IMAcvTlIPjeCm1lQVkhQb+mLEgyRxAEcRzrxxkP1TNUanOKMXOlMS1kndGQTBRongRDZXENkh6h+YwXybeoB/jKAV95ojqKCqrvUtNkjuVyiQUPd3h6eiKJQ/ZFaqphKTKHJp7ndV1H8hAn2dPnQRCkaUoVDSiTZRnZ471q9w4+Zb/fc7SHL47ar8kXhwT9j0JeoNy3kiSJ4Tkt+ECe55TP9lJZNqCfPK5j8sVR+x354uhDmDYEbeZYIHlYhThtEM5WLrRt+/j4qHz4dXtMLp+PweQS+3gIJykX6PfKRlGU5zl5WPA1T09P5HsQ6TPHQm/BlKkYL2zfwFOLPBKqJdEPsOyyXy6Xz8/PHJHBp2y3W5a4hIPbD6iNTPnaQ3V91H6G6qhr0jSlv1hCCCFYyspA13VRFN1aXPjaM8uywjEOvcD48pYgCFBcuNlut4zvwmDKSBduLS58LaG6Pmo/Q3XUe9brNf1let8e1uhCiL7vsfGJgzAM+75n7Tt2OQTRDTnwHs/zmqbh7jgTcgghNpuN7es5K8qyNNBrhuQQQmDZlIqiKMx0mTk5hBDY/qRPnufG+suoHH3fww8dwjA02V9G5RCYvGhgYHryAdNyCCGapoEft2LeDGFFDgE/bsSKGcKWHAJ+jMaWGcKiHEKI4/GI8enXWDRD2JVDYP7yJWmaWjRDWJdDCNH3PdbHrjG5niHDvhwDRVHY7g6HMLM6/r+4IocQYrfbYYjq+76BO2ojcUgOcfdDVOuDjA+4JcfAHZYYz/M2m43tC/8RF+UQQjRNcz8pJI5j2m2MVDgqx0BRFPMehbiZMC44LYcQ4ng8zvW1H3meOzXCuMZ1OQb2+/2c9mfHcezOlOQLpiHHQFmWvu/b7lkt4jje7/e2L+RYpiTHQFmWU8wi09JiYHpyDOz3+6mMRfI8n0QRuWaqcgwcj8eiKNysNWEYbjYbx4ecX8O4V9Ykbdtut9uqqt7e3uy2xPf9LMtWq9UMvnE2EzkutG1bVVVVVYfDweR54zjOsixJkhk4cWFuclw4nU51XbdtW9f16+sreXzP86IoSv6FPL4LzFaOD7Rt23Xd8N+BmwrQ8CW9IAiCIEiSZPgHX2sd4V7kkNG27RffJbkTCWTcuxzgCxhf3gKmDuQAUiAHkAI5gBTIAaRADiAFcgApkANIgRxACuQAUiAHkAI5gBTIAaRADiAFcgApkANIgRxAyj8a7iArAbyT2wAAAABJRU5ErkJggg=="/>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"id": "2fauth",
|
||||
"name": "2FAuth",
|
||||
"description": "A web app to manage your Two-Factor Authentication (2FA) accounts and generate their security codes",
|
||||
"version": "latest",
|
||||
"logo": "logo.svg",
|
||||
"links": {
|
||||
"github": "https://github.com/Bubka/2FAuth",
|
||||
"website": "https://2fauth.app",
|
||||
"docs": "https://docs.2fauth.app"
|
||||
},
|
||||
"tags": [
|
||||
"productivity"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "2fauth"
|
||||
port = 8000
|
||||
host = "${main_domain}"
|
||||
@@ -0,0 +1,24 @@
|
||||
version: "3"
|
||||
|
||||
services:
|
||||
ackee:
|
||||
image: electerious/ackee:3.4.2
|
||||
ports:
|
||||
- "3000"
|
||||
environment:
|
||||
- ACKEE_USERNAME=${ACKEE_USERNAME}
|
||||
- ACKEE_PASSWORD=${ACKEE_PASSWORD}
|
||||
- ACKEE_MONGODB=${ACKEE_MONGODB}
|
||||
|
||||
mongo:
|
||||
image: mongo:4
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD}
|
||||
- MONGO_INITDB_ROOT_USERNAME=mongo
|
||||
volumes:
|
||||
- mongo-data:/data/db
|
||||
|
||||
|
||||
volumes:
|
||||
mongo-data:
|
||||
|
||||
|
After Width: | Height: | Size: 22 KiB |
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "ackee",
|
||||
"name": "Ackee",
|
||||
"version": "latest",
|
||||
"description": "Ackee is a self-hosted analytics tool for your website.",
|
||||
"logo": "logo.png",
|
||||
"links": {
|
||||
"github": "https://github.com/electerious/Ackee",
|
||||
"website": "https://ackee.electerious.com/",
|
||||
"docs": "https://docs.ackee.electerious.com/"
|
||||
},
|
||||
"tags": [
|
||||
"analytics",
|
||||
"self-hosted"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
[variables]
|
||||
ACKEE_USERNAME = "default"
|
||||
ACKEE_PASSWORD = "${password:16}"
|
||||
MONGO_INITDB_ROOT_PASSWORD = "${password:16}"
|
||||
ACKEE_MONGODB = "mongodb://mongo:${MONGO_INITDB_ROOT_PASSWORD}@mongo:27017"
|
||||
|
||||
[config]
|
||||
[[config.domains]]
|
||||
serviceName = "ackee"
|
||||
port = 3000
|
||||
host = "${domain}"
|
||||
|
||||
|
||||
[config.env]
|
||||
ACKEE_USERNAME = "${ACKEE_USERNAME}"
|
||||
ACKEE_PASSWORD = "${ACKEE_PASSWORD}"
|
||||
ACKEE_MONGODB = "${ACKEE_MONGODB}"
|
||||
MONGO_INITDB_ROOT_PASSWORD = "${MONGO_INITDB_ROOT_PASSWORD}"
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500">
|
||||
<path d="M 175.034 156.727 C 154.522 121.333 162.546 73.285 192.958 49.41 C 223.367 25.535 264.651 34.874 285.163 70.271 L 423.708 309.332 C 444.22 344.732 436.198 392.78 405.783 416.655 C 375.371 440.532 334.094 431.191 313.579 395.794 L 253.513 292.145 C 245.791 280.823 230.072 282.584 220.633 293.569 C 212.808 302.678 210.245 325.982 208.027 346.159 C 207.703 349.123 207.386 352.011 207.057 354.782 C 205.853 367.988 201.934 381.052 195.111 392.832 C 172.809 431.313 127.916 441.458 94.849 415.502 C 61.788 389.543 53.051 337.299 75.353 298.811 C 86.917 278.851 104.563 266.513 123.48 262.884 L 123.455 262.852 C 178.116 253.627 188.248 181.826 178.247 162.266 L 175.034 156.727 Z" fill="#8142E3" style=""/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 824 B |
@@ -0,0 +1,64 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
activepieces:
|
||||
image: activepieces/activepieces:0.35.0
|
||||
restart: unless-stopped
|
||||
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
AP_ENGINE_EXECUTABLE_PATH: dist/packages/engine/main.js
|
||||
AP_API_KEY: ${AP_API_KEY}
|
||||
AP_ENCRYPTION_KEY: ${AP_ENCRYPTION_KEY}
|
||||
AP_JWT_SECRET: ${AP_JWT_SECRET}
|
||||
AP_ENVIRONMENT: prod
|
||||
AP_FRONTEND_URL: https://${AP_HOST}
|
||||
AP_WEBHOOK_TIMEOUT_SECONDS: 30
|
||||
AP_TRIGGER_DEFAULT_POLL_INTERVAL: 5
|
||||
AP_POSTGRES_DATABASE: activepieces
|
||||
AP_POSTGRES_HOST: postgres
|
||||
AP_POSTGRES_PORT: 5432
|
||||
AP_POSTGRES_USERNAME: activepieces
|
||||
AP_POSTGRES_PASSWORD: ${AP_POSTGRES_PASSWORD}
|
||||
AP_EXECUTION_MODE: UNSANDBOXED
|
||||
AP_REDIS_HOST: redis
|
||||
AP_REDIS_PORT: 6379
|
||||
AP_SANDBOX_RUN_TIME_SECONDS: 600
|
||||
AP_TELEMETRY_ENABLED: "false"
|
||||
AP_TEMPLATES_SOURCE_URL: https://cloud.activepieces.com/api/v1/flow-templates
|
||||
|
||||
postgres:
|
||||
image: postgres:14
|
||||
restart: unless-stopped
|
||||
|
||||
environment:
|
||||
POSTGRES_DB: activepieces
|
||||
POSTGRES_PASSWORD: ${AP_POSTGRES_PASSWORD}
|
||||
POSTGRES_USER: activepieces
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U activepieces -d activepieces"]
|
||||
interval: 30s
|
||||
timeout: 30s
|
||||
retries: 3
|
||||
|
||||
redis:
|
||||
image: redis:7
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
healthcheck:
|
||||
test: ["CMD", "redis-cli", "ping"]
|
||||
interval: 30s
|
||||
timeout: 30s
|
||||
retries: 3
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
redis_data:
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "activepieces",
|
||||
"name": "Activepieces",
|
||||
"version": "0.35.0",
|
||||
"description": "Open-source no-code business automation tool. An alternative to Zapier, Make.com, and Tray.",
|
||||
"logo": "activepieces.svg",
|
||||
"links": {
|
||||
"github": "https://github.com/activepieces/activepieces",
|
||||
"website": "https://www.activepieces.com/",
|
||||
"docs": "https://www.activepieces.com/docs"
|
||||
},
|
||||
"tags": [
|
||||
"automation",
|
||||
"workflow",
|
||||
"no-code"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
api_key = "${password:32}"
|
||||
encryption_key = "${password:32}"
|
||||
jwt_secret = "${password:32}"
|
||||
postgres_password = "${password:32}"
|
||||
|
||||
[config]
|
||||
env = [
|
||||
"AP_HOST=${main_domain}",
|
||||
"AP_API_KEY=${api_key}",
|
||||
"AP_ENCRYPTION_KEY=${encryption_key}",
|
||||
"AP_JWT_SECRET=${jwt_secret}",
|
||||
"AP_POSTGRES_PASSWORD=${postgres_password}",
|
||||
]
|
||||
mounts = []
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "activepieces"
|
||||
port = 80
|
||||
host = "${main_domain}"
|
||||
@@ -0,0 +1,8 @@
|
||||
services:
|
||||
actual-budget:
|
||||
image: actualbudget/actual-server:26.7.0
|
||||
volumes:
|
||||
- actual-budget-data:/data
|
||||
restart: always
|
||||
volumes:
|
||||
actual-budget-data: {}
|
||||
|
After Width: | Height: | Size: 13 KiB |
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"id": "actual-budget",
|
||||
"name": "Actual Budget",
|
||||
"description": "Local-first OpenSource Budget tool",
|
||||
"version": "latest",
|
||||
"logo": "logo.jpg",
|
||||
"links": {
|
||||
"github": "https://github.com/actualbudget/actual",
|
||||
"website": "",
|
||||
"docs": ""
|
||||
},
|
||||
"tags": [
|
||||
"finance"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "actual-budget"
|
||||
port = 8011
|
||||
host = "${main_domain}"
|
||||
@@ -0,0 +1,10 @@
|
||||
services:
|
||||
actual:
|
||||
image: actualbudget/actual-server:${VERSION}
|
||||
volumes:
|
||||
- actual-data:/data
|
||||
expose:
|
||||
- "5006"
|
||||
restart: always
|
||||
volumes:
|
||||
actual-data: {}
|
||||
|
After Width: | Height: | Size: 10 KiB |
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "actual",
|
||||
"name": "Actual",
|
||||
"description": "Actual Budget is a super fast and privacy-focused app for managing your finances. At its heart is the well proven and much loved Envelope Budgeting methodology.",
|
||||
"version": "latest",
|
||||
"logo": "logo.png",
|
||||
"links": {
|
||||
"github": "",
|
||||
"website": "https://actualbudget.org/docs/",
|
||||
"docs": "https://actualbudget.org/docs/"
|
||||
},
|
||||
"tags": [
|
||||
"self-hosted",
|
||||
"caprover"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
version = "23.8.1-alpine"
|
||||
|
||||
[config]
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "actual"
|
||||
port = 5006
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
VERSION = "${version}"
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
@@ -0,0 +1,12 @@
|
||||
services:
|
||||
actualbudget:
|
||||
image: docker.io/actualbudget/actual-server:latest
|
||||
environment:
|
||||
# See all options at https://actualbudget.org/docs/config
|
||||
- ACTUAL_PORT=5006
|
||||
volumes:
|
||||
- actual-data:/data
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
actual-data:
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "actualbudget",
|
||||
"name": "Actual Budget",
|
||||
"version": "latest",
|
||||
"description": "A super fast and privacy-focused app for managing your finances.",
|
||||
"logo": "actualbudget.png",
|
||||
"links": {
|
||||
"github": "https://github.com/actualbudget/actual",
|
||||
"website": "https://actualbudget.org",
|
||||
"docs": "https://actualbudget.org/docs"
|
||||
},
|
||||
"tags": [
|
||||
"budgeting",
|
||||
"finance",
|
||||
"money"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
env = []
|
||||
mounts = []
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "actualbudget"
|
||||
port = 5_006
|
||||
host = "${main_domain}"
|
||||
@@ -0,0 +1,17 @@
|
||||
services:
|
||||
adguard-home:
|
||||
image: adguard/adguardhome:${ADGUARD_VERSION}
|
||||
volumes:
|
||||
- adguard-home-work:/opt/adguardhome/work
|
||||
- adguard-home-conf:/opt/adguardhome/conf
|
||||
ports:
|
||||
- 53:53
|
||||
- 67:67
|
||||
- 68:68
|
||||
- 853:853
|
||||
expose:
|
||||
- "3000"
|
||||
restart: always
|
||||
volumes:
|
||||
adguard-home-work: {}
|
||||
adguard-home-conf: {}
|
||||
|
After Width: | Height: | Size: 31 KiB |
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "adguard-home",
|
||||
"name": "AdGuard Home",
|
||||
"description": "AdGuard Home is a fast and easy way to block ads on any device and protect kids online!",
|
||||
"version": "latest",
|
||||
"logo": "logo.png",
|
||||
"links": {
|
||||
"github": "",
|
||||
"website": "https://hub.docker.com/r/adguard/adguardhome",
|
||||
"docs": "https://hub.docker.com/r/adguard/adguardhome"
|
||||
},
|
||||
"tags": [
|
||||
"self-hosted",
|
||||
"caprover"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
adguard-version = "v0.107.29"
|
||||
|
||||
[config]
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "adguard-home"
|
||||
port = 3000
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
ADGUARD_VERSION = "${adguard-version}"
|
||||
@@ -0,0 +1,13 @@
|
||||
services:
|
||||
adguard:
|
||||
image: adguard/adguardhome:v0.107.78
|
||||
expose:
|
||||
- "53"
|
||||
- "853"
|
||||
volumes:
|
||||
- adguard-work:/opt/adguardhome/work
|
||||
- adguard-conf:/opt/adguardhome/conf
|
||||
restart: always
|
||||
volumes:
|
||||
adguard-work: {}
|
||||
adguard-conf: {}
|
||||
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "adguard",
|
||||
"name": "Adguard",
|
||||
"description": "World's most advanced adblocker!",
|
||||
"version": "latest",
|
||||
"logo": "logo.jpg",
|
||||
"links": {
|
||||
"github": "https://github.com/AdguardTeam",
|
||||
"website": "",
|
||||
"docs": ""
|
||||
},
|
||||
"tags": [
|
||||
"network",
|
||||
"security"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "adguard"
|
||||
port = 8104
|
||||
host = "${main_domain}"
|
||||
@@ -0,0 +1,9 @@
|
||||
services:
|
||||
adguardhome-sync:
|
||||
image: ghcr.io/bakito/adguardhome-sync:v0.9.2
|
||||
command: run --config /config/adguardhome-sync.yaml
|
||||
volumes:
|
||||
- adguardhome-sync-adguardhome-sync-yaml:/config/adguardhome-sync.yaml
|
||||
restart: always
|
||||
volumes:
|
||||
adguardhome-sync-adguardhome-sync-yaml: {}
|
||||
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "adguardhome-sync",
|
||||
"name": "Adguard Home Sync",
|
||||
"description": "Synchronize AdGuard Home config to replicas",
|
||||
"version": "latest",
|
||||
"logo": "logo.jpg",
|
||||
"links": {
|
||||
"github": "https://github.com/bakito/adguardhome-sync",
|
||||
"website": "",
|
||||
"docs": ""
|
||||
},
|
||||
"tags": [
|
||||
"network",
|
||||
"utilities"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "adguardhome-sync"
|
||||
port = 8436
|
||||
host = "${main_domain}"
|
||||
@@ -0,0 +1,20 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
adguardhome:
|
||||
image: adguard/adguardhome:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "53:53/tcp" # DNS
|
||||
- "53:53/udp" # DNS
|
||||
- "67:67/udp" # DHCP Server
|
||||
- "68:68/tcp" # DHCP Client
|
||||
- "853:853/tcp" # DNS over TLS, DNS-over-QUIC
|
||||
- "853:853/udp" # DNS over TLS, DNS-over-QUIC
|
||||
- "6060:6060/tcp" # HTTP (pprof)
|
||||
volumes:
|
||||
- adguardhome-work:/opt/adguardhome/work
|
||||
- adguardhome-conf:/opt/adguardhome/conf
|
||||
|
||||
volumes:
|
||||
adguardhome-work: {}
|
||||
adguardhome-conf: {}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="80px" height="80px" viewBox="0 0 80 80" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 52.2 (67145) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>logo@2x</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<g id="logo" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<rect id="Rectangle" fill="#FFFFFF" x="0" y="0" width="80" height="80" rx="20"></rect>
|
||||
<g id="Group-10" transform="translate(12.000000, 12.000000)">
|
||||
<g id="Group-9">
|
||||
<g id="Group-8">
|
||||
<g id="Group-7">
|
||||
<path d="M28.2221276,0 C19.4007575,0 8.75997994,2.07442553 8.65485005e-06,6.64038298 C8.65485005e-06,16.501617 -0.120909272,41.0689362 28.2221276,57.855 C56.5657909,41.0689362 56.4454995,16.501617 56.4454995,6.64038298 C47.6849017,2.07442553 37.0441241,0 28.2221276,0 L28.2221276,0 Z" id="Path" fill="#68BC71"></path>
|
||||
<path d="M28.1932991,57.8379179 C-0.120827266,41.0522735 8.65485006e-06,16.4982725 8.65485006e-06,6.64038298 C8.75043947,2.07939831 19.3775821,0.00452145957 28.1932991,7.38217799e-06 L28.1932991,57.8379237 Z" id="Combined-Shape" fill="#67B279"></path>
|
||||
</g>
|
||||
<path d="M27.1926958,38.6027397 L44.2590846,15.6010416 C43.0084943,14.5986526 41.911548,15.3061181 41.3076915,15.8538333 L41.2856573,15.8555888 L27.0557264,30.6585285 L21.6942672,24.2064902 C19.1365123,21.2514028 15.6592758,23.5054616 14.8469876,24.1011604 L27.1926958,38.6027397" id="Fill-11" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"id": "adguardhome",
|
||||
"name": "AdGuard Home",
|
||||
"version": "latest",
|
||||
"description": "AdGuard Home is a comprehensive solution designed to enhance your online browsing experience by eliminating all kinds of ads, from annoying banners and pop-ups to intrusive video ads. It provides privacy protection, browsing security, and parental control features while maintaining website functionality.",
|
||||
"logo": "logo.svg",
|
||||
"links": {
|
||||
"github": "https://github.com/AdguardTeam/AdGuardHome",
|
||||
"website": "https://adguard.com",
|
||||
"docs": "https://github.com/AdguardTeam/AdGuardHome/wiki"
|
||||
},
|
||||
"tags": [
|
||||
"privacy",
|
||||
"security",
|
||||
"dns",
|
||||
"ad-blocking"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
env = []
|
||||
mounts = []
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "adguardhome"
|
||||
port = 3000
|
||||
host = "${main_domain}"
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
adminer:
|
||||
image: adminer:4.8.1
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 8080
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
||||
<!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" width="791px"
|
||||
height="792px" viewBox="-91.5 -0.5 791 792" enable-background="new -91.5 -0.5 791 792" xml:space="preserve">
|
||||
<g id="Layer_2">
|
||||
<rect x="-91.5" y="-0.5" fill="#005982" width="791" height="792"/>
|
||||
<rect x="-90.5" y="-0.5" fill="none" width="790" height="792"/>
|
||||
</g>
|
||||
<g id="Layer_1">
|
||||
<path fill="#FFFFFF" d="M336.162,343.266c-7.003-27.503-58.849-54.543-149.432-54.543c-90.517,0-142.358,27.004-149.416,54.488
|
||||
c-0.543,1.058-0.875,2.241-0.875,3.513v249.82c0,2.393,1.101,4.505,2.794,5.937c11.992,25.549,62.822,49.176,147.496,49.176
|
||||
c84.697,0,135.532-23.639,147.507-49.199c1.679-1.428,2.768-3.531,2.768-5.913v-5.691c0-0.047,0.008-0.09,0.008-0.137
|
||||
c0-0.027-0.008-0.05-0.008-0.077v-81.224c0-0.046,0.008-0.09,0.008-0.136c0-0.028-0.008-0.051-0.008-0.078V429.61
|
||||
c0-0.048,0.008-0.09,0.008-0.137c0-0.027-0.008-0.052-0.008-0.079v-79.59c0-0.047,0.008-0.09,0.008-0.137s-0.008-0.094-0.008-0.141
|
||||
v-2.802C337.005,345.475,336.685,344.312,336.162,343.266z M321.392,509.372c-0.165,21.415-55.417,45.233-134.662,45.233
|
||||
c-79.36,0-134.668-23.889-134.668-45.33c0-0.027-0.008-0.052-0.008-0.079v-52.169c22.261,18.717,67.967,33.387,134.676,33.387
|
||||
c66.698,0,112.392-14.665,134.662-33.375V509.372z M321.392,429.567C321.227,450.98,265.974,474.8,186.73,474.8
|
||||
c-79.36,0-134.668-23.889-134.668-45.331c0-0.026-0.008-0.051-0.008-0.078v-52.169c22.261,18.716,67.967,33.386,134.676,33.386
|
||||
c66.698,0,112.392-14.661,134.662-33.374V429.567z M186.73,304.337c79.244,0,134.497,23.818,134.662,45.233v0.191
|
||||
c-0.165,21.415-55.417,45.233-134.662,45.233c-79.36,0-134.668-23.889-134.668-45.327
|
||||
C52.062,328.229,107.37,304.337,186.73,304.337z M186.73,636.043c-79.36,0-134.668-23.89-134.668-45.327
|
||||
c0-0.027-0.008-0.05-0.008-0.077v-53.802c22.261,18.717,67.967,33.387,134.676,33.387c66.698,0,112.392-14.665,134.662-33.375
|
||||
v53.961C321.227,612.228,265.974,636.043,186.73,636.043z"/>
|
||||
<g>
|
||||
<path fill="#FF0000" d="M427.38,365.951l-71.116-59.932l71.116-59.827l16.46,16.671l-52.335,42.944l52.335,43.472L427.38,365.951z
|
||||
"/>
|
||||
<path fill="#FF0000" d="M566.131,260.227c0,5.909-0.897,11.203-2.691,15.88c-1.793,4.679-4.362,8.723-7.702,12.134
|
||||
c-3.342,3.413-7.369,6.173-12.081,8.283c-4.714,2.11-9.989,3.553-15.827,4.326l-1.056,19.837h-22.052l-1.899-39.673h15.3
|
||||
c3.445,0,6.418-0.491,8.915-1.477c2.496-0.984,4.537-2.322,6.12-4.01s2.743-3.64,3.482-5.856c0.738-2.216,1.107-4.554,1.107-7.017
|
||||
c0-3.376-0.722-6.524-2.163-9.444c-1.442-2.918-3.692-5.486-6.753-7.702c-3.06-2.216-6.947-3.957-11.659-5.223
|
||||
c-4.713-1.266-10.377-1.899-16.987-1.899h-6.226v-23.952h7.28c10.832,0,20.293,1.284,28.384,3.851
|
||||
c8.088,2.568,14.841,5.979,20.258,10.235c5.416,4.257,9.479,9.127,12.188,14.614C564.775,248.62,566.131,254.317,566.131,260.227z
|
||||
M533.21,349.069c0,2.321-0.458,4.502-1.371,6.542c-0.915,2.041-2.147,3.835-3.693,5.381c-1.548,1.548-3.377,2.76-5.486,3.64
|
||||
c-2.11,0.879-4.363,1.319-6.753,1.319c-2.393,0-4.627-0.44-6.7-1.319c-2.076-0.88-3.888-2.092-5.435-3.64
|
||||
c-1.548-1.546-2.779-3.34-3.692-5.381c-0.915-2.04-1.372-4.221-1.372-6.542s0.457-4.5,1.372-6.542
|
||||
c0.913-2.04,2.145-3.833,3.692-5.381c1.547-1.546,3.358-2.76,5.435-3.64c2.073-0.879,4.308-1.319,6.7-1.319
|
||||
c2.39,0,4.643,0.44,6.753,1.319c2.109,0.88,3.938,2.094,5.486,3.64c1.546,1.548,2.778,3.342,3.693,5.381
|
||||
C532.752,344.568,533.21,346.748,533.21,349.069z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"id": "adminer",
|
||||
"name": "Adminer",
|
||||
"version": "4.8.1",
|
||||
"description": "Adminer is a comprehensive database management tool that supports MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, Elasticsearch, MongoDB and others. It provides a clean interface for efficient database operations, with strong security features and extensive customization options.",
|
||||
"logo": "logo.svg",
|
||||
"links": {
|
||||
"github": "https://github.com/vrana/adminer",
|
||||
"website": "https://www.adminer.org/",
|
||||
"docs": "https://www.adminer.org/en/plugins/"
|
||||
},
|
||||
"tags": [
|
||||
"databases",
|
||||
"developer-tools",
|
||||
"mysql",
|
||||
"postgresql"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
[[config.domains]]
|
||||
serviceName = "adminer"
|
||||
port = 8080
|
||||
host = "${main_domain}"
|
||||
|
After Width: | Height: | Size: 7.9 KiB |
@@ -0,0 +1,51 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
web:
|
||||
image: ghcr.io/seanmorley15/adventurelog-frontend:latest
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- server
|
||||
environment:
|
||||
# Frontend needs to know where the backend is
|
||||
PUBLIC_SERVER_URL: ${PUBLIC_SERVER_URL}
|
||||
ORIGIN: ${ORIGIN}
|
||||
BODY_SIZE_LIMIT: ${BODY_SIZE_LIMIT}
|
||||
|
||||
db:
|
||||
image: postgis/postgis:16-3.5
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data/
|
||||
environment:
|
||||
POSTGRES_DB: ${POSTGRES_DB}
|
||||
POSTGRES_USER: ${POSTGRES_USER}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
|
||||
server:
|
||||
image: ghcr.io/seanmorley15/adventurelog-backend:latest
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
volumes:
|
||||
- adventurelog_media:/code/media/
|
||||
environment:
|
||||
# DB settings for Django
|
||||
PGHOST: ${PGHOST}
|
||||
POSTGRES_DB: ${POSTGRES_DB}
|
||||
POSTGRES_USER: ${POSTGRES_USER}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
|
||||
# Django app settings
|
||||
SECRET_KEY: ${SECRET_KEY}
|
||||
DJANGO_ADMIN_USERNAME: ${DJANGO_ADMIN_USERNAME}
|
||||
DJANGO_ADMIN_PASSWORD: ${DJANGO_ADMIN_PASSWORD}
|
||||
DJANGO_ADMIN_EMAIL: ${DJANGO_ADMIN_EMAIL}
|
||||
DEBUG: ${DEBUG}
|
||||
CSRF_TRUSTED_ORIGINS: ${CSRF_TRUSTED_ORIGINS}
|
||||
FRONTEND_URL: ${FRONTEND_URL}
|
||||
PUBLIC_URL: ${PUBLIC_URL}
|
||||
|
||||
volumes:
|
||||
postgres_data: {}
|
||||
adventurelog_media: {}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"id": "adventurelog",
|
||||
"name": "AdventureLog",
|
||||
"version": "latest",
|
||||
"description": "AdventureLog is an open-source activity tracker with maps, journaling, and Strava integration.",
|
||||
"logo": "adventurelog.svg",
|
||||
"links": {
|
||||
"github": "https://github.com/seanmorley15/adventurelog",
|
||||
"website": "https://adventurelog.app/",
|
||||
"docs": "https://adventurelog.app/docs/intro/adventurelog_overview.html"
|
||||
},
|
||||
"tags": [
|
||||
"activity",
|
||||
"maps",
|
||||
"django",
|
||||
"react",
|
||||
"postgres"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
[variables]
|
||||
frontend_domain = "${domain}"
|
||||
backend_domain = "${domain}"
|
||||
postgres_password = "${password:16}"
|
||||
secret_key = "${password:32}"
|
||||
admin_username = "admin"
|
||||
admin_password = "${password:12}"
|
||||
admin_email = "${email}"
|
||||
|
||||
[config]
|
||||
|
||||
# Frontend domain
|
||||
[[config.domains]]
|
||||
serviceName = "web"
|
||||
port = 3000
|
||||
host = "${frontend_domain}"
|
||||
|
||||
# Backend domain
|
||||
[[config.domains]]
|
||||
serviceName = "server"
|
||||
port = 80
|
||||
host = "${backend_domain}"
|
||||
|
||||
[config.env]
|
||||
# --- Postgres (values used by both db and server services)
|
||||
PGHOST = "db"
|
||||
POSTGRES_DB = "adventure"
|
||||
POSTGRES_USER = "adventure"
|
||||
POSTGRES_PASSWORD = "${postgres_password}"
|
||||
|
||||
# --- Django Backend
|
||||
SECRET_KEY = "${secret_key}"
|
||||
DJANGO_ADMIN_USERNAME = "${admin_username}"
|
||||
DJANGO_ADMIN_PASSWORD = "${admin_password}"
|
||||
DJANGO_ADMIN_EMAIL = "${admin_email}"
|
||||
DEBUG = "False"
|
||||
CSRF_TRUSTED_ORIGINS = "http://${backend_domain},http://${frontend_domain}"
|
||||
FRONTEND_URL = "http://${frontend_domain}"
|
||||
PUBLIC_URL = "http://${backend_domain}"
|
||||
|
||||
# --- Frontend
|
||||
PUBLIC_SERVER_URL = "${backend_domain}"
|
||||
ORIGIN = "http://${frontend_domain}"
|
||||
BODY_SIZE_LIMIT = "Infinity"
|
||||
@@ -0,0 +1,87 @@
|
||||
services:
|
||||
affine:
|
||||
image: ghcr.io/toeverything/affine:stable
|
||||
depends_on:
|
||||
redis:
|
||||
condition: service_healthy
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
volumes:
|
||||
- affine-config:/root/.affine/config
|
||||
- affine-storage:/root/.affine/storage
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: 1000m
|
||||
environment:
|
||||
- AFFINE_CONFIG_PATH=/root/.affine/config
|
||||
- REDIS_SERVER_HOST=redis
|
||||
- DATABASE_URL=postgres://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-affine}
|
||||
- NODE_ENV=production
|
||||
- AFFINE_SERVER_HOST=$SERVICE_URL_AFFINE
|
||||
- AFFINE_SERVER_EXTERNAL_URL=$SERVICE_URL_AFFINE
|
||||
- MAILER_HOST=${MAILER_HOST}
|
||||
- MAILER_PORT=${MAILER_PORT}
|
||||
- MAILER_USER=${MAILER_USER}
|
||||
- MAILER_PASSWORD=${MAILER_PASSWORD}
|
||||
- MAILER_SENDER=${MAILER_SENDER}
|
||||
- COPILOT_FAL_API_KEY=${COPILOT_FAL_API_KEY}
|
||||
- COPILOT_PERPLEXITY_API_KEY=${COPILOT_PERPLEXITY_API_KEY}
|
||||
- COPILOT_OPENAI_API_KEY=${COPILOT_OPENAI_API_KEY}
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- bash -c ':> /dev/tcp/127.0.0.1/3010' || exit 1
|
||||
interval: 5s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
affine_migration:
|
||||
exclude_from_hc: true
|
||||
image: ghcr.io/toeverything/affine:${AFFINE_REVISION:-stable}
|
||||
restart: on-failure
|
||||
volumes:
|
||||
- affine-storage:/root/.affine/storage
|
||||
- affine-config:/root/.affine/config
|
||||
command:
|
||||
- sh
|
||||
- -c
|
||||
- node ./scripts/self-host-predeploy.js
|
||||
environment:
|
||||
- REDIS_SERVER_HOST=redis
|
||||
- DATABASE_URL=postgres://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-affine}
|
||||
- AFFINE_INDEXER_ENABLED=false
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
image: redis
|
||||
volumes:
|
||||
- affine-redis-data:/data
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD
|
||||
- redis-cli
|
||||
- --raw
|
||||
- incr
|
||||
- ping
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
postgres:
|
||||
image: pgvector/pgvector:pg16
|
||||
volumes:
|
||||
- affine-postgres-data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- pg_isready -U affine
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
environment:
|
||||
- POSTGRES_USER=${SERVICE_USER_POSTGRES}
|
||||
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
|
||||
- POSTGRES_DB=${POSTGRES_DB:-affine}
|
||||
- PGDATA=/var/lib/postgresql/data/pgdata
|
||||
@@ -0,0 +1,9 @@
|
||||
<svg viewBox="0 0 67 67" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M22.21 67V44.6369H0V67H22.21Z" fill="#ffffff"/>
|
||||
<path d="M0 44.6369L22.21 46.8285V44.6369H0Z" fill="#DDDDDD"/>
|
||||
<path d="M66.7038 22.3184H22.2534L0.0878906 44.6367H44.4634L66.7038 22.3184Z" fill="#ffffff"/>
|
||||
<path d="M22.21 0H0V22.3184H22.21V0Z" fill="#ffffff"/>
|
||||
<path d="M66.7198 0H44.5098V22.3184H66.7198V0Z" fill="#ffffff"/>
|
||||
<path d="M66.6753 22.3185L44.5098 20.0822V22.3185H66.6753Z" fill="#DDDDDD"/>
|
||||
<path d="M66.7198 67V44.6369H44.5098V67H66.7198Z" fill="#ffffff"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 561 B |
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"id": "affine",
|
||||
"name": "affine",
|
||||
"description": "Affine is an open-source, all-in-one workspace and OS for knowledge management, a Notion/Miro alternative.",
|
||||
"version": "latest",
|
||||
"logo": "logo.svg",
|
||||
"links": {
|
||||
"github": "",
|
||||
"website": "https://docs.affine.pro/docs/self-host-affine",
|
||||
"docs": "https://docs.affine.pro/docs/self-host-affine"
|
||||
},
|
||||
"tags": [
|
||||
"knowledge-management",
|
||||
"notion",
|
||||
"miro",
|
||||
"workspace",
|
||||
"productivity"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "affine"
|
||||
port = 3010
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
SERVICE_USER_POSTGRES = "${username}"
|
||||
SERVICE_PASSWORD_POSTGRES = "${password:32}"
|
||||
SERVICE_URL_AFFINE = "https://${main_domain}"
|
||||
@@ -0,0 +1,84 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
affinepro:
|
||||
image: ghcr.io/toeverything/affine:stable
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 3010
|
||||
volumes:
|
||||
- affine-storage:/root/.affine/storage
|
||||
- affine-config:/root/.affine/config
|
||||
environment:
|
||||
- REDIS_SERVER_HOST=redis
|
||||
- REDIS_SERVER_PASSWORD=${REDIS_PASSWORD}
|
||||
- DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@db:5432/affinepro
|
||||
- AFFINE_INDEXER_ENABLED=false
|
||||
- AFFINE_SERVER_HOST=${DOMAIN}
|
||||
- MAILER_HOST=${MAILER_HOST}
|
||||
- MAILER_PORT=${MAILER_PORT}
|
||||
- MAILER_USER=${MAILER_USER}
|
||||
- MAILER_PASSWORD=${MAILER_PASSWORD}
|
||||
- MAILER_SENDER=${MAILER_SENDER}
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
migration:
|
||||
condition: service_completed_successfully
|
||||
|
||||
migration:
|
||||
image: ghcr.io/toeverything/affine:stable
|
||||
command: ["sh", "-c", "node ./scripts/self-host-predeploy.js"]
|
||||
environment:
|
||||
- REDIS_SERVER_HOST=redis
|
||||
- REDIS_SERVER_PASSWORD=${REDIS_PASSWORD}
|
||||
- DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@db:5432/affinepro
|
||||
- AFFINE_INDEXER_ENABLED=false
|
||||
- AFFINE_SERVER_HOST=${DOMAIN}
|
||||
- MAILER_HOST=${MAILER_HOST}
|
||||
- MAILER_PORT=${MAILER_PORT}
|
||||
- MAILER_USER=${MAILER_USER}
|
||||
- MAILER_PASSWORD=${MAILER_PASSWORD}
|
||||
- MAILER_SENDER=${MAILER_SENDER}
|
||||
volumes:
|
||||
- affine-storage:/root/.affine/storage
|
||||
- affine-config:/root/.affine/config
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
|
||||
db:
|
||||
image: pgvector/pgvector:pg16
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
|
||||
- POSTGRES_DB=affinepro
|
||||
- POSTGRES_INITDB_ARGS=--data-checksums
|
||||
volumes:
|
||||
- postgres-data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD", "pg_isready", "-U", "postgres", "-d", "affinepro"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
restart: unless-stopped
|
||||
command: redis-server --requirepass ${REDIS_PASSWORD}
|
||||
volumes:
|
||||
- redis-data:/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "redis-cli -a '${REDIS_PASSWORD}' ping | grep PONG"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
volumes:
|
||||
affine-storage: {}
|
||||
affine-config: {}
|
||||
postgres-data: {}
|
||||
redis-data: {}
|
||||
|
After Width: | Height: | Size: 8.3 KiB |
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"id": "affinepro",
|
||||
"name": "Affine Pro",
|
||||
"version": "stable",
|
||||
"description": "Affine Pro is a modern, self-hosted platform designed for collaborative content creation and project management. It offers an intuitive interface, seamless real-time collaboration, and powerful tools for organizing tasks, notes, and ideas.",
|
||||
"logo": "logo.png",
|
||||
"links": {
|
||||
"github": "https://github.com/toeverything/Affine",
|
||||
"website": "https://affine.pro/",
|
||||
"docs": "https://docs.affine.pro/"
|
||||
},
|
||||
"tags": [
|
||||
"collaboration",
|
||||
"self-hosted",
|
||||
"productivity",
|
||||
"project-management"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
postgres_password = "${password:16}"
|
||||
redis_password = "${password:16}"
|
||||
mailer_host = ""
|
||||
mailer_port = "587"
|
||||
mailer_user = ""
|
||||
mailer_password = ""
|
||||
mailer_sender = ""
|
||||
|
||||
[config]
|
||||
[[config.domains]]
|
||||
serviceName = "affinepro"
|
||||
port = 3010
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
DOMAIN = "${main_domain}"
|
||||
POSTGRES_PASSWORD = "${postgres_password}"
|
||||
REDIS_PASSWORD = "${redis_password}"
|
||||
MAILER_HOST = "${mailer_host}"
|
||||
MAILER_PORT = "${mailer_port}"
|
||||
MAILER_USER = "${mailer_user}"
|
||||
MAILER_PASSWORD = "${mailer_password}"
|
||||
MAILER_SENDER = "${mailer_sender}"
|
||||
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" id="a" viewBox="0 0 3271 1440"><defs><style>.st0{fill:#dedede}</style></defs><path d="M1009.95 1209.53c-125.1-214.98-250.74-430.9-378.92-651.16-126.82 219.73-251.81 436.28-376.62 652.51H60.69c190.42-329.11 570.87-981.75 570.87-981.75s382.11 651.12 572.49 980.41h-194.1Z" class="st0"/><path d="M875.46 1210.46H383.92c32.72-56.91 64.4-111.99 95.81-166.62H781.8c30.62 54.46 61.09 108.66 93.67 166.62zm1622.92-202.23c19.52 29.84 37.9 57.94 58.46 89.39h-63.61c-18.29-24.88-38.17-51.91-57.71-78.49h-72.24v78.17h-51.11V828.44c30.03 0 58.71-.22 87.38.06 23.48.24 47.32-1.26 70.37 2.21 37.67 5.66 66.94 25.71 74.9 64.9 8.22 40.54 1.62 78.35-35.52 104.62-3.14 2.22-6.21 4.54-10.93 7.99h.01Zm-135.01-40.37c34 0 66.71 1.87 99.08-.66 21.47-1.67 30.97-17.92 31.56-39.77.61-22.88-9.01-40.56-30.99-42.73-32.8-3.23-66.15-.84-99.65-.84zM1674.39 829.9v38.37c-52.36 58.82-104.25 117.13-160.14 179.91h158.93v49.49h-227.62v-51.9c46.98-52.11 95.02-105.41 147.93-164.09h-147.28V829.9zm906.29-489.95c64.48 63.91 125.11 123.99 189.35 187.65V373.68h47.4v271.19c-64.19-62.94-125.05-122.59-190.04-186.3v162.44h-46.72V339.94h.01Zm195.02 692.31c13.79-6.85 33.51-15.76 45.41-21.65 41.44 55.26 105.07 42.53 132.33 18s35.44-59.98 25.2-95.47c-13.36-34.33-42.97-61.14-86.36-59.62-43.38 1.52-81.55 32.41-85.2 84.34h-50.32c-.57-50.11 36.27-109.35 94.12-126.75 72.77-21.89 144.89 13.23 172.07 83.77 25.18 65.37-5.74 138.6-72.21 171-60.69 29.59-140.17 6.97-175.1-53.61h.04Zm-811.82-622.07c-11.07 8.4-24.55 17.68-34.13 24.95-55.99-46.33-119.62-30.88-142.33 27.28-13.63 38.17 6.27 88.2 48.2 103.62 36.45 13.4 76.82-.61 87.32-31.48-8.66-2.61-17.29-5.23-28.25-8.54-.93-12.84-1.85-25.67-2.96-40.9h96.82c7.25 56.02-37.39 118.12-94.41 132.17-63.06 15.54-129.35-19.2-152.31-79.83-22.64-59.76 4.81-131.25 61.88-161.16 55.93-29.3 126.75-15.37 160.17 33.88Zm-531.9-55.25c48.2 92.28 93.04 178.13 139.88 267.84h-53.47c-27.89-50.55-56.47-102.34-86.73-157.13-28.93 54.29-56.1 105.29-83.82 157.31h-54.54c45.87-88.68 90.79-175.5 138.65-268.02h.01Zm1642.09 60.65h-89.98v-46.22h226.22v46.24h-86.43v205.91h-49.82V415.59zM1947.89 878.34v65.77l63.09.91s-.03 30.03-.03 50.34c-25.69.89-53.1.45-78.35-5.53-21.38-5.05-36.73-22.63-37.67-46.05-1.5-36.98-.4-75.88-.4-115.24h216.51v49.81h-163.16Zm-52.88 218.57v-68.62c14.11-.65 27.22-1.25 40.97-1.87 3.47 7 3.06 19.81 9.96 20.09 6.88.29 107.67 0 164.04 0v50.41h-214.97Zm342.4-678.53v60.83l58.36.84s-.03 27.78-.03 46.57c-23.85.41-49.12.41-72.49-5.11-19.77-4.68-33.97-20.93-34.85-42.59-1.39-34.2-.37-70.19-.37-106.6h200.29v46.07H2237.4h.01Zm-48.91 202.2v-63.49c13.05-.6 25.18-1.15 37.9-1.73 3.2 6.48 2.83 18.32 9.2 18.59s99.6 0 151.75 0v46.63h-198.87.01Z" class="st0"/></svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
@@ -0,0 +1,14 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
agent-zero:
|
||||
image: agent0ai/agent-zero:v1.9
|
||||
restart: unless-stopped
|
||||
expose:
|
||||
- "80"
|
||||
environment:
|
||||
- AUTH_LOGIN=${AUTH_LOGIN}
|
||||
- AUTH_PASSWORD=${AUTH_PASSWORD}
|
||||
volumes:
|
||||
- agent-zero-data:/a0/usr
|
||||
volumes:
|
||||
agent-zero-data:
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "agent-zero",
|
||||
"name": "Agent Zero",
|
||||
"version": "v1.9",
|
||||
"description": "Agent Zero is an open-source autonomous AI agent framework with memory and tool use capabilities.",
|
||||
"logo": "agent-zero.svg",
|
||||
"links": {
|
||||
"github": "https://github.com/agent0ai/agent-zero",
|
||||
"website": "https://www.agent-zero.ai",
|
||||
"docs": "https://www.agent-zero.ai/p/docs/"
|
||||
},
|
||||
"tags": [
|
||||
"ai",
|
||||
"agent",
|
||||
"automation"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
auth_login = "${username}"
|
||||
auth_password = "${password:32}"
|
||||
|
||||
[config]
|
||||
env = [
|
||||
"AUTH_LOGIN=${auth_login}",
|
||||
"AUTH_PASSWORD=${auth_password}",
|
||||
]
|
||||
mounts = []
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "agent-zero"
|
||||
port = 80
|
||||
host = "${main_domain}"
|
||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1,22 @@
|
||||
services:
|
||||
agentdvr:
|
||||
image: mekayelanik/ispyagentdvr:latest
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=${TIMEZONE:-America/New_York}
|
||||
- AGENTDVR_WEBUI_PORT=8090
|
||||
volumes:
|
||||
- agentdvr-config:/AgentDVR/Media/XML/
|
||||
- agentdvr-media:/AgentDVR/Media/WebServerRoot/Media/
|
||||
- agentdvr-commands:/AgentDVR/Commands/
|
||||
ports:
|
||||
- 8090
|
||||
- 3478/udp
|
||||
- 50000-50100/udp
|
||||
|
||||
volumes:
|
||||
agentdvr-config: {}
|
||||
agentdvr-media: {}
|
||||
agentdvr-commands: {}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"id": "agentdvr",
|
||||
"name": "Agent DVR",
|
||||
"version": "latest",
|
||||
"description": "Agent DVR is a comprehensive video surveillance software with motion detection, alerts, and remote access capabilities.",
|
||||
"logo": "agentdvr.png",
|
||||
"links": {
|
||||
"github": "https://github.com/ispysoftware/AgentDVR",
|
||||
"website": "https://www.ispyconnect.com/",
|
||||
"docs": "https://www.ispyconnect.com/userguide-agent-dvr.aspx"
|
||||
},
|
||||
"tags": [
|
||||
"surveillance",
|
||||
"security",
|
||||
"video",
|
||||
"monitoring",
|
||||
"dvr",
|
||||
"camera"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
timezone = "America/New_York"
|
||||
|
||||
[config]
|
||||
[[config.domains]]
|
||||
serviceName = "agentdvr"
|
||||
port = 8090
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
TIMEZONE = "${timezone}"
|
||||
|
||||
[[config.mounts]]
|
||||
@@ -0,0 +1,95 @@
|
||||
services:
|
||||
airflow-db:
|
||||
image: bitnami/postgresql:${POSTGRESQL_VERSION}
|
||||
environment:
|
||||
POSTGRESQL_DATABASE: ${POSTGRESQL_NAME}
|
||||
POSTGRESQL_USERNAME: ${POSTGRESQL_USER}
|
||||
POSTGRESQL_PASSWORD: ${POSTGRESQL_PASSWORD}
|
||||
volumes:
|
||||
- airflow-postgresql-persistance:/bitnami
|
||||
restart: always
|
||||
airflow-redis:
|
||||
image: bitnamilegacy/redis:${REDIS_VERSION}
|
||||
environment:
|
||||
REDIS_PASSWORD: ${REDIS_PASSWORD}
|
||||
volumes:
|
||||
- airflow-redis-persistance:/bitnami
|
||||
restart: always
|
||||
airflow:
|
||||
image: bitnamilegacy/airflow:${AIRFLOW_VERSION}
|
||||
environment:
|
||||
AIRFLOW_EXECUTOR: CeleryExecutor
|
||||
AIRFLOW_DATABASE_HOST: airflow-db
|
||||
AIRFLOW_DATABASE_NAME: ${POSTGRESQL_NAME}
|
||||
AIRFLOW_DATABASE_USERNAME: ${POSTGRESQL_USER}
|
||||
AIRFLOW_DATABASE_PASSWORD: ${POSTGRESQL_PASSWORD}
|
||||
REDIS_HOST: airflow-redis
|
||||
REDIS_PASSWORD: ${REDIS_PASSWORD}
|
||||
AIRFLOW_WEBSERVER_HOST: airflow
|
||||
AIRFLOW_BASE_URL: https://airflow.${ROOT_DOMAIN}/
|
||||
AIRFLOW_SECRET_KEY: ${AIRFLOW_SECRET_KEY}
|
||||
AIRFLOW_LOAD_EXAMPLES: ${AIRFLOW_EXAMPLES}
|
||||
AIRFLOW_USERNAME: ${AIRFLOW_USER}
|
||||
AIRFLOW_PASSWORD: ${AIRFLOW_PASSWORD}
|
||||
AIRFLOW_EMAIL: ${AIRFLOW_EMAIL}
|
||||
AIRFLOW__SMTP__SMTP_HOST: ${SMTP_HOST}
|
||||
AIRFLOW__SMTP__SMTP_PORT: ${SMTP_PORT}
|
||||
AIRFLOW__SMTP__SMTP_STARTTLS: ${SMTP_STARTTLS}
|
||||
AIRFLOW__SMTP__SMTP_SSL: ${SMTP_SSL}
|
||||
AIRFLOW__SMTP__SMTP_USER: ${SMTP_USER}
|
||||
AIRFLOW__SMTP__SMTP_PASSWORD: ${SMTP_PASSWORD}
|
||||
AIRFLOW__SMTP__SMTP_MAIL_FROM: ${SMTP_MAIL_FROM}
|
||||
volumes:
|
||||
- ${AIRFLOW_DAG_PATH}:/opt/bitnami/airflow/dags
|
||||
- ${AIRFLOW_PY_REQUIREMENTS}:/bitnami/python/requirements.txt
|
||||
depends_on:
|
||||
- airflow-db
|
||||
- airflow-redis
|
||||
expose:
|
||||
- "8080"
|
||||
restart: always
|
||||
airflow-worker:
|
||||
image: bitnamilegacy/airflow-worker:${AIRFLOW_WORKER_VERSION}
|
||||
environment:
|
||||
AIRFLOW_EXECUTOR: CeleryExecutor
|
||||
AIRFLOW_DATABASE_HOST: airflow-db
|
||||
AIRFLOW_DATABASE_NAME: ${POSTGRESQL_NAME}
|
||||
AIRFLOW_DATABASE_USERNAME: ${POSTGRESQL_USER}
|
||||
AIRFLOW_DATABASE_PASSWORD: ${POSTGRESQL_PASSWORD}
|
||||
REDIS_HOST: airflow-redis
|
||||
REDIS_PASSWORD: ${REDIS_PASSWORD}
|
||||
AIRFLOW_WEBSERVER_HOST: airflow
|
||||
AIRFLOW_BASE_URL: https://airflow.${ROOT_DOMAIN}/
|
||||
AIRFLOW_SECRET_KEY: ${AIRFLOW_SECRET_KEY}
|
||||
AIRFLOW_LOAD_EXAMPLES: ${AIRFLOW_EXAMPLES}
|
||||
volumes:
|
||||
- airflow-data:/opt/bitnami/airflow/data
|
||||
- ${AIRFLOW_DAG_PATH}:/opt/bitnami/airflow/dags
|
||||
- ${AIRFLOW_PY_REQUIREMENTS}:/bitnami/python/requirements.txt
|
||||
depends_on:
|
||||
- airflow
|
||||
restart: always
|
||||
airflow-scheduler:
|
||||
image: bitnamilegacy/airflow-scheduler:${AIRFLOW_SCHEDULER_VERSION}
|
||||
environment:
|
||||
AIRFLOW_EXECUTOR: CeleryExecutor
|
||||
AIRFLOW_DATABASE_HOST: airflow-db
|
||||
AIRFLOW_DATABASE_NAME: ${POSTGRESQL_NAME}
|
||||
AIRFLOW_DATABASE_USERNAME: ${POSTGRESQL_USER}
|
||||
AIRFLOW_DATABASE_PASSWORD: ${POSTGRESQL_PASSWORD}
|
||||
REDIS_HOST: airflow-redis
|
||||
REDIS_PASSWORD: ${REDIS_PASSWORD}
|
||||
AIRFLOW_WEBSERVER_HOST: airflow
|
||||
AIRFLOW_BASE_URL: https://airflow.${ROOT_DOMAIN}/
|
||||
AIRFLOW_SECRET_KEY: ${AIRFLOW_SECRET_KEY}
|
||||
AIRFLOW_LOAD_EXAMPLES: ${AIRFLOW_EXAMPLES}
|
||||
volumes:
|
||||
- ${AIRFLOW_DAG_PATH}:/opt/bitnami/airflow/dags
|
||||
- ${AIRFLOW_PY_REQUIREMENTS}:/bitnami/python/requirements.txt
|
||||
depends_on:
|
||||
- airflow
|
||||
restart: always
|
||||
volumes:
|
||||
airflow-postgresql-persistance: {}
|
||||
airflow-redis-persistance: {}
|
||||
airflow-data: {}
|
||||
|
After Width: | Height: | Size: 62 KiB |
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "airflow",
|
||||
"name": "Airflow",
|
||||
"description": "A tool to express and execute workflows as directed acyclic graphs (DAGs).",
|
||||
"version": "latest",
|
||||
"logo": "logo.png",
|
||||
"links": {
|
||||
"github": "https://github.com/bitnami/bitnami-docker-airflow#readme",
|
||||
"website": "",
|
||||
"docs": "https://github.com/bitnami/bitnami-docker-airflow#readme"
|
||||
},
|
||||
"tags": [
|
||||
"self-hosted",
|
||||
"caprover"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
postgresql-version = "12.12.0"
|
||||
postgresql-name = "airflow_db"
|
||||
postgresql-user = "airflow_db_user"
|
||||
postgresql-password = "${password:16}"
|
||||
redis-version = "7.0.4"
|
||||
redis-password = "${password:16}"
|
||||
airflow-version = "2.3.3"
|
||||
airflow-worker-version = "2.3.3"
|
||||
airflow-scheduler-version = "2.3.3"
|
||||
airflow-user = "airflow_user"
|
||||
airflow-password = "${password:16}"
|
||||
airflow-email = ""
|
||||
airflow-examples = "no"
|
||||
airflow-secret-key = "${password:16}"
|
||||
airflow-dag-path = "airflow-dags"
|
||||
airflow-py-requirements = "airflow-requstxt"
|
||||
smtp-host = "${main_domain}"
|
||||
smtp-port = ""
|
||||
smtp-starttls = "no"
|
||||
smtp-ssl = "no"
|
||||
smtp-user = ""
|
||||
smtp-password = ""
|
||||
smtp-mail-from = ""
|
||||
|
||||
[config]
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "airflow"
|
||||
port = 8080
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
POSTGRESQL_VERSION = "${postgresql-version}"
|
||||
POSTGRESQL_NAME = "${postgresql-name}"
|
||||
POSTGRESQL_USER = "${postgresql-user}"
|
||||
POSTGRESQL_PASSWORD = "${postgresql-password}"
|
||||
REDIS_VERSION = "${redis-version}"
|
||||
REDIS_PASSWORD = "${redis-password}"
|
||||
AIRFLOW_VERSION = "${airflow-version}"
|
||||
AIRFLOW_WORKER_VERSION = "${airflow-worker-version}"
|
||||
AIRFLOW_SCHEDULER_VERSION = "${airflow-scheduler-version}"
|
||||
AIRFLOW_USER = "${airflow-user}"
|
||||
AIRFLOW_PASSWORD = "${airflow-password}"
|
||||
AIRFLOW_EMAIL = "${airflow-email}"
|
||||
AIRFLOW_EXAMPLES = "${airflow-examples}"
|
||||
AIRFLOW_SECRET_KEY = "${airflow-secret-key}"
|
||||
AIRFLOW_DAG_PATH = "${airflow-dag-path}"
|
||||
AIRFLOW_PY_REQUIREMENTS = "${airflow-py-requirements}"
|
||||
SMTP_HOST = "${smtp-host}"
|
||||
SMTP_PORT = "${smtp-port}"
|
||||
SMTP_STARTTLS = "${smtp-starttls}"
|
||||
SMTP_SSL = "${smtp-ssl}"
|
||||
SMTP_USER = "${smtp-user}"
|
||||
SMTP_PASSWORD = "${smtp-password}"
|
||||
SMTP_MAIL_FROM = "${smtp-mail-from}"
|
||||
ROOT_DOMAIN = "${main_domain}"
|
||||
@@ -0,0 +1,55 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
akaunting:
|
||||
image: docker.io/akaunting/akaunting:latest
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
akaunting-db:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
# App config
|
||||
APP_URL: ${APP_URL}
|
||||
LOCALE: ${LOCALE}
|
||||
|
||||
# Database connection
|
||||
DB_HOST: akaunting-db
|
||||
DB_PORT: 3306
|
||||
DB_NAME: ${DB_NAME}
|
||||
DB_USERNAME: ${DB_USERNAME}
|
||||
DB_PASSWORD: ${DB_PASSWORD}
|
||||
DB_PREFIX: ${DB_PREFIX}
|
||||
|
||||
# First-run bootstrap (company + admin)
|
||||
COMPANY_NAME: ${COMPANY_NAME}
|
||||
COMPANY_EMAIL: ${COMPANY_EMAIL}
|
||||
ADMIN_EMAIL: ${ADMIN_EMAIL}
|
||||
ADMIN_PASSWORD: ${ADMIN_PASSWORD}
|
||||
|
||||
# Expose only to internal network; domain routing handled by Dokploy/Traefik
|
||||
expose:
|
||||
- "80"
|
||||
|
||||
volumes:
|
||||
- akaunting-data:/var/www/html
|
||||
|
||||
akaunting-db:
|
||||
image: mariadb:10.11
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
||||
MYSQL_USER: ${MYSQL_USER}
|
||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
||||
# Randomizes root password on each deployment (recommended)
|
||||
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
|
||||
volumes:
|
||||
- akaunting-db:/var/lib/mysql
|
||||
healthcheck:
|
||||
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
volumes:
|
||||
akaunting-data: {}
|
||||
akaunting-db: {}
|
||||
|
After Width: | Height: | Size: 8.3 KiB |
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"id": "akaunting",
|
||||
"name": "Akaunting",
|
||||
"version": "latest",
|
||||
"description": "Akaunting is a self-hosted, open-source accounting app for small businesses.",
|
||||
"logo": "image.png",
|
||||
"links": {
|
||||
"github": "https://github.com/akaunting/akaunting",
|
||||
"website": "https://akaunting.com",
|
||||
"docs": "https://akaunting.com/docs"
|
||||
},
|
||||
"tags": [
|
||||
"finance",
|
||||
"accounting",
|
||||
"php",
|
||||
"mariadb",
|
||||
"self-hosted"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
[variables]
|
||||
# Domain & UI
|
||||
main_domain = "${domain}"
|
||||
locale = "en-US"
|
||||
|
||||
# DB credentials (safe defaults; user can override in UI)
|
||||
db_name = "akaunting"
|
||||
db_user = "admin"
|
||||
mysql_password = "${password:24}"
|
||||
|
||||
# Akaunting setup variables
|
||||
company_name = "My Company"
|
||||
company_email = "${email}"
|
||||
admin_email = "${email}"
|
||||
admin_password = "${password:24}"
|
||||
|
||||
# Akaunting table prefix: 3 hex chars + underscore (e.g., "a1f_")
|
||||
db_prefix = "${hash:3}_"
|
||||
|
||||
# Domain routing for the web UI
|
||||
[[config.domains]]
|
||||
serviceName = "akaunting"
|
||||
port = 80
|
||||
host = "${main_domain}"
|
||||
|
||||
[config]
|
||||
env = [
|
||||
# App
|
||||
"APP_URL=${main_domain}",
|
||||
"LOCALE=${locale}",
|
||||
|
||||
# Database (app)
|
||||
"DB_HOST=akaunting-db",
|
||||
"DB_PORT=3306",
|
||||
"DB_NAME=${db_name}",
|
||||
"DB_USERNAME=${db_user}",
|
||||
"DB_PASSWORD=${mysql_password}",
|
||||
"DB_PREFIX=${db_prefix}",
|
||||
|
||||
# First-run bootstrap (app)
|
||||
"COMPANY_NAME=${company_name}",
|
||||
"COMPANY_EMAIL=${company_email}",
|
||||
"ADMIN_EMAIL=${admin_email}",
|
||||
"ADMIN_PASSWORD=${admin_password}",
|
||||
|
||||
# Database (server)
|
||||
"MYSQL_DATABASE=${db_name}",
|
||||
"MYSQL_USER=${db_user}",
|
||||
"MYSQL_PASSWORD=${mysql_password}",
|
||||
"MYSQL_RANDOM_ROOT_PASSWORD=yes"
|
||||
]
|
||||
|
||||
# No custom mounts needed; volumes are already defined in compose.
|
||||
[[config.mounts]]
|
||||
|
After Width: | Height: | Size: 55 KiB |
@@ -0,0 +1,30 @@
|
||||
services:
|
||||
alarik:
|
||||
image: ghcr.io/achtungsoftware/alarik:latest
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- alarik-storage:/app/Storage
|
||||
environment:
|
||||
- API_BASE_URL=${API_BASE_URL}
|
||||
- CONSOLE_BASE_URL=${CONSOLE_BASE_URL}
|
||||
- ADMIN_USERNAME=${ADMIN_USERNAME}
|
||||
- ADMIN_PASSWORD=${ADMIN_PASSWORD}
|
||||
- JWT=${JWT}
|
||||
- ALLOW_ACCOUNT_CREATION=${ALLOW_ACCOUNT_CREATION}
|
||||
expose:
|
||||
- 8080
|
||||
|
||||
console:
|
||||
image: ghcr.io/achtungsoftware/alarik-console:latest
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- NUXT_PUBLIC_API_BASE_URL=${API_BASE_URL}
|
||||
- NUXT_PUBLIC_CONSOLE_BASE_URL=${CONSOLE_BASE_URL}
|
||||
- NUXT_PUBLIC_ALLOW_ACCOUNT_CREATION=${ALLOW_ACCOUNT_CREATION}
|
||||
expose:
|
||||
- 3000
|
||||
depends_on:
|
||||
- alarik
|
||||
|
||||
volumes:
|
||||
alarik-storage:
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "alarik",
|
||||
"name": "Alarik",
|
||||
"description": "Alarik is a high-performance, S3-compatible object storage.",
|
||||
"logo": "alarik.png",
|
||||
"version": "latest",
|
||||
"links": {
|
||||
"github": "https://github.com/achtungsoftware/alarik",
|
||||
"website": "https://alarik.io/",
|
||||
"docs": "https://alarik.io/docs"
|
||||
},
|
||||
"tags": [
|
||||
"storage",
|
||||
"s3",
|
||||
"object-storage"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
[variables]
|
||||
console_domain = "${domain}"
|
||||
api_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
mounts = []
|
||||
|
||||
# S3-compatible API - point AWS CLI / SDKs / rclone / backup tools at this domain
|
||||
[[config.domains]]
|
||||
serviceName = "alarik"
|
||||
port = 8_080
|
||||
host = "${api_domain}"
|
||||
|
||||
# Web management console - log in with the generated admin credentials below
|
||||
[[config.domains]]
|
||||
serviceName = "console"
|
||||
port = 3_000
|
||||
host = "${console_domain}"
|
||||
|
||||
[config.env]
|
||||
API_BASE_URL = "http://${api_domain}"
|
||||
CONSOLE_BASE_URL = "http://${console_domain}"
|
||||
ADMIN_USERNAME = "alarik"
|
||||
ADMIN_PASSWORD = "${password:16}"
|
||||
JWT = "${base64:64}"
|
||||
ALLOW_ACCOUNT_CREATION = "false"
|
||||
@@ -0,0 +1,18 @@
|
||||
services:
|
||||
albyhub:
|
||||
image: ghcr.io/getalby/hub:v1.22.2
|
||||
command: []
|
||||
environment:
|
||||
PGID: $PGID
|
||||
PUID: $PUID
|
||||
TZ: $TZ
|
||||
UMASK: "002"
|
||||
WORK_DIR: /data/albyhub
|
||||
LOG_EVENTS: true
|
||||
expose:
|
||||
- "8080"
|
||||
volumes:
|
||||
- albyhub-data:/data
|
||||
restart: on-failure
|
||||
volumes:
|
||||
albyhub-data: {}
|
||||
@@ -0,0 +1,108 @@
|
||||
<svg width="256" height="256" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_1225_44)">
|
||||
<mask id="mask0_1225_44" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="256" height="256">
|
||||
<path d="M256 0H0V256H256V0Z" fill="white"/>
|
||||
</mask>
|
||||
<g mask="url(#mask0_1225_44)">
|
||||
<path d="M256 0H0V256H256V0Z" fill="url(#paint0_linear_1225_44)"/>
|
||||
<path d="M167.581 118.926C166.952 116.12 166.017 113.434 164.827 110.883C163.501 108.027 161.852 105.34 159.914 102.875C157.908 100.324 155.614 98.029 153.064 96.0225C150.599 94.0842 147.914 92.435 145.058 91.1087C142.508 89.9185 139.822 89.0002 137.018 88.3542C134.111 87.6742 131.068 87.334 127.957 87.334C124.847 87.334 121.804 87.6742 118.897 88.3542C118.472 90.4457 118.064 92.639 117.707 94.9345C117.044 99.0152 116.501 103.419 116.076 108.163C115.872 110.543 115.702 113.026 115.566 115.593C115.362 119.521 115.243 123.652 115.243 128.005C115.243 132.358 115.362 136.473 115.566 140.417C119.492 140.621 123.623 140.74 127.975 140.74C132.326 140.74 136.44 140.621 140.383 140.417C142.933 140.281 145.415 140.111 147.794 139.907C152.554 139.482 156.957 138.938 161.036 138.275C163.331 137.901 165.524 137.51 167.615 137.085C168.278 134.177 168.635 131.134 168.635 128.022C168.635 124.911 168.295 121.867 167.615 118.96L167.581 118.926ZM155.801 115.848C154.764 116.001 153.761 116.256 152.775 116.596C151.007 117.208 149.375 118.109 147.896 119.249C144.208 122.054 141.556 126.271 140.791 130.811C140.791 130.896 140.706 130.93 140.655 130.913C140.604 130.913 140.553 130.862 140.553 130.811C139.346 123.074 133.091 117.038 125.544 115.831C125.408 115.814 125.408 115.61 125.544 115.593C126.071 115.508 126.58 115.406 127.09 115.27C131.34 114.199 135.029 111.563 137.493 108.061C138.292 106.938 138.955 105.731 139.482 104.439C139.992 103.198 140.366 101.889 140.57 100.545C140.587 100.409 140.791 100.409 140.808 100.545C141.267 103.47 142.457 106.139 144.14 108.418C145.109 109.727 146.231 110.883 147.505 111.886C149.885 113.774 152.724 115.083 155.801 115.61C155.937 115.627 155.937 115.831 155.801 115.848Z" fill="#F1F2F2"/>
|
||||
<path d="M213 125.106L212.932 130.904C212.932 139.575 203.6 147.465 186.67 153.11C180.703 155.099 173.989 156.748 166.764 158.04C166.238 158.142 165.711 158.227 165.184 158.329C163.212 158.652 161.223 158.959 159.167 159.231C157.161 159.503 155.121 159.741 153.064 159.962C150.65 160.217 148.219 160.438 145.738 160.625C143.256 160.795 140.757 160.948 138.208 161.05C134.825 161.186 131.408 161.254 127.957 161.254C124.507 161.254 121.073 161.186 117.707 161.05C115.158 160.931 112.659 160.795 110.177 160.625C107.696 160.438 105.265 160.234 102.868 159.962C100.794 159.741 98.7715 159.503 96.7655 159.231C94.7258 158.959 92.72 158.652 90.7653 158.329C90.2213 158.244 89.6943 158.142 89.1675 158.04C81.943 156.765 75.2288 155.116 69.2623 153.11C52.332 147.465 43 139.575 43 130.904V125.072C43 116.4 52.332 108.511 69.2623 102.866C75.2288 100.876 81.943 99.2269 89.1675 97.9347C89.0825 98.6489 88.9975 99.3459 88.9125 100.077C88.4705 103.801 88.1305 107.592 87.8925 111.469C86.0228 111.843 84.2208 112.217 82.47 112.642C65.9818 116.519 55.0857 122.266 52.264 127.996C55.0857 133.726 65.9818 139.473 82.47 143.333C84.2208 143.741 86.0228 144.132 87.8925 144.506C88.9465 144.71 90.0173 144.914 91.1223 145.101C92.516 145.339 93.927 145.577 95.3717 145.781C99.5703 146.41 104.007 146.937 108.664 147.311C111.095 147.516 113.577 147.686 116.11 147.805C119.951 147.992 123.929 148.094 128.008 148.094C132.088 148.094 136.049 147.992 139.907 147.805C142.44 147.686 144.922 147.516 147.335 147.311C151.993 146.92 156.43 146.41 160.628 145.781C162.073 145.56 163.501 145.339 164.878 145.101C165.966 144.914 167.036 144.71 168.107 144.506C169.977 144.149 171.779 143.758 173.53 143.35C190.018 139.473 200.914 133.726 203.736 127.996C200.914 122.266 190.018 116.519 173.53 112.659C172 108.12 169.824 103.903 167.087 100.094C166.493 99.2609 165.881 98.4619 165.235 97.6797C165.762 97.7647 166.306 97.8667 166.833 97.9687C174.057 99.2439 180.771 100.893 186.738 102.9C203.668 108.545 213 116.434 213 125.106Z" fill="#F1F2F2"/>
|
||||
<path d="M158.249 90.7445C157.467 90.0982 156.668 89.4863 155.835 88.8913C152.027 86.1538 147.794 83.9772 143.273 82.447C139.414 65.954 133.669 55.0552 127.94 52.2327C122.212 55.0552 116.467 65.954 112.608 82.447C112.183 84.1982 111.809 86.0008 111.435 87.871C111.231 88.9253 111.027 90.0133 110.84 91.1015C110.602 92.4958 110.364 93.907 110.16 95.3522C109.531 99.552 109.005 103.99 108.631 108.649C108.427 111.063 108.256 113.546 108.137 116.079C107.95 119.922 107.849 123.9 107.849 127.981C107.849 132.062 107.95 136.024 108.137 139.883C103.378 139.458 98.9755 138.914 94.913 138.251C94.777 134.867 94.709 131.45 94.709 127.998C94.709 124.547 94.777 121.112 94.913 117.745C95.032 115.195 95.168 112.695 95.3548 110.213C95.5248 107.73 95.7457 105.282 96.0007 102.902C96.2217 100.827 96.4598 98.787 96.7318 96.7805C97.0038 94.7403 97.3098 92.7338 97.6328 90.7785C97.7175 90.2515 97.8195 89.7073 97.9215 89.1803C99.1965 81.954 100.845 75.2378 102.851 69.2698C108.494 52.3348 116.382 43 125.051 43H130.881C139.551 43 147.438 52.3348 153.081 69.2698C155.07 75.2378 156.719 81.954 158.01 89.1803C158.112 89.7073 158.197 90.2515 158.299 90.7785L158.249 90.7445Z" fill="#F1F2F2"/>
|
||||
<path d="M157.977 166.82C156.702 174.047 155.053 180.763 153.047 186.731C147.404 203.666 139.516 213 130.847 213H125.017C116.348 213 108.461 203.666 102.817 186.731C100.828 180.763 99.1795 174.047 97.8877 166.82C98.6015 166.905 99.2985 166.99 100.03 167.075C103.752 167.517 107.543 167.857 111.418 168.095C111.792 169.966 112.166 171.768 112.591 173.519C116.45 190.012 122.195 200.911 127.924 203.734C133.652 200.911 139.397 190.012 143.273 173.519C143.681 171.768 144.072 169.966 144.429 168.095C148.305 167.84 152.112 167.5 155.818 167.075C156.532 167.007 157.246 166.905 157.96 166.82H157.977Z" fill="#F1F2F2"/>
|
||||
<path d="M192.436 0.148438H63.0305C28.3197 0.148438 0.181152 28.2872 0.181152 62.9979V192.404C0.181152 227.114 28.3197 255.253 63.0305 255.253H192.436C227.147 255.253 255.285 227.114 255.285 192.404V62.9979C255.285 28.2872 227.147 0.148438 192.436 0.148438Z" fill="url(#paint1_linear_1225_44)"/>
|
||||
<g opacity="0.3" filter="url(#filter0_dddddd_1225_44)">
|
||||
<path d="M169.634 118.585C168.975 115.645 167.995 112.83 166.748 110.157C165.358 107.163 163.63 104.347 161.6 101.764C159.497 99.0906 157.093 96.6851 154.42 94.5823C151.837 92.5508 149.022 90.8223 146.03 89.4323C143.357 88.1851 140.543 87.2228 137.603 86.5456C134.557 85.8328 131.368 85.4766 128.108 85.4766C124.848 85.4766 121.659 85.8328 118.613 86.5456C118.168 88.7373 117.74 91.0361 117.366 93.4418C116.671 97.7186 116.101 102.334 115.656 107.305C115.442 109.8 115.264 112.402 115.121 115.093C114.908 119.209 114.783 123.539 114.783 128.101C114.783 132.663 114.908 136.975 115.121 141.109C119.236 141.323 123.565 141.448 128.126 141.448C132.686 141.448 136.998 141.323 141.131 141.109C143.803 140.967 146.404 140.788 148.898 140.575C153.886 140.129 158.5 139.559 162.775 138.864C165.18 138.472 167.478 138.062 169.67 137.617C170.364 134.569 170.739 131.38 170.739 128.119C170.739 124.858 170.382 121.668 169.67 118.621L169.634 118.585ZM157.288 115.36C156.202 115.52 155.151 115.788 154.117 116.144C152.265 116.785 150.555 117.73 149.005 118.924C145.139 121.864 142.36 126.283 141.558 131.041C141.558 131.13 141.469 131.166 141.416 131.148C141.362 131.148 141.309 131.095 141.309 131.041C140.044 122.933 133.488 116.607 125.578 115.342C125.436 115.324 125.436 115.11 125.578 115.093C126.131 115.004 126.665 114.897 127.2 114.754C131.653 113.631 135.519 110.869 138.102 107.199C138.939 106.022 139.634 104.757 140.186 103.403C140.721 102.102 141.113 100.73 141.327 99.3223C141.344 99.1796 141.558 99.1796 141.576 99.3223C142.057 102.387 143.304 105.185 145.068 107.573C146.083 108.945 147.259 110.157 148.595 111.208C151.089 113.186 154.064 114.558 157.288 115.11C157.431 115.128 157.431 115.342 157.288 115.36Z" fill="url(#paint2_radial_1225_44)"/>
|
||||
<path d="M217.235 125.061L217.164 131.138C217.164 140.226 207.383 148.494 189.64 154.41C183.387 156.495 176.35 158.224 168.779 159.578C168.227 159.685 167.675 159.774 167.122 159.881C165.056 160.219 162.972 160.54 160.816 160.825C158.714 161.11 156.576 161.36 154.421 161.591C151.891 161.859 149.343 162.09 146.742 162.286C144.142 162.465 141.523 162.625 138.851 162.732C135.305 162.874 131.725 162.946 128.108 162.946C124.492 162.946 120.893 162.874 117.366 162.732C114.694 162.607 112.075 162.465 109.474 162.286C106.873 162.09 104.326 161.877 101.814 161.591C99.6405 161.36 97.5205 161.11 95.4185 160.825C93.2808 160.54 91.1785 160.219 89.1298 159.881C88.5598 159.792 88.0075 159.685 87.4553 159.578C79.884 158.241 72.8473 156.513 66.5945 154.41C48.851 148.494 39.0708 140.226 39.0708 131.138V125.026C39.0708 115.938 48.851 107.669 66.5945 101.753C72.8473 99.6686 79.884 97.9401 87.4553 96.5856C87.3663 97.3341 87.2773 98.0646 87.188 98.8309C86.725 102.733 86.3685 106.707 86.1193 110.77C84.1595 111.162 82.2713 111.554 80.4363 112C63.1563 116.062 51.737 122.086 48.7798 128.091C51.737 134.096 63.1563 140.119 80.4363 144.164C82.2713 144.592 84.1595 145.001 86.1193 145.393C87.2238 145.607 88.346 145.821 89.504 146.017C90.9648 146.267 92.4435 146.516 93.9578 146.73C98.3578 147.389 103.008 147.942 107.889 148.334C110.436 148.548 113.037 148.726 115.692 148.85C119.718 149.047 123.886 149.153 128.162 149.153C132.437 149.153 136.588 149.047 140.632 148.85C143.286 148.726 145.887 148.548 148.417 148.334C153.298 147.924 157.948 147.389 162.348 146.73C163.862 146.498 165.359 146.267 166.802 146.017C167.942 145.821 169.064 145.607 170.187 145.393C172.146 145.019 174.034 144.609 175.869 144.182C193.15 140.119 204.569 134.096 207.526 128.091C204.569 122.086 193.15 116.062 175.869 112.017C174.266 107.26 171.986 102.84 169.118 98.8489C168.494 97.9756 167.853 97.1381 167.176 96.3184C167.728 96.4076 168.298 96.5144 168.85 96.6214C176.422 97.9579 183.458 99.6864 189.711 101.789C207.455 107.705 217.235 115.973 217.235 125.061Z" fill="url(#paint3_radial_1225_44)"/>
|
||||
<path d="M159.854 89.0509C159.035 88.3737 158.197 87.7322 157.324 87.1084C153.334 84.2397 148.898 81.9587 144.159 80.3549C140.115 63.0699 134.094 51.6477 128.091 48.6897C122.087 51.6477 116.066 63.0699 112.022 80.3549C111.576 82.1904 111.185 84.0792 110.793 86.0394C110.579 87.1442 110.365 88.2847 110.169 89.4252C109.92 90.8862 109.67 92.3654 109.457 93.8799C108.797 98.2814 108.245 102.932 107.853 107.815C107.639 110.345 107.461 112.947 107.337 115.602C107.141 119.629 107.034 123.799 107.034 128.076C107.034 132.352 107.141 136.504 107.337 140.549C102.348 140.104 97.7345 139.534 93.4768 138.839C93.3343 135.293 93.263 131.711 93.263 128.093C93.263 124.476 93.3343 120.877 93.4768 117.348C93.6015 114.675 93.744 112.056 93.9398 109.454C94.118 106.853 94.3495 104.287 94.6168 101.792C94.8485 99.6179 95.0978 97.4794 95.3828 95.3769C95.668 93.2384 95.9885 91.1357 96.327 89.0864C96.416 88.5342 96.523 87.9639 96.63 87.4114C97.966 79.8382 99.694 72.7994 101.796 66.5447C107.711 48.7964 115.977 39.0137 125.062 39.0137H131.173C140.258 39.0137 148.524 48.7964 154.438 66.5447C156.523 72.7994 158.251 79.8382 159.605 87.4114C159.712 87.9639 159.801 88.5342 159.908 89.0864L159.854 89.0509Z" fill="url(#paint4_radial_1225_44)"/>
|
||||
<path d="M159.569 168.779C158.233 176.353 156.505 183.391 154.403 189.646C148.488 207.394 140.222 217.177 131.137 217.177H125.027C115.941 217.177 107.675 207.394 101.761 189.646C99.6763 183.391 97.9483 176.353 96.5943 168.779C97.3425 168.868 98.073 168.958 98.839 169.047C102.741 169.51 106.713 169.866 110.775 170.116C111.167 172.076 111.559 173.965 112.004 175.8C116.048 193.085 122.069 204.508 128.073 207.466C134.076 204.508 140.098 193.085 144.16 175.8C144.587 173.965 144.997 172.076 145.371 170.116C149.433 169.849 153.423 169.492 157.307 169.047C158.055 168.975 158.803 168.868 159.551 168.779H159.569Z" fill="url(#paint5_radial_1225_44)"/>
|
||||
</g>
|
||||
<path d="M169.563 118.572C168.904 115.631 167.924 112.816 166.677 110.143C165.288 107.149 163.559 104.334 161.529 101.75C159.426 99.0771 157.022 96.6714 154.35 94.5686C151.766 92.5371 148.952 90.8086 145.959 89.4189C143.287 88.1714 140.472 87.2091 137.533 86.5321C134.486 85.8194 131.297 85.4629 128.037 85.4629C124.777 85.4629 121.588 85.8194 118.542 86.5321C118.097 88.7239 117.669 91.0226 117.295 93.4281C116.6 97.7049 116.03 102.32 115.585 107.292C115.371 109.787 115.193 112.388 115.05 115.079C114.836 119.195 114.712 123.525 114.712 128.087C114.712 132.649 114.836 136.961 115.05 141.096C119.165 141.309 123.494 141.434 128.055 141.434C132.615 141.434 136.927 141.309 141.06 141.096C143.732 140.953 146.333 140.775 148.827 140.561C153.815 140.115 158.429 139.545 162.704 138.85C165.109 138.458 167.408 138.048 169.599 137.603C170.294 134.556 170.667 131.366 170.667 128.105C170.667 124.844 170.311 121.654 169.599 118.607L169.563 118.572ZM157.217 115.346C156.131 115.507 155.08 115.774 154.046 116.13C152.194 116.772 150.484 117.716 148.934 118.91C145.068 121.85 142.289 126.27 141.487 131.027C141.487 131.117 141.398 131.152 141.345 131.134C141.291 131.134 141.238 131.081 141.238 131.027C139.973 122.92 133.417 116.594 125.507 115.328C125.365 115.311 125.365 115.097 125.507 115.079C126.06 114.99 126.594 114.883 127.129 114.74C131.582 113.618 135.448 110.856 138.031 107.185C138.868 106.009 139.563 104.744 140.115 103.389C140.65 102.089 141.042 100.716 141.256 99.3086C141.274 99.1661 141.487 99.1661 141.505 99.3086C141.986 102.374 143.233 105.171 144.997 107.559C146.012 108.931 147.188 110.143 148.524 111.194C151.018 113.172 153.993 114.544 157.217 115.097C157.36 115.115 157.36 115.328 157.217 115.346Z" fill="url(#paint6_radial_1225_44)"/>
|
||||
<path d="M217.164 125.047L217.093 131.124C217.093 140.212 207.312 148.48 189.569 154.396C183.316 156.481 176.28 158.21 168.708 159.564C168.156 159.671 167.604 159.76 167.051 159.867C164.985 160.205 162.901 160.526 160.745 160.811C158.643 161.096 156.505 161.346 154.35 161.578C151.82 161.845 149.272 162.077 146.671 162.273C144.07 162.451 141.452 162.611 138.78 162.718C135.235 162.861 131.654 162.932 128.038 162.932C124.421 162.932 120.822 162.861 117.295 162.718C114.623 162.593 112.004 162.451 109.403 162.273C106.803 162.077 104.255 161.863 101.743 161.578C99.5697 161.346 97.4497 161.096 95.3477 160.811C93.21 160.526 91.1077 160.205 89.059 159.867C88.489 159.778 87.9367 159.671 87.3845 159.564C79.8132 158.228 72.7765 156.499 66.5235 154.396C48.7802 148.48 39 140.212 39 131.124V125.012C39 115.924 48.7802 107.656 66.5235 101.74C72.7765 99.6547 79.8132 97.9262 87.3845 96.5719C87.2955 97.3204 87.2062 98.0509 87.1172 98.8172C86.654 102.72 86.2978 106.693 86.0485 110.756C84.0888 111.148 82.2005 111.54 80.3655 111.986C63.0853 116.049 51.6662 122.072 48.709 128.077C51.6662 134.082 63.0853 140.105 80.3655 144.15C82.2005 144.578 84.0888 144.988 86.0485 145.38C87.153 145.593 88.2753 145.807 89.4333 146.003C90.894 146.253 92.3725 146.502 93.8867 146.716C98.287 147.375 102.937 147.928 107.818 148.32C110.365 148.534 112.966 148.712 115.621 148.837C119.647 149.033 123.816 149.14 128.091 149.14C132.367 149.14 136.517 149.033 140.561 148.837C143.215 148.712 145.816 148.534 148.346 148.32C153.227 147.91 157.877 147.375 162.277 146.716C163.792 146.484 165.288 146.253 166.731 146.003C167.871 145.807 168.993 145.593 170.115 145.38C172.075 145.005 173.963 144.596 175.798 144.168C193.078 140.105 204.498 134.082 207.455 128.077C204.498 122.072 193.078 116.049 175.798 112.004C174.195 107.246 171.915 102.827 169.047 98.8349C168.423 97.9619 167.782 97.1242 167.105 96.3047C167.657 96.3937 168.227 96.5007 168.779 96.6074C176.351 97.9439 183.388 99.6724 189.641 101.775C207.384 107.691 217.164 115.96 217.164 125.047Z" fill="url(#paint7_radial_1225_44)"/>
|
||||
<path d="M159.783 89.0372C158.964 88.3602 158.126 87.7188 157.253 87.095C153.263 84.226 148.827 81.9452 144.089 80.3412C140.045 63.0565 134.023 51.634 128.02 48.676C122.016 51.634 115.995 63.0565 111.951 80.3412C111.505 82.1767 111.113 84.0657 110.722 86.0257C110.508 87.1307 110.294 88.271 110.098 89.4115C109.849 90.8727 109.599 92.3518 109.385 93.8665C108.726 98.2678 108.174 102.919 107.782 107.801C107.568 110.332 107.39 112.933 107.266 115.589C107.07 119.616 106.963 123.786 106.963 128.062C106.963 132.339 107.07 136.491 107.266 140.536C102.277 140.09 97.6635 139.52 93.406 138.825C93.2632 135.279 93.192 131.697 93.192 128.08C93.192 124.463 93.2632 120.863 93.406 117.335C93.5305 114.662 93.673 112.042 93.869 109.441C94.0473 106.839 94.2787 104.273 94.546 101.778C94.7775 99.6043 95.027 97.466 95.312 95.3633C95.597 93.225 95.9177 91.1222 96.2562 89.073C96.3452 88.5205 96.4522 87.9503 96.559 87.398C97.8952 79.8245 99.6233 72.786 101.725 66.5312C107.64 48.783 115.906 39 124.991 39H131.102C140.187 39 148.453 48.783 154.367 66.5312C156.452 72.786 158.18 79.8245 159.534 87.398C159.641 87.9503 159.73 88.5205 159.837 89.073L159.783 89.0372Z" fill="url(#paint8_radial_1225_44)"/>
|
||||
<path d="M159.498 168.766C158.162 176.339 156.434 183.378 154.332 189.632C148.418 207.381 140.151 217.164 131.066 217.164H124.956C115.87 217.164 107.604 207.381 101.69 189.632C99.6055 183.378 97.8775 176.339 96.5235 168.766C97.2717 168.855 98.0022 168.944 98.7682 169.033C102.67 169.496 106.642 169.853 110.704 170.102C111.096 172.062 111.488 173.951 111.933 175.787C115.977 193.072 121.999 204.494 128.002 207.452C134.006 204.494 140.027 193.072 144.089 175.787C144.516 173.951 144.926 172.062 145.3 170.102C149.362 169.835 153.352 169.479 157.236 169.033C157.984 168.962 158.732 168.855 159.481 168.766H159.498Z" fill="url(#paint9_radial_1225_44)"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_dddddd_1225_44" x="3.473" y="3.4159" width="249.36" height="249.359" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset/>
|
||||
<feGaussianBlur stdDeviation="0.423781"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_1225_44"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset/>
|
||||
<feGaussianBlur stdDeviation="0.847564"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
|
||||
<feBlend mode="normal" in2="effect1_dropShadow_1225_44" result="effect2_dropShadow_1225_44"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset/>
|
||||
<feGaussianBlur stdDeviation="2.96647"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
|
||||
<feBlend mode="normal" in2="effect2_dropShadow_1225_44" result="effect3_dropShadow_1225_44"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset/>
|
||||
<feGaussianBlur stdDeviation="5.93295"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0.890196 0 0 0 0 0.890196 0 0 0 0 0.890196 0 0 0 1 0"/>
|
||||
<feBlend mode="normal" in2="effect3_dropShadow_1225_44" result="effect4_dropShadow_1225_44"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset/>
|
||||
<feGaussianBlur stdDeviation="10.1708"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0.890196 0 0 0 0 0.890196 0 0 0 0 0.890196 0 0 0 1 0"/>
|
||||
<feBlend mode="normal" in2="effect4_dropShadow_1225_44" result="effect5_dropShadow_1225_44"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset/>
|
||||
<feGaussianBlur stdDeviation="17.7989"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0.890196 0 0 0 0 0.890196 0 0 0 0 0.890196 0 0 0 1 0"/>
|
||||
<feBlend mode="normal" in2="effect5_dropShadow_1225_44" result="effect6_dropShadow_1225_44"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect6_dropShadow_1225_44" result="shape"/>
|
||||
</filter>
|
||||
<linearGradient id="paint0_linear_1225_44" x1="203.859" y1="259.39" x2="52.1418" y2="-3.39126" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#2F2F2F"/>
|
||||
<stop offset="0.34" stop-color="#292929"/>
|
||||
<stop offset="0.72" stop-color="#232121"/>
|
||||
<stop offset="1" stop-color="#191919"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_1225_44" x1="203.327" y1="258.633" x2="52.1405" y2="-3.23095" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#2F2F2F"/>
|
||||
<stop offset="0.34" stop-color="#292929"/>
|
||||
<stop offset="0.72" stop-color="#232121"/>
|
||||
<stop offset="1" stop-color="#191919"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="paint2_radial_1225_44" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(141.5 114.626) rotate(173.307) scale(96.5327 116.135)">
|
||||
<stop offset="0.0259528" stop-color="white"/>
|
||||
<stop offset="1" stop-color="#E0E0E0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="paint3_radial_1225_44" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(141.5 114.626) rotate(173.307) scale(96.5327 116.134)">
|
||||
<stop offset="0.0259528" stop-color="white"/>
|
||||
<stop offset="1" stop-color="#E0E0E0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="paint4_radial_1225_44" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(141.5 114.626) rotate(173.307) scale(96.5328 116.134)">
|
||||
<stop offset="0.0259528" stop-color="white"/>
|
||||
<stop offset="1" stop-color="#E0E0E0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="paint5_radial_1225_44" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(141.5 114.626) rotate(173.307) scale(96.5328 116.134)">
|
||||
<stop offset="0.0259528" stop-color="white"/>
|
||||
<stop offset="1" stop-color="#E0E0E0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="paint6_radial_1225_44" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(141.429 114.612) rotate(173.307) scale(96.5327 116.134)">
|
||||
<stop offset="0.0259528" stop-color="white"/>
|
||||
<stop offset="1" stop-color="#E0E0E0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="paint7_radial_1225_44" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(141.429 114.612) rotate(173.307) scale(96.5327 116.135)">
|
||||
<stop offset="0.0259528" stop-color="white"/>
|
||||
<stop offset="1" stop-color="#E0E0E0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="paint8_radial_1225_44" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(141.429 114.612) rotate(173.307) scale(96.5328 116.134)">
|
||||
<stop offset="0.0259528" stop-color="white"/>
|
||||
<stop offset="1" stop-color="#E0E0E0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="paint9_radial_1225_44" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(141.429 114.612) rotate(173.307) scale(96.5328 116.134)">
|
||||
<stop offset="0.0259528" stop-color="white"/>
|
||||
<stop offset="1" stop-color="#E0E0E0"/>
|
||||
</radialGradient>
|
||||
<clipPath id="clip0_1225_44">
|
||||
<rect width="256" height="256" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 22 KiB |
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"id": "albyhub",
|
||||
"name": "Alby Hub ✨",
|
||||
"description": "Self-custodial Bitcoin Lightning wallet with integrated node and app connections.",
|
||||
"version": "latest",
|
||||
"logo": "logo.svg",
|
||||
"links": {
|
||||
"github": "https://github.com/getAlby/hub",
|
||||
"website": "https://albyhub.com/",
|
||||
"docs": "https://guides.getalby.com/user-guide/alby-hub"
|
||||
},
|
||||
"tags": [
|
||||
"finance"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "albyhub"
|
||||
port = 58000
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
PGID = ""
|
||||
PUID = ""
|
||||
TZ = ""
|
||||
@@ -0,0 +1,80 @@
|
||||
services:
|
||||
frontend:
|
||||
image: ghcr.io/smaug6739/alexandrie-frontend:v8.10.0
|
||||
environment:
|
||||
- PORT=8200
|
||||
- NUXT_PUBLIC_CONFIG_DISABLE_SIGNUP_PAGE=${CONFIG_DISABLE_SIGNUP:-false}
|
||||
- NUXT_PUBLIC_CONFIG_DISABLE_LANDING_PAGE=${CONFIG_DISABLE_LANDING:-false}
|
||||
- NUXT_PUBLIC_BASE_API=${SERVICE_URL_BACKEND}
|
||||
- NUXT_PUBLIC_BASE_CDN=${SERVICE_URL_RUSTFS}
|
||||
- NUXT_PUBLIC_CDN_ENDPOINT=${CDN_ENDPOINT:-/alexandrie/}
|
||||
- NUXT_PUBLIC_BASE_URL=${SERVICE_URL_FRONTEND}
|
||||
depends_on:
|
||||
- backend
|
||||
backend:
|
||||
image: ghcr.io/smaug6739/alexandrie-backend:v8.10.0
|
||||
environment:
|
||||
- BACKEND_PORT=8201
|
||||
- GIN_MODE=release
|
||||
- JWT_SECRET=${SERVICE_PASSWORD_JWT}
|
||||
- COOKIE_DOMAIN=${SERVICE_URL_FRONTEND}
|
||||
- FRONTEND_URL=${SERVICE_URL_FRONTEND}
|
||||
- ALLOW_UNSECURE=${ALLOW_UNSECURE:-false}
|
||||
- DATABASE_HOST=mysql
|
||||
- DATABASE_PORT=3306
|
||||
- DATABASE_NAME=${MYSQL_DATABASE:-alexandrie-db}
|
||||
- DATABASE_USER=${SERVICE_USER_MYSQL}
|
||||
- DATABASE_PASSWORD=${SERVICE_PASSWORD_MYSQL}
|
||||
- MINIO_ENDPOINT=rustfs:9000
|
||||
- MINIO_PUBLIC_URL=${SERVICE_URL_RUSTFS}
|
||||
- MINIO_SECURE=${MINIO_SECURE:-false}
|
||||
- MINIO_ACCESSKEY=${SERVICE_USER_RUSTFS}
|
||||
- MINIO_SECRETKEY=${SERVICE_PASSWORD_RUSTFS}
|
||||
- MINIO_BUCKET=${MINIO_BUCKET:-alexandrie}
|
||||
- SMTP_HOST=${SMTP_HOST:-}
|
||||
- SMTP_MAIL=${SMTP_MAIL:-}
|
||||
- SMTP_PASSWORD=${SMTP_PASSWORD:-}
|
||||
depends_on:
|
||||
mysql:
|
||||
condition: service_healthy
|
||||
rustfs:
|
||||
condition: service_healthy
|
||||
mysql:
|
||||
image: mysql:8.0
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT}
|
||||
- MYSQL_USER=${SERVICE_USER_MYSQL}
|
||||
- MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL}
|
||||
- MYSQL_DATABASE=${MYSQL_DATABASE:-alexandrie-db}
|
||||
volumes:
|
||||
- mysql-data:/var/lib/mysql
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD
|
||||
- mysqladmin
|
||||
- ping
|
||||
- -h
|
||||
- localhost
|
||||
- -u
|
||||
- root
|
||||
- -p${SERVICE_PASSWORD_MYSQLROOT}
|
||||
timeout: 5s
|
||||
interval: 10s
|
||||
retries: 5
|
||||
rustfs:
|
||||
image: rustfs/rustfs:1.0.0-beta.8
|
||||
environment:
|
||||
- RUSTFS_ACCESS_KEY=${SERVICE_USER_RUSTFS}
|
||||
- RUSTFS_SECRET_KEY=${SERVICE_PASSWORD_RUSTFS}
|
||||
- RUSTFS_CONSOLE_ENABLE=${RUSTFS_CONSOLE_ENABLE:-false}
|
||||
- RUSTFS_LOG_LEVEL=${RUSTFS_LOG_LEVEL:-info}
|
||||
volumes:
|
||||
- rustfs-data:/data
|
||||
- rustfs-logs:/logs
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- nc -z localhost 9000 || exit 1
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
@@ -0,0 +1,9 @@
|
||||
<svg viewBox="0 0 67 67" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M22.21 67V44.6369H0V67H22.21Z" fill="#ffffff"/>
|
||||
<path d="M0 44.6369L22.21 46.8285V44.6369H0Z" fill="#DDDDDD"/>
|
||||
<path d="M66.7038 22.3184H22.2534L0.0878906 44.6367H44.4634L66.7038 22.3184Z" fill="#ffffff"/>
|
||||
<path d="M22.21 0H0V22.3184H22.21V0Z" fill="#ffffff"/>
|
||||
<path d="M66.7198 0H44.5098V22.3184H66.7198V0Z" fill="#ffffff"/>
|
||||
<path d="M66.6753 22.3185L44.5098 20.0822V22.3185H66.6753Z" fill="#DDDDDD"/>
|
||||
<path d="M66.7198 67V44.6369H44.5098V67H66.7198Z" fill="#ffffff"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 561 B |
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"id": "alexandrie",
|
||||
"name": "alexandrie",
|
||||
"description": "A powerful Markdown workspace designed for speed, clarity, and creativity.",
|
||||
"version": "latest",
|
||||
"logo": "logo.svg",
|
||||
"links": {
|
||||
"github": "https://github.com/Smaug6739/Alexandrie/tree/main/docs",
|
||||
"website": "",
|
||||
"docs": "https://github.com/Smaug6739/Alexandrie/tree/main/docs"
|
||||
},
|
||||
"tags": [
|
||||
"note-taking",
|
||||
"markdown",
|
||||
"knowledge-management",
|
||||
"personal-wiki",
|
||||
"productivity"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "frontend"
|
||||
port = 8200
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
SERVICE_URL_BACKEND = "https://${main_domain}"
|
||||
SERVICE_URL_RUSTFS = "https://${main_domain}"
|
||||
SERVICE_URL_FRONTEND = "https://${main_domain}"
|
||||
SERVICE_PASSWORD_JWT = "${password:32}"
|
||||
SERVICE_USER_MYSQL = "${username}"
|
||||
SERVICE_PASSWORD_MYSQL = "${password:32}"
|
||||
SERVICE_USER_RUSTFS = "${username}"
|
||||
SERVICE_PASSWORD_RUSTFS = "${password:32}"
|
||||
SERVICE_PASSWORD_MYSQLROOT = "${password:32}"
|
||||
@@ -0,0 +1,12 @@
|
||||
services:
|
||||
alist-sync:
|
||||
image: xjxjin/alist-sync:1.1.5
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
expose:
|
||||
- "52441"
|
||||
volumes:
|
||||
- alist-sync-data:/app/data
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
alist-sync-data: {}
|
||||
|
After Width: | Height: | Size: 26 KiB |
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"id": "alist-sync",
|
||||
"name": "Alist-Sync",
|
||||
"description": "An Alist storage synchronization tool based on the Web interface.",
|
||||
"version": "latest",
|
||||
"logo": "logo.svg",
|
||||
"links": {
|
||||
"github": "https://github.com/xjxjin/alist-sync",
|
||||
"website": "",
|
||||
"docs": "https://github.com/xjxjin/alist-sync#readme"
|
||||
},
|
||||
"tags": [
|
||||
"productivity"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "alist-sync"
|
||||
port = 52441
|
||||
host = "${main_domain}"
|
||||
@@ -0,0 +1,10 @@
|
||||
<svg width="1252" height="1252" xmlns="http://www.w3.org/2000/svg" version="1.1">
|
||||
<g>
|
||||
<g id="#70c6beff">
|
||||
<path id="svg_2" d="m634.37,138.38c11.88,-1.36 24.25,1.3 34.18,8.09c14.96,9.66 25.55,24.41 34.49,39.51c40.59,68.03 81.45,135.91 122.02,203.96c54.02,90.99 108.06,181.97 161.94,273.06c37.28,63 74.65,125.96 112.18,188.82c24.72,41.99 50.21,83.54 73.84,126.16c10.18,17.84 15.77,38.44 14.93,59.03c-0.59,15.92 -3.48,32.28 -11.84,46.08c-11.73,19.46 -31.39,33.2 -52.71,40.36c-11.37,4.09 -23.3,6.87 -35.43,6.89c-132.32,-0.05 -264.64,0.04 -396.95,0.03c-11.38,-0.29 -22.95,-1.6 -33.63,-5.72c-7.81,-3.33 -15.5,-7.43 -21.61,-13.42c-10.43,-10.32 -17.19,-24.96 -15.38,-39.83c0.94,-10.39 3.48,-20.64 7.76,-30.16c4.15,-9.77 9.99,-18.67 15.06,-27.97c22.13,-39.47 45.31,-78.35 69.42,-116.65c7.72,-12.05 14.44,-25.07 25.12,-34.87c11.35,-10.39 25.6,-18.54 41.21,-19.6c12.55,-0.52 24.89,3.82 35.35,10.55c11.8,6.92 21.09,18.44 24.2,31.88c4.49,17.01 -0.34,34.88 -7.55,50.42c-8.09,17.65 -19.62,33.67 -25.81,52.18c-1.13,4.21 -2.66,9.52 0.48,13.23c3.19,3 7.62,4.18 11.77,5.22c12,2.67 24.38,1.98 36.59,2.06c45,-0.01 90,0 135,0c8.91,-0.15 17.83,0.3 26.74,-0.22c6.43,-0.74 13.44,-1.79 18.44,-6.28c3.3,-2.92 3.71,-7.85 2.46,-11.85c-2.74,-8.86 -7.46,-16.93 -12.12,-24.89c-119.99,-204.91 -239.31,-410.22 -360.56,-614.4c-3.96,-6.56 -7.36,-13.68 -13.03,-18.98c-2.8,-2.69 -6.95,-4.22 -10.77,-3.11c-3.25,1.17 -5.45,4.03 -7.61,6.57c-5.34,6.81 -10.12,14.06 -14.51,21.52c-20.89,33.95 -40.88,68.44 -61.35,102.64c-117.9,198.43 -235.82,396.85 -353.71,595.29c-7.31,13.46 -15.09,26.67 -23.57,39.43c-7.45,10.96 -16.49,21.23 -28.14,27.83c-13.73,7.94 -30.69,11.09 -46.08,6.54c-11.23,-3.47 -22.09,-9.12 -30.13,-17.84c-10.18,-10.08 -14.69,-24.83 -14.17,-38.94c0.52,-14.86 5.49,-29.34 12.98,-42.1c71.58,-121.59 143.62,-242.92 215.93,-364.09c37.2,-62.8 74.23,-125.69 111.64,-188.36c37.84,-63.5 75.77,-126.94 113.44,-190.54c21.02,-35.82 42.19,-71.56 64.28,-106.74c6.79,-11.15 15.58,-21.15 26.16,-28.85c8.68,-5.92 18.42,-11 29.05,-11.94z" fill="#70c6be"/>
|
||||
</g>
|
||||
<g id="#1ba0d8ff">
|
||||
<path id="svg_3" d="m628.35,608.38c17.83,-2.87 36.72,1.39 51.5,11.78c11.22,8.66 19.01,21.64 21.26,35.65c1.53,10.68 0.49,21.75 -3.44,31.84c-3.02,8.73 -7.35,16.94 -12.17,24.81c-68.76,115.58 -137.5,231.17 -206.27,346.75c-8.8,14.47 -16.82,29.47 -26.96,43.07c-7.37,9.11 -16.58,16.85 -27.21,21.89c-22.47,11.97 -51.79,4.67 -68.88,-13.33c-8.66,-8.69 -13.74,-20.63 -14.4,-32.84c-0.98,-12.64 1.81,-25.42 7.53,-36.69c5.03,-10.96 10.98,-21.45 17.19,-31.77c30.22,-50.84 60.17,-101.84 90.3,-152.73c41.24,-69.98 83.16,-139.55 124.66,-209.37c4.41,-7.94 9.91,-15.26 16.09,-21.9c8.33,-8.46 18.9,-15.3 30.8,-17.16z" fill="#1ba0d8"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
@@ -0,0 +1,14 @@
|
||||
version: '3.3'
|
||||
services:
|
||||
alist:
|
||||
image: xhofe/alist:v3.55.0
|
||||
volumes:
|
||||
- alist-data:/opt/alist/data
|
||||
environment:
|
||||
- PUID=0
|
||||
- PGID=0
|
||||
- UMASK=022
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
alist-data:
|
||||