Skip to content

NFT metadata API, compliant with the opensea.io format. Built with Gin and running on Kubernetes with Terraform.

License

Notifications You must be signed in to change notification settings

piotrostr/godata

Repository files navigation

GoData

Go Report Card codecov CICD

Simple and fast server that serves the NFTs written in Go.

Usage

go run ./... --port [port]

Enpoints:

  • GET /:tokenId to get a metadata entry
  • POST /:tokenId to add an entry (requires Authorization: [METADATA_API_KEY] header)
  • GET / for healthchecks, returns empty 200 OK

Under the hood

Server uses Gin (gin-gonic) framework for serving metadata stored in Redis database as JSON. Deployment is onto a cluster provisioned from Linode. The format complies to the opensea.io metadata standards and employs NGINX ingress with TLS certificates from lets-encrypt through cert-manager.io. The API packed into a docker image of piotrostr/metadata is deployed aside a Redis image.

Deployment

  1. The configuration file config.json is required for production deployments.

    field value
    name Collection name
    description Description
    external_url GS/S3/.. URL for placholder image
    placeholder_image IPFS url for placeholder image
  2. Redis Database is also required, without it the data endpoints return nil.

Note: The steps are user-specific since there is a number of variables like certificate issuer email etc, the steps are more of guidelines rather than walkthrough-tutorial or local setup.

Provision the cluster

cd terraform/linode && terraform apply
terraform output kubeconfig | jq -r '@base64d' > ~/.kube/lke.yaml
export KUBECONFIG=~/.kube/lke.yaml
cd -

Deploy to the cluster

  1. Install ingress

    helm upgrade --install ingress-nginx ingress-nginx \
      --repo https://kubernetes.github.io/ingress-nginx \
      --namespace ingress-nginx --create-namespace
  2. To get the IPv4 of the Ingress

    kubectl get services \
      --namespace ingress-nginx \
      -o wide \
      -w \
      ingress-nginx-controller
  3. Add A-Record to the domain from the Ingress manifest (in this case metadata.smplvserse.xyz) pointing to the IPv4 of the Ingress

  4. Install cert-manager

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.0/cert-manager.yaml
  5. Add secret (required env var for the metadata api)

    kubectl create secret generic metadata-api-key --from-literal METADATA_API_KEY=[secret]
  6. Apply the configuration

    skaffold apply manifest.yaml

    I prefer skaffold to kubectl for applying deployments as it waits for them to stabilise and exits with error code 1 in case any container fails.

About

NFT metadata API, compliant with the opensea.io format. Built with Gin and running on Kubernetes with Terraform.

Topics

Resources

License

Stars

Watchers

Forks