mob next [ci-skip] [ci skip] [skip ci]

lastFile:flake.nix
This commit is contained in:
2026-01-09 15:31:52 +07:00
parent 87fe4ff8bc
commit 51ef0b3ece
4 changed files with 89 additions and 0 deletions

View File

@@ -61,6 +61,7 @@
}; };
packages.think = pkgs.think-gtcm; packages.think = pkgs.think-gtcm;
packages.think-be = pkgs.think-backend-gtcm; packages.think-be = pkgs.think-backend-gtcm;
packages.file-uploader = pkgs.file-uploader;
}; };
} }
); );

View File

@@ -7,6 +7,30 @@
let let
cfg = config.services.think-backend-greaterchiangmai; cfg = config.services.think-backend-greaterchiangmai;
think-backend-gtcm = pkgs.think-backend-gtcm.override { dataDir = cfg.dataDir; }; think-backend-gtcm = pkgs.think-backend-gtcm.override { dataDir = cfg.dataDir; };
file-uploader = pkgs.gtcm-file-uploader.override { dataDir = cfg.dataDir; };
nginxNodeProxyConfig = ''
proxy_pass http://127.0.0.1:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header x-webobjects-server-protocol HTTP/1.0;
proxy_set_header x-webobjects-remote-host 127.0.0.1;
proxy_set_header x-webobjects-server-port $server_port;
proxy_set_header x-webobjects-server-name $server_name;
proxy_set_header x-webobjects-server-url $scheme://$host;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 64k;
proxy_buffers 8 64k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
client_max_body_size 50m;
client_body_buffer_size 128k;
'';
defaultUser = "gtcm"; defaultUser = "gtcm";
defaultGroup = "gtcm"; defaultGroup = "gtcm";
@@ -142,6 +166,20 @@ in
''; '';
}; };
systemd.services.gtcm-file-uploader = {
description = "File upload service for think-backend.greaterchiangmai.com";
requiredBy = [ "phpfpm-think-backend-gtcm.service" ];
before = [ "phpfpm-think-backend-gtcm.service" ];
serviceConfig = {
user = cfg.user;
WorkingDirectory = "${file-uploader}";
};
path = [ pkgs.nodejs_20 ];
script = ''
npm run start:api
'';
};
environment.systemPackages = [ environment.systemPackages = [
artisan-be artisan-be
]; ];
@@ -244,6 +282,8 @@ in
"d ${cfg.dataDir}/storage/framework/views 0700 ${cfg.user} ${cfg.group} - -" "d ${cfg.dataDir}/storage/framework/views 0700 ${cfg.user} ${cfg.group} - -"
"d ${cfg.dataDir}/storage/logs 0700 ${cfg.user} ${cfg.group} - -" "d ${cfg.dataDir}/storage/logs 0700 ${cfg.user} ${cfg.group} - -"
"d ${cfg.dataDir}/storage/uploads 0700 ${cfg.user} ${cfg.group} - -" "d ${cfg.dataDir}/storage/uploads 0700 ${cfg.user} ${cfg.group} - -"
"d ${cfg.dataDir}/gtcm-file-uploader/uploads 0700 ${cfg.user} ${cfg.group} - -"
]; ];
networking.firewall.allowedTCPPorts = [ networking.firewall.allowedTCPPorts = [
@@ -271,6 +311,13 @@ in
"~ \\.(js|css|gif|png|ico|jpg|jpeg)$" = { "~ \\.(js|css|gif|png|ico|jpg|jpeg)$" = {
extraConfig = "expires 365d;"; extraConfig = "expires 365d;";
}; };
"/initiate-multiplart-upload".extraConfig = nginxNodeProxyConfig;
"/get-presigned-url".extraConfig = nginxNodeProxyConfig;
"/complete-multipart-upload".extraConfig = nginxNodeProxyConfig;
"/generate-presigned-url".extraConfig = nginxNodeProxyConfig;
"/enable-bucket-cors".extraConfig = nginxNodeProxyConfig;
"/upload".extraConfig = nginxNodeProxyConfig;
}; };
}; };
}; };

View File

@@ -0,0 +1,40 @@
{
fetchgit,
buildNpmPackage,
pkgs,
dataDir ? "/var/lib/gtcm-file-uploader",
}:
let
repoSrc = fetchgit {
url = "https://git.b4l.co.th/newedge/think-greaterchiangmai";
rev = "6f8c8d7dfaf5a0c1eb2077de1d6fb35ceaf3d4ec";
hash = "sha256-2mCdn8xGjWZrANclctGTmxQhkNc43VzlzMTVwVIFJcM=";
};
src = "${repoSrc}/upload-large-file";
in
buildNpmPackage {
pname = "gtcm-file-uploader";
version = "1.0.0";
nativeBuildInputs = with pkgs; [
nodejs_20
breakpointHook
];
inherit src;
npmDepsHash = "sha256-JEp2F1CQfuV9fSYZRdRO+BiOE9dy1ReK6doJcqCuxu4=";
buildPhase = ''
npm install
'';
installPhase = ''
runHook preInstall
mkdir -p $out
cp -r * $out
ln -s ${dataDir}/.env $out/.env
ln -s ${dataDir}/gtcm-file-uploader/uploads $out/src/be/uploads
runHook postInstall
'';
}

View File

@@ -1,4 +1,5 @@
final: prev: { final: prev: {
think-gtcm = final.callPackage ./think-gtcm.nix { }; think-gtcm = final.callPackage ./think-gtcm.nix { };
think-backend-gtcm = final.callPackage ./think-backend-gtcm.nix { php = final.php83; }; think-backend-gtcm = final.callPackage ./think-backend-gtcm.nix { php = final.php83; };
gtcm-file-uploader = final.callPackage ./gtcm-file-uploader.nix { };
} }