Coder Social home page Coder Social logo

labring / laf Goto Github PK

View Code? Open in Web Editor NEW
6.8K 61.0 627.0 82.79 MB

Laf is a cloud development platform offering ready-to-use resources like cloud functions, databases, and storage. It empowers developers to quickly unleash their creativity.

Home Page: https://laf.dev

License: Apache License 2.0

TypeScript 88.93% JavaScript 6.01% Shell 0.97% Dockerfile 0.08% SCSS 0.52% Smarty 1.89% CSS 0.16% Mustache 1.42% HTML 0.01%
serverless firebase faas kubernetes minio mongodb supabase cloudbase typescript

laf's Introduction

laf

像写博客一样写函数!

Awesome TypeScript Website


中文 | English

👀 laf 是什么

laf 是开源的云开发平台,提供云函数、云数据库、云存储等开箱即用的应用资源。让开发者专注于业务开发,无需折腾服务器,快速释放创意。

🚀 Quick Start

三分钟体验使用 laf 写一个自己的 ChatGPT (开发到上线)
三分钟体验使用 laf 开发一个简单的「Todo List」

🖥 在线体验

🎉 laf.run (国内版)
🎉 laf.dev (海外版)

🎉 laf 有什么

  • 云函数
  • 云数据库
  • 云存储
  • WebIDE,像写博客一样写代码
  • 网站托管
  • WebSocket 支持

👨‍💻 谁适合使用 laf ?

  1. 前端开发者 + laf = 全栈开发者,前端秒变全栈,成为真正的大前端

    • laf 为前端提供了 laf-client-sdk,适用于任何 js 运行环境
    • laf 云函数使用 js/ts 开发,前后端代码无隔裂,无门槛快速上手
    • laf 提供了静态网站托管,可将前端构建的网页直接同步部署上来,无需再配置服务器、nginx、域名等
    • laf 后续会提供多种客户端的 SDK(Flutter/Android/iOS 等),为所有客户端开发者提供后端开发服务和一致的开发体验
  2. 后端开发者,可以从琐事中解放出来,专注于业务本身,提升开发效率

    • laf 可以节约服务器运维、多环境部署和管理精力
    • laf 让你告别配置、调试 nginx
    • laf 让你告别「为每个项目手动部署数据库、安全顾虑等重复性工作」
    • laf 让你告别「修改一次、发布半天」的重复繁琐的迭代体验
    • laf 让你随时随地在 Web 上查看函数的运行日志,不必再连接服务器,费神费眼翻找
    • laf 让你「像写博客一样写一个函数」,招之即来,挥之即去,随手发布!
  3. 云开发用户,若你是其它厂商的云开发用户,你不仅可以获得更强大、快速的开发体验,还不被云厂商锁定

    • 你可以为客户提供源码交付,为客户私有部署一套 laf + 你的云开发应用,而使用闭源的云开发服务,无法交付可独立运行的源码
    • 你可以根据未来的需要,随时将自己的产品部署到自己的服务器上,laf 是开源免费的
    • 你甚至可以修改、订制自己的云开发平台,laf 是开源的、高度可扩展的
  4. 独立开发者、创业团队,节约成本,快速开始,专注业务

    • 减少启动项目开发的流程,快速启动,缩短产品验证周期
    • 极大程度提高迭代速度,随时应对变化,随时发布
    • 专注于产品业务本身,快速推出最小可用产品 (MVP),快速进行产品、市场验证
    • 一个人 + laf = 团队

life is short, you need laf:)

🎉 Self-hosted Deployment

快速部署:Sealos 提供开箱即用的域名、证书、网关、数据库、监控、备份等,无需配置,点击下面按钮,快速一键部署:

本地部署:需要自己配置域名、证书、网关等并且熟悉 kubernetes 的运维,可参考下面的文档。

Deployment

🏘️ Community Groups

🌟 Star History

Star History Chart

laf's People

Contributors

0fatal avatar aflybird0 avatar bingtsingw avatar cuisongliu avatar dingzhenznen avatar fanux avatar genie88 avatar hankeke avatar huahuai23 avatar imyuanx avatar kkangert avatar kongwy229 avatar laf-yun avatar leezq avatar licsdasheng avatar lingdie avatar maslow avatar moonrailgun avatar newfish-cmyk avatar nightwhite avatar nmtuan avatar object-kaz avatar seewhy163 avatar skyoct avatar sulnong avatar walle233 avatar yangchuansheng avatar yinzhidong avatar yuedanlabs avatar zuofeng59556 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

laf's Issues

docs: 提供开发者文档;

  • LaF 云开发介绍
  • 云函数指引
  • 云数据库指引
  • 云存储指引
  • 访问策略配置
  • 远程部署推送
  • 常见问题

怎样用 nginx 反向代理?

我的轻量云用 nginx 反向代理了其它多个服务,现在我想把下面域名给 laf。

下面这样尝试无法访问

server {  
    listen 80;
    server_name laf.domain.com;

    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://local-dev.host:8020;
    }
}

server {  
    listen 80;
    server_name console.laf.domain.com;

    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://console.local-dev.host:8020;
    }
}

Redesign the cloud function scheduler to support distributed multi-instances.

Is your feature request related to a problem? Please describe.
当前触发器调度是内存队列中维护的,则 app-server 有状态依赖,不可横向绅缩实现;只能跑单例;
主要分为定时器和事件触发器,一个触发事件应只由一个实例运行。

Describe the solution you'd like
有两种思路:

  1. 将触发器队列放到 mongodb 中维护
  2. 将触发器队列放到 redis 中维护
  3. 选择一个 app-server 实例运行触发器队列

Describe alternatives you've considered
暂不考虑 引入 redis,当前未有 cache 设计;
mongodb 队例,可处理定时触发器,但事件触发器是 app-server 代码层面调用的,不适宜用队列改造;
至于第3种方案,考虑伸缩环境为 kubernetes,要调研 kubernetes 绅缩策略是否支持 「标记指定实例」不释放。

大概率还是需要在应用层实现这个选举逻辑的。不能用 kubernetes 自带的伸缩能力。
那么 app-server 当前的调度器就无需 重新设计,只需要增加一个参数来控制 开关 调度器即可。
Additional context

feat: 考虑多应用管理平台设计(laf-platform)

当前 laf 为单应用版,对于开发公司来说,每部署一个应用,还是需要手动在服务器上部署的。
多应用管理平台,即一次性部署了多应用管理平台统后,便可直接在 Web 页面快捷的创建和管理应用,无需登陆服务器。

主要有以下内容:

  • 基于 docker-compose 部署 laf-platform 单机版
  • 基于 k8s 部署 laf-platform 集群版
  • 管理应用:创建应用、分配数据库、分配 appid、分配域名 或 url、启停应用、监控应用资源负载等
  • 支持多租户;

发布策略会和其他开发者用户产生覆盖

1.进入云数据库 ->访问策略
image
2.发布自己配置的策略会覆盖
3.希望进入访问策略模块查询一下最新的策略,防止被相互覆盖
4.最好能在当前配置策略的时候即使的发布策略
image

app-console: 云存储支持 service account 管理

laf 提供完整的 minio 能力,可将 laf oss bucket 用于其它 minio/s3 兼容的场景,
所以需要提供 app oss 的 Service Account 能力;

  • 一个应用仅支持生成一个 SA
  • SA 只在生成时显示一次,不可重复查看
  • 重新生成 SA 即为重置,会删除之前存在的 SA

只需要提供一个「获取SA」 按钮和接口即可,即重置。

同时增加显示 endpoint;

system_server can't open 'start.sh'

按照 readme 启动服务,结果是 deploy-scripts_system_server_1 一直 Restarting

查看日志如下

deploy-scripts_system_server_1 exited with code 2


