mirror of
https://github.com/Dokploy/templates.git
synced 2026-11-10 01:33:12 -06:00
Compare commits
106
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fef2bfbfce | ||
|
|
0b731157ce | ||
|
|
0eae107272 | ||
|
|
de726de736 | ||
|
|
a73e4928f2 | ||
|
|
1dc9c36216 | ||
|
|
5aba7908a2 | ||
|
|
a49f00fd7b | ||
|
|
292877b370 | ||
|
|
a176ba3e16 | ||
|
|
69e731eda1 | ||
|
|
c1ccb27359 | ||
|
|
4de48c2a73 | ||
|
|
0c33668267 | ||
|
|
285e667c68 | ||
|
|
c33d499975 | ||
|
|
b4542d82f8 | ||
|
|
ceb65b216f | ||
|
|
8daff07700 | ||
|
|
08d87d8a90 | ||
|
|
8ca2bf9393 | ||
|
|
7aee585368 | ||
|
|
34f3577b81 | ||
|
|
fff1708ebd | ||
|
|
c66a1df3cf | ||
|
|
dd12762085 | ||
|
|
d6b842c275 | ||
|
|
f6245f84dc | ||
|
|
6683685dae | ||
|
|
a3f2655baa | ||
|
|
13d03f9a92 | ||
|
|
51922e71b6 | ||
|
|
3a6f9d709a | ||
|
|
0beb68a228 | ||
|
|
7d252ead5c | ||
|
|
fe94f4ce0b | ||
|
|
3eb1d3b7bd | ||
|
|
af8b535d34 | ||
|
|
15db93df3b | ||
|
|
cc3b93518b | ||
|
|
e7285cea05 | ||
|
|
a80a073389 | ||
|
|
77b078faf3 | ||
|
|
31f95474d6 | ||
|
|
fabecbe728 | ||
|
|
4159d3a9f0 | ||
|
|
abe36ad330 | ||
|
|
89505f0b54 | ||
|
|
981811f55f | ||
|
|
ffeaca14af | ||
|
|
77145ad581 | ||
|
|
c60bfa8c72 | ||
|
|
dd986039a7 | ||
|
|
0633b987d5 | ||
|
|
5d6afe20a6 | ||
|
|
618cda2366 | ||
|
|
74cec8f74f | ||
|
|
64fb0f6573 | ||
|
|
9e02e96e3a | ||
|
|
59e323483c | ||
|
|
33c3fcdadb | ||
|
|
493e824f70 | ||
|
|
6f27a9427c | ||
|
|
f76c31ef89 | ||
|
|
478c5197b2 | ||
|
|
8c15db8a2c | ||
|
|
a837539398 | ||
|
|
c33f72b32a | ||
|
|
1c2921417d | ||
|
|
6f1b083c57 | ||
|
|
bd457e0310 | ||
|
|
311faa1ea9 | ||
|
|
ee35ed1a42 | ||
|
|
7f3a08eb00 | ||
|
|
a266e36a4d | ||
|
|
3ddbdde081 | ||
|
|
0bfb50d62f | ||
|
|
62850c3696 | ||
|
|
d1ef9333a3 | ||
|
|
b23ddd0b98 | ||
|
|
7683947842 | ||
|
|
03a60bb417 | ||
|
|
b7c2d6c35d | ||
|
|
f036ddae92 | ||
|
|
030d9d1089 | ||
|
|
af16250561 | ||
|
|
f946051a6c | ||
|
|
9bdbe266e5 | ||
|
|
25563213f2 | ||
|
|
fb64197738 | ||
|
|
cd16441901 | ||
|
|
29a7970397 | ||
|
|
1e486813b4 | ||
|
|
3c416eaba3 | ||
|
|
31158e2340 | ||
|
|
6786237720 | ||
|
|
8f84a52855 | ||
|
|
7ed8450cf8 | ||
|
|
c6a0b1b1b5 | ||
|
|
744ff52770 | ||
|
|
55aa82489d | ||
|
|
59770d4ae8 | ||
|
|
6d56faf0ed | ||
|
|
a34def7060 | ||
|
|
c345475d68 | ||
|
|
decfac62c9 |
@@ -0,0 +1,163 @@
|
||||
name: Audit All Blueprints
|
||||
|
||||
# The per-PR validators only look at blueprints a PR touches, which is the right
|
||||
# call for CI cost but means a template is checked when it lands and then never
|
||||
# again. When a rule is added or tightened, every existing blueprint that breaks
|
||||
# it stays broken with nothing surfacing it (see #1047).
|
||||
#
|
||||
# This job runs the same validators over ALL blueprints on a schedule, so drift
|
||||
# is reported instead of accumulating. It never runs on pull_request, so it
|
||||
# cannot block a contributor for a pre-existing problem they did not introduce.
|
||||
|
||||
on:
|
||||
schedule:
|
||||
# Mondays, 04:00 UTC
|
||||
- cron: "0 4 * * 1"
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
fail_on_findings:
|
||||
description: "Exit non-zero when findings exist (default: report only)"
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
audit:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20.16.0
|
||||
|
||||
- name: Set up pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 8
|
||||
|
||||
- name: Install dependencies
|
||||
run: cd build-scripts && pnpm install
|
||||
|
||||
- name: Validate per-template metadata
|
||||
run: node build-scripts/generate-meta.js --check
|
||||
|
||||
- name: Audit every blueprint
|
||||
id: audit
|
||||
run: |
|
||||
# $RUNNER_TEMP is per-job; also cleared explicitly so a re-run or a
|
||||
# partially-executed earlier step can never leak into the summary.
|
||||
WORK="${RUNNER_TEMP:-/tmp}"
|
||||
OUT="$WORK/validator-out.txt"
|
||||
REPORT="$WORK/audit-report.md"
|
||||
SUMMARY="$WORK/audit-summary.md"
|
||||
rm -f "$OUT" "$REPORT" "$SUMMARY"
|
||||
|
||||
COMPOSE_FAILED=""
|
||||
TOML_FAILED=""
|
||||
|
||||
for dir in blueprints/*/; do
|
||||
id="$(basename "$dir")"
|
||||
|
||||
# Run unconditionally: a blueprint with no docker-compose.yml or no
|
||||
# template.toml is itself a finding, and the validators already
|
||||
# report a missing file clearly. Skipping them would hide exactly
|
||||
# the blueprints most likely to be broken.
|
||||
if ! (cd build-scripts && pnpm exec tsx validate-docker-compose.ts \
|
||||
--file "../$dir/docker-compose.yml") > "$OUT" 2>&1; then
|
||||
COMPOSE_FAILED="$COMPOSE_FAILED $id"
|
||||
{
|
||||
echo "### \`$id\` — docker-compose.yml"
|
||||
echo '```'
|
||||
grep '❌' "$OUT" || cat "$OUT"
|
||||
echo '```'
|
||||
} >> "$REPORT"
|
||||
fi
|
||||
|
||||
if ! (cd build-scripts && pnpm exec tsx validate-template.ts \
|
||||
--dir "../$dir") > "$OUT" 2>&1; then
|
||||
TOML_FAILED="$TOML_FAILED $id"
|
||||
{
|
||||
echo "### \`$id\` — template.toml"
|
||||
echo '```'
|
||||
grep '❌' "$OUT" || cat "$OUT"
|
||||
echo '```'
|
||||
} >> "$REPORT"
|
||||
fi
|
||||
done
|
||||
|
||||
COMPOSE_COUNT=$(echo $COMPOSE_FAILED | wc -w | tr -d ' ')
|
||||
TOML_COUNT=$(echo $TOML_FAILED | wc -w | tr -d ' ')
|
||||
TOTAL=$(ls -d blueprints/*/ | wc -l | tr -d ' ')
|
||||
|
||||
{
|
||||
echo "## Blueprint audit"
|
||||
echo ""
|
||||
echo "| check | failing | of |"
|
||||
echo "| --- | --- | --- |"
|
||||
echo "| \`validate-docker-compose.ts\` | $COMPOSE_COUNT | $TOTAL |"
|
||||
echo "| \`validate-template.ts\` | $TOML_COUNT | $TOTAL |"
|
||||
echo ""
|
||||
} > "$SUMMARY"
|
||||
|
||||
if [ -f "$REPORT" ]; then
|
||||
cat "$REPORT" >> "$SUMMARY"
|
||||
else
|
||||
echo "No findings." >> "$SUMMARY"
|
||||
fi
|
||||
|
||||
# The step summary caps at ~1MB and truncates silently past it, which
|
||||
# would hide findings exactly as the backlog grows. Bound what we
|
||||
# append and point at the artifact for the rest.
|
||||
SUMMARY_LIMIT=$((512 * 1024))
|
||||
SUMMARY_BYTES=$(wc -c < "$SUMMARY" | tr -d ' ')
|
||||
|
||||
if [ "$SUMMARY_BYTES" -gt "$SUMMARY_LIMIT" ]; then
|
||||
# Emit the header table only, never a byte-sliced prefix: cutting
|
||||
# mid-``` leaves an unclosed code fence, which swallows the notice
|
||||
# below it and makes the truncation invisible in the rendered summary.
|
||||
{
|
||||
head -n 7 "$SUMMARY"
|
||||
echo ""
|
||||
echo "_Report omitted: $SUMMARY_BYTES bytes exceeds the $SUMMARY_LIMIT byte budget for a job summary._"
|
||||
echo "_Download the \`blueprint-audit\` artifact for the complete output._"
|
||||
} >> "$GITHUB_STEP_SUMMARY"
|
||||
else
|
||||
cat "$SUMMARY" >> "$GITHUB_STEP_SUMMARY"
|
||||
fi
|
||||
|
||||
# Always published, so the full report survives regardless of size.
|
||||
cp "$SUMMARY" "$WORK/blueprint-audit.md"
|
||||
echo "report_path=$WORK/blueprint-audit.md" >> "$GITHUB_OUTPUT"
|
||||
|
||||
echo "compose_failed=$COMPOSE_COUNT" >> "$GITHUB_OUTPUT"
|
||||
echo "toml_failed=$TOML_COUNT" >> "$GITHUB_OUTPUT"
|
||||
|
||||
if [ "$COMPOSE_COUNT" != "0" ] || [ "$TOML_COUNT" != "0" ]; then
|
||||
echo "::warning::$COMPOSE_COUNT compose and $TOML_COUNT template.toml findings across $TOTAL blueprints"
|
||||
fi
|
||||
|
||||
- name: Upload the full report
|
||||
if: always() && steps.audit.outputs.report_path != ''
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: blueprint-audit
|
||||
path: ${{ steps.audit.outputs.report_path }}
|
||||
retention-days: 30
|
||||
|
||||
- name: Fail if requested
|
||||
# `inputs` is only populated for workflow_dispatch; on a schedule run it
|
||||
# is not available, so gate on the event first and read the value through
|
||||
# github.event.inputs, which is an empty string when absent.
|
||||
if: >-
|
||||
github.event_name == 'workflow_dispatch' &&
|
||||
github.event.inputs.fail_on_findings == 'true' &&
|
||||
(steps.audit.outputs.compose_failed != '0' || steps.audit.outputs.toml_failed != '0')
|
||||
run: |
|
||||
echo "❌ Findings present and fail_on_findings was requested."
|
||||
exit 1
|
||||
@@ -183,7 +183,7 @@ services:
|
||||
- 3000:3000
|
||||
|
||||
# Instead use this way:
|
||||
ports:
|
||||
expose:
|
||||
- 3000
|
||||
```
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from "./ui/tabs";
|
||||
import { Label } from "./ui/label";
|
||||
import { Clipboard } from "lucide-react";
|
||||
import { Input } from "./ui/input";
|
||||
import Markdown from "./ui/markdown";
|
||||
|
||||
interface Template {
|
||||
id: string;
|
||||
@@ -32,6 +33,7 @@ interface Template {
|
||||
interface TemplateFiles {
|
||||
dockerCompose: string | null;
|
||||
config: string | null;
|
||||
instructions: string | null;
|
||||
}
|
||||
|
||||
interface TemplateDialogProps {
|
||||
@@ -169,8 +171,23 @@ const TemplateDialog: React.FC<TemplateDialogProps> = ({
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
<Tabs defaultValue="docker-compose" className="w-full">
|
||||
<Tabs
|
||||
defaultValue={
|
||||
templateFiles?.instructions
|
||||
? "instructions"
|
||||
: "docker-compose"
|
||||
}
|
||||
className="w-full"
|
||||
>
|
||||
<TabsList className="w-full justify-start">
|
||||
{templateFiles?.instructions && (
|
||||
<TabsTrigger
|
||||
value="instructions"
|
||||
className="data-[state=active]:font-bold"
|
||||
>
|
||||
Instructions
|
||||
</TabsTrigger>
|
||||
)}
|
||||
<TabsTrigger
|
||||
value="docker-compose"
|
||||
className="data-[state=active]:font-bold"
|
||||
@@ -184,6 +201,24 @@ const TemplateDialog: React.FC<TemplateDialogProps> = ({
|
||||
Configuration
|
||||
</TabsTrigger>
|
||||
</TabsList>
|
||||
|
||||
{templateFiles?.instructions && (
|
||||
<TabsContent value="instructions" className="mt-4">
|
||||
<div className="space-y-2">
|
||||
<Label className="flex flex-col items-start w-fit justify-start gap-1">
|
||||
<span className="leading-tight text-xl font-semibold">
|
||||
Setup Instructions
|
||||
</span>
|
||||
<span className="leading-tight text-sm text-gray-500">
|
||||
instructions.md
|
||||
</span>
|
||||
</Label>
|
||||
<div className="rounded-md border p-4">
|
||||
<Markdown content={templateFiles.instructions} />
|
||||
</div>
|
||||
</div>
|
||||
</TabsContent>
|
||||
)}
|
||||
<TabsContent value="docker-compose" className="mt-4">
|
||||
{templateFiles?.dockerCompose && (
|
||||
<div className="space-y-2">
|
||||
|
||||
@@ -28,6 +28,7 @@ interface Template {
|
||||
interface TemplateFiles {
|
||||
dockerCompose: string | null;
|
||||
config: string | null;
|
||||
instructions: string | null;
|
||||
}
|
||||
|
||||
interface TemplateGridProps {
|
||||
@@ -80,20 +81,34 @@ const TemplateGrid: React.FC<TemplateGridProps> = ({ view }) => {
|
||||
const fetchTemplateFiles = async (templateId: string) => {
|
||||
setModalLoading(true);
|
||||
try {
|
||||
const [dockerComposeRes, configRes] = await Promise.all([
|
||||
fetch(`/blueprints/${templateId}/docker-compose.yml`),
|
||||
fetch(`/blueprints/${templateId}/template.toml`),
|
||||
]);
|
||||
const [dockerComposeRes, configRes, instructionsRes] = await Promise.all(
|
||||
[
|
||||
fetch(`/blueprints/${templateId}/docker-compose.yml`),
|
||||
fetch(`/blueprints/${templateId}/template.toml`),
|
||||
fetch(`/blueprints/${templateId}/instructions.md`),
|
||||
]
|
||||
);
|
||||
|
||||
const dockerCompose = dockerComposeRes.ok
|
||||
? await dockerComposeRes.text()
|
||||
: null;
|
||||
const config = configRes.ok ? await configRes.text() : null;
|
||||
|
||||
setTemplateFiles({ dockerCompose, config });
|
||||
// Guard against SPA fallbacks that return index.html with a 200 status
|
||||
// for templates that don't have an instructions.md file.
|
||||
const instructionsIsMarkdown =
|
||||
instructionsRes.ok &&
|
||||
!(instructionsRes.headers.get("content-type") || "").includes(
|
||||
"text/html"
|
||||
);
|
||||
const instructions = instructionsIsMarkdown
|
||||
? await instructionsRes.text()
|
||||
: null;
|
||||
|
||||
setTemplateFiles({ dockerCompose, config, instructions });
|
||||
} catch (err) {
|
||||
console.error("Error fetching template files:", err);
|
||||
setTemplateFiles({ dockerCompose: null, config: null });
|
||||
setTemplateFiles({ dockerCompose: null, config: null, instructions: null });
|
||||
} finally {
|
||||
setModalLoading(false);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,177 @@
|
||||
import React from "react";
|
||||
|
||||
// Minimal markdown renderer (no external dependencies) for the per-template
|
||||
// instructions.md files. Supports headings, paragraphs, fenced code blocks,
|
||||
// ordered/unordered lists, and inline code / bold / links.
|
||||
|
||||
const INLINE_PATTERN =
|
||||
/(`[^`]+`)|(\*\*[^*]+\*\*)|(\[[^\]]+\]\([^)\s]+\))/g;
|
||||
|
||||
const renderInline = (text: string): React.ReactNode[] => {
|
||||
const nodes: React.ReactNode[] = [];
|
||||
let lastIndex = 0;
|
||||
let key = 0;
|
||||
let match: RegExpExecArray | null;
|
||||
INLINE_PATTERN.lastIndex = 0;
|
||||
|
||||
while ((match = INLINE_PATTERN.exec(text)) !== null) {
|
||||
if (match.index > lastIndex) {
|
||||
nodes.push(text.slice(lastIndex, match.index));
|
||||
}
|
||||
const token = match[0];
|
||||
if (token.startsWith("`")) {
|
||||
nodes.push(
|
||||
<code
|
||||
key={key++}
|
||||
className="px-1.5 py-0.5 rounded bg-muted font-mono text-[0.85em]"
|
||||
>
|
||||
{token.slice(1, -1)}
|
||||
</code>
|
||||
);
|
||||
} else if (token.startsWith("**")) {
|
||||
nodes.push(<strong key={key++}>{token.slice(2, -2)}</strong>);
|
||||
} else {
|
||||
const link = /^\[([^\]]+)\]\(([^)\s]+)\)$/.exec(token);
|
||||
if (link) {
|
||||
nodes.push(
|
||||
<a
|
||||
key={key++}
|
||||
href={link[2]}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="text-blue-600 dark:text-blue-400 underline underline-offset-2"
|
||||
>
|
||||
{link[1]}
|
||||
</a>
|
||||
);
|
||||
} else {
|
||||
nodes.push(token);
|
||||
}
|
||||
}
|
||||
lastIndex = match.index + token.length;
|
||||
}
|
||||
if (lastIndex < text.length) {
|
||||
nodes.push(text.slice(lastIndex));
|
||||
}
|
||||
return nodes;
|
||||
};
|
||||
|
||||
const HEADING_CLASSES: Record<number, string> = {
|
||||
1: "text-2xl font-bold mt-2",
|
||||
2: "text-xl font-semibold mt-6 border-b pb-1",
|
||||
3: "text-lg font-semibold mt-4",
|
||||
4: "text-base font-semibold mt-3",
|
||||
};
|
||||
|
||||
interface MarkdownProps {
|
||||
content: string;
|
||||
}
|
||||
|
||||
const Markdown: React.FC<MarkdownProps> = ({ content }) => {
|
||||
const lines = content.replace(/\r\n/g, "\n").split("\n");
|
||||
const blocks: React.ReactNode[] = [];
|
||||
let key = 0;
|
||||
let i = 0;
|
||||
|
||||
while (i < lines.length) {
|
||||
const line = lines[i];
|
||||
|
||||
// Blank line
|
||||
if (line.trim() === "") {
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Fenced code block
|
||||
if (line.trim().startsWith("```")) {
|
||||
const code: string[] = [];
|
||||
i++;
|
||||
while (i < lines.length && !lines[i].trim().startsWith("```")) {
|
||||
code.push(lines[i]);
|
||||
i++;
|
||||
}
|
||||
i++; // skip closing fence
|
||||
blocks.push(
|
||||
<pre
|
||||
key={key++}
|
||||
className="bg-muted rounded-md p-4 overflow-x-auto text-sm font-mono whitespace-pre"
|
||||
>
|
||||
<code>{code.join("\n")}</code>
|
||||
</pre>
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Heading
|
||||
const heading = /^(#{1,4})\s+(.*)$/.exec(line);
|
||||
if (heading) {
|
||||
const level = heading[1].length;
|
||||
const Tag = `h${Math.min(level + 1, 6)}` as keyof React.JSX.IntrinsicElements;
|
||||
blocks.push(
|
||||
<Tag key={key++} className={HEADING_CLASSES[level]}>
|
||||
{renderInline(heading[2])}
|
||||
</Tag>
|
||||
);
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Unordered list
|
||||
if (/^[-*]\s+/.test(line)) {
|
||||
const items: string[] = [];
|
||||
while (i < lines.length && /^[-*]\s+/.test(lines[i])) {
|
||||
items.push(lines[i].replace(/^[-*]\s+/, ""));
|
||||
i++;
|
||||
}
|
||||
blocks.push(
|
||||
<ul key={key++} className="list-disc pl-6 space-y-1">
|
||||
{items.map((item, idx) => (
|
||||
<li key={idx}>{renderInline(item)}</li>
|
||||
))}
|
||||
</ul>
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Ordered list
|
||||
if (/^\d+\.\s+/.test(line)) {
|
||||
const items: string[] = [];
|
||||
while (i < lines.length && /^\d+\.\s+/.test(lines[i])) {
|
||||
items.push(lines[i].replace(/^\d+\.\s+/, ""));
|
||||
i++;
|
||||
}
|
||||
blocks.push(
|
||||
<ol key={key++} className="list-decimal pl-6 space-y-1">
|
||||
{items.map((item, idx) => (
|
||||
<li key={idx}>{renderInline(item)}</li>
|
||||
))}
|
||||
</ol>
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Paragraph: consume consecutive plain lines
|
||||
const paragraph: string[] = [line];
|
||||
i++;
|
||||
while (
|
||||
i < lines.length &&
|
||||
lines[i].trim() !== "" &&
|
||||
!/^(#{1,4})\s+/.test(lines[i]) &&
|
||||
!/^[-*]\s+/.test(lines[i]) &&
|
||||
!/^\d+\.\s+/.test(lines[i]) &&
|
||||
!lines[i].trim().startsWith("```")
|
||||
) {
|
||||
paragraph.push(lines[i]);
|
||||
i++;
|
||||
}
|
||||
blocks.push(
|
||||
<p key={key++} className="leading-relaxed">
|
||||
{renderInline(paragraph.join(" "))}
|
||||
</p>
|
||||
);
|
||||
}
|
||||
|
||||
return <div className="space-y-3 text-sm">{blocks}</div>;
|
||||
};
|
||||
|
||||
export default Markdown;
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 105 KiB |
@@ -0,0 +1,32 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
9router:
|
||||
image: decolua/9router:0.5.40
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
DATA_DIR: /app/data
|
||||
PORT: "20128"
|
||||
HOSTNAME: "0.0.0.0"
|
||||
NODE_ENV: production
|
||||
JWT_SECRET: ${JWT_SECRET}
|
||||
INITIAL_PASSWORD: ${INITIAL_PASSWORD}
|
||||
API_KEY_SECRET: ${API_KEY_SECRET}
|
||||
MACHINE_ID_SALT: ${MACHINE_ID_SALT}
|
||||
BASE_URL: http://${ROUTER_HOST}
|
||||
NEXT_PUBLIC_BASE_URL: http://${ROUTER_HOST}
|
||||
HEADROOM_URL: http://headroom:8787
|
||||
AUTH_COOKIE_SECURE: "false"
|
||||
volumes:
|
||||
- 9router-data:/app/data
|
||||
depends_on:
|
||||
- headroom
|
||||
|
||||
# Optional token-reduction proxy that 9Router calls through HEADROOM_URL.
|
||||
# Shipped as a sidecar because the 9Router image does not bundle it.
|
||||
headroom:
|
||||
image: ghcr.io/chopratejas/headroom:0.6.7
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
9router-data:
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "9router",
|
||||
"name": "9Router",
|
||||
"version": "0.5.40",
|
||||
"description": "Self-hosted AI model router that rotates requests across 40+ providers with automatic fallback, exposing an OpenAI-compatible endpoint for coding agents.",
|
||||
"logo": "9router.png",
|
||||
"links": {
|
||||
"github": "https://github.com/decolua/9router",
|
||||
"website": "https://9router.com",
|
||||
"docs": "https://github.com/decolua/9router/blob/master/DOCKER.md"
|
||||
},
|
||||
"tags": [
|
||||
"ai",
|
||||
"proxy",
|
||||
"developer-tools"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
jwt_secret = "${password:64}"
|
||||
initial_password = "${password:32}"
|
||||
api_key_secret = "${password:64}"
|
||||
machine_id_salt = "${password:32}"
|
||||
|
||||
[config]
|
||||
env = [
|
||||
"ROUTER_HOST=${main_domain}",
|
||||
"JWT_SECRET=${jwt_secret}",
|
||||
"INITIAL_PASSWORD=${initial_password}",
|
||||
"API_KEY_SECRET=${api_key_secret}",
|
||||
"MACHINE_ID_SALT=${machine_id_salt}",
|
||||
]
|
||||
mounts = []
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "9router"
|
||||
port = 20128
|
||||
host = "${main_domain}"
|
||||
@@ -3,7 +3,7 @@ version: "3"
|
||||
services:
|
||||
ackee:
|
||||
image: electerious/ackee:3.4.2
|
||||
ports:
|
||||
expose:
|
||||
- "3000"
|
||||
environment:
|
||||
- ACKEE_USERNAME=${ACKEE_USERNAME}
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
|
||||
## Instructions
|
||||
|
||||
We don't have nothing to show here....
|
||||
@@ -61,4 +61,4 @@ services:
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
redis_data:
|
||||
redis_data:
|
||||
|
||||
@@ -17,4 +17,4 @@ services:
|
||||
|
||||
volumes:
|
||||
adguardhome-work: {}
|
||||
adguardhome-conf: {}
|
||||
adguardhome-conf: {}
|
||||
|
||||
@@ -3,5 +3,5 @@ services:
|
||||
adminer:
|
||||
image: adminer:4.8.1
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 8080
|
||||
expose:
|
||||
- 8080
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
affinepro:
|
||||
image: ghcr.io/toeverything/affine-graphql:stable-780dd83
|
||||
image: ghcr.io/toeverything/affine:stable
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 3010
|
||||
volumes:
|
||||
- affine-storage:/root/.affine/storage
|
||||
@@ -12,6 +12,7 @@ services:
|
||||
- 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}
|
||||
@@ -19,16 +20,21 @@ services:
|
||||
- MAILER_PASSWORD=${MAILER_PASSWORD}
|
||||
- MAILER_SENDER=${MAILER_SENDER}
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
migration:
|
||||
condition: service_completed_successfully
|
||||
|
||||
migration:
|
||||
image: ghcr.io/toeverything/affine-graphql:stable-780dd83
|
||||
command: node ./scripts/self-host-predeploy.js
|
||||
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}
|
||||
@@ -39,17 +45,25 @@ services:
|
||||
- affine-storage:/root/.affine/storage
|
||||
- affine-config:/root/.affine/config
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
|
||||
db:
|
||||
image: postgres:15-alpine
|
||||
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
|
||||
@@ -57,9 +71,14 @@ services:
|
||||
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: {}
|
||||
redis-data: {}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "affinepro",
|
||||
"name": "Affine Pro",
|
||||
"version": "stable-780dd83",
|
||||
"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": {
|
||||
|
||||
@@ -11,4 +11,4 @@ services:
|
||||
volumes:
|
||||
- agent-zero-data:/a0/usr
|
||||
volumes:
|
||||
agent-zero-data:
|
||||
agent-zero-data:
|
||||
|
||||
@@ -11,12 +11,11 @@ services:
|
||||
- agentdvr-config:/AgentDVR/Media/XML/
|
||||
- agentdvr-media:/AgentDVR/Media/WebServerRoot/Media/
|
||||
- agentdvr-commands:/AgentDVR/Commands/
|
||||
ports:
|
||||
expose:
|
||||
- 8090
|
||||
- 3478/udp
|
||||
- 50000-50100/udp
|
||||
|
||||
volumes:
|
||||
agentdvr-config: {}
|
||||
agentdvr-media: {}
|
||||
agentdvr-commands: {}
|
||||
agentdvr-commands: {}
|
||||
|
||||
@@ -11,4 +11,4 @@ services:
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
alist-data:
|
||||
alist-data:
|
||||
|
||||
@@ -3,10 +3,10 @@ services:
|
||||
alltube:
|
||||
image: dnomd343/alltube:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 80
|
||||
environment:
|
||||
- TITLE=${TITLE}
|
||||
- CONVERT=${CONVERT}
|
||||
- STREAM=${STREAM}
|
||||
- REMUX=${REMUX}
|
||||
- REMUX=${REMUX}
|
||||
|
||||
@@ -3,7 +3,7 @@ services:
|
||||
ampache:
|
||||
image: ampache/ampache:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 80
|
||||
volumes:
|
||||
- config:/var/www/config
|
||||
@@ -14,4 +14,4 @@ services:
|
||||
volumes:
|
||||
config: {}
|
||||
log: {}
|
||||
mysql: {}
|
||||
mysql: {}
|
||||
|
||||
@@ -3,7 +3,7 @@ services:
|
||||
anonupload:
|
||||
image: ghcr.io/supernova3339/anonfiles:1
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 80
|
||||
environment:
|
||||
- ADMIN_EMAIL=${ADMIN_EMAIL}
|
||||
@@ -13,4 +13,4 @@ services:
|
||||
- uploads:/var/www/html/uploads
|
||||
|
||||
volumes:
|
||||
uploads: {}
|
||||
uploads: {}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
services:
|
||||
answer:
|
||||
image: apache/answer:1.4.1
|
||||
ports:
|
||||
expose:
|
||||
- '80'
|
||||
restart: on-failure
|
||||
volumes:
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"docs": "https://answer.apache.org/docs"
|
||||
},
|
||||
"tags": [
|
||||
"q&a",
|
||||
"q-and-a",
|
||||
"self-hosted"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ services:
|
||||
anubis:
|
||||
image: ghcr.io/techarohq/anubis:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- "8923" # Anubis default port
|
||||
environment:
|
||||
# Required: Point to your frontend service locally
|
||||
|
||||
@@ -3,7 +3,7 @@ services:
|
||||
anythingllm:
|
||||
image: mintplexlabs/anythingllm:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 3001
|
||||
environment:
|
||||
- STORAGE_DIR=/app/server/storage
|
||||
@@ -13,4 +13,4 @@ services:
|
||||
- SYS_ADMIN
|
||||
|
||||
volumes:
|
||||
storage: {}
|
||||
storage: {}
|
||||
|
||||
@@ -3,7 +3,7 @@ services:
|
||||
apprise-api:
|
||||
image: linuxserver/apprise-api:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 8000
|
||||
environment:
|
||||
- PUID=1000
|
||||
@@ -13,4 +13,4 @@ services:
|
||||
- config:/config
|
||||
|
||||
volumes:
|
||||
config: {}
|
||||
config: {}
|
||||
|
||||
@@ -7,4 +7,4 @@ services:
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
appsmith-data:
|
||||
appsmith-data:
|
||||
|
||||
@@ -3,7 +3,7 @@ services:
|
||||
arangodb:
|
||||
image: arangodb:3.12.4
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 8529
|
||||
environment:
|
||||
- ARANGO_ROOT_PASSWORD=${ARANGO_PASSWORD}
|
||||
@@ -11,4 +11,4 @@ services:
|
||||
- data:/var/lib/arangodb3
|
||||
|
||||
volumes:
|
||||
data: {}
|
||||
data: {}
|
||||
|
||||
@@ -9,8 +9,7 @@ services:
|
||||
PUBLIC_SNAPSHOTS: ${PUBLIC_SNAPSHOTS}
|
||||
volumes:
|
||||
- archivebox_data:/data
|
||||
ports:
|
||||
expose:
|
||||
- "8000"
|
||||
|
||||
volumes:
|
||||
archivebox_data:
|
||||
|
||||
@@ -3,7 +3,7 @@ services:
|
||||
argilla-web:
|
||||
image: argilla/argilla-server:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 6900
|
||||
environment:
|
||||
- ARGILLA_HOME_PATH=/var/lib/argilla
|
||||
@@ -74,4 +74,4 @@ volumes:
|
||||
argilladata: {}
|
||||
elasticdata: {}
|
||||
dbdata: {}
|
||||
redisdata: {}
|
||||
redisdata: {}
|
||||
|
||||
@@ -3,7 +3,7 @@ services:
|
||||
audiobookshelf:
|
||||
image: ghcr.io/advplyr/audiobookshelf:2.19.4
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 80
|
||||
environment:
|
||||
- TZ=UTC
|
||||
@@ -14,4 +14,4 @@ services:
|
||||
|
||||
volumes:
|
||||
config: {}
|
||||
metadata: {}
|
||||
metadata: {}
|
||||
|
||||
@@ -16,9 +16,8 @@ services:
|
||||
condition: service_healthy
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
ports:
|
||||
expose:
|
||||
- 9091
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
restart: unless-stopped
|
||||
@@ -52,4 +51,4 @@ services:
|
||||
volumes:
|
||||
authelia_config:
|
||||
redis_data:
|
||||
postgres_data:
|
||||
postgres_data:
|
||||
|
||||
@@ -3,7 +3,7 @@ services:
|
||||
authorizer:
|
||||
image: lakhansamani/authorizer:1.4.4
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 8080
|
||||
environment:
|
||||
- DATABASE_TYPE=postgres
|
||||
@@ -37,4 +37,4 @@ services:
|
||||
|
||||
volumes:
|
||||
db_data: {}
|
||||
redis_data: {}
|
||||
redis_data: {}
|
||||
|
||||
@@ -2,7 +2,7 @@ services:
|
||||
autobase-console:
|
||||
image: autobase/console:2.7.2
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- "80"
|
||||
- "8080"
|
||||
environment:
|
||||
|
||||
@@ -1,17 +1,15 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
automatisch:
|
||||
image: dockeriddonuts/automatisch:2.0
|
||||
image: automatischio/automatisch:0.15.0
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 3000
|
||||
environment:
|
||||
- HOST=${DOMAIN}
|
||||
- PROTOCOL=http
|
||||
- PORT=3000
|
||||
- API_URL=http://${DOMAIN}
|
||||
- WEB_APP_URL=http://${DOMAIN}
|
||||
- APP_ENV=production
|
||||
- REDIS_HOST=automatisch-redis
|
||||
- REDIS_USERNAME=default
|
||||
- REDIS_PASSWORD=${REDIS_PASSWORD}
|
||||
- POSTGRES_HOST=automatisch-postgres
|
||||
- POSTGRES_DATABASE=automatisch
|
||||
@@ -23,11 +21,13 @@ services:
|
||||
volumes:
|
||||
- storage:/automatisch/storage
|
||||
depends_on:
|
||||
- automatisch-postgres
|
||||
- automatisch-redis
|
||||
automatisch-postgres:
|
||||
condition: service_healthy
|
||||
automatisch-redis:
|
||||
condition: service_started
|
||||
|
||||
automatisch-worker:
|
||||
image: dockeriddonuts/automatisch:2.0
|
||||
image: automatischio/automatisch:0.15.0
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- APP_ENV=production
|
||||
@@ -44,8 +44,7 @@ services:
|
||||
volumes:
|
||||
- storage:/automatisch/storage
|
||||
depends_on:
|
||||
- automatisch-postgres
|
||||
- automatisch-redis
|
||||
- automatisch
|
||||
|
||||
automatisch-postgres:
|
||||
image: postgres:15-alpine
|
||||
@@ -56,18 +55,20 @@ services:
|
||||
- POSTGRES_DB=automatisch
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U postgres -d automatisch"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
automatisch-redis:
|
||||
image: redis:7-alpine
|
||||
restart: unless-stopped
|
||||
command: redis-server --requirepass ${REDIS_PASSWORD}
|
||||
environment:
|
||||
- REDIS_USERNAME=default
|
||||
- REDIS_PASSWORD=${REDIS_PASSWORD}
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
|
||||
volumes:
|
||||
storage: {}
|
||||
postgres_data: {}
|
||||
redis_data: {}
|
||||
redis_data: {}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "automatisch",
|
||||
"name": "Automatisch",
|
||||
"version": "2.0",
|
||||
"version": "0.15.0",
|
||||
"description": "Automatisch is a powerful, self-hosted workflow automation tool designed for connecting your apps and automating repetitive tasks. With Automatisch, you can create workflows to sync data, send notifications, and perform various actions seamlessly across different services.",
|
||||
"logo": "logo.png",
|
||||
"links": {
|
||||
|
||||
@@ -13,6 +13,7 @@ port = 3000
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
DOMAIN = "${main_domain}"
|
||||
DB_PASSWORD = "${db_password}"
|
||||
REDIS_PASSWORD = "${redis_password}"
|
||||
ENCRYPTION_KEY = "${encryption_key}"
|
||||
|
||||
@@ -2,7 +2,7 @@ services:
|
||||
azuracast:
|
||||
image: ghcr.io/azuracast/azuracast:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 80
|
||||
volumes:
|
||||
- azuracast-station-data:/var/azuracast/stations
|
||||
@@ -36,4 +36,4 @@ volumes:
|
||||
azuracast-data: {}
|
||||
azuracast-uploads: {}
|
||||
azuracast-backups: {}
|
||||
mariadb-data: {}
|
||||
mariadb-data: {}
|
||||
|
||||
@@ -3,7 +3,7 @@ services:
|
||||
babybuddy:
|
||||
image: linuxserver/babybuddy:2.7.0
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 8000
|
||||
environment:
|
||||
- PUID=1000
|
||||
@@ -16,4 +16,4 @@ services:
|
||||
- config:/config
|
||||
|
||||
volumes:
|
||||
config: {}
|
||||
config: {}
|
||||
|
||||
@@ -2,7 +2,7 @@ services:
|
||||
backrest:
|
||||
image: garethgeorge/backrest:v1.7.3
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 9898
|
||||
environment:
|
||||
- BACKREST_PORT=9898
|
||||
|
||||
@@ -3,7 +3,7 @@ services:
|
||||
baikal:
|
||||
image: ckulka/baikal:nginx-php8.2
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 80
|
||||
environment:
|
||||
- TZ=UTC
|
||||
@@ -13,4 +13,4 @@ services:
|
||||
|
||||
volumes:
|
||||
config: {}
|
||||
data: {}
|
||||
data: {}
|
||||
|
||||
@@ -3,11 +3,11 @@ services:
|
||||
barrage:
|
||||
image: maulik9898/barrage:0.3.0
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 3000
|
||||
environment:
|
||||
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
|
||||
- NEXTAUTH_URL=http://${DOMAIN}
|
||||
- DELUGE_URL=${DELUGE_URL}
|
||||
- DELUGE_PASSWORD=${DELUGE_PASSWORD}
|
||||
- BARRAGE_PASSWORD=${BARRAGE_PASSWORD}
|
||||
- BARRAGE_PASSWORD=${BARRAGE_PASSWORD}
|
||||
|
||||
@@ -3,7 +3,7 @@ services:
|
||||
bazarr:
|
||||
image: lscr.io/linuxserver/bazarr:1.5.1
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 6767
|
||||
environment:
|
||||
- PUID=1000
|
||||
@@ -15,4 +15,4 @@ services:
|
||||
- ${TV_PATH}:/tv
|
||||
|
||||
volumes:
|
||||
config: {}
|
||||
config: {}
|
||||
|
||||
@@ -3,11 +3,11 @@ services:
|
||||
beszel:
|
||||
image: henrygd/beszel:0.10.2
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 8090
|
||||
volumes:
|
||||
- beszel_data:/beszel_data
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
|
||||
volumes:
|
||||
beszel_data: {}
|
||||
beszel_data: {}
|
||||
|
||||
@@ -4,10 +4,8 @@ services:
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- server
|
||||
ports:
|
||||
expose:
|
||||
- '80'
|
||||
|
||||
|
||||
server:
|
||||
image: bigcapitalhq/server:latest
|
||||
restart: unless-stopped
|
||||
@@ -18,9 +16,8 @@ services:
|
||||
condition: service_started
|
||||
redis:
|
||||
condition: service_started
|
||||
ports:
|
||||
expose:
|
||||
- '3000'
|
||||
|
||||
environment:
|
||||
# Mail
|
||||
- MAIL_HOST=${MAIL_HOST}
|
||||
@@ -97,9 +94,8 @@ services:
|
||||
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
|
||||
volumes:
|
||||
- mysql:/var/lib/mysql
|
||||
ports:
|
||||
expose:
|
||||
- '3306'
|
||||
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "mysqladmin ping -h localhost -u root -p$$MYSQL_ROOT_PASSWORD || exit 1"]
|
||||
interval: 10s
|
||||
@@ -110,7 +106,7 @@ services:
|
||||
mongo:
|
||||
image: mongo:7
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- '27017'
|
||||
volumes:
|
||||
- mongo:/data/db
|
||||
@@ -119,7 +115,7 @@ services:
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- '6379'
|
||||
volumes:
|
||||
- redis:/data
|
||||
@@ -133,10 +129,8 @@ services:
|
||||
gotenberg:
|
||||
image: gotenberg/gotenberg:7
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- '9000'
|
||||
|
||||
|
||||
volumes:
|
||||
mysql:
|
||||
name: bigcapital_mysql
|
||||
|
||||
@@ -28,6 +28,9 @@ services:
|
||||
- AUTORUN_LARAVEL_STORAGE_LINK=true
|
||||
volumes:
|
||||
- billmora-storage:/var/www/html/storage
|
||||
- billmora-plugins:/var/www/html/plugin
|
||||
- billmora-themes-resources:/var/www/html/resources/themes
|
||||
- billmora-themes-public:/var/www/html/public/themes
|
||||
depends_on:
|
||||
billmora-db:
|
||||
condition: service_healthy
|
||||
@@ -58,6 +61,9 @@ services:
|
||||
- AUTORUN_ENABLED=false
|
||||
volumes:
|
||||
- billmora-storage:/var/www/html/storage
|
||||
- billmora-plugins:/var/www/html/plugin
|
||||
- billmora-themes-resources:/var/www/html/resources/themes
|
||||
- billmora-themes-public:/var/www/html/public/themes
|
||||
depends_on:
|
||||
billmora-db:
|
||||
condition: service_healthy
|
||||
@@ -88,6 +94,9 @@ services:
|
||||
- AUTORUN_ENABLED=false
|
||||
volumes:
|
||||
- billmora-storage:/var/www/html/storage
|
||||
- billmora-plugins:/var/www/html/plugin
|
||||
- billmora-themes-resources:/var/www/html/resources/themes
|
||||
- billmora-themes-public:/var/www/html/public/themes
|
||||
depends_on:
|
||||
billmora-db:
|
||||
condition: service_healthy
|
||||
@@ -126,5 +135,8 @@ services:
|
||||
|
||||
volumes:
|
||||
billmora-storage:
|
||||
billmora-plugins:
|
||||
billmora-themes-resources:
|
||||
billmora-themes-public:
|
||||
billmora-db-data:
|
||||
billmora-redis-data:
|
||||
|
||||
@@ -19,7 +19,7 @@ services:
|
||||
- PGID=1000
|
||||
- TZ=Etc/UTC
|
||||
- SUBFOLDER=/ #optional
|
||||
ports:
|
||||
expose:
|
||||
- 3000
|
||||
- 3001
|
||||
restart: unless-stopped
|
||||
|
||||
@@ -16,9 +16,8 @@ services:
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
ports:
|
||||
expose:
|
||||
- 1111
|
||||
|
||||
blinko-postgres:
|
||||
image: postgres:14
|
||||
restart: always
|
||||
|
||||
@@ -45,4 +45,4 @@ services:
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
volumes:
|
||||
pds-data:
|
||||
pds-data:
|
||||
|
||||
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 72 KiB |
@@ -0,0 +1,84 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
bonfire:
|
||||
image: bonfirenetworks/bonfire:1.0.5-social-amd64
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
search:
|
||||
condition: service_started
|
||||
environment:
|
||||
# Instance
|
||||
- HOSTNAME=${BONFIRE_HOSTNAME}
|
||||
- PUBLIC_PORT=${PUBLIC_PORT:-80}
|
||||
- SERVER_PORT=4000
|
||||
- APP_NAME=${APP_NAME:-Bonfire}
|
||||
- LANG=en_US.UTF-8
|
||||
# Secrets
|
||||
- SECRET_KEY_BASE=${SECRET_KEY_BASE}
|
||||
- SIGNING_SALT=${SIGNING_SALT}
|
||||
- ENCRYPTION_SALT=${ENCRYPTION_SALT}
|
||||
- RELEASE_COOKIE=${RELEASE_COOKIE}
|
||||
# Database (migrations run automatically on startup)
|
||||
- POSTGRES_HOST=db
|
||||
- POSTGRES_USER=postgres
|
||||
- POSTGRES_DB=bonfire_db
|
||||
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
|
||||
# Must stay false for the initial migrations; can be set to true
|
||||
# after the first deployment to speed up future upgrades
|
||||
- DB_MIGRATE_INDEXES_CONCURRENTLY=${DB_MIGRATE_INDEXES_CONCURRENTLY:-false}
|
||||
# Search (Meilisearch)
|
||||
- SEARCH_ADAPTER=meili
|
||||
- SEARCH_MEILI_INSTANCE=http://search:7700
|
||||
- MEILI_MASTER_KEY=${MEILI_MASTER_KEY}
|
||||
# Email (the first account to sign up becomes admin and needs no
|
||||
# confirmation email; configure a mail backend for further signups)
|
||||
- MAIL_BACKEND=${MAIL_BACKEND:-none}
|
||||
- MAIL_SERVER=${MAIL_SERVER:-}
|
||||
- MAIL_PORT=${MAIL_PORT:-}
|
||||
- MAIL_USER=${MAIL_USER:-}
|
||||
- MAIL_PASSWORD=${MAIL_PASSWORD:-}
|
||||
- MAIL_DOMAIN=${MAIL_DOMAIN:-}
|
||||
- MAIL_FROM=${MAIL_FROM:-}
|
||||
- MAIL_KEY=${MAIL_KEY:-}
|
||||
# Max upload size in megabytes
|
||||
- UPLOAD_LIMIT=${UPLOAD_LIMIT:-20}
|
||||
volumes:
|
||||
- bonfire-uploads:/opt/app/data/uploads
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:4000"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 15
|
||||
start_period: 120s
|
||||
|
||||
db:
|
||||
image: postgis/postgis:17-3.5-alpine
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_USER=postgres
|
||||
- POSTGRES_DB=bonfire_db
|
||||
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
|
||||
volumes:
|
||||
- db-data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U postgres -d bonfire_db"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
|
||||
search:
|
||||
image: getmeili/meilisearch:v1.11
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- MEILI_MASTER_KEY=${MEILI_MASTER_KEY}
|
||||
- MEILI_ENV=production
|
||||
- MEILI_NO_ANALYTICS=true
|
||||
volumes:
|
||||
- search-data:/meili_data
|
||||
|
||||
volumes:
|
||||
bonfire-uploads:
|
||||
db-data:
|
||||
search-data:
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "bonfire",
|
||||
"name": "Bonfire",
|
||||
"version": "1.0.5",
|
||||
"description": "Federated social networking toolkit for communities: customizable digital spaces with ActivityPub federation, flexible boundaries and moderation tools.",
|
||||
"logo": "bonfire.svg",
|
||||
"links": {
|
||||
"github": "https://github.com/bonfire-networks/bonfire-app",
|
||||
"website": "https://bonfirenetworks.org",
|
||||
"docs": "https://docs.bonfirenetworks.org"
|
||||
},
|
||||
"tags": [
|
||||
"social",
|
||||
"fediverse",
|
||||
"activitypub"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
secret_key_base = "${password:64}"
|
||||
signing_salt = "${password:32}"
|
||||
encryption_salt = "${password:32}"
|
||||
release_cookie = "${password:32}"
|
||||
postgres_password = "${password:32}"
|
||||
meili_master_key = "${password:32}"
|
||||
|
||||
[config]
|
||||
[[config.domains]]
|
||||
serviceName = "bonfire"
|
||||
port = 4000
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
# Domain of your Bonfire instance (must match the domain above)
|
||||
"BONFIRE_HOSTNAME" = "${main_domain}"
|
||||
# Port used to build public URLs: keep 80 while the domain is plain HTTP,
|
||||
# and change to 443 once you enable HTTPS on the domain
|
||||
# (HTTPS is required for federation with other fediverse instances)
|
||||
"PUBLIC_PORT" = "80"
|
||||
# Display name of your instance
|
||||
"APP_NAME" = "Bonfire"
|
||||
# Max upload size in megabytes
|
||||
"UPLOAD_LIMIT" = "20"
|
||||
|
||||
# Secrets (auto-generated)
|
||||
"SECRET_KEY_BASE" = "${secret_key_base}"
|
||||
"SIGNING_SALT" = "${signing_salt}"
|
||||
"ENCRYPTION_SALT" = "${encryption_salt}"
|
||||
"RELEASE_COOKIE" = "${release_cookie}"
|
||||
"POSTGRES_PASSWORD" = "${postgres_password}"
|
||||
"MEILI_MASTER_KEY" = "${meili_master_key}"
|
||||
|
||||
# Optional: set to true only AFTER the first deployment finished its initial
|
||||
# database migrations (speeds up index creation during future upgrades)
|
||||
# "DB_MIGRATE_INDEXES_CONCURRENTLY" = "true"
|
||||
|
||||
# --- Email ---
|
||||
# The first account to sign up becomes the instance admin and does not need
|
||||
# a confirmation email. Further signups are invite-only by default (the admin
|
||||
# can create invite links or open up signups in the instance settings), and
|
||||
# require a working mail backend to confirm their email address.
|
||||
# Supported backends include smtp, mailgun, brevo, postmark, ses and more:
|
||||
# https://docs.bonfirenetworks.org/deploy.html
|
||||
# "MAIL_BACKEND" = "smtp"
|
||||
# "MAIL_SERVER" = "smtp.example.com"
|
||||
# "MAIL_PORT" = "587"
|
||||
# "MAIL_USER" = "postmaster@example.com"
|
||||
# "MAIL_PASSWORD" = ""
|
||||
# "MAIL_DOMAIN" = "example.com"
|
||||
# "MAIL_FROM" = "bonfire@example.com"
|
||||
# For API-based backends (e.g. mailgun) set the API key instead:
|
||||
# "MAIL_KEY" = ""
|
||||
@@ -8,7 +8,7 @@ services:
|
||||
depends_on:
|
||||
mariadb:
|
||||
condition: service_healthy
|
||||
ports:
|
||||
expose:
|
||||
- 6060
|
||||
volumes:
|
||||
- booklore-data:/app/data
|
||||
|
||||
@@ -3,7 +3,7 @@ services:
|
||||
bookstack:
|
||||
image: lscr.io/linuxserver/bookstack:24.12.1
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 80
|
||||
environment:
|
||||
- PUID=1000
|
||||
@@ -32,4 +32,4 @@ services:
|
||||
|
||||
volumes:
|
||||
config: {}
|
||||
db_data: {}
|
||||
db_data: {}
|
||||
|
||||
@@ -3,7 +3,7 @@ services:
|
||||
botpress:
|
||||
image: botpress/server:12.31.9
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 81
|
||||
environment:
|
||||
- BP_HOST=0.0.0.0
|
||||
@@ -31,4 +31,4 @@ services:
|
||||
|
||||
volumes:
|
||||
data: {}
|
||||
db_data: {}
|
||||
db_data: {}
|
||||
|
||||
@@ -22,7 +22,7 @@ services:
|
||||
environment:
|
||||
VITE_API_URL: http://budget-board-server
|
||||
PORT: 6253
|
||||
ports:
|
||||
expose:
|
||||
- 6253
|
||||
depends_on:
|
||||
- budget-board-server
|
||||
|
||||
@@ -3,7 +3,7 @@ services:
|
||||
bytebase:
|
||||
image: bytebase/bytebase:3.3.0
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 8080
|
||||
environment:
|
||||
- PG_URL=postgres://postgres:${DB_PASSWORD}@bytebase-db:5432/bytebase
|
||||
@@ -24,4 +24,4 @@ services:
|
||||
|
||||
volumes:
|
||||
data: {}
|
||||
db_data: {}
|
||||
db_data: {}
|
||||
|
||||
@@ -4,7 +4,7 @@ services:
|
||||
bytestash:
|
||||
image: ghcr.io/jordan-dalby/bytestash:1.5.6
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- "5000"
|
||||
environment:
|
||||
- BASE_PATH=
|
||||
@@ -24,4 +24,4 @@ services:
|
||||
- snippets:/data/snippets
|
||||
|
||||
volumes:
|
||||
snippets:
|
||||
snippets:
|
||||
|
||||
@@ -9,7 +9,7 @@ services:
|
||||
- TZ=Etc/UTC
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
ports:
|
||||
expose:
|
||||
- 8080
|
||||
volumes:
|
||||
- books:/books
|
||||
@@ -17,4 +17,4 @@ services:
|
||||
|
||||
volumes:
|
||||
books:
|
||||
data:
|
||||
data:
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"docs": "https://manual.calibre-ebook.com/"
|
||||
},
|
||||
"tags": [
|
||||
"Documents",
|
||||
"E-Commerce"
|
||||
"documents",
|
||||
"e-commerce"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -7,10 +7,10 @@ services:
|
||||
environment:
|
||||
- CARBONE_EE_LICENSE=${CARBONE_KEY}
|
||||
- CARBONE_EE_STUDIO=true
|
||||
ports:
|
||||
expose:
|
||||
- 4000
|
||||
volumes:
|
||||
- template:/app/template
|
||||
|
||||
volumes:
|
||||
template:
|
||||
template:
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
"docs": "https://carbone.io/documentation/design/overview/getting-started.html"
|
||||
},
|
||||
"tags": [
|
||||
"Document Generation",
|
||||
"Automation",
|
||||
"Reporting",
|
||||
"Productivity"
|
||||
"document-generation",
|
||||
"automation",
|
||||
"reporting",
|
||||
"productivity"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -30,4 +30,4 @@ services:
|
||||
|
||||
volumes:
|
||||
casdoor-postgres-data:
|
||||
casdoor-data:
|
||||
casdoor-data:
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
certmate:
|
||||
image: fabriziosalmi/certmate:2.21.3
|
||||
environment:
|
||||
- FLASK_ENV=production
|
||||
- SECRET_KEY=${SECRET_KEY} # 🔐 Flask session secret
|
||||
- API_BEARER_TOKEN=${API_BEARER_TOKEN} # 🔐 API / web UI token
|
||||
- BEHIND_PROXY=${BEHIND_PROXY}
|
||||
- CLOUDFLARE_TOKEN=${CLOUDFLARE_TOKEN}
|
||||
- LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}
|
||||
- LOG_LEVEL=${LOG_LEVEL}
|
||||
expose:
|
||||
- 8000
|
||||
volumes:
|
||||
- certmate_certificates:/app/certificates
|
||||
- certmate_data:/app/data
|
||||
- certmate_logs:/app/logs
|
||||
- certmate_backups:/app/backups
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
volumes:
|
||||
certmate_certificates:
|
||||
certmate_data:
|
||||
certmate_logs:
|
||||
certmate_backups:
|
||||
@@ -0,0 +1,13 @@
|
||||
# CertMate
|
||||
|
||||
## Getting started
|
||||
|
||||
1. Deploy the template and open the app domain.
|
||||
2. Log in with the **API bearer token**: it is auto-generated by the template and stored in the `API_BEARER_TOKEN` environment variable (Dokploy → your service → Environment). The same token authenticates REST API requests (`Authorization: Bearer <token>`).
|
||||
3. In **Settings**, set your Let's Encrypt email and add credentials for your DNS provider (Cloudflare, Route53, etc.) to issue certificates through DNS-01 challenges.
|
||||
|
||||
## Notes
|
||||
|
||||
- `CLOUDFLARE_TOKEN` can optionally be set as an environment variable instead of configuring it in the UI.
|
||||
- Certificates, application data and backups are persisted in the `certmate_certificates`, `certmate_data` and `certmate_backups` volumes.
|
||||
- API documentation is available at `/docs/` (Swagger) and `/redoc/` on your domain.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"id": "certmate",
|
||||
"name": "CertMate",
|
||||
"version": "2.21.3",
|
||||
"description": "CertMate is an SSL certificate management system with a web UI and REST API. It automates issuing and renewing Let's Encrypt certificates via DNS-01 challenges across 20+ DNS providers, with unified backups and multi-account support.",
|
||||
"logo": "logo.png",
|
||||
"links": {
|
||||
"github": "https://github.com/fabriziosalmi/certmate",
|
||||
"website": "https://www.certmate.org/",
|
||||
"docs": "https://www.certmate.org/docs/"
|
||||
},
|
||||
"tags": [
|
||||
"ssl",
|
||||
"certificates",
|
||||
"security",
|
||||
"self-hosted"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
SECRET_KEY = "${password:32}"
|
||||
API_BEARER_TOKEN = "${password:32}"
|
||||
|
||||
[config]
|
||||
mounts = []
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "certmate"
|
||||
port = 8000
|
||||
host = "${main_domain}"
|
||||
|
||||
[config.env]
|
||||
SECRET_KEY = "${SECRET_KEY}" # 🔐 Flask session secret
|
||||
API_BEARER_TOKEN = "${API_BEARER_TOKEN}" # 🔐 API / web UI token
|
||||
BEHIND_PROXY = "true"
|
||||
CLOUDFLARE_TOKEN = ""
|
||||
LETSENCRYPT_EMAIL = ""
|
||||
LOG_LEVEL = "INFO"
|
||||
@@ -4,10 +4,10 @@ services:
|
||||
changedetection:
|
||||
image: ghcr.io/dgtlmoon/changedetection.io:0.49
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 5000
|
||||
volumes:
|
||||
- datastore:/datastore
|
||||
|
||||
volumes:
|
||||
datastore:
|
||||
datastore:
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
"docs": "https://github.com/dgtlmoon/changedetection.io/wiki"
|
||||
},
|
||||
"tags": [
|
||||
"Monitoring",
|
||||
"Data",
|
||||
"Notifications"
|
||||
"monitoring",
|
||||
"data",
|
||||
"notifications"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.8"
|
||||
|
||||
services:
|
||||
chatto:
|
||||
image: ghcr.io/chattocorp/chatto:0.3.8
|
||||
image: ghcr.io/chattocorp/chatto:0.4
|
||||
restart: unless-stopped
|
||||
expose:
|
||||
- "4000"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "chatto",
|
||||
"name": "Chatto (single binary)",
|
||||
"version": "0.3.8",
|
||||
"version": "0.4.x",
|
||||
"description": "A fully-featured real-time chat application for teams and communities. This template deploys the single Chatto binary with embedded NATS. Note: email/password registration requires SMTP to be configured after deployment; voice/video calls are not included in the single-binary setup.",
|
||||
"logo": "logo.png",
|
||||
"links": {
|
||||
|
||||
@@ -76,4 +76,4 @@ services:
|
||||
volumes:
|
||||
chatwoot-storage:
|
||||
chatwoot-postgres-data:
|
||||
chatwoot-redis-data:
|
||||
chatwoot-redis-data:
|
||||
|
||||
@@ -3,7 +3,7 @@ services:
|
||||
server:
|
||||
image: ghcr.io/bluewave-labs/checkmate-backend-mono:latest
|
||||
restart: always
|
||||
ports:
|
||||
expose:
|
||||
- 52345
|
||||
environment:
|
||||
- UPTIME_APP_API_BASE_URL=${UPTIME_APP_API_BASE_URL}
|
||||
|
||||
@@ -15,7 +15,7 @@ services:
|
||||
- CHEVERETO_HTTPS=0
|
||||
- CHEVERETO_MAX_POST_SIZE=2G
|
||||
- CHEVERETO_MAX_UPLOAD_SIZE=2G
|
||||
ports:
|
||||
expose:
|
||||
- 80
|
||||
volumes:
|
||||
- storage:/var/www/html/images/
|
||||
@@ -35,4 +35,4 @@ services:
|
||||
|
||||
volumes:
|
||||
storage:
|
||||
mysql:
|
||||
mysql:
|
||||
|
||||
@@ -10,10 +10,10 @@
|
||||
"docs": "https://v4-docs.chevereto.com/"
|
||||
},
|
||||
"tags": [
|
||||
"Image Hosting",
|
||||
"File Management",
|
||||
"Open Source",
|
||||
"Multi-User",
|
||||
"Private Albums"
|
||||
"image-hosting",
|
||||
"file-management",
|
||||
"open-source",
|
||||
"multi-user",
|
||||
"private-albums"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"docs": "https://chibisafe.app/docs/intro"
|
||||
},
|
||||
"tags": [
|
||||
"media system",
|
||||
"media-system",
|
||||
"storage",
|
||||
"file-sharing"
|
||||
]
|
||||
|
||||
@@ -8,7 +8,7 @@ services:
|
||||
- SECRET_KEY=${SECRET_KEY}
|
||||
- DATABASE_URL=postgres://postgres:${DB_PASSWORD}@db:5432/chiefonboarding
|
||||
- ALLOWED_HOSTS=${DOMAIN}
|
||||
ports:
|
||||
expose:
|
||||
- 8000
|
||||
depends_on:
|
||||
- db
|
||||
@@ -23,4 +23,4 @@ services:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
postgres_data:
|
||||
|
||||
@@ -10,10 +10,10 @@
|
||||
"docs": "https://docs.chiefonboarding.com/"
|
||||
},
|
||||
"tags": [
|
||||
"Employee Onboarding",
|
||||
"HR Management",
|
||||
"Task Tracking",
|
||||
"Role-Based Access",
|
||||
"Document Management"
|
||||
"employee-onboarding",
|
||||
"hr-management",
|
||||
"task-tracking",
|
||||
"role-based-access",
|
||||
"document-management"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ services:
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ../files/chirpstack:/etc/chirpstack
|
||||
ports:
|
||||
expose:
|
||||
- 8080
|
||||
environment:
|
||||
- MQTT_BROKER_HOST=mosquitto
|
||||
@@ -21,7 +21,7 @@ services:
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ../files/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge
|
||||
ports:
|
||||
expose:
|
||||
- 1700/udp
|
||||
environment:
|
||||
- INTEGRATION__MQTT__EVENT_TOPIC_TEMPLATE=eu868/gateway/{{ .GatewayID }}/event/{{ .EventType }}
|
||||
@@ -36,7 +36,7 @@ services:
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ../files/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge
|
||||
ports:
|
||||
expose:
|
||||
- 3001
|
||||
depends_on:
|
||||
- mosquitto
|
||||
@@ -45,7 +45,7 @@ services:
|
||||
image: chirpstack/chirpstack-rest-api:4
|
||||
restart: unless-stopped
|
||||
command: --server chirpstack:8080 --bind 0.0.0.0:8090 --insecure
|
||||
ports:
|
||||
expose:
|
||||
- 8090
|
||||
depends_on:
|
||||
- chirpstack
|
||||
@@ -73,9 +73,8 @@ services:
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ../files/mosquitto/config/:/mosquitto/config/
|
||||
ports:
|
||||
expose:
|
||||
- 1883
|
||||
|
||||
volumes:
|
||||
postgresqldata:
|
||||
redisdata:
|
||||
|
||||
@@ -3,7 +3,7 @@ version: "3"
|
||||
services:
|
||||
chromium:
|
||||
image: lscr.io/linuxserver/chromium:5f5dd27e-ls102
|
||||
ports:
|
||||
expose:
|
||||
- "3000"
|
||||
environment:
|
||||
- PUID=1000
|
||||
@@ -13,4 +13,4 @@ services:
|
||||
- config:/config
|
||||
|
||||
volumes:
|
||||
config:
|
||||
config:
|
||||
|
||||
@@ -3,7 +3,7 @@ version: "3"
|
||||
services:
|
||||
classicpress:
|
||||
image: classicpress/classicpress:php8.3-apache
|
||||
ports:
|
||||
expose:
|
||||
- "80"
|
||||
environment:
|
||||
- WORDPRESS_DB_HOST=db
|
||||
@@ -27,4 +27,4 @@ services:
|
||||
|
||||
volumes:
|
||||
wordpress-data:
|
||||
db-data:
|
||||
db-data:
|
||||
|
||||
@@ -3,7 +3,7 @@ version: "3"
|
||||
services:
|
||||
cloud9:
|
||||
image: lscr.io/linuxserver/cloud9:1.29.2
|
||||
ports:
|
||||
expose:
|
||||
- "8000"
|
||||
environment:
|
||||
- PUID=1000
|
||||
@@ -17,4 +17,4 @@ services:
|
||||
- code:/code
|
||||
|
||||
volumes:
|
||||
code:
|
||||
code:
|
||||
|
||||
@@ -3,7 +3,7 @@ version: "3"
|
||||
services:
|
||||
cloudcmd:
|
||||
image: coderaiser/cloudcmd:18.5.1
|
||||
ports:
|
||||
expose:
|
||||
- "80"
|
||||
environment:
|
||||
- CLOUDCMD_ROOT=/mnt/fs
|
||||
@@ -12,4 +12,4 @@ services:
|
||||
- CLOUDCMD_PASSWORD=${PASSWORD}
|
||||
volumes:
|
||||
- /root:/root
|
||||
- /:/mnt/fs
|
||||
- /:/mnt/fs
|
||||
|
||||
@@ -3,7 +3,7 @@ version: "3"
|
||||
services:
|
||||
cockpit:
|
||||
image: cockpithq/cockpit:core-2.11.0
|
||||
ports:
|
||||
expose:
|
||||
- "80"
|
||||
environment:
|
||||
- COCKPIT_SESSION_NAME=cockpit
|
||||
@@ -11,8 +11,8 @@ services:
|
||||
- COCKPIT_DATABASE_SERVER=mongodb://${MONGO_USERNAME}:${MONGO_PASSWORD}@mongo:27017
|
||||
- COCKPIT_DATABASE_NAME=cockpit
|
||||
volumes:
|
||||
- html:/var/www/html
|
||||
- data:/var/www/html/storage/data
|
||||
- config:/var/www/html/config
|
||||
- storage:/var/www/html/storage
|
||||
depends_on:
|
||||
- mongo
|
||||
|
||||
@@ -25,6 +25,6 @@ services:
|
||||
- mongo-data:/data/db
|
||||
|
||||
volumes:
|
||||
html:
|
||||
data:
|
||||
mongo-data:
|
||||
config:
|
||||
storage:
|
||||
mongo-data:
|
||||
|
||||
@@ -3,7 +3,7 @@ version: "3"
|
||||
services:
|
||||
codex:
|
||||
image: ghcr.io/codex-team/codex.docs:v2.2
|
||||
ports:
|
||||
expose:
|
||||
- "3000"
|
||||
environment:
|
||||
- APP_CONFIG_database_driver=mongodb
|
||||
@@ -28,4 +28,4 @@ services:
|
||||
volumes:
|
||||
uploads:
|
||||
db:
|
||||
mongo-data:
|
||||
mongo-data:
|
||||
|
||||
@@ -3,10 +3,10 @@ version: "3"
|
||||
services:
|
||||
collabora:
|
||||
image: collabora/code:latest
|
||||
ports:
|
||||
expose:
|
||||
- "9980"
|
||||
environment:
|
||||
- domain=${DOMAIN}
|
||||
- username=${USERNAME}
|
||||
- password=${PASSWORD}
|
||||
- extra_params=--o:ssl.enable=false
|
||||
- extra_params=--o:ssl.enable=false
|
||||
|
||||
@@ -5,5 +5,5 @@ services:
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ../files/commafeed-data:/commafeed/data
|
||||
ports:
|
||||
expose:
|
||||
- 8082
|
||||
|
||||
@@ -3,7 +3,7 @@ version: "3"
|
||||
services:
|
||||
commento:
|
||||
image: registry.gitlab.com/commento/commento:v1.8.0
|
||||
ports:
|
||||
expose:
|
||||
- "8080"
|
||||
environment:
|
||||
- COMMENTO_ORIGIN=${COMMENTO_ORIGIN}
|
||||
@@ -19,4 +19,4 @@ services:
|
||||
- postgres-data:/var/lib/postgresql/data
|
||||
|
||||
volumes:
|
||||
postgres-data:
|
||||
postgres-data:
|
||||
|
||||
@@ -3,7 +3,7 @@ version: "3"
|
||||
services:
|
||||
commentoplusplus:
|
||||
image: caroga/commentoplusplus:v1.8.7
|
||||
ports:
|
||||
expose:
|
||||
- "8080"
|
||||
environment:
|
||||
- COMMENTO_ORIGIN=${COMMENTO_ORIGIN}
|
||||
@@ -22,4 +22,4 @@ services:
|
||||
- postgres-data:/var/lib/postgresql/data
|
||||
|
||||
volumes:
|
||||
postgres-data:
|
||||
postgres-data:
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
<svg
|
||||
version="1.1"
|
||||
id="Layer_1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
x="0px"
|
||||
y="0px"
|
||||
width="100%"
|
||||
viewBox="0 0 864 864"
|
||||
enableBackground="new 0 0 864 864"
|
||||
xmlSpace="preserve"
|
||||
>
|
||||
<path
|
||||
fill="#EC008C"
|
||||
opacity="1.000000"
|
||||
stroke="none"
|
||||
d="M0.999997,649.000000 C1.000000,433.052795 1.000000,217.105591 1.000000,1.079198 C288.876801,1.079198 576.753601,1.079198 865.000000,1.079198 C865.000000,73.025414 865.000000,145.051453 864.634888,217.500671 C852.362488,223.837280 840.447632,229.735275 828.549438,235.666794 C782.143677,258.801056 735.743225,281.945923 688.998657,304.980469 C688.122009,304.476532 687.580750,304.087708 687.053894,303.680206 C639.556946,266.944733 573.006775,291.446869 560.804199,350.179443 C560.141357,353.369446 559.717590,356.609131 559.195374,359.748962 C474.522705,359.748962 390.283478,359.748962 306.088135,359.748962 C298.804138,318.894806 265.253357,295.206024 231.834442,293.306793 C201.003021,291.554596 169.912033,310.230042 156.935104,338.792725 C149.905151,354.265930 147.884064,370.379944 151.151794,387.034515 C155.204453,407.689667 166.300507,423.954224 183.344437,436.516663 C181.938263,437.607025 180.887405,438.409576 179.849426,439.228516 C147.141953,465.032562 139.918045,510.888947 163.388611,545.322632 C167.274551,551.023804 172.285187,555.958313 176.587341,561.495728 C125.846893,587.012817 75.302292,612.295532 24.735992,637.534790 C16.874903,641.458496 8.914484,645.183228 0.999997,649.000000 z"
|
||||
/>
|
||||
<path
|
||||
fill="#000000"
|
||||
opacity="1.000000"
|
||||
stroke="none"
|
||||
d="M689.340759,305.086823 C735.743225,281.945923 782.143677,258.801056 828.549438,235.666794 C840.447632,229.735275 852.362488,223.837280 864.634888,217.961929 C865.000000,433.613190 865.000000,649.226379 865.000000,864.919800 C577.000000,864.919800 289.000000,864.919800 1.000000,864.919800 C1.000000,793.225708 1.000000,721.576721 0.999997,649.463867 C8.914484,645.183228 16.874903,641.458496 24.735992,637.534790 C75.302292,612.295532 125.846893,587.012817 176.939667,561.513062 C178.543060,562.085083 179.606812,562.886414 180.667526,563.691833 C225.656799,597.853394 291.232574,574.487244 304.462524,519.579773 C304.989105,517.394409 305.501068,515.205505 305.984619,513.166748 C391.466370,513.166748 476.422729,513.166748 561.331177,513.166748 C573.857727,555.764343 608.978149,572.880920 638.519897,572.672791 C671.048340,572.443665 700.623230,551.730408 711.658752,520.910583 C722.546875,490.502106 715.037842,453.265564 682.776733,429.447052 C683.966064,428.506866 685.119507,427.602356 686.265320,426.688232 C712.934143,405.412262 723.011475,370.684631 711.897339,338.686676 C707.312805,325.487671 699.185303,314.725128 689.340759,305.086823 z"
|
||||
/>
|
||||
<path
|
||||
fill="#FEFBFC"
|
||||
opacity="1.000000"
|
||||
stroke="none"
|
||||
d="M688.998657,304.980469 C699.185303,314.725128 707.312805,325.487671 711.897339,338.686676 C723.011475,370.684631 712.934143,405.412262 686.265320,426.688232 C685.119507,427.602356 683.966064,428.506866 682.776733,429.447052 C715.037842,453.265564 722.546875,490.502106 711.658752,520.910583 C700.623230,551.730408 671.048340,572.443665 638.519897,572.672791 C608.978149,572.880920 573.857727,555.764343 561.331177,513.166748 C476.422729,513.166748 391.466370,513.166748 305.984619,513.166748 C305.501068,515.205505 304.989105,517.394409 304.462524,519.579773 C291.232574,574.487244 225.656799,597.853394 180.667526,563.691833 C179.606812,562.886414 178.543060,562.085083 177.128418,561.264465 C172.285187,555.958313 167.274551,551.023804 163.388611,545.322632 C139.918045,510.888947 147.141953,465.032562 179.849426,439.228516 C180.887405,438.409576 181.938263,437.607025 183.344437,436.516663 C166.300507,423.954224 155.204453,407.689667 151.151794,387.034515 C147.884064,370.379944 149.905151,354.265930 156.935104,338.792725 C169.912033,310.230042 201.003021,291.554596 231.834442,293.306793 C265.253357,295.206024 298.804138,318.894806 306.088135,359.748962 C390.283478,359.748962 474.522705,359.748962 559.195374,359.748962 C559.717590,356.609131 560.141357,353.369446 560.804199,350.179443 C573.006775,291.446869 639.556946,266.944733 687.053894,303.680206 C687.580750,304.087708 688.122009,304.476532 688.998657,304.980469 M703.311279,484.370789 C698.954468,457.053253 681.951416,440.229645 656.413696,429.482330 C673.953552,421.977875 688.014709,412.074219 696.456482,395.642365 C704.862061,379.280853 706.487793,362.316345 700.947998,344.809204 C691.688965,315.548492 664.183716,296.954437 633.103516,298.838257 C618.467957,299.725372 605.538086,305.139557 594.588501,314.780121 C577.473999,329.848511 570.185486,349.121399 571.838501,371.750854 C479.166595,371.750854 387.082886,371.750854 294.582672,371.750854 C293.993011,354.662048 288.485260,339.622314 276.940491,327.118439 C265.392609,314.611176 251.082092,307.205322 234.093262,305.960541 C203.355347,303.708374 176.337585,320.898438 166.089890,348.816620 C159.557541,366.613007 160.527206,384.117401 168.756042,401.172516 C177.054779,418.372589 191.471954,428.832886 207.526581,435.632172 C198.407059,442.272583 188.815598,448.302246 180.383728,455.660675 C171.685028,463.251984 166.849655,473.658661 163.940216,484.838684 C161.021744,496.053375 161.212982,507.259705 164.178833,518.426208 C171.577927,546.284302 197.338104,566.588867 226.001465,567.336853 C240.828415,567.723816 254.357819,563.819092 266.385468,555.199646 C284.811554,541.994751 293.631104,523.530579 294.687347,501.238312 C387.354828,501.238312 479.461304,501.238312 571.531799,501.238312 C577.616638,543.189026 615.312866,566.342102 651.310059,559.044739 C684.973938,552.220398 708.263306,519.393127 703.311279,484.370789 z"
|
||||
/>
|
||||
<path
|
||||
fill="#EC008C"
|
||||
opacity="1.000000"
|
||||
stroke="none"
|
||||
d="M703.401855,484.804718 C708.263306,519.393127 684.973938,552.220398 651.310059,559.044739 C615.312866,566.342102 577.616638,543.189026 571.531799,501.238312 C479.461304,501.238312 387.354828,501.238312 294.687347,501.238312 C293.631104,523.530579 284.811554,541.994751 266.385468,555.199646 C254.357819,563.819092 240.828415,567.723816 226.001465,567.336853 C197.338104,566.588867 171.577927,546.284302 164.178833,518.426208 C161.212982,507.259705 161.021744,496.053375 163.940216,484.838684 C166.849655,473.658661 171.685028,463.251984 180.383728,455.660675 C188.815598,448.302246 198.407059,442.272583 207.526581,435.632172 C191.471954,428.832886 177.054779,418.372589 168.756042,401.172516 C160.527206,384.117401 159.557541,366.613007 166.089890,348.816620 C176.337585,320.898438 203.355347,303.708374 234.093262,305.960541 C251.082092,307.205322 265.392609,314.611176 276.940491,327.118439 C288.485260,339.622314 293.993011,354.662048 294.582672,371.750854 C387.082886,371.750854 479.166595,371.750854 571.838501,371.750854 C570.185486,349.121399 577.473999,329.848511 594.588501,314.780121 C605.538086,305.139557 618.467957,299.725372 633.103516,298.838257 C664.183716,296.954437 691.688965,315.548492 700.947998,344.809204 C706.487793,362.316345 704.862061,379.280853 696.456482,395.642365 C688.014709,412.074219 673.953552,421.977875 656.413696,429.482330 C681.951416,440.229645 698.954468,457.053253 703.401855,484.804718 z"
|
||||
/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 7.0 KiB |
@@ -1,48 +0,0 @@
|
||||
# conduwuit
|
||||
# https://conduwuit.puppyirl.gay/deploying/docker-compose.yml
|
||||
|
||||
services:
|
||||
homeserver:
|
||||
image: girlbossceo/conduwuit:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 8448:6167
|
||||
volumes:
|
||||
- db:/var/lib/conduwuit
|
||||
#- ./conduwuit.toml:/etc/conduwuit.toml
|
||||
environment:
|
||||
# Edit this in your Dokploy Environment
|
||||
CONDUWUIT_SERVER_NAME: ${CONDUWUIT_SERVER_NAME}
|
||||
|
||||
CONDUWUIT_DATABASE_PATH: /var/lib/conduwuit
|
||||
CONDUWUIT_PORT: 6167
|
||||
CONDUWUIT_MAX_REQUEST_SIZE: 20000000 # in bytes, ~20 MB
|
||||
|
||||
CONDUWUIT_ALLOW_REGISTRATION: 'true'
|
||||
CONDUWUIT_REGISTRATION_TOKEN: ${CONDUWUIT_REGISTRATION_TOKEN}
|
||||
|
||||
CONDUWUIT_ALLOW_FEDERATION: 'true'
|
||||
CONDUWUIT_ALLOW_CHECK_FOR_UPDATES: 'true'
|
||||
CONDUWUIT_TRUSTED_SERVERS: '["matrix.org"]'
|
||||
#CONDUWUIT_LOG: warn,state_res=warn
|
||||
CONDUWUIT_ADDRESS: 0.0.0.0
|
||||
|
||||
# Uncomment if you mapped config toml in volumes
|
||||
#CONDUWUIT_CONFIG: '/etc/conduwuit.toml'
|
||||
|
||||
### Uncomment if you want to use your own Element-Web App.
|
||||
### Note: You need to provide a config.json for Element and you also need a second
|
||||
### Domain or Subdomain for the communication between Element and conduwuit
|
||||
### Config-Docs: https://github.com/vector-im/element-web/blob/develop/docs/config.md
|
||||
# element-web:
|
||||
# image: vectorim/element-web:latest
|
||||
# restart: unless-stopped
|
||||
# ports:
|
||||
# - 8009:80
|
||||
# volumes:
|
||||
# - ./element_config.json:/app/config.json
|
||||
# depends_on:
|
||||
# - homeserver
|
||||
|
||||
volumes:
|
||||
db:
|
||||
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"id": "conduwuit",
|
||||
"name": "Conduwuit",
|
||||
"version": "latest",
|
||||
"description": "Well-maintained, featureful Matrix chat homeserver (fork of Conduit)",
|
||||
"logo": "conduwuit.svg",
|
||||
"links": {
|
||||
"github": "https://github.com/girlbossceo/conduwuit",
|
||||
"website": "https://conduwuit.puppyirl.gay",
|
||||
"docs": "https://conduwuit.puppyirl.gay/configuration.html"
|
||||
},
|
||||
"tags": [
|
||||
"backend",
|
||||
"chat",
|
||||
"communication",
|
||||
"matrix",
|
||||
"server"
|
||||
]
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
registration_token = "${password:20}"
|
||||
|
||||
[config]
|
||||
env = [
|
||||
"CONDUWUIT_SERVER_NAME=${main_domain}",
|
||||
"CONDUWUIT_REGISTRATION_TOKEN=${registration_token}",
|
||||
]
|
||||
mounts = []
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "homeserver"
|
||||
port = 6_167
|
||||
host = "${main_domain}"
|
||||
@@ -3,7 +3,7 @@ version: "3"
|
||||
services:
|
||||
confluence:
|
||||
image: atlassian/confluence-server:8.6-ubuntu-jdk17
|
||||
ports:
|
||||
expose:
|
||||
- "8090"
|
||||
volumes:
|
||||
- confluence-data:/var/atlassian/application-data/confluence
|
||||
@@ -15,4 +15,4 @@ services:
|
||||
- CATALINA_CONNECTOR_SECURE=true
|
||||
|
||||
volumes:
|
||||
confluence-data:
|
||||
confluence-data:
|
||||
|
||||
@@ -3,7 +3,7 @@ services:
|
||||
convertx:
|
||||
image: ghcr.io/c4illin/convertx
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
expose:
|
||||
- 3000
|
||||
environment:
|
||||
- JWT_SECRET=${JWT_SECRET}
|
||||
|
||||
@@ -3,7 +3,7 @@ version: "3"
|
||||
services:
|
||||
coral:
|
||||
image: coralproject/talk:9.7.0
|
||||
ports:
|
||||
expose:
|
||||
- "3000"
|
||||
environment:
|
||||
- MONGODB_URI=${MONGODB_URI}
|
||||
@@ -30,4 +30,4 @@ services:
|
||||
|
||||
volumes:
|
||||
mongo-data:
|
||||
redis-data:
|
||||
redis-data:
|
||||
|
||||
@@ -3,7 +3,7 @@ version: '3.8'
|
||||
services:
|
||||
couchdb:
|
||||
image: couchdb:latest
|
||||
ports:
|
||||
expose:
|
||||
- '5984'
|
||||
volumes:
|
||||
- couchdb-data:/opt/couchdb/data
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user