MicroBin on Fly.io

Manjula Rajamani - May 17 '23 - - Dev Community

MicroBin is a tiny, feature rich, configurable, self-contained, and self-hosted paste bin web application. It is elementary to set up and use, and will only require a few megabytes of memory and disk storage.

Fly.io
Fly.io is a platform for running full-stack applications and databases close to the users without any DevOps. You can deploy your apps to Fly.io (it's about the simplest place to deploy a Docker Image) and use our CLI to launch instances in regions that are most important for their application.

Structure of MicroBin

Step 1:
Clone your repository

git clone https://github.com/manjularajamani/microbin.git
cd microbin/
Enter fullscreen mode Exit fullscreen mode

Step 2:
Using Dockerfile(or pre-built Docker images)we can able to deploy the application on the fly.io app server

FROM rust:latest as build

WORKDIR /app

COPY . .

RUN \
  DEBIAN_FRONTEND=noninteractive \
  apt-get update &&\
  apt-get -y install ca-certificates tzdata &&\
  CARGO_NET_GIT_FETCH_WITH_CLI=true \
  cargo build --release

# https://hub.docker.com/r/bitnami/minideb
FROM bitnami/minideb:latest

# microbin will be in /app
WORKDIR /app

# copy time zone info
COPY --from=build \
  /usr/share/zoneinfo \
  /usr/share/zoneinfo

COPY --from=build \
  /etc/ssl/certs/ca-certificates.crt \
  /etc/ssl/certs/ca-certificates.crt

# copy built executable
COPY --from=build \
  /app/target/release/microbin \
  /usr/bin/microbin

# Expose webport used for the webserver to the docker runtime
EXPOSE 8080

ENTRYPOINT ["microbin"]
Enter fullscreen mode Exit fullscreen mode

Or fetch Docker image from DockerHub: danielszabo99/microbin:latest

Step 3:

Install flyctl:
flyctl is a command line interface to the Fly.io platform.It allows users to manage authentication, application launch, deployment, network configuration, logging and more with just the one command.Install Flyctl CLI

Sign In:
If you already have a Fly.io account, all you need to do is sign in with flyctl

fly auth login
Enter fullscreen mode Exit fullscreen mode

Your browser will open up with the Fly.io sign-in screen, enter your user name and password to sign in.

Step 4:
To deploy app into fly.io we need a fly.toml file

app = "microbin"
primary_region = "ams"
kill_signal = "SIGINT"
kill_timeout = "5s"

[experimental]
  entrypoint = ["microbin", "--highlightsyntax", "--private", "--qr", "--editable", "--enable-burn-after"]

[build]
  image = "danielszabo99/microbin:latest"

[[mounts]]
  source = "microbin_data"
  destination = "/app/pasta_data"

[http_service]
  internal_port = 8080
  force_https = true
  auto_stop_machines = true
  auto_start_machines = true
Enter fullscreen mode Exit fullscreen mode

I've added only a few things that are enough for micro microbin

  • kill_signal:
    The kill_signal option allows you to change what signal is sent so that you can trigger a softer, less disruptive shutdown.

  • kill_timeout:
    When shutting down a Fly app instance, by default, after sending a signal, Fly gives an app instance five seconds to close down before being killed.

  • experimental:
    This section is for flags and feature settings which have yet to be promoted into the main configuration.

  • build:
    The image builder is used when you want to immediately deploy an existing public image

  • mounts:
    This section supports the Volumes feature for persistent storage

  • auto_stop_machines:
    Whether to automatically stop an application's machines when there's excess capacity, per region.

  • auto_start_machines:
    Whether to automatically start an application's machines when a new request is made to the application and there's no excess capacity, per region.

Step 5:

Launch an App on Fly:
Fly.io enables you to deploy almost any kind of app using a Docker image.

flyctl launch 
      (or)
flyctl launch --image danielszabo99/microbin:latest
Enter fullscreen mode Exit fullscreen mode

If you need to edit fly.toml and redeploy use the below command

flyctl deploy
Enter fullscreen mode Exit fullscreen mode

Check Your App's Status:
The application has been deployed with a DNS hostname of microbin.fly.dev. Your deployment's name will, of course, be different. fly status give us basic details

flyctl status
Enter fullscreen mode Exit fullscreen mode

Step 6:
The DESTROY command will remove an application from the Fly platform.

flyctl destroy <APPNAME>

Enter fullscreen mode Exit fullscreen mode

Adding Custom Domains
Fly offers a simple command-line process for the manual configuration of custom domains and for people integrating Fly custom domains into their automated workflows.

Step 1:
Run flyctl ips list to see your app's addresses

flyctl ips list
Enter fullscreen mode Exit fullscreen mode

Create an A record pointing to your v4 address, and an AAAA record pointing to your v6 address on your respective DNS.

Step 2:
You can add the custom domain to the application's certificates.

flyctl certs create <domain.name>
Enter fullscreen mode Exit fullscreen mode

Step 3:
You can check on the progress by running the below command

flyctl certs show <domain.name>
Enter fullscreen mode Exit fullscreen mode

Once the certificate is issued you can access your application to your Domain

Step 4:
To remove the hostname from the application, drop the certificates in the process.

flyctl certs delete <domain.name> 
Enter fullscreen mode Exit fullscreen mode
. . . . . . . . . . . .