热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Serverless实践静态网站托管

本文旨在帮助不懂运维网络服务器知识的前端小白,在不租用云服务器的情况下,实现
本文旨在帮助不懂运维/网络/服务器知识的前端小白,在不租用云服务器的情况下,实现Web站点的上线部署

Serverless实践-静态网站托管

超多图预警!!!

本文旨在帮助不懂运维/网络/服务器知识的小白,在不租用云服务器的情况下,实现Web站点的上线部署

适合边看文章边跟着动手做

包含使用Github Action实现持续集成的步骤,绑定自定义域名等等

该手把手Serverless实践系列预计会出几篇包含静态站点,云函数,后端服务等等

如有表述不清,内容错误等还请评论区斧正

准备工作

这里采用腾讯云提供的Serveless服务

very very very cheap === free

  • 注册腾讯云账号

创建云开发环境

进入控制台面板,通常在首页右上角

图片

然后在左上角的云产品列表中找到云开发CloudBase

图片

然后你能看到如下的界面

图片

点击新建,可以看见有很多模板可供选择,咱们这里选择Vue应用,当然你也可以选择其它模板,我们主要是获得其生成的一个cloudbaserc.json文件,后文会详细介绍这个配置文件

图片

填写环境名称,选择按量计费(非常非常便宜),勾上同意,能勾上免费就勾上免费资源

填写完成后点击下一步

图片

点击立即开通

图片

接下来你能在当前页面看到刚刚创建的应用,记住这个环境id 后面会用上

图片

赖心等待几分钟就创建完成了

线***问地址

点击创建完成的卡片

图片

选择左侧菜单中的静态网站托管

图片

这里能看到模板项目部署在线上的生产环境代码与提供的线上域名

例如图中的:http://kerno-photo-0got9tjdb1cb34fe-1256505457.tcloudbaseapp.com/vue/

模板的源代码

所有的模板源代码均在Github:CloudBase Templates

咱们上面的Vue项目模板源码在此处

在项目源码中我们就可以看到cloudbaserc.json文件

cloudbaserc.json配置文件示例

完整的配置项示例参考$schema

配置文件需要自己修改/关注的字段如下:

  • envId:环境id,上文有说到获取的位置
  • region:环境所在地区,上海(ap-shanghai),广州(ap-guangzhou)
  • framework
    • name:应用名称
    • plugins/client/inputs
      • installCommand:安装依赖的指令
      • buildCommand:构建项目指令
      • outputPath:用于部署的本地静态文件目录
      • cloudPath:线***问的基础路径

在咱们项目的根目录下创建这个cloudbaserc.json文件

最简单项目

目录如下

.
├── cloudbaserc.json
└── index.html

这里用到的最简单的cloudbaserc.json如下

{
    "version": "2.0",
    "envId": "kerno-photo-0got9tjdb1cb34fe",
    "region": "ap-shanghai",
    "$schema": "https://framework-1258016615.tcloudbaseapp.com/schema/latest.json",
    "functionRoot": "cloudfunctions",
    "framework": {
      "name": "kerno-photo-web",
      "plugins": {
        "client": {
          "use": "@cloudbase/framework-plugin-website",
          "inputs": {
            "outputPath": "/",
            "cloudPath": "/"
          }
        },
        "auth": {
          "use": "@cloudbase/framework-plugin-auth",
          "inputs": {
            "configs": [
              {
                "platform": "NONLOGIN",
                "status": "ENABLE"
              }
            ]
          }
        }
      }
    }
  }

运用了构建工具的项目

推荐的cloudbaserc.json内容如下

{
    "version": "2.0",
    "envId": "kerno-photo-0got9tjdb1cb34fe",// 环境id
    "region": "ap-shanghai",  // 环境所在地区
    "$schema": "https://framework-1258016615.tcloudbaseapp.com/schema/latest.json",
    "functionRoot": "cloudfunctions",
    "framework": {
      "name": "kerno-photo-web",// 应用名称
      "plugins": {
        "client": {
          "use": "@cloudbase/framework-plugin-website",
          "inputs": {
            "installCommand": "yarn install --prefer-offline --no-audit --progress=false", // 安装依赖的指令
            "buildCommand": "npm run build",    // 构建项目指令
            "outputPath": "dist",   // 用于部署的静态文件目录
            "cloudPath": "/",   // 线上的基础路径
            "envVariables": {
              "VUE_APP_ENV_ID": "{{env.ENV_ID}}"
            }
          }
        },
        "auth": {
          "use": "@cloudbase/framework-plugin-auth",
          "inputs": {
            "configs": [
              {
                "platform": "NONLOGIN",
                "status": "ENABLE"
              }
            ]
          }
        }
      }
    }
  }

部署上线

前置环境

  • Node.js

确保电脑上有Node.js环境,没有可参考菜鸟教程:Node.js 安装

打开你的终端工具查看是否拥有Node环境

node -v

图片

@cloudbase/cli

安装@cloudbase/cli工具

npm install -g @cloudbase/cli

验证是否安装完成

tcb -v

图片

部署

例项目目录:

.
├── cloudbaserc.json
└── index.html

在项目跟路径依次执行如下指令:

登录

tcb login

部署

tcb framework deploy

此时静静等待几秒,出现此图说明部署成功

图片

示例访问地址:https://kerno-photo-0got9tjdb1cb34fe-1256505457.tcloudbaseapp.com/

可以看到我们的Hello World已经上去了

图片

到此从0-1的创建应用到部署上线的流程都走完了

后续将会补充一些额外的内容,需要有一些相关知识的基础

绑定自定义域名

申请SSL证书

首先为域名申请SSL证书

图片

选择免费的

图片

然后下一步填写必要的信息

图片

选择DNS验证

图片

按要求添加一条解析规则

图片

我这里域名是在阿里云上购买的

图片

按要求添加解析

图片

添加完成后,点击查询域名验证状态即可,申请完成后如下图所示

图片

绑定域名

在静态网站托管tab 基础配置中添加自定义域名

图片

弹窗中输入刚刚申请证书用的域名

图片

根据要求添加CName

图片

上述添加解析步骤一样

图片

到此为止自定义域名就搞定了

咱访问一下试试:photo.kerno.sugarat.top

SPA单页应用的额外配置

需要添加一条404的重定向配置,配置地方如下

图片

接入Github Action持续集成

创建main.yml

根目录下创建.github/workflows/main.yml文件

.github
└── workflows
    └── main.yml

main.yml文件内容如下

# This is a basic workflow to help you get started with Actions

name: prod-CI

# Controls when the action will run. 
on:
  # Triggers the workflow on push or pull request events but only for the master branch
  push:
    branches: [ main ] # push到main分支上时触发
  pull_request:
    types: [ assigned ]
    branches: [ main ] # 合并pr到main分支上时触发

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2
      # 配置rsa密钥自动登陆
      - name: Deploy to Tencent CloudBase
        uses: TencentCloudBase/cloudbase-action@v2
        with:
          secretId: ${{secrets.SECRET_ID}}
          secretKey: ${{secrets.SECRET_KEY}}
          envId: ${{secrets.ENV_ID}}

仓库中配置Secrets

在仓库的Settings->Secrets 面板中新建secret

图片

图片

添加如下三个:

  • SECRET_ID:获取地址或参看下图
  • SECRET_KEY:获取地址或参看下图
  • ENV_ID:应用的envid

图片

添加完成后如下图所示

图片

推送配置文件

接下来只需要将main.yml文件推送到Github上即可

git add .github

git commit -m "chore: 添加main.yml文件"

git push

查看Action进度

此时打开仓库就能看见commit 信息旁边有个点

图片

在Action面板中也能看见任务的执行状态,点击可查看详细进度

图片

执行完成后如下图所示

图片

参考资料

  • 文档:云开发 CloudBase

推荐阅读
  • 由于同源策略的限制,满足同源的脚本才可以获取资源。虽然这样有助于保障网络安全,但另一方面也限制了资源的使用。那么如何实现跨域呢,以下是实现跨域的一些方法。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • 在package.json中有如下两个对象:husky:{hooks:{pre-commit:lint-staged}},lint-staged:{src** ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
  • 本文讨论了在使用Git进行版本控制时,如何提供类似CVS中自动增加版本号的功能。作者介绍了Git中的其他版本表示方式,如git describe命令,并提供了使用这些表示方式来确定文件更新情况的示例。此外,文章还介绍了启用$Id:$功能的方法,并讨论了一些开发者在使用Git时的需求和使用场景。 ... [详细]
  • 微信民众号商城/小顺序商城开源项目介绍及使用教程
    本文介绍了一个基于WeiPHP5.0开发的微信民众号商城/小顺序商城的开源项目,包括前端和后端的目录结构,以及所使用的技术栈。同时提供了项目的运行和打包方法,并分享了一些调试和开发经验。最后还附上了在线预览和GitHub商城源码的链接,以及加入前端交流QQ群的方式。 ... [详细]
  • 有意向可以发简历到邮箱内推.简历直达组内Leader.能做同事的话,内推奖励全给你. ... [详细]
  • 详解 Python 的二元算术运算,为什么说减法只是语法糖?[Python常见问题]
    原题|UnravellingbinaryarithmeticoperationsinPython作者|BrettCannon译者|豌豆花下猫(“Python猫 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
author-avatar
cb风雨彩虹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有