feat: add update registry and fix the docker url markup

This commit is contained in:
Mauricio Siu
2024-05-14 03:09:07 -06:00
parent d19dec8010
commit 08517d6f36
11 changed files with 366 additions and 67 deletions

View File

@@ -89,12 +89,15 @@ export const mechanizeDockerContainer = async (
const registry = application.registry;
const image =
sourceType === "docker"
? dockerImage!
: registry
? `${registry.registryUrl}/${appName}`
: `${appName}:latest`;
let image = sourceType === "docker" ? dockerImage! : `${appName}:latest`;
if (registry) {
image = `${registry.registryUrl}/${appName}`;
if (registry.imagePrefix) {
image = `${registry.registryUrl}/${registry.imagePrefix}/${appName}`;
}
}
const settings: CreateServiceOptions = {
authconfig: {

View File

@@ -1,5 +1,4 @@
import type { ApplicationNested } from "../builders";
import { execAsync } from "../process/execAsync";
import { spawnAsync } from "../process/spawnAsync";
import type { WriteStream } from "node:fs";
@@ -13,25 +12,20 @@ export const uploadImage = async (
throw new Error("Registry not found");
}
const { registryUrl, imagePrefix } = registry;
const { registryUrl, imagePrefix, registryType } = registry;
const { appName } = application;
const imageName = `${appName}:latest`;
let finalURL = registryUrl;
const finalURL =
registryType === "selfHosted"
? process.env.NODE_ENV === "development"
? "localhost:5000"
: registryUrl
: registryUrl;
let registryTag = `${registryUrl}/${imageName}`;
if (imagePrefix) {
registryTag = `${registryUrl}/${imagePrefix}/${imageName}`;
}
// registry.digitalocean.com/<my-registry>/<my-image>
// index.docker.io/siumauricio/app-parse-multi-byte-port-e32uh7:latest
if (registry.registryType === "selfHosted") {
finalURL =
process.env.NODE_ENV === "development" ? "localhost:5000" : registryUrl;
registryTag = `${finalURL}/${imageName}`;
}
const registryTag = imagePrefix
? `${registryUrl}/${imagePrefix}/${imageName}`
: `${finalURL}/${imageName}`;
try {
console.log(finalURL, registryTag);

View File

@@ -1,18 +1,19 @@
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 { dump, load } from "js-yaml";
import { join } from "node:path";
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
import { existsSync, mkdirSync, readFileSync, 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 config: FileConfig = loadOrCreateConfig();
const serviceName = `${appName}-service`;
const routerName = `${appName}-router`;
@@ -40,12 +41,8 @@ export const removeSelfHostedRegistry = async () => {
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}\`)`,
rule: `Host(\`${registryUrl}\`)`,
service: "dokploy-registry-service",
...(process.env.NODE_ENV === "production"
? {
@@ -65,3 +62,15 @@ const createRegistryRouterConfig = async (registry: Registry) => {
return routerConfig;
};
const loadOrCreateConfig = (): FileConfig => {
const configPath = join(REGISTRY_PATH, "registry.yml");
if (existsSync(configPath)) {
const yamlStr = readFileSync(configPath, "utf8");
const parsedConfig = (load(yamlStr) as FileConfig) || {
http: { routers: {}, services: {} },
};
return parsedConfig;
}
return { http: { routers: {}, services: {} } };
};