

docker 部署前后端分离项目记录
source link: https://zhuanlan.zhihu.com/p/363928964
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

docker 部署前后端分离项目记录
如题,最近想要复活 c 站,c 站是一个 go + deno + fre + flutter 的网站,本次复活将全面使用 docker 进行部署,使用 github action 做到持续集成
这也是 c站 这种 github开源
中型个人项目
前后端分离
最合适的部署方案
c站旧版最开始使用手动部署,后来
将 deno 接口 docker 化,然后 go 我也做了自动化,但 mysql 和 nginx 一直没有 docker 化新版c站将全部使用 docker 部署
docker
先安装 docker,因为我是香港服务器,所以速度有点慢
ssh -p 22 [email protected]
sudo yum install docker-ce docker-ce-cli containerd.io
sudo usermod -aG docker root
sudo systemctl start docker
docker info
nginx
在部署之前,先用一行命令部署一下 nginx,用来测试一下 docker
docker run -p 8080:80 -d -v ./html:/usr/share/nginx/html nginx
这一行命令,包含了端口映射,守护进程,卷映射
docker-compose
我们真正部署的时候,一般不这么搞,一般会使用 docker-compose
curl -L https://github.com/docker/compose/releases/download/1.29.1/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose
chmod a+x /usr/local/bin/docker-compose
docker-compose --version
简单三行命令,docker compose 就成功装上了,接下来开始真正的部署工作
docker-composer.yml
version: "3"
networks:
clicli:
services:
api:
image: "yisar/clicli_api"
networks:
- clicli
depends_on:
- db
ports:
- "8080:8080"
environment:
dbstr: "root:root@tcp(localhost:3306)/clicli?charset=utf8"
nginx:
image: "yisar/clicli_nginx"
networks:
- clicli
depends_on:
- api
ports:
- "80:80"
db:
image: "mariadb"
networks:
- clicli
environment:
MYSQL_ROOT_PASSWORD: mysqlroot
MYSQL_DATABASE: clicli
MYSQL_USER: root
MYSQL_PASSWORD: root
volumes:
- $PWD/data:/var/lib/mysql
ports:
- "3306:3306"
准备好了 docker-compose-yml 以后,我们还需要写两个 DockerFile
nginx
FROM nginx
COPY ./conf/ /etc/nginx/conf/
COPY ./dist/ /root/dist/
EXPOSE 80
nginx 做的事情很简单,主要是拷贝配置两个文件目录,一个是 conf 目录,一个是前端目录
golang
FROM golang
WORKDIR $GOPATH/src/github.com/yisar
ADD . $GOPATH/src/github.com/yisar
RUN go build .
EXPOSE 4000
ENTRYPOINT ["./api"]
golang 主要是设置一下工作目录以及执行脚本
mysql
mysql 什么也不用做,直接使用默认镜像就好了,生产环境我一般使用 MariaDB,它是 mysql 兼容版本
到这一步,我们可以说已经全部准备好了,可以直接跑了
docker-compose up -d
github action
为了方便持续部署,我们使用 github action 来自动化部署,其实主要是将构建镜像这一步放到 CI 中做,其中 go 是后端 api,nginx 主要是负责前端项目
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
uses: actions/setup-go@master
- name: Build images
env:
DockerUsername: ${{ secrets.DOCKER_USERNAME }}
DockerPassword: ${{ secrets.DOCKER_PASSWORD }}
run:
docker login -u $DockerUsername -p $DockerPassword
docker build -t yisar/clicli_api .
docker push yisar/clicli_api
docker build -t yisar/clicli_api ./nginx
docker push yisar/clicli_nginx
deploy:
runs-on: ubuntu-latest
needs: [publish]
steps:
- uses: appleboy/ssh-action@master
with:
host: ${{ secrets.DEPLOY_HOST }}
username: ${{ secrets.DEPLOY_USERNAME }}
password: ${{ secrets.DEPLOY_PASSWORD }}
port: 22
script: docker-compose up -d
总结
经过一番折腾,终于可以理顺整个构建的过程了,其实还蛮简单的说,但我最头疼写脚本了,虽然这是一劳永逸的事情
但有一点比较重要,那就是能放到 github 上的文件,一定不放,不然就和我一样惨,好不容易配好了一整套,然后突然文件没了,又得重新折腾
Recommend
-
139
程序员 - @bobiscool - 已经做前后端分离 快一年了技术栈趋向成熟- vue- vue router- vuex- node- express做出来的是单页面应用,但是在权限上一直都有问题。
-
15
-
13
关于前后端分离项目部署到阿里云 OSS API 接口问题 V2EX › Vue.js 关于前后端分离项目部署到阿里云 OSS API 接口问题
-
7
V2EX › 程序员 前后端分离 Vue + Egg.js + Mysql 的 JS 全栈实践。动态菜单, RBAC 权限模型, WebSocket 实现站内信。已部署到线上!
-
5
1.从若依代码管理平台下载代码代码下载:https://gitee.com/y_project/R...2....
-
6
第一次给系统上线,虽然团队内已经有其他同学写过部署文档https://segmentfault.com/a/11...,但本文中我们需要补充一些细节,使操作更简便本文主要是补充内容,所以假设服务器上已经部署了...
-
7
gin 部署前后端分离项目 发表于 2020-05-07...
-
13
介绍本文用的经典的前后端分离开源项目、项目的拉取这些在另一篇博客!!! 其中所需要的前后端打包本篇就不做操作了!!不明白的去看另一篇博客!!! 地址:h...
-
7
本文是基于Docker、Docker-compose、nginx、centos7、springboot进行前后端分离项目部署 关于Docker相关知识,可以查看文章:应用容器引擎-Docker Docke...
-
4
Vue+SpringBoot项目分离部署踩坑记录
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK