[Day 003]一个简单的偏前端网站架构搭建

179 阅读4分钟

Apple的App Store上架应用需要开发者站点、技术支持和隐私策略几个页面,今天我们来搭建一个简单的偏前端技术栈的网站。

网站部署在云服务器上,使用nginx来部署前端静态资源并将接口调用反向代理到我们的后端服务上。

前端使用create-react-app开发,通过ci/cd实现每次push代码自动构建并将打包产物部署到nginx上,后端服务使用egg.js开发。

后续如果前端部分开始庞大起来,再考虑调整架构去适应需求。

\

服务器

服务器使用了aliyun上的ecs,2核4g centos 7.9

Nginx

Nginx是一个非常轻量的服务器,反向代理和负载均衡都是比较实用的功能。我们的站点体量还很小,负载均衡我们先不考虑,只使用到反向代理

另外现在已经2202年了,https肯定还是要的!

安装

  1. 在官网下载最新版Stable包nginx: download
  2. 安装依赖环境
yum install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel -y
  1. 解压源码包
tar -zxvf nginx-1.23.1.tar.gz
  1. 创建nginx临时目录
mkdir /var/temp/nginx -p
  1. 在nginx源码目录下对编译进行配置
bash ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
  1. 编译,安装
make 
make install

默认安装在/usr/local/nginx

7.将/usr/local/nginx/sbin目录添加到$PATH

可选,可以用自己熟悉的方式添加

8.nginx常用命令

#启动:
nginx
#停止:
nginx -s stop
#安全退出
nginx -s quit
#重新加载 (修改配置后常用)
nginx -s reload

9.配置

Nginx的配置文件在path_to_nginx/nginx/conf/nginx.conf

基本配置:

网站根目录我们会放在html下的main-site中,这里修改下location / 的配置

location / {
    root   html/main-site;
    index  index.html;
}

/api前缀的访问我们需要反向代理到后端服务上

location /api {
    proxy_pass http://47.110.59.57:7000;
}

https配置:

首先需要一个ssl证书,这里我用的是阿里云的免费证书

下载证书获得了一个.pem证书文件和一个.key私钥文件

\

将两个文件上传到服务器的nginx目录下的conf/cert目录中

将server的监听端口改为443 端口后加上ssl

配置好自己的server_name和证书、密钥的文件路径

再加上几个https需要的字段即可

server {
    listen       443 ssl;
    server_name  www.wssssh.com;

    ssl_certificate cert/8160443_www.wssssh.cn.pem;  
    ssl_certificate_key cert/8160443_www.wssssh.cn.key;


    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    #表示使用的加密套件的类型。
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。
    ssl_prefer_server_ciphers on;
...

配置http跳转到https:

添加一个server,rewrite到https

server {
        listen 80;
        server_name www.wssssh.com; #需要将yourdomain替换成证书绑定的域名。
        rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
        location / {
            index index.html index.htm;
        }
    }

到这里nginx就配置好了,接下来我们来做前端的自动化部署。

前端

也是由于体量小,没有复杂需求,这里我们直接使用create-react-app做一个简单的前端,这里我简单分享一下使用coding实现的自动化部署。

整个自动化部署的流程大概是:

  1. 代码push触发持续集成的构建计划
  2. 使用持续集成的构建计划用coding的节点进行前端内容的build并打包上传到coding的制品库
  3. 制品库的新制品触发持续部署的主机部署
  4. 主机部署使用我们的机器作为堡垒机和目标主机,拉去制品解包并放到nginx的html/main-site目录下

整个流程持续集成build平均耗时2分钟,部署平均15s。

coding的节点每月又1000分钟的免费时间可以用,还是挺良心的,大约可以支持这个项目每月发布500次

  1. coding中新建项目,代码仓库,使用create-react-app初始化项目
  2. 在制品管理中创建一个制品仓库
  3. 在持续集成中新建构建计划,使用coding的节点池进行构建,构建计划的配置如下

基础信息

流程配置

#流程配置:
pipeline {
  agent any
  stages {
    stage('Node.js') {
      steps {
        sh 'rm -rf /usr/lib/node_modules/npm/'
        dir('/root/.cache/downloads') {
          sh 'wget -nc "https://coding-public-generic.pkg.coding.net/public/downloads/node-linux-x64.tar.xz?version=v16.13.0" -O node-v16.13.0-linux-x64.tar.xz | true'
          sh 'tar -xf node-v16.13.0-linux-x64.tar.xz -C /usr --strip-components 1'
        }

        sh 'node -v'
      }
    }
    stage('检出') {
      steps {
        dir('~/') {
          echo 'hello CODING'
        }

        checkout([
          $class: 'GitSCM',
          branches: [[name: GIT_BUILD_REF]],
          userRemoteConfigs: [[
            url: GIT_REPO_URL,
            credentialsId: CREDENTIALS_ID
          ]]])
          dir('./main-site-fe') {
            echo '变更到仓库目录'
          }

        }
      }
      stage('构建') {
        steps {
          echo '构建中...'
          sh '''yarn
yarn build'''
          echo '构建完成.'
          sh 'tar -cvf build.tar build'
          archiveArtifacts(artifacts: 'build.tar', fingerprint: true, allowEmptyArchive: false)
        }
      }
      stage('部署') {
        steps {
          echo '开始上传到制品库...'
          codingArtifactsGeneric(files: 'build.tar', repoName: 'fe-build')
          echo '上传到制品库完成'
        }
      }
    }
  }

触发规则:

勾下代码更新时自动执行,选择推送到master时触发构建

这样配置好后每当代码推送到master后就会触发一次构建,构建完成后将build文件夹中的内容打包上传到制品库

需要注意的是构建计划使用的coding节点默认node版本是10,create-react-app至少需要12,因此在构建流程中需要配置一个Node.js阶段下载node16

  1. 持续部署

这里我们配置一个主机部署,堡垒机和主机组都配置为自己的阿里云ecs

部署流程中创建一个部署(主机组)的节点

配置制品下载将build产物下载到服务器上,再通过后置脚本删除临时文件,覆盖构建产物,重启nginx

最后,在部署流程的基础配置里添加一个自动触发器就大功告成啦!

后端

后端部分就是一个egg.js服务器,持续部署思路和前端类似,这边就不细说了。

到这里,一个简单架构能够自动部署的网站架构就做好了,如果这篇分享能帮到你,麻烦点个赞鼓励一下我哦~