From 1f9ffbbee94d1daa024228a10ab7e3257fdbe6ce Mon Sep 17 00:00:00 2001 From: Mahmoud Date: Mon, 13 Feb 2023 17:52:44 -0500 Subject: [PATCH] chore: ursa gateway fly terraform (#305) * ursa gateway fly terraform * upgarde terrform provider * use docker image --- Dockerfile-gateway | 40 ++++++++++++++------------ crates/ursa-gateway/example/local.toml | 4 +-- crates/ursa-gateway/example/node.toml | 1 - crates/ursa-gateway/src/config.rs | 2 +- docker/cache-node/build.sh | 12 ++++++++ fly.toml | 36 +++++++++++++++++++++++ infra/tf-next/fly.tf | 6 ++++ infra/tf-next/fly/main.tf | 38 ++++++++++++++++++++++++ infra/tf-next/fly/ursa-gateway.tf | 26 +++++++++++++++++ infra/tf-next/fly/variables.tf | 15 ++++++++++ 10 files changed, 158 insertions(+), 22 deletions(-) create mode 100644 docker/cache-node/build.sh create mode 100644 fly.toml create mode 100644 infra/tf-next/fly.tf create mode 100644 infra/tf-next/fly/main.tf create mode 100644 infra/tf-next/fly/ursa-gateway.tf create mode 100644 infra/tf-next/fly/variables.tf diff --git a/Dockerfile-gateway b/Dockerfile-gateway index 7f54650a..8e8fc8c1 100644 --- a/Dockerfile-gateway +++ b/Dockerfile-gateway @@ -5,29 +5,33 @@ WORKDIR /ursa RUN apt-get update && apt-get install -y \ clang \ cmake \ - libclang-dev - -RUN --mount=type=cache,target=/usr/local/cargo/registry \ - cargo install cargo-strip - + libclang-dev \ + protobuf-compiler + COPY . . ENV RUST_BACKTRACE=1 -RUN --mount=type=cache,target=/usr/local/cargo/registry \ - --mount=type=cache,target=/ursa/target \ - cargo build --profile $PROFILE --bin ursa-gateway \ - && cargo strip \ - && mv /ursa/target/release/ursa-gateway /ursa/ +RUN --mount=type=cache,target=/ursa/target \ + --mount=type=cache,target=/usr/local/cargo/registry \ + --mount=type=cache,target=/usr/local/cargo/git \ + --mount=type=cache,target=/usr/local/rustup \ + set -eux; \ + rustup install stable; \ + cargo build --profile $PROFILE --bin ursa-gateway; \ + objcopy --compress-debug-sections target/release/ursa-gateway ./ursa-gateway FROM debian:bullseye-slim -RUN apt-get update && apt-get install -y \ - libcurl4-openssl-dev \ - && apt-get clean \ - && apt-get purge -y \ - && rm -rf /var/lib/apt/lists* +RUN set -eux; \ + export DEBIAN_FRONTEND=noninteractive; \ + apt-get update; \ + apt-get install --yes --no-install-recommends libcurl4-openssl-dev curl ca-certificates htop; \ + apt-get clean autoclean; \ + apt-get autoremove --yes; \ + rm -rf /var/lib/{apt,dpkg,cache,log}/ -# Get compiled binaries from builder's cargo install directory -COPY --from=builder /ursa/ursa-gateway /usr/local/bin +WORKDIR ursa -ENTRYPOINT ["ursa-gateway"] +# Get compiled binaries from builder's cargo install directory +COPY --from=builder /ursa/ursa-gateway ./ +CMD ["./ursa-gateway", "daemon"] \ No newline at end of file diff --git a/crates/ursa-gateway/example/local.toml b/crates/ursa-gateway/example/local.toml index 1e67bd88..6e5b7fb6 100644 --- a/crates/ursa-gateway/example/local.toml +++ b/crates/ursa-gateway/example/local.toml @@ -1,7 +1,7 @@ log_level = "DEBUG" [server] -port = 443 +port = 80 addr = "0.0.0.0" request_timeout = 5000 # 5s concurrency_limit = 100000 @@ -10,4 +10,4 @@ key_path = ".ursa/gateway/key.pem" stream_buf = 2000000 # 2mb [indexer] -cid_url = "http://0.0.0.0:3000/cid" +cid_url = "https://dev.cid.contact/cid" \ No newline at end of file diff --git a/crates/ursa-gateway/example/node.toml b/crates/ursa-gateway/example/node.toml index 025333de..1bcb52d9 100644 --- a/crates/ursa-gateway/example/node.toml +++ b/crates/ursa-gateway/example/node.toml @@ -11,4 +11,3 @@ stream_buf = 2000000 # 2mb [indexer] cid_url = "https://cid.contact/cid" - diff --git a/crates/ursa-gateway/src/config.rs b/crates/ursa-gateway/src/config.rs index 4267bc08..555f099b 100644 --- a/crates/ursa-gateway/src/config.rs +++ b/crates/ursa-gateway/src/config.rs @@ -103,7 +103,7 @@ impl Default for GatewayConfig { stream_buf: 2_000_000, // 2MB }, indexer: IndexerConfig { - cid_url: "https://dev.cid.contact/cid".into(), + cid_url: "https://cid.contact/cid".into(), }, } } diff --git a/docker/cache-node/build.sh b/docker/cache-node/build.sh new file mode 100644 index 00000000..016c20e4 --- /dev/null +++ b/docker/cache-node/build.sh @@ -0,0 +1,12 @@ +#!/bin/sh +set -e + +echo +echo "Building ursa-gateway node" +echo + +docker buildx build \ + --push \ + --platform linux/amd64 \ + --tag fleeknetwork/ursa-gateway:latest \ + -f ./Dockerfile-gateway . \ No newline at end of file diff --git a/fly.toml b/fly.toml new file mode 100644 index 00000000..e2cdd293 --- /dev/null +++ b/fly.toml @@ -0,0 +1,36 @@ +# fly.toml file generated for floral-shape-3955 on 2023-02-10T17:33:22-05:00 + +app = "floral-shape-3955" +kill_signal = "SIGINT" +kill_timeout = 5 +processes = [] + +[env] + +[experimental] + auto_rollback = true + +[[services]] + http_checks = [] + internal_port = 8080 + processes = ["app"] + protocol = "tcp" + script_checks = [] + [services.concurrency] + hard_limit = 25 + soft_limit = 20 + type = "connections" + + [[services.ports]] + handlers = ["http"] + port = 80 + + [[services.ports]] + handlers = ["tls", "http"] + port = 443 + + [[services.tcp_checks]] + grace_period = "1s" + interval = "15s" + restart_limit = 0 + timeout = "2s" diff --git a/infra/tf-next/fly.tf b/infra/tf-next/fly.tf new file mode 100644 index 00000000..30ca3c2a --- /dev/null +++ b/infra/tf-next/fly.tf @@ -0,0 +1,6 @@ +# regional k8s modules +module "fly_ursa_gateway" { + source = "./fly" + regions = ["yyz", "yul", "ewr", "lax", "ewr", "lhr", "ams"] + fly_domains = ["gateway.ursa.earth"] +} diff --git a/infra/tf-next/fly/main.tf b/infra/tf-next/fly/main.tf new file mode 100644 index 00000000..ff5c222d --- /dev/null +++ b/infra/tf-next/fly/main.tf @@ -0,0 +1,38 @@ +terraform { + required_providers { + fly = { + source = "fly-apps/fly" + version = "0.0.20" + } + } +} + +provider "fly" { + fly_http_endpoint = "api.machines.dev" +} + +resource "fly_app" "ursa_gateway" { + name = "ursa-gateway" + org = "fleek-network" +} + +resource "fly_volume" "ursa_gateway_volume" { + for_each = toset(var.regions) + app = fly_app.ursa_gateway.name + region = each.key + name = "ursa_data_${each.key}" + size = 15 + depends_on = [fly_app.ursa_gateway] +} + +resource "fly_ip" "ursa_gateway_ip" { + app = fly_app.ursa_gateway.name + type = "v4" + depends_on = [fly_app.ursa_gateway] +} + +resource "fly_ip" "ursa_gateway_ipv6" { + app = fly_app.ursa_gateway.name + type = "v6" + depends_on = [fly_app.ursa_gateway] +} \ No newline at end of file diff --git a/infra/tf-next/fly/ursa-gateway.tf b/infra/tf-next/fly/ursa-gateway.tf new file mode 100644 index 00000000..1a7b03d3 --- /dev/null +++ b/infra/tf-next/fly/ursa-gateway.tf @@ -0,0 +1,26 @@ +resource "fly_machine" "ursa_gateway_machine" { + for_each = toset(var.regions) + app = fly_app.ursa_gateway.name + region = each.key + name = "ursa-gateway-${each.key}" + image = "fleeknetwork/ursa-gateway:latest" + services = [ + { + ports = [ + { + port = 443 + handlers = ["tls", "http"] + }, + { + port = 80 + handlers = ["http"] + } + ] + "protocol" : "tcp", + "internal_port" : 80 + }, + ] + cpus = 4 + memorymb = 8192 + depends_on = [fly_app.ursa_gateway] +} \ No newline at end of file diff --git a/infra/tf-next/fly/variables.tf b/infra/tf-next/fly/variables.tf new file mode 100644 index 00000000..668491cf --- /dev/null +++ b/infra/tf-next/fly/variables.tf @@ -0,0 +1,15 @@ +################ +# Project # +################ + +variable "regions" { + type = list(string) + default = ["yyz", "yul", "ewr", "lax", "ewr", "lhr", "ams"] + description = "Default regions for the cluster of gateway nodes" +} + +variable "fly_domains" { + type = list(string) + default = ["gateway.ursa.earth"] + description = "Top level domains for the cluster of gateway nodes" +}