feat: add docker registry upload

This commit is contained in:
Mauricio Siu
2024-05-13 01:18:27 -06:00
parent e9245cee2c
commit 6c792564ae
41 changed files with 18267 additions and 1072 deletions

View File

@@ -47,10 +47,7 @@ export const removeDomain = async (appName: string, uniqueKey: number) => {
}
};
export const createRouterConfig = async (
app: ApplicationNested,
domain: Domain,
) => {
const createRouterConfig = async (app: ApplicationNested, domain: Domain) => {
const { appName, redirects, security } = app;
const { certificateType } = domain;

View File

@@ -0,0 +1,67 @@
import { loadOrCreateConfig } from "./application";
import type { FileConfig, HttpRouter } from "./file-types";
import type { Registry } from "@/server/api/services/registry";
import { removeDirectoryIfExistsContent } from "../filesystem/directory";
import { REGISTRY_PATH } from "@/server/constants";
import { dump } from "js-yaml";
import { join } from "node:path";
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
export const manageRegistry = async (registry: Registry) => {
if (!existsSync(REGISTRY_PATH)) {
mkdirSync(REGISTRY_PATH, { recursive: true });
}
const appName = "dokploy-registry";
const config: FileConfig = loadOrCreateConfig(appName);
const serviceName = `${appName}-service`;
const routerName = `${appName}-router`;
config.http = config.http || { routers: {}, services: {} };
config.http.routers = config.http.routers || {};
config.http.services = config.http.services || {};
config.http.routers[routerName] = await createRegistryRouterConfig(registry);
config.http.services[serviceName] = {
loadBalancer: {
servers: [{ url: `http://${appName}:5000` }],
passHostHeader: true,
},
};
const yamlConfig = dump(config);
const configFile = join(REGISTRY_PATH, "registry.yml");
writeFileSync(configFile, yamlConfig);
};
export const removeSelfHostedRegistry = async () => {
await removeDirectoryIfExistsContent(REGISTRY_PATH);
};
const createRegistryRouterConfig = async (registry: Registry) => {
const { registryUrl } = registry;
const url =
process.env.NODE_ENV === "production"
? registryUrl
: "dokploy-registry.docker.localhost";
const routerConfig: HttpRouter = {
rule: `Host(\`${url}\`)`,
service: "dokploy-registry-service",
...(process.env.NODE_ENV === "production"
? {
middlewares: ["redirect-to-https"],
}
: {}),
entryPoints: [
"web",
...(process.env.NODE_ENV === "production" ? ["websecure"] : []),
],
...(process.env.NODE_ENV === "production"
? {
tls: { certResolver: "letsencrypt" },
}
: {}),
};
return routerConfig;
};