使用serverless超低成本快速部署开源项目

news/2024/5/20 8:39:59 标签: serverless, 开源, 云原生, docker

使用serverless超低成本快速部署开源项目

    • 前提条件
    • 部署配置
    • 部署方式
    • 额外话题(加餐)

背景:想将项目放到公网上,需要购买云服务器,可能还需要购买域名,所以研究了下serverless,正好解决了这两问题。

前提条件

  • 阿里云开通了函数计算
  • 阿里云开通了容器镜像服务
    • 非必须,使用docker部署时需要
  • 阿里云开通了文件存储NAS
    • 非必须,需要持久化数据库等数据时需要
  • 阿里云开通了对象存储OSS
    • 非必须,需要持久化图片视频资源等数据时需要

部署配置

  • 以部署nocobase为例(其他项目类似操作,以docker镜像或源码编写dockerfile文件生成新的镜像镜像部署)
# s.yaml
edition: 1.0.0
name: nocobase-app
access: "default"

vars: # 全局变量
  region: "cn-hangzhou"
  image_namespace: "nocobase-namespace"
  image_name: "nocobase-function"
  service:
    name: "nocobase-service"
    nasConfig: auto # 无需持久化数据库的话,去掉这个配置,就不需要再开通NAS服务了

services:
  nocobaseService:
    component: fc
    actions:
      pre-deploy:
        - component: fc build --use-docker --dockerfile ./Dockerfile
    props:
      region: ${vars.region}
      service: ${vars.service}
      function:
        name: "nocobase-function"
        runtime: custom-container
        timeout: 60
        memorySize: 512
        instanceConcurrency: 100
        caPort: 13000
        customContainerConfig:
          image: "registry.${vars.region}.aliyuncs.com/${vars.image_namespace}/${vars.ima\
            ge_name}:v1.0"
      triggers:
        - name: httpTrigger
          type: http
          config:
            authType: anonymous
            methods:
              - GET
              - POST
              - PUT
              - DELETE
              - HEAD
              - OPTIONS
      customDomains: # 自定义域名
        - domainName: Auto # 这里代表自动生成自定义域名
          protocol: HTTP
          routeConfigs:
            - path: /*

# Dockerfile
FROM nocobase/nocobase:main
ARG LOCAL_STORAGE_BASE_URL=/storage/uploads

ENV DB_DIALECT=sqlite
ENV DB_STORAGE=/mnt/auto/nocobase/storage/db/nocobase.sqlite

COPY . .

EXPOSE 80 13000

部署方式

  1. 在阿里云函数计算中添加应用的方式
    • 需要个git仓库,将配置放上去,好处是可以自动部署,只需要关注代码编写即可
  2. 直接使用命令部署
    • 需要安装s命令,安装Serverless Devs和Docker
    • 命令: s deploy,需要通过具有相应权限的访问key和访问secret进行登录

上面两种方式均需要开通对应的权限,例如函数计算相关权限、容器镜像相关的权限等

至此,部署已经结束了,命令部署的话,可以从控制台中获得自动生成的域名进行访问,页面部署的话,也可以在对应页面找到URL进行访问。

额外话题(加餐)

  • 使用命令生成上面的配置文件,无需手动编写。

    • s init start-nocobase -d start-nocobase
    • 执行命令后,按提示操作即可,进入到生成的配置目录下cd start-nocobase
    • 然后执行s deploy命令进行项目部署
  • 说到这,应该会有人好奇上面的命令是怎么生成配置的吧,这就要说到serverless registry了。

  • 每个人都可以打包应用到serverless registry中,以下为打包的相关配置。

  • 随便建个目录,这里以serverless目录为例。

# serverless/publish.yaml
Type: Application
Name: start-nocobase
Provider:
  - 阿里云
Version: 0.1.16
Description: 快速部署一个 nocobase 函数到阿里云函数计算
HomePage: https://github.com/183461750/nocobase
Tags:
  - 函数计算
  - 全栈应用
Category: 全栈应用
Service:
  函数计算:
    Authorities:
      - AliyunFCFullAccess
      - AliyunContainerRegistryFullAccess
    Runtime: custom container
Parameters:
  type: object
  additionalProperties: false # 不允许增加其他属性
  required: # 必填项
    - region
    - serviceName
    - functionName
    - imageNamespace
  properties:
    region:
      title: 地域
      type: string
      default: cn-hangzhou
      description: 创建应用所在的地区
      enum:
        - cn-beijing
        - cn-hangzhou
        - cn-shanghai
        - cn-qingdao
        - cn-zhangjiakou
        - cn-huhehaote
        - cn-shenzhen
        - cn-chengdu
        - cn-hongkong
        - ap-southeast-1
        - ap-southeast-2
        - ap-southeast-3
        - ap-southeast-5
        - ap-northeast-1
        - eu-central-1
        - eu-west-1
        - us-west-1
        - us-east-1
        - ap-south-1
    serviceName:
      title: 服务名
      type: string
      default: nocobase-service
      description: 服务名称,只能包含字母、数字、下划线和中划线。不能以数字、中划线开头。长度在 1-128 之间
    functionName:
      title: 函数名
      type: string
      default: nocobase-function
      description: 函数名称,只能包含字母、数字、下划线和中划线。不能以数字、中划线开头。长度在 1-64 之间
    imageNamespace:
      title: 镜像仓库的命名空间
      type: string
      default: nocobase-namespace
      description: 镜像仓库的命名空间,需要在 https://cr.console.aliyun.com/ 中开通服务、创建镜像仓库的命名空间以及设置访问凭证
# serverless/src/s.yaml
edition: 1.0.0
name: nocobase-app
access: "{{ access }}"

vars: # 全局变量
  region: "{{ region }}"
  image_namespace: "{{ imageNamespace }}"
  image_name: "{{ functionName }}"
  service:
    name: "{{ serviceName }}"
    nasConfig: auto

services:
  nocobaseService:
    component: fc
    actions:
      pre-deploy:
        - component: fc build --use-docker --dockerfile ./Dockerfile
    props:
      region: ${vars.region}
      service: ${vars.service}
      function:
        name: "{{ functionName }}"
        runtime: custom-container
        timeout: 60
        memorySize: 512
        instanceConcurrency: 100
        caPort: 13000
        customContainerConfig:
          image: "registry.${vars.region}.aliyuncs.com/${vars.image_namespace}/${vars.image_name}:v1.0"
      triggers:
        - name: httpTrigger
          type: http
          config:
            authType: anonymous
            methods:
              - GET
              - POST
              - PUT
              - DELETE
              - HEAD
              - OPTIONS
      customDomains:
        - domainName: Auto
          protocol: HTTP
          routeConfigs:
            - path: /*
              
FROM nocobase/nocobase:main
ARG LOCAL_STORAGE_BASE_URL=/storage/uploads

ENV DB_DIALECT=sqlite
ENV DB_STORAGE=/mnt/auto/nocobase/storage/db/nocobase.sqlite

COPY . .

EXPOSE 80 13000
  • 然后,执行以下命令即可发布package到serverless registry中
# 登录
s cli registry login
# 发布
s cli registry publish

http://www.niftyadmin.cn/n/5065604.html

相关文章

协议栈——连接服务器

如对方的ip和port配置信息,这里的连接是指通信前的准备工作 上一篇介绍查看套接字的命令时,可以看到很多信息,但是刚刚创建出来的套接字是什么信息都没有的,协议栈也因此不知道和谁通信; 客户端填补信息 这一步中调…

Task1:

""" 重置root管理员密码添加yum源测试软件包安装成功 """ step1: 在shell界面输入重启命令; step2: 重启过程中出现此界面,快速按键盘‘e’, 进入系统内核程序; step3: 在系统内核程序内&#xff0c…

Java基础---第十五篇

系列文章目录 文章目录 系列文章目录一、红黑树有哪几个特征?二、说说你平时是怎么处理 Java 异常的三、说说深拷贝和浅拷贝?一、红黑树有哪几个特征? 紧接上个问题,面试官很有可能会问红黑树,下面把红黑树的几个特征列出来: 二、说说你平时是怎么处理 Java 异常的 try…

DevOps:自动化部署和持续集成/持续交付(CI/CD)

DevOps:自动化部署和持续集成/持续交付(CI/CD) 在现代软件开发领域,DevOps(Development和Operations的组合)已经成为一个不可或缺的概念。它代表了一种将软件开发和运维(Operations&#xff09…

协议约定问题

和 SOAP 不一样,REST 不是一种严格规定的标准,它其实是一种设计风格。如果按这种风格进行设计,RESTful 接口和 SOAP 接口都能做到,只不过后面的架构是 REST 倡导的,而 SOAP 相对比较关注前面的接口。而且由于能够通过 …

深度学习笔记之微积分及绘图

深度学习笔记之微积分及绘图 学习资料来源:微积分 %matplotlib inline from matplotlib_inline import backend_inline from mxnet import np, npx from d2l import mxnet as d2lnpx.set_np()def f(x):return 3 * x ** 2 - 4 * xdef numerical_lim(f, x, h):retur…

如何生成你的打字速度证书?

趁着十一国庆之际,开发完成了打字侠的速度测试功能。我自己的打字速度约为56字/分钟,算是盲打中速度比较快的人咯。下面是我的打字荣誉证书呢。 你也想来试一试吗? 测试地址:https://hellotyping.com/speed-test

【学习笔记】CF1874B Jellyfish and Math

出题人的意图:这是一道基础的稍微带一点码量的搜索题,状态数也很好分析嘛!(简单用一下鸽巢原理) 我的想法:这题状态数怎么分析啊,暴搜怎么过不了啊 下次不要犯这种错误了😅 首先&…