system_server_1    | 2022/01/11 13:05:44 Connected to tcp://mongo:27017
system_server_1    | sh: can't open 'start.sh': No such file or directory
system_server_1    | 2022/01/11 13:05:44 Command exited with error: exit status 2

打开 http://console.local-dev.host:8080 输入用户名密码后登入,结果是 502

refactor remote deploy module

远程部署

介绍

实现目标环境的推送和部署。当前主要推送部署的资源包括: 函数functions、 数据库访问策略 policies

远程部署整体设计思路

1.文档对象设计

  • 应用部署授权对象(replicate_auth)
    字段 类型 说明
    _id string 主键
    status string 状态
    source_appid string 源应用ID
    target_appid string 目标应用ID
    created_at Date 创建时间
    updated_at Date 更新时间
  • status取值说明
      1.pending 源环境向目标环境发起授权申请
      2.accepted 授权通过后的状态。当授权通过后则可以部署云函数和策略
      3.rejected 授权不通过后的状态
    

2.接口设计

  • 推送(PUT /replicas)
     1.请求参数
     {
       target_app_id: string,
       functions: {
         type: all | part,
         items: [
           id: string,
           name: string
         ]
       },
       policies: {
         type: all | part,
         items: [
           id: string,
           name: string
         ]
       }
     }
     2.响应
     {
      "code":0,
      "data":"pushed"
    }
    
  • 应用部署(POST /replicas/:replica_id)
    1.请求参数
    {  }
    2.响应
     {
      "code":0,
      "data":"deployed"
    }
    
  • 应用授权
    1. 应用授权资源列表查询(不需要分页)(包括我授权的和授权给我的)
    GET /replicate_auth
    2. 应用授权添加(目标环境发起授权申请) 
    PUT /replicate_auth
    3. 应用授权编辑(授权申请审批)
    POST /replicate_auth/:id
    4. 应用授权删除(删除目标应用和原应用的授权关系)源和目标都可以操作
    DELETE /replicate_auth/:id
    

system server memory overflow: memory & cpu goes too high after long time running

By viewing all references of getApplicationDbAccessor() api in system-server, found that all accessor connections created for app were forgot to close. It accumulates too much darling db connections during a few hours running time, cause that sys server & mongo server's cpu and memory go high.

How to fix:
Just close the connections which not needed.

app-console: 新增静态网站托管功能

可将静态网站文件托管到 oss bucket 中:

  • 在「云存储」菜单组下,新增「网站托管」菜单项
  • 提供网站托管配置的接口
  • 一个 bucket 托管一个网站
  • 支持绑定自定义域名,需先将自定义域名 cname 到 bucket 的二级域名,才可添加绑定

feat: 增加长连接支持;

  1. 设计长连接与云函数事件触发器联合的机制
  2. 客户端消息事件可触发云函数
  3. 云函数可推送消息到客户端
  4. 考虑客户端直接基于 MongoDb WatchStream 监听数据
  • client -> socket -> function trigger -> function
  • database change -> function trigger -> function -> socket -> client

or

  • client -> socket -> proxy with policy -> listening on database change
  • database change -> socket -> client

文档目录建议

  • 概览
  • 部署 (推荐直接使用laf云,部署就是sealos run ....)
  • 快速开始
  • 使用教程
    • 云函数 (创建,编写,发布,删除)
    • 云数据库
    • 对象存储
    • 静态网页托管
  • 示例介绍
    • 三分钟使用开发并上线一个注册/登录应用
    • 开发一个短信通知服务
    • 开发一个微信群通知应用
    • 微信/支付宝支付功能
    • 与区块链对接功能
    • 实现一个拨测功能检测网站健康状态
    • 使用关系型数据库
    • 使用websocket长连接
    • 使用github action静态网页托管
  • 原理介绍
    • 架构介绍
  • API
  • 使用案例
    • 使用laf开发xxx小程序
    • 使用laf开发区块链Dapp

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.