Github Action是一种持续集成和持续交付 (CI/CD) 平台,可用于自动执行生成、测试和部署管道。 您可以创建工作流程来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。

Docker 和 Github 自动将 node.js 部署

我们在项目目录创建 .gitignore

输入

/node_modules

这样我们提交就不带上包了。

服务器

我使用的是 Centos 安装docker 文档

我使用的是 FinalShell 我觉得用着还行,只要你不更新。

安装好之后 ---------

我们在项目根目录创建一个名为 dockerfile 的文件,注意创建之后有一个小鱼图标。

FROM node:16  版本

WORKDIR /app   目录

COPY package*.json ./  复制package 到 ./ 目录

RUN npm install

COPY . .

ENV PORT=8088

EXPOSE 8080

CMD ["node","."] 在 docker 确定 mcd命令

然后我们创建 .dockerignore

/node_modules

这个跟 .gitignore 作用相同。

安装 Docker Desktop

Desktop 安装地址

安装好之后,可能要看你们电脑的环境,我的问题是让我 wsl 升级,如果你有科学上网还好,可以在微软商店下载安装。

Docker Desktop
image-20230423020340136-1682236102311

运行按钮,我们把 HOST PORT 改成8080,然后就可以浏览器 localhost:8080 访问了

image-20230423020444463

好的,确认 docker 文件正在工作。

注册 docker

docker注册地址

进去之后选择个人免费的,邮箱校验。

然后我们在项目根目录创建文件夹,还有 .yml 文件

image-20230423021108074-1682236374811
我们到 Github actions

复制YAML文件,到创建的YML文件里面。。

docker push 你的master节点。

tsd1

docker注册账号和容器名称

image-20230423021640068-1682236400711

然后 git 操作。我创建的项目目录问题很大,我每次都是一个文件夹里面两个文件夹,一个react,一个 node,这样不行要都在根目录里,push之后。

这时候我们上 github Action 一看,会构建错误,因为 docker 登陆失败,到项目设置。

image-20230423120031508

new secrets 一个文件,分别定义 DOCKER_USERNAME,DOCKER_PASSWORD,内容为你注册 docker hub的账号密码。

然后回到 Actions ,重新运行。

成功了,我们在 docker hub官网就可以看到我们的镜像存储库了。

shell

docker run -t -d -p 80:8080 --name linode-docker username/容器名:master

docker命令 docker rm -f $(docker ps -aq) 删除所有容器

可能你们输入的时候会提示端口的问题,我一不小心 kill 把我nginx进程杀死了

docker ps (可以看容器是否运行成功)

然后输入你的 ip 就可以在浏览器上看到拉 =-=

创建 bash 自动更新容器

ls 确定不要重复的脚本名称

nano update.sh

#! /bin/bash
docker stop linode-docker

docker rmi username/容器名:master
docker pull username/容器名:master

docker run -t -d -p 80:8-8- --name linode-docker username/容器名:master

chmod +x update.sh

./update.sh

添加ssh 脚本到我们的yml

  update_ssh_linode:
    name: Telling Linode Server to Update
    runs-on: ubuntu-latest
    steps:
    - name: executing remote ssh commands using password
      uses: appleboy/ssh-action@v0.1.10
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }} 在github secrets 添加 你的服务器用户
        password: ${{ secrets.PASSWORD } 在github secrets 添加你的 密码}
        port: ${{ secrets.PORT }}  在 github secrets 添加 HOST 和 ip
        script:bash update.sh

secrets 这些都要到 github 先配置了

复制到 yml 文件里面,记得顶行 对准 push_to_registry

git 之后,就到github actions 看看成功了没。

最后的测试,看看我们的努力成功了没有

是的我成功了。

感谢

Sebastian Kargl
托管网络虚拟网络器 Hostinger Affiliate-Programm 值得你的信赖