说明:本章节主要讲解实际操作部分,对于理论和原理部分待研究和查找资料后,另单独章节讲解。
所需知识点和工具
- 一台服务器(轻量级即可)
- gitlab账号
- 可部署的(前端)项目,如果没有可以准备一些资料上传
- linux简单命令
- nginx相关知识
服务器装载nginx
-
为什么要装nginx? 一个(前端)项目部署在服务器上是要通过浏览器可以直接访问的,所以nginx此刻的作用就是将静态资源通过HTTP协议展示给客户的,即HTTP服务器。
-
如何装nginx?
-
去nginx官网下载安装包,在服务器解压配置(此处不做展开讲解)
-
从库里直接下载 我的服务器装的系统镜像是Ubuntu20.04,所以我直接从软件源里下载即可,linux命令是:
- sudo apt update // 更新本地包索引,以便获得最新的包列表
- sudo apt install nginx // 下载nginx
- 查看nginx页面 nginx安装好后,在浏览器输入ip地址即可查看nginx页面
- cd /etc/nginx/sites-available // 查看nginx配置
- cat default
服务器nginx配置结果:
浏览器查看结果:
- 修改配置 nginx默认的端口是80,一般不用80端口作为前端页面展示端口。有时会有一定限制或者占用,所以重新配置端口和自定义存放地址。
服务器拉取项目
-
创建仓库 创建一个空仓库,用于存放要部署的项目。也可以将已有项目关联到该仓库地址,进行提交部署。
-
创建部署令牌 令牌可以使下载 (
git clone) 或推送和拉取项目的包和容器注册表映像,无需用户和密码。
- 服务器拉取项目 登录远程服务器,去到先前指定存放项目的目录下,使用令牌克隆项目
- git clone https://<username>:<deploy_token>@gitlab.example.com/tanuki/awesome_project.git
此时可能会遇到权限不够的问题,需要给目录或者文件夹赋予权限
- chown -R ubuntu:ubuntu /app
- 环境搭建 前端项目要运行起来,少不了nodejs 和 npm 。目前ubuntu软件源里node的版本是10.19.0,如果这个版本可以使项目运行起来,则可以直接在软件源里下载
- sudo apt install nodejs -y
如果需要其他版本的nodejs,则需要从NodeSource 中安装 Node.js 和 npm
- sudo curl -s https://deb.nodesource.com/setup_16.x | sudo bash -
- sudo apt-get install -y nodejs
操作者gitlab runner
当有新的代码提交到指定分支时,runner就会执行.gitlab-ci.yml文件,实现自动化部署。服务器安装gitlab-runner。
- sudo apt install gitlab-runner
注册runner,runner可以分为三种,Shared Runners,Specific Runners和Group Runners。因为我要给当前项目单独使用,所以自己创建runners,使用Specific Runners。
- sudo gitlab-runner register --url https://gitlab.com/ --registration-token $REGISTRATION_TOKEN
注册时,会让你填写地址和token,以及操作容器。查看gitlab里的设置来填写地址和token,容器选择的是shell。
编写.gitlab-ci.yml文件
以上全部准备就绪,就要来编写自动化部署的执行文件了。该文件放在项目的根目录下面,配置如下:
stages:
- deploy
deploy:
stage: deploy
only:
- master
script:
- cd /app/react-admin
- git checkout master
- git pull origin master
- npm install
- npm run build
目前这个只是一个简版写法,更多配置要还详细了解.yml文件的写法和步骤,此处不展开说明。
自动化部署
最后一步,当然是实现自动化部署。提交代码到仓库,检测到代码有变动,触发runner执行.gitlab-runner.yml文件,执行自动化部署。
补坑之路
- 未关闭Shared runners
第一次上传代码没有关闭共享runners,导致没有进自定义的runners。
2.服务器没有给gitlab-runner用户权限
执行代码:
- sudo chown -R gitlab-runner:gitlab-runner .