FX 0.9.48 ("poor man's function as a service") as the 13th package:
pre-compiled goreleaser release binary with sha256 pin on
cloudron/base:4.0.0. fx is a CLI with no user concept, so the package
is a workstation: pinned binary + persistent workspace
(functions/ssh/kube) driven from the Cloudron web terminal, with an
auth-proxied landing page as the only HTTP surface (httpAuth proxy).
Deploys target remote Docker hosts over key-based SSH or Kubernetes
via FX_KUBECONF. Build green; runtime smoke (landing page, workspace
seeding, fx -v) green. Docs gardened to 13 packages.
Ticket: https://projects.knownelement.com/issues/640
59 lines
2.8 KiB
HTML
59 lines
2.8 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>FX</title>
|
|
<style>
|
|
body { font-family: -apple-system, "Segoe UI", Roboto, sans-serif; background: #14171c; color: #d8dee6; margin: 0; display: flex; min-height: 100vh; align-items: center; justify-content: center; }
|
|
main { max-width: 640px; padding: 2rem; }
|
|
h1 { color: #ffffff; font-size: 1.6rem; margin-bottom: 0.25rem; }
|
|
p.tagline { color: #7f8c9b; margin-top: 0; }
|
|
code { background: #1f242c; border: 1px solid #2d3440; border-radius: 4px; padding: 0.1rem 0.35rem; font-size: 0.85rem; color: #9ecbff; }
|
|
table { border-collapse: collapse; width: 100%; margin: 1rem 0; font-size: 0.9rem; }
|
|
th, td { text-align: left; padding: 0.5rem 0.75rem; border-bottom: 1px solid #2d3440; }
|
|
th { color: #7f8c9b; font-weight: 600; }
|
|
pre { background: #1f242c; border: 1px solid #2d3440; border-radius: 6px; padding: 1rem; overflow-x: auto; font-size: 0.8rem; line-height: 1.5; }
|
|
.ok { color: #6bc46d; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<main>
|
|
<h1>FX <span class="ok">▲ fx 0.9.48 ready</span></h1>
|
|
<p class="tagline">Poor man's function as a service</p>
|
|
|
|
<p>fx is a <strong>CLI, not a web app</strong> — this page exists so
|
|
Cloudron has a health endpoint and you have a landing spot (gated by the
|
|
Cloudron auth proxy). You drive fx from the app's <strong>web
|
|
terminal</strong>: open the terminal and run <code>fx -v</code> to confirm,
|
|
then deploy function files to your own Docker hosts or Kubernetes
|
|
clusters. Cloudron app containers have no Docker daemon, so functions
|
|
always run on the <em>target</em> you point fx at, never inside this
|
|
app.</p>
|
|
|
|
<table>
|
|
<tr><th>Path</th><th>Purpose</th></tr>
|
|
<tr><td><code>/app/data/functions/</code></td><td>Function sources (<code>hello.js</code> + <code>hello.py</code> starters seeded)</td></tr>
|
|
<tr><td><code>/app/data/ssh/</code></td><td>SSH keys for remote Docker targets (fx logs in with a key, no passwords)</td></tr>
|
|
<tr><td><code>/app/data/kube/</code></td><td>kubeconfig for Kubernetes targets</td></tr>
|
|
</table>
|
|
|
|
<p>Deploy to a remote Docker host (JS example):</p>
|
|
<pre>fx up --host deploy@example.com --ssh_key /app/data/ssh/id_rsa \
|
|
--name hello /app/data/functions/hello.js
|
|
fx list --host deploy@example.com
|
|
fx down --host deploy@example.com hello</pre>
|
|
|
|
<p>Deploy to Kubernetes (copy your kubeconfig to
|
|
<code>/app/data/kube/config</code> first):</p>
|
|
<pre>export FX_KUBECONF=/app/data/kube/config
|
|
fx up --name hello /app/data/functions/hello.py</pre>
|
|
|
|
<p style="color:#7f8c9b;font-size:0.85rem;">Supported languages: Go,
|
|
JavaScript, Python, Ruby, Java, PHP, Perl, Crystal, Rust, Julia, D.
|
|
Upstream docs:
|
|
<a style="color:#9ecbff" href="https://github.com/metrue/fx">github.com/metrue/fx</a></p>
|
|
</main>
|
|
</body>
|
|
</html>
|