简介
整个流程比较清晰,实现的是基于Github 定向的往ECS做发布
探索
自动化打包发布一般流程:
- 本地环境打镜像
- CI/CD 环境打镜像
以上的流程使用于比较大的项目,受限于环境,打算对上面流程做简化,使用github action做触发
环境部署
一些准备
由于需要直接通过SSH 远程连接,需要准备一对公钥/密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
这将生成两个文件:id_rsa(私钥)和id_rsa.pub(公钥)
云服务器配置
安装Docker
首先,更新 YUM 软件包索引并安装一些必要的依赖项:
sudo yum update -y
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加 Docker 官方 GPG 密钥:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装 Docker Engine:
sudo yum install docker-ce docker-ce-cli containerd.io
启动 Docker 服务:
sudo systemctl start docker
(可选)设置 Docker 开机自启动:
sudo systemctl enable docker
现在,Docker 已经安装并且运行在 CentOS 上了。你可以使用 docker version 命令来验证安装是否成功。
创建部署用户和设置 SSH 认证
在服务器上创建一个专用的部署用户,根据需要设置用户的密码和其他选项。
sudo adduser deploy-user
切换到部署用户,并创建 .ssh 目录,然后将您的公钥(id_rsa.pub)添加到该用户的 authorized_keys 文件中:
sudo su - deploy-user
mkdir ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
vi ~/.ssh/authorized_keys
重启 SSH 服务
sudo systemctl restart sshd
GitHub配置
- 基于下面流程,新加两个参数
- 新建Action事件,在push时触发事件
name: Build and Deploy Docker Image
on:
push:
branches:
- main
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
##参考下面两个方式
这里会几个难点代处理:
- 没法使用Checkout code通过GitHub上的代码直接到云端构建image,暂时的想法 还是在github构建完之后上传到云端
docker build完不是一个实体,不能做上传操作,所以这里有两种方式
1) 在github上打镜像, 然后上传到Docker Hub
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build Docker Image
run: docker build -t your-image-name:tag .
- name: Push Docker Image to Docker Hub
run: docker push your-image-name:tag
2) 上传源码到远程服务器,到远程服务器打镜像
- name: Copy Source to Server
uses: appleboy/scp-action@master
with:
host: ${{ secrets.IP }}
username: ${{ secrets.SERVER_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
source: "."
target: "/home/deploy-user/"
- name: SSH into Server and Deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.IP }}
username: ${{ secrets.SERVER_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /home/deploy-user/
docker build -t image-name:${{ github.run_number }} .
docker run -d image-name:${{ github.run_number }}
- 云端新建用户的权限不足
权限问题主要出现在scp命令,scp在上传文件夹会先压缩,上传,解压
涉及到的权限
文件夹权限
sudo chown -R newuser:newuser /var/www/html
sudo chmod -R 755 /var/www/html
授予 scp 权限
sudo usermod -s /bin/bash newuser
- node 代码没有跑起来,是什么原因?(忽略)
没跑起来是因为前面上传报错,解决掉就可以了
补充一些命令行
进入到docker image 中
docker run -it bot0 /bin/sh
正在运行的容器的 ID 或名称
docker ps
停止并删除容器
docker stop <container_id_or_name>
docker rm <container_id_or_name>
查找被停掉的容器
docker ps -a
删除相应的镜像
docker images
docker rmi <image_id_or_name>
删除所有未使用的镜像
docker image prune