mirror of https://github.com/Nofated095/Q2TG.git
feat: use nix to build docker image
This commit is contained in:
parent
b3381fffe6
commit
6db646f933
41
Dockerfile
41
Dockerfile
|
@ -1,41 +0,0 @@
|
||||||
FROM jrottenberg/ffmpeg:4.1-alpine AS ffmpeg
|
|
||||||
|
|
||||||
FROM ghcr.io/clansty/tgs-to-gif:latest AS tgs
|
|
||||||
|
|
||||||
FROM node:17-alpine AS deps
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
COPY package.json yarn.lock .yarnrc.yml ./
|
|
||||||
COPY .yarn/ ./.yarn/
|
|
||||||
|
|
||||||
RUN apk add --no-cache alpine-sdk python3 &&\
|
|
||||||
yarn install
|
|
||||||
|
|
||||||
RUN rm -rf ./.yarn/cache
|
|
||||||
|
|
||||||
FROM node:17-alpine AS build
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
COPY --from=deps /app/ /app/
|
|
||||||
|
|
||||||
COPY tsconfig.json ./
|
|
||||||
COPY src/ ./src/
|
|
||||||
|
|
||||||
RUN yarn build
|
|
||||||
|
|
||||||
FROM node:17-alpine
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
COPY --from=ffmpeg / /
|
|
||||||
COPY --from=tgs / /
|
|
||||||
COPY --from=deps /app/ /app/
|
|
||||||
COPY prisma/ ./prisma/
|
|
||||||
COPY assets/ ./assets/
|
|
||||||
COPY --from=build /app/build/ /app/build/
|
|
||||||
|
|
||||||
RUN yarn add prisma@4.6.0
|
|
||||||
|
|
||||||
CMD [ "yarn", "start" ]
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
{ pkgs, flakePkgs, nix2container, ... }:
|
||||||
|
nix2container.buildImage {
|
||||||
|
name = "q2tg";
|
||||||
|
maxLayers = 8;
|
||||||
|
# optimizations
|
||||||
|
layers = with pkgs;[
|
||||||
|
(nix2container.buildLayer { deps = [ bash ]; })
|
||||||
|
(nix2container.buildLayer { deps = [ nodejs ]; })
|
||||||
|
# deps of sharp
|
||||||
|
(nix2container.buildLayer {
|
||||||
|
deps = [
|
||||||
|
(vips.override {
|
||||||
|
libjxl = libjxl.overrideAttrs (attrs: {
|
||||||
|
doCheck = false;
|
||||||
|
});
|
||||||
|
}).dev
|
||||||
|
];
|
||||||
|
})
|
||||||
|
# deps of node-canvas
|
||||||
|
(nix2container.buildLayer { deps = [ pixman cairo.dev pango.dev giflib libjpeg.dev libpng.dev librsvg.dev ]; })
|
||||||
|
(nix2container.buildLayer { deps = [ ffmpeg ]; })
|
||||||
|
(nix2container.buildLayer { deps = with flakePkgs;[ prisma-patched prisma-engines tgs-to-gif ]; })
|
||||||
|
(nix2container.buildLayer { deps = with flakePkgs;[ fontsSf ]; })
|
||||||
|
];
|
||||||
|
config = {
|
||||||
|
Cmd = [
|
||||||
|
(
|
||||||
|
pkgs.writeScript "start" ''
|
||||||
|
#!${pkgs.bash}/bin/bash
|
||||||
|
${pkgs.coreutils}/bin/mkdir -p /tmp /root/.cache
|
||||||
|
${flakePkgs.prisma-patched}/bin/prisma db push --accept-data-loss --skip-generate --schema ${flakePkgs.default}/libexec/q2tg/node_modules/.prisma/client/schema.prisma
|
||||||
|
${flakePkgs.default}/bin/q2tg
|
||||||
|
''
|
||||||
|
)
|
||||||
|
];
|
||||||
|
Env = [
|
||||||
|
"DATA_DIR=/app/data"
|
||||||
|
"PRISMA_MIGRATION_ENGINE_BINARY=${pkgs.prisma-engines}/bin/migration-engine"
|
||||||
|
"PRISMA_QUERY_ENGINE_BINARY=${pkgs.prisma-engines}/bin/query-engine"
|
||||||
|
"PRISMA_QUERY_ENGINE_LIBRARY=${pkgs.prisma-engines}/lib/libquery_engine.node"
|
||||||
|
"PRISMA_INTROSPECTION_ENGINE_BINARY=${pkgs.prisma-engines}/bin/introspection-engine"
|
||||||
|
"PRISMA_FMT_BINARY=${pkgs.prisma-engines}/bin/prisma-fmt"
|
||||||
|
"TGS_TO_GIF=${flakePkgs.tgs-to-gif}/bin/tgs-to-gif"
|
||||||
|
"FFMPEG_PATH=${pkgs.ffmpeg}/bin/ffmpeg"
|
||||||
|
"FFPROBE_PATH=${pkgs.ffmpeg}/bin/ffprobe"
|
||||||
|
"QUOTLY_FONTS=${flakePkgs.fontsSf}"
|
||||||
|
];
|
||||||
|
Volumes = {
|
||||||
|
"/app/data" = { };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
52
flake.lock
52
flake.lock
|
@ -15,7 +15,56 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"flake-utils_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1653893745,
|
||||||
|
"narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nix2container": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils_2",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1671269339,
|
||||||
|
"narHash": "sha256-KR2SXh4c2Y+bgbCfXjTGJ74O9/u4CAPFA0KYZHhKf5Q=",
|
||||||
|
"owner": "nlewo",
|
||||||
|
"repo": "nix2container",
|
||||||
|
"rev": "6800fff45afecc7e47c334d14cf2b2f4f25601a0",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nlewo",
|
||||||
|
"repo": "nix2container",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1654807842,
|
||||||
|
"narHash": "sha256-ADymZpr6LuTEBXcy6RtFHcUZdjKTBRTMYwu19WOx17E=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "fc909087cc3386955f21b4665731dbdaceefb1d8",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1671752829,
|
"lastModified": 1671752829,
|
||||||
"narHash": "sha256-oFeJzAq0iRL6md9Si8Tx9bltjwjLmldvgUmAteMhYW4=",
|
"narHash": "sha256-oFeJzAq0iRL6md9Si8Tx9bltjwjLmldvgUmAteMhYW4=",
|
||||||
|
@ -34,7 +83,8 @@
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-utils": "flake-utils",
|
"flake-utils": "flake-utils",
|
||||||
"nixpkgs": "nixpkgs"
|
"nix2container": "nix2container",
|
||||||
|
"nixpkgs": "nixpkgs_2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
26
flake.nix
26
flake.nix
|
@ -4,25 +4,27 @@
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.11";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.11";
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
nix2container.url = "github:nlewo/nix2container";
|
||||||
};
|
};
|
||||||
outputs = { self, nixpkgs, flake-utils }:
|
outputs = { self, nixpkgs, flake-utils, nix2container }:
|
||||||
{
|
flake-utils.lib.eachDefaultSystem
|
||||||
packages = nixpkgs.lib.mapAttrs
|
|
||||||
(system: pkgs: {
|
|
||||||
default = import ./default.nix { inherit pkgs; };
|
|
||||||
tgs-to-gif = pkgs.callPackage "${import ./nixos/clansty-flake.nix}/packages/tgs-to-gif" { };
|
|
||||||
prisma-patched = pkgs.callPackage ./nixos/prismaPatched.nix { };
|
|
||||||
fontsSf = pkgs.callPackage ./nixos/fontsSf.nix { };
|
|
||||||
})
|
|
||||||
nixpkgs.legacyPackages;
|
|
||||||
nixosModules.default = import ./nixos/module.nix { inherit self; };
|
|
||||||
} // flake-utils.lib.eachDefaultSystem
|
|
||||||
(system:
|
(system:
|
||||||
let
|
let
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
flakePkgs = self.packages.${system};
|
flakePkgs = self.packages.${system};
|
||||||
|
nix2containerPkgs = nix2container.packages.${system};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
packages = {
|
||||||
|
default = import ./default.nix { inherit pkgs; };
|
||||||
|
tgs-to-gif = pkgs.callPackage "${import ./nixos/clansty-flake.nix}/packages/tgs-to-gif" { };
|
||||||
|
prisma-patched = pkgs.callPackage ./nixos/prismaPatched.nix { };
|
||||||
|
fontsSf = pkgs.callPackage ./nixos/fontsSf.nix { };
|
||||||
|
docker = import ./docker.nix {
|
||||||
|
inherit pkgs flakePkgs;
|
||||||
|
nix2container = nix2containerPkgs.nix2container;
|
||||||
|
};
|
||||||
|
};
|
||||||
devShells.default = import ./shell.nix { inherit pkgs flakePkgs; };
|
devShells.default = import ./shell.nix { inherit pkgs flakePkgs; };
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue