infrastructure

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 570c320397a4f052050ebf34c08cff06ea2fcfe9
parent 93157fadf1457a72748b4d128752fae2a2c85761
Author: Silas Brack <silasbrack@gmail.com>
Date:   Sun, 13 Oct 2024 16:28:56 +0200

More changes

Diffstat:
Mapps/my_app/gleam.toml | 2++
Mapps/my_app/manifest.toml | 4++++
Aapps/my_app/src/my_app/env.gleam | 21+++++++++++++++++++++
Mflake.lock | 2+-
Mflake.nix | 46++++++++++++++++++++++++++++++++++++++++++++--
5 files changed, 72 insertions(+), 3 deletions(-)

diff --git a/apps/my_app/gleam.toml b/apps/my_app/gleam.toml @@ -19,6 +19,8 @@ gleam_erlang = ">= 0.27.0 and < 1.0.0" gleam_http = ">= 3.7.0 and < 4.0.0" gleam_otp = ">= 0.12.1 and < 1.0.0" wisp = ">= 1.2.0 and < 2.0.0" +decode = ">= 0.2.1 and < 1.0.0" +glenv = ">= 0.4.0 and < 1.0.0" [dev-dependencies] gleeunit = ">= 1.0.0 and < 2.0.0" diff --git a/apps/my_app/manifest.toml b/apps/my_app/manifest.toml @@ -3,6 +3,7 @@ packages = [ { name = "birl", version = "1.7.1", build_tools = ["gleam"], requirements = ["gleam_stdlib", "ranger"], otp_app = "birl", source = "hex", outer_checksum = "5C66647D62BCB11FE327E7A6024907C4A17954EF22865FE0940B54A852446D01" }, + { name = "decode", version = "0.2.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "decode", source = "hex", outer_checksum = "4727FC627B803E4F4FF0075B5F93BC022F9293A19B03BF44B5A4C64BF9E8EAE1" }, { name = "directories", version = "1.1.0", build_tools = ["gleam"], requirements = ["envoy", "gleam_stdlib", "platform", "simplifile"], otp_app = "directories", source = "hex", outer_checksum = "BDA521A4EB9EE3A7894F0DC863797878E91FF5C7826F7084B2E731E208BDB076" }, { name = "envoy", version = "1.0.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "envoy", source = "hex", outer_checksum = "CFAACCCFC47654F7E8B75E614746ED924C65BD08B1DE21101548AC314A8B6A41" }, { name = "exception", version = "2.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "exception", source = "hex", outer_checksum = "F5580D584F16A20B7FCDCABF9E9BE9A2C1F6AC4F9176FA6DD0B63E3B20D450AA" }, @@ -14,6 +15,7 @@ packages = [ { name = "gleam_otp", version = "0.12.1", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_stdlib"], otp_app = "gleam_otp", source = "hex", outer_checksum = "BFACC1513410DF5A1617169A9CD7EA334973AC71D860A17574BA7B2EADD89A6F" }, { name = "gleam_stdlib", version = "0.40.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "86606B75A600BBD05E539EB59FABC6E307EEEA7B1E5865AFB6D980A93BCB2181" }, { name = "gleeunit", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "F7A7228925D3EE7D0813C922E062BFD6D7E9310F0BEE585D3A42F3307E3CFD13" }, + { name = "glenv", version = "0.4.0", build_tools = ["gleam"], requirements = ["decode", "envoy", "gleam_stdlib"], otp_app = "glenv", source = "hex", outer_checksum = "46164B9FFEB08927FD2CEBD96C3AFBE082AD5CC2C6F2FC4A78EFDA9EB61E3510" }, { name = "glisten", version = "6.0.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_otp", "gleam_stdlib", "logging", "telemetry"], otp_app = "glisten", source = "hex", outer_checksum = "912132751031473CB38F454120124FFC96AF6B0EA33D92C9C90DB16327A2A972" }, { name = "gramps", version = "2.0.3", build_tools = ["gleam"], requirements = ["gleam_crypto", "gleam_erlang", "gleam_http", "gleam_stdlib"], otp_app = "gramps", source = "hex", outer_checksum = "3CCAA6E081225180D95C79679D383BBF51C8D1FDC1B84DA1DA444F628C373793" }, { name = "hpack_erl", version = "0.3.0", build_tools = ["rebar3"], requirements = [], otp_app = "hpack", source = "hex", outer_checksum = "D6137D7079169D8C485C6962DFE261AF5B9EF60FBC557344511C1E65E3D95FB0" }, @@ -28,10 +30,12 @@ packages = [ ] [requirements] +decode = { version = ">= 0.2.1 and < 1.0.0" } gleam_erlang = { version = ">= 0.27.0 and < 1.0.0" } gleam_http = { version = ">= 3.7.0 and < 4.0.0" } gleam_otp = { version = ">= 0.12.1 and < 1.0.0" } gleam_stdlib = { version = ">= 0.34.0 and < 2.0.0" } gleeunit = { version = ">= 1.0.0 and < 2.0.0" } +glenv = { version = ">= 0.4.0 and < 1.0.0" } mist = { version = ">= 3.0.0 and < 4.0.0" } wisp = { version = ">= 1.2.0 and < 2.0.0" } diff --git a/apps/my_app/src/my_app/env.gleam b/apps/my_app/src/my_app/env.gleam @@ -0,0 +1,21 @@ +import decode +import glenv + +pub type Env { + Env(port: Int) +} + +pub fn get_env() { + let definitions = [#("PORT", glenv.Int)] + + let decoder = + decode.into({ + use port <- decode.parameter + Env(port:) + }) + |> decode.field("PORT", decode.int) + + let assert Ok(env) = glenv.load(decoder, definitions) + + env +} diff --git a/flake.lock b/flake.lock @@ -26,7 +26,7 @@ }, "locked": { "lastModified": 1, - "narHash": "sha256-sLjDHjDb7c7oXAQ5c0WaFLjviuX7rKwMccKVcuY1DG0=", + "narHash": "sha256-RirvqSHmEsPsi8MubQ2b+zWJoirpUooEcJrKZ9HMX/A=", "path": "./apps/my_app", "type": "path" }, diff --git a/flake.nix b/flake.nix @@ -3,10 +3,12 @@ # nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; sops-nix.url = "github:Mic92/sops-nix"; + # my_app.url = "github:silasbrack/test_gleam_app"; my_app.url = "path:./apps/my_app"; }; outputs = { nixpkgs, sops-nix, my_app, ... }: + # inputs @ { nixpkgs, sops-nix, my_app, ... }: { colmena = { meta = { @@ -14,6 +16,7 @@ nixpkgs = import nixpkgs { system = "x86_64-linux"; }; + # specialArgs.inputs = inputs; }; defaults = @@ -42,7 +45,7 @@ }; nixos-s-1vcpu-512mb-10gb-ams3-01 = - { pkgs, name, ... }: + { pkgs, lib, name, ... }: { deployment = { targetHost = "188.166.127.72"; @@ -54,7 +57,6 @@ imports = [ ./vpn.nix sops-nix.nixosModules.sops - # my_app.defaultPackage ]; # security.pki.certificates = [ (builtins.readFile "/run/secrets/ca_certificate") ]; @@ -90,6 +92,46 @@ # port = 8000; # }; + networking.firewall.allowedTCPPorts = [ 8000 8003 8004 ]; + users.groups.myapp_user = {}; + users.users.myapp_user = { + name = "myapp_user"; + group = "myapp_user"; + description = "My app service user"; + isSystemUser = true; + createHome = true; + packages = with pkgs; [ + gleam + erlang_27 + rebar3 + ]; + }; + # systemd.services.pokemon-app = { + # wantedBy = [ "multi-user.target" ]; + # description = "Run Pokemon app."; + # after = [ "network.target" ]; + # serviceConfig = { + # Type = "simple"; + # User = "myapp_user"; + # ExecStart = "/home/myapp_user/pokemon-app/erlang-shipment/entrypoint.sh run"; + # }; + # path = with pkgs; [ gleam erlang_27 rebar3 ]; + # }; + systemd.services.my_app = { + wantedBy = [ "multi-user.target" ]; + description = "Run my app."; + after = [ "network.target" ]; + serviceConfig = { + Type = "simple"; + User = "myapp_user"; + ExecStart = "${my_app.packages."x86_64-linux".default}/bin/my_app"; + }; + environment = { + PORT="8004"; + }; + # path = with pkgs; [ my_app.packages."x86_64-linux".default gleam erlang_27 rebar3 ]; + }; + # services.postgres = { # enable = true; # };