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"
|
||||
}
|
||||
},
|
||||
"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": {
|
||||
"locked": {
|
||||
"lastModified": 1654807842,
|
||||
"narHash": "sha256-ADymZpr6LuTEBXcy6RtFHcUZdjKTBRTMYwu19WOx17E=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "fc909087cc3386955f21b4665731dbdaceefb1d8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1671752829,
|
||||
"narHash": "sha256-oFeJzAq0iRL6md9Si8Tx9bltjwjLmldvgUmAteMhYW4=",
|
||||
|
@ -34,7 +83,8 @@
|
|||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
"nix2container": "nix2container",
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
26
flake.nix
26
flake.nix
|
@ -4,25 +4,27 @@
|
|||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.11";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
nix2container.url = "github:nlewo/nix2container";
|
||||
};
|
||||
outputs = { self, nixpkgs, flake-utils }:
|
||||
{
|
||||
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
|
||||
outputs = { self, nixpkgs, flake-utils, nix2container }:
|
||||
flake-utils.lib.eachDefaultSystem
|
||||
(system:
|
||||
let
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
flakePkgs = self.packages.${system};
|
||||
nix2containerPkgs = nix2container.packages.${system};
|
||||
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; };
|
||||
}
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue