Lustre全栈应用部署指南:从Docker到云平台

Lustre全栈应用部署指南:从Docker到云平台

【免费下载链接】lustre An Elm-inspired framework for building HTML templates, single page applications, and server-rendered components in Gleam! 【免费下载链接】lustre 项目地址: https://gitcode.com/gh_mirrors/lu/lustre

前言

在现代Web开发中,全栈应用的部署是一个关键环节。本文将详细介绍如何将基于Lustre框架构建的全栈应用部署到生产环境。Lustre是一个基于Gleam语言的全栈Web框架,它允许开发者使用同一种语言编写前后端代码,大大提高了开发效率。

项目结构准备

典型的Lustre全栈项目采用monorepo结构,包含三个主要部分:

/项目根目录
  /common      # 前后端共享的通用代码和类型定义
  /client      # 面向JavaScript的客户端代码
  /server      # 面向Erlang的服务端代码

这种结构设计使得代码复用更加方便,同时也为部署提供了清晰的边界。

Docker容器化部署

Dockerfile详解

容器化是现代化部署的核心,下面是一个针对Lustre全栈应用的完整Dockerfile示例:

# 指定Gleam版本
ARG GLEAM_VERSION=v1.10.0

# 构建阶段 - 编译应用
FROM ghcr.io/gleam-lang/gleam:${GLEAM_VERSION}-erlang-alpine AS builder

# 复制项目代码
COPY ./common /build/common
COPY ./client /build/client
COPY ./server /build/server

# 安装所有项目的依赖
RUN cd /build/common && gleam deps download
RUN cd /build/client && gleam deps download
RUN cd /build/server && gleam deps download

# 编译客户端代码并输出到服务器的静态目录
RUN cd /build/client \
  && gleam add --dev lustre_dev_tools \
  && gleam run -m lustre/dev build app --minify --outdir=/build/server/priv/static

# 编译服务端代码
RUN cd /build/server \
  && gleam export erlang-shipment

# 运行阶段 - 仅包含运行所需的最小镜像
FROM ghcr.io/gleam-lang/gleam:${GLEAM_VERSION}-erlang-alpine

# 从构建阶段复制编译好的服务端代码
COPY --from=builder /build/server/build/erlang-shipment /app

# 设置入口点
WORKDIR /app
RUN echo '#!/bin/sh\nexec ./entrypoint.sh "$@"' > /app/start.sh \
  && chmod +x /app/start.sh

# 设置环境变量
ENV PORT=8080

# 暴露服务器运行的端口
EXPOSE 8080

# 运行服务器
CMD ["/app/start.sh", "run"]

关键点说明:

  1. 使用多阶段构建减少最终镜像大小
  2. 客户端代码编译后放入服务端的静态资源目录
  3. 通过环境变量配置服务端口

服务端配置调整

确保服务端监听端口从环境变量获取:

fn get_port() -> Int {
  case system.get_env("PORT") {
    Ok(port) -> {
      case int.parse(port) {
        Ok(port_number) -> port_number
        Error(_) -> 8080  // 解析失败时使用默认值
      }
    }
    Error(_) -> 8080  // 环境变量未设置时使用默认值
  }
}

// 在启动服务器时使用
let port = get_port()
mist.new(handler)
|> mist.port(port)
|> mist.start_http

Fly.io平台部署详解

Fly.io是一个支持全球部署的应用平台,特别适合需要低延迟的Web应用。

部署准备

  1. 安装CLI工具:根据官方文档安装flyctl命令行工具
  2. 账户认证:使用fly auth login命令登录

应用创建与配置

在项目根目录执行:

fly launch --no-deploy

此命令会生成fly.toml配置文件,典型配置如下:

app = "your-app-name"

[build]
  dockerfile = "Dockerfile"

[http_service]
  internal_port = 8080
  force_https = true
  auto_stop_machines = true
  auto_start_machines = true
  min_machines_running = 0
  processes = ["app"]

[[http_service.ports]]
  port = 80
  handlers = ["http"]

[[http_service.ports]]
  port = 443
  handlers = ["tls", "http"]

配置要点:

  • internal_port必须与Dockerfile中的EXPOSE端口一致
  • force_https确保所有流量通过安全连接

执行部署

fly deploy

部署过程包括:

  1. 基于Dockerfile构建镜像
  2. 上传镜像到Fly.io注册表
  3. 启动应用实例

部署完成后,应用可通过https://your-app-name.fly.dev访问。

自动化部署实践

GitHub Actions集成

实现CI/CD流程可以极大提高开发效率。以下是完整的GitHub Actions配置:

name: Deploy to Fly.io

on:
  push:
    branches:
      - main

jobs:
  deploy:
    name: Deploy to Fly.io
    runs-on: ubuntu-latest
    concurrency: deploy-group
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Flyctl
        uses: superfly/flyctl-actions/setup-flyctl@master

      - name: Deploy to Fly.io
        run: flyctl deploy --remote-only
        env:
          FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}

实现步骤:

  1. 创建长期有效的Fly.io API令牌
  2. 将令牌添加为GitHub仓库的Secret
  3. 配置工作流在main分支推送时触发

生产环境运维

日志监控

# 查看历史日志
fly logs

# 实时日志监控
fly logs -f

# 应用状态检查
fly status

自定义域名配置

  1. 添加证书:
    fly certs add your-domain.com
    
  2. 配置DNS记录:
    • A记录指向Fly.io IPv4地址
    • AAAA记录指向Fly.io IPv6地址

其他部署方案

除了Fly.io,Lustre全栈应用还可以部署到多种云平台:

  1. Heroku:适合快速原型开发
  2. Railway:提供简单易用的部署体验
  3. AWS Elastic Beanstalk:企业级解决方案
  4. Google Cloud Run:无服务器容器平台
  5. Azure Container Apps:微软云原生解决方案

每个平台的部署细节略有不同,但核心都是基于Docker容器化部署。

总结

本文详细介绍了Lustre全栈应用的完整部署流程,从Docker容器化到云平台部署,再到自动化CI/CD配置。掌握这些技能将使您能够将Lustre应用高效地交付到生产环境,为用户提供稳定可靠的服务。

【免费下载链接】lustre An Elm-inspired framework for building HTML templates, single page applications, and server-rendered components in Gleam! 【免费下载链接】lustre 项目地址: https://gitcode.com/gh_mirrors/lu/lustre

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值