mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
113 lines
2.2 KiB
TypeScript
113 lines
2.2 KiB
TypeScript
import type { WriteStream } from "node:fs";
|
|
import {
|
|
buildCustomDocker,
|
|
getDockerCommand,
|
|
} from "@dokploy/server/utils/builders/docker-file";
|
|
import type { ApplicationNested } from ".";
|
|
import { createFile, getCreateFileCommand } from "../docker/utils";
|
|
import { getBuildAppDirectory } from "../filesystem/directory";
|
|
|
|
const nginxSpaConfig = `
|
|
worker_processes 1;
|
|
|
|
events {
|
|
worker_connections 1024;
|
|
}
|
|
|
|
http {
|
|
include mime.types;
|
|
default_type application/octet-stream;
|
|
|
|
access_log /dev/stdout;
|
|
error_log /dev/stderr;
|
|
|
|
server {
|
|
listen 80;
|
|
location / {
|
|
root /usr/share/nginx/html;
|
|
index index.html index.htm;
|
|
try_files $uri $uri/ /index.html;
|
|
}
|
|
}
|
|
}
|
|
`;
|
|
|
|
export const buildStatic = async (
|
|
application: ApplicationNested,
|
|
writeStream: WriteStream,
|
|
) => {
|
|
const { publishDirectory, isStaticSpa } = application;
|
|
const buildAppDirectory = getBuildAppDirectory(application);
|
|
|
|
try {
|
|
if (isStaticSpa) {
|
|
createFile(buildAppDirectory, "nginx.conf", nginxSpaConfig);
|
|
}
|
|
|
|
createFile(
|
|
buildAppDirectory,
|
|
".dockerignore",
|
|
[".git", ".env", "Dockerfile", ".dockerignore"].join("\n"),
|
|
);
|
|
|
|
createFile(
|
|
buildAppDirectory,
|
|
"Dockerfile",
|
|
[
|
|
"FROM nginx:alpine",
|
|
"WORKDIR /usr/share/nginx/html/",
|
|
isStaticSpa ? "COPY nginx.conf /etc/nginx/nginx.conf" : "",
|
|
`COPY ${publishDirectory || "."} .`,
|
|
'CMD ["nginx", "-g", "daemon off;"]',
|
|
].join("\n"),
|
|
);
|
|
|
|
createFile(
|
|
buildAppDirectory,
|
|
".dockerignore",
|
|
[".git", ".env", "Dockerfile", ".dockerignore"].join("\n"),
|
|
);
|
|
|
|
await buildCustomDocker(
|
|
{
|
|
...application,
|
|
buildType: "dockerfile",
|
|
dockerfile: "Dockerfile",
|
|
},
|
|
writeStream,
|
|
);
|
|
|
|
return true;
|
|
} catch (e) {
|
|
throw e;
|
|
}
|
|
};
|
|
|
|
export const getStaticCommand = (
|
|
application: ApplicationNested,
|
|
logPath: string,
|
|
) => {
|
|
const { publishDirectory } = application;
|
|
const buildAppDirectory = getBuildAppDirectory(application);
|
|
|
|
let command = getCreateFileCommand(
|
|
buildAppDirectory,
|
|
"Dockerfile",
|
|
[
|
|
"FROM nginx:alpine",
|
|
"WORKDIR /usr/share/nginx/html/",
|
|
`COPY ${publishDirectory || "."} .`,
|
|
].join("\n"),
|
|
);
|
|
|
|
command += getDockerCommand(
|
|
{
|
|
...application,
|
|
buildType: "dockerfile",
|
|
dockerfile: "Dockerfile",
|
|
},
|
|
logPath,
|
|
);
|
|
return command;
|
|
};
|