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"],
|
||||
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