mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
Add: Linkstack
This commit is contained in:
105
apps/dokploy/public/templates/linkstack.svg
Normal file
105
apps/dokploy/public/templates/linkstack.svg
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 238.86 216.13"><script xmlns="" id="__gaOptOutExtension"/>
|
||||||
|
<defs>
|
||||||
|
<style>
|
||||||
|
.cls-1 {
|
||||||
|
fill: url(#linear-gradient-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-2 {
|
||||||
|
fill: url(#linear-gradient-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-3 {
|
||||||
|
mix-blend-mode: hard-light;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-4 {
|
||||||
|
isolation: isolate;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-5 {
|
||||||
|
opacity: .86;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-6 {
|
||||||
|
fill: #fff;
|
||||||
|
opacity: .68;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-7 {
|
||||||
|
fill: url(#linear-gradient-5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-8 {
|
||||||
|
fill: url(#linear-gradient);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-3 {
|
||||||
|
fill: url(#linear-gradient-4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-5, .cls-2, .cls-3 {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-3 {
|
||||||
|
animation: slideInDown 1s ease forwards;
|
||||||
|
animation-delay: 0s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-2 {
|
||||||
|
animation: slideInDown 1s ease forwards;
|
||||||
|
animation-delay: 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-5 {
|
||||||
|
animation: slideInDown 1s ease forwards;
|
||||||
|
animation-delay: 1s;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes slideInDown {
|
||||||
|
0% {
|
||||||
|
transform: translateY(-100%);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: translateY(0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<linearGradient id="linear-gradient" x1="175.51" y1="30.59" x2="64.11" y2="184.49" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#340b4e"/>
|
||||||
|
<stop offset="1" stop-color="#06051c"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="linear-gradient-2" x1="0" y1="108.06" x2="238.86" y2="108.06" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#ee17fe"/>
|
||||||
|
<stop offset="1" stop-color="#19d0e0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="linear-gradient-3" x1="55.86" y1="107.93" x2="183" y2="107.93" xlink:href="#linear-gradient-2"/>
|
||||||
|
<linearGradient id="linear-gradient-4" x1="55.86" y1="133.28" x2="183" y2="133.28" xlink:href="#linear-gradient-2"/>
|
||||||
|
<linearGradient id="linear-gradient-5" x1="119.43" y1="54.36" x2="119.43" y2="107.06" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#fff"/>
|
||||||
|
<stop offset="1" stop-color="#ee17fe"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g class="cls-4">
|
||||||
|
<g id="Ebene_1" data-name="Ebene 1">
|
||||||
|
<g>
|
||||||
|
<path class="cls-8" d="m151.05,197.42h-63.24c-12.36,0-23.78-6.59-29.96-17.3l-31.62-54.76c-6.18-10.7-6.18-23.89,0-34.59l31.62-54.76c6.18-10.7,17.6-17.3,29.96-17.3h63.24c12.36,0,23.78,6.59,29.96,17.3l31.62,54.76c6.18,10.7,6.18,23.89,0,34.59l-31.62,54.76c-6.18,10.7-17.6,17.3-29.96,17.3Z"/>
|
||||||
|
<path class="cls-1" d="m161.85,0h-84.84c-12.36,0-23.78,6.59-29.96,17.3L4.63,90.76c-6.18,10.7-6.18,23.89,0,34.59l42.42,73.47c6.18,10.7,17.6,17.3,29.96,17.3h84.84c12.36,0,23.78-6.59,29.96-17.3l42.42-73.47c6.18-10.7,6.18-23.89,0-34.59l-42.42-73.47c-6.18-10.7-17.6-17.3-29.96-17.3Zm-10.8,197.42h-63.24c-12.36,0-23.78-6.59-29.96-17.3l-31.62-54.76c-6.18-10.7-6.18-23.89,0-34.59l31.62-54.76c6.18-10.7,17.6-17.3,29.96-17.3h63.24c12.36,0,23.78,6.59,29.96,17.3l31.62,54.76c6.18,10.7,6.18,23.89,0,34.59l-31.62,54.76c-6.18,10.7-17.6,17.3-29.96,17.3Z"/>
|
||||||
|
<g>
|
||||||
|
<path class="cls-2" d="m182.13,106.91l-61.4-27.2c-.77-.34-1.84-.34-2.61,0l-61.4,27.2c-.55.24-.87.62-.87,1.03s.32.78.87,1.03l61.4,27.2c.77.34,1.84.34,2.61,0l61.4-27.2c.55-.24.87-.62.87-1.03s-.32-.78-.87-1.03Z"/>
|
||||||
|
<path class="cls-3" d="m182.13,132.25l-61.4-27.2c-.77-.34-1.84-.34-2.61,0l-61.4,27.2c-.55.24-.87.62-.87,1.03s.32.78.87,1.03l61.4,27.2c.77.34,1.84.34,2.61,0l61.4-27.2c.55-.24.87-.62.87-1.03s-.32-.78-.87-1.03Z"/>
|
||||||
|
<g class="cls-5">
|
||||||
|
<path class="cls-7" d="m182.13,81.57l-61.4-27.2c-.77-.34-1.84-.34-2.61,0l-61.4,27.2c-.55.24-.87.62-.87,1.03s.32.78.87,1.03l61.4,27.2c.77.34,1.84.34,2.61,0l61.4-27.2c.55-.24.87-.62.87-1.03s-.32-.78-.87-1.03Z"/>
|
||||||
|
<path class="cls-6" d="m182.13,81.57l-61.4-27.2c-.77-.34-1.84-.34-2.61,0l-61.4,27.2c-.55.24-.87.62-.87,1.03s.32.78.87,1.03l61.4,27.2c.77.34,1.84.34,2.61,0l61.4-27.2c.55-.24.87-.62.87-1.03s-.32-.78-.87-1.03Z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.0 KiB |
51
apps/dokploy/templates/linkstack/docker-compose.yml
Normal file
51
apps/dokploy/templates/linkstack/docker-compose.yml
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
linkstack:
|
||||||
|
image: linkstackorg/linkstack:latest
|
||||||
|
networks:
|
||||||
|
- dokploy-network
|
||||||
|
volumes:
|
||||||
|
- linkstack_data:/htdocs
|
||||||
|
environment:
|
||||||
|
- TZ=UTC
|
||||||
|
- SERVER_ADMIN=admin@${LINKSTACK_HOST}
|
||||||
|
- HTTP_SERVER_NAME=${LINKSTACK_HOST}
|
||||||
|
- HTTPS_SERVER_NAME=${LINKSTACK_HOST}
|
||||||
|
- LOG_LEVEL=info
|
||||||
|
- PHP_MEMORY_LIMIT=256M
|
||||||
|
- UPLOAD_MAX_FILESIZE=8M
|
||||||
|
- DB_CONNECTION=mysql
|
||||||
|
- DB_HOST=mysql
|
||||||
|
- DB_PORT=3306
|
||||||
|
- DB_DATABASE=${MYSQL_DATABASE}
|
||||||
|
- DB_USERNAME=${MYSQL_USER}
|
||||||
|
- DB_PASSWORD=${MYSQL_PASSWORD}
|
||||||
|
- FORCE_HTTPS=true
|
||||||
|
- APP_URL=https://${LINKSTACK_HOST}
|
||||||
|
depends_on:
|
||||||
|
mysql:
|
||||||
|
condition: service_healthy
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
mysql:
|
||||||
|
image: mysql:8
|
||||||
|
networks:
|
||||||
|
- dokploy-network
|
||||||
|
volumes:
|
||||||
|
- mysql_data:/var/lib/mysql
|
||||||
|
environment:
|
||||||
|
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
|
||||||
|
- MYSQL_DATABASE=${MYSQL_DATABASE}
|
||||||
|
- MYSQL_USER=${MYSQL_USER}
|
||||||
|
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u${MYSQL_USER}", "-p${MYSQL_PASSWORD}"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
linkstack_data:
|
||||||
|
mysql_data:
|
||||||
36
apps/dokploy/templates/linkstack/index.ts
Normal file
36
apps/dokploy/templates/linkstack/index.ts
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import {
|
||||||
|
type DomainSchema,
|
||||||
|
type Schema,
|
||||||
|
type Template,
|
||||||
|
generatePassword,
|
||||||
|
generateRandomDomain,
|
||||||
|
} from "../utils";
|
||||||
|
|
||||||
|
export function generate(schema: Schema): Template {
|
||||||
|
const mainDomain = generateRandomDomain(schema);
|
||||||
|
const mysqlRootPassword = generatePassword();
|
||||||
|
const mysqlPassword = generatePassword();
|
||||||
|
const mysqlUser = "linkstack";
|
||||||
|
const mysqlDatabase = "linkstack";
|
||||||
|
|
||||||
|
const domains: DomainSchema[] = [
|
||||||
|
{
|
||||||
|
host: mainDomain,
|
||||||
|
port: 443,
|
||||||
|
serviceName: "linkstack",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const envs = [
|
||||||
|
`LINKSTACK_HOST=${mainDomain}`,
|
||||||
|
`MYSQL_ROOT_PASSWORD=${mysqlRootPassword}`,
|
||||||
|
`MYSQL_DATABASE=${mysqlDatabase}`,
|
||||||
|
`MYSQL_USER=${mysqlUser}`,
|
||||||
|
`MYSQL_PASSWORD=${mysqlPassword}`,
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
domains,
|
||||||
|
envs,
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -786,4 +786,18 @@ export const templates: TemplateData[] = [
|
|||||||
tags: ["bookmarks", "link-shortener", "self-hosted"],
|
tags: ["bookmarks", "link-shortener", "self-hosted"],
|
||||||
load: () => import("./slash/index").then((m) => m.generate),
|
load: () => import("./slash/index").then((m) => m.generate),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: "linkstack",
|
||||||
|
name: "LinkStack",
|
||||||
|
version: "latest",
|
||||||
|
description: "LinkStack is a highly customizable link sharing platform with an intuitive, easy to use user interface.",
|
||||||
|
logo: "linkstack.svg",
|
||||||
|
links: {
|
||||||
|
github: "https://github.com/LinkStackOrg/LinkStack",
|
||||||
|
website: "https://linkstack.org/",
|
||||||
|
docs: "https://docs.linkstack.org/",
|
||||||
|
},
|
||||||
|
tags: ["links", "sharing", "social"],
|
||||||
|
load: () => import("./linkstack/index").then((m) => m.generate),
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user