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
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK