前言
相信不少前端小伙伴都抱着 “部署是运维大佬的活,我只管写页面敲代码” 的想法,遇到项目上线就秒变 “伸手党”,要么等运维配置,要么卡壳在各种部署问题上干瞪眼。但是想从 “初级前端” 卷成 “高级前端”,部署这块技能板必须焊死。尤其是中小公司,很多新项目的部署配置需要前端自己上手搞定。这篇文章将为大家介绍前端自动化部署,从购买服务器到项目CICD自动部署。
服务器的选择
本文主要做教学演示使用,购买的腾讯云服务器,仅供参考哈!!!
点击购买,选择对应的镜像支付就好了,镜像可以任意选择,后续可以重装操作系统。本文选择的是宝塔linux可视化面板,方便管理。
服务器配置
购买结束后,就可以在腾讯控制台看到服务器了,ip地址就是我们的服务器地址,点击登录按钮登录服务器
进入到宝塔面板,我们配置防火墙,配置可以通过的端口,要不会出现访问失败的情况,8888是宝塔默认端口, 额外注意:后续创建新端口项目,一定要在这开启端口配置
这样我们通过 ip:8888就可以访问宝塔面板了,点击文件,在服务器新建项目文件夹,比如说demo文件夹,可以针对不同项目创建不同文件夹, 通过端口区分不同项目
接下来我们安装nginx,这个是必须的,我们点击软件商店搜索安装就行
接下就是建站,点击网站,添加项目,创建我们的项目
绑定域名配置项,如果没有域名可以填写服务器IP,可以配合端口号区分不同项目,然后选择我们的项目根目录,这样我们网站和文件就关联起来了
当然如果我们选错也没关系,点击设置,修改nginx配置,比如说root路径和项目绑定的地址
修改完 Nginx配置后,一定要进行重载配置,否则配置不生效
这样我们建站就成功啦,最后,我们只需在demo文件夹中上传index.html测试文件,通过服务器的IP地址就可以访问到当前index.html测试文件了,vue项目的build后的dist文件同样如此
当然,我们也可以通过命令行执行
scp -r dist/* root@IP:/www/wwwroot/demo/上传自己的打包文件
这里需要注意的是,测试阶段可以上传完文件后,如果访问页面不生效,可以去宝塔平台看看,重点关注是不是自己nginx中root路径配置有误
CICD 部署
前面我们是通过手动上传文件,把本地代码部署到服务器上的。虽然能用,但实际操作下来,感觉这个方法特别费事儿。每次代码一更新,都得重新打包、上传、登录服务器操作一遍,既浪费时间,又容易出错。尤其是多人一起协作的时候,手动操作带来的问题更明显。
所以,接下来我们要升级一下,摆脱手动部署的繁琐,搭建一套前端的自动化 CI/CD 流程。做到代码一提交,服务器自动完成构建和部署
首先登录服务器,执行
ssh-keygen -t rsa -b 4096 -C "github-actions" -f ~/.ssh/github_deploy_key
生成公钥和私钥,然后执行
cat ~/.ssh/github_deploy_key.pub >> ~/.ssh/authorized_keys
将公钥添加到服务器authorized_keys文件中,然后执行下面命令,添加文件权限
chmod 600 ~/.ssh/authorized_keys
最后我们通过cat ~/.ssh/github_deploy_key查看私钥,拷贝私钥要github项目中,本文以github为例,我们添加secret信息,包括服务器IP:SERVER_IP、 服务器用户:SERVER_USER,SSH私钥:SSH_PRIVATE_KRY
然后我们进到项目的根目录,.github/workflows/deploy.yml创建deploy.yml文件夹,内容如下
name: Deploy Vue App on push to master
on:
push:
branches:
- master
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Node.js 20
uses: actions/setup-node@v3
with:
node-version: '20'
- name: Install dependencies
run: npm install
- name: Build project
run: npm run build
- name: Clean remote directory
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_IP }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
rm -rf /www/wwwroot/vue-app/*
- name: Upload dist to server
uses: appleboy/scp-action@master
with:
host: ${{ secrets.SERVER_IP }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
source: "dist/*"
target: "/www/wwwroot/vue-app/"
- name: Reload nginx
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_IP }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: nginx -s reload
这个配置也很容易看明白,监听master分支,只要往master分支push代码,就会触发工作流的执行,克隆最新代码,指定node版本,执行npm install和npm run build, 清空远程文件夹,然后进行上传,最后重启nginx服务
我们给master提交新代码,可以看到有新的流水线在执行了,执行结束后,我们访问服务器地址,就可以看到我们的部署成功了
接下来我们就可以放手去写业务了,每次上线合并到master,会自动触发流水线,执行相应的部署任务
总结
通过上述讲解,相信你对项目CICD部署有了清晰的了解,快去试试吧,原创不易,如果对比有帮助,帮忙点赞、收藏、关注~