@alchemy.run/hetzner (英语)
赫兹纳云 炼金术。宣布服务器、卷、网络、防火墙、负载平衡器和DNS,并在这些服务器上运行“效果”程序,所有程序都用一个“类型脚本”程序.
npm install alchemy @alchemy.run/hetzner effect
带有挂载音量的服务器和运行在它的服务器:
// src/api.ts
import * as Hetzner from "@alchemy.run/hetzner";
import * as Effect from "effect/Effect";
import * as HttpServerResponse from "effect/http/HttpServerResponse";
export const Box = Hetzner.Server("Box", {
serverType: "cpx12",
image: "ubuntu-24.04",
location: "nbg1",
});
export const Data = Hetzner.Volume("Data", {
size: 10,
format: "ext4",
location: "nbg1",
});
export default class Api extends Hetzner.Service<Api>()(
"Api",
{ server: Box, main: import.meta.url, port: 3000 },
Effect.gen(function* () {
const mount = yield* Hetzner.MountVolume(yield* Data, { path: "/data" });
return {
fetch: HttpServerResponse.json({ volume: mount.path }),
};
}).pipe(Effect.provide(Hetzner.MountVolumeLive)),
) {}
// alchemy.run.ts
import * as Alchemy from "alchemy";
import * as Hetzner from "@alchemy.run/hetzner";
import * as Effect from "effect/Effect";
import Api from "./src/api.ts";
export default Alchemy.Stack(
"MyApp",
{
providers: Hetzner.providers(),
state: Alchemy.localState(),
},
Effect.gen(function* () {
const api = yield* Api;
return { url: api.url };
}),
);
alchemy deploy 创建服务器和音量,在SSH上复制捆绑的程序,并作为一个系统单元运行.