大项目服务端部署上线 | 青训营笔记

113 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天

虽然部分功能还没有开发完成,但是基础的注册登录,视频发布,浏览,点赞评论都完成了,所以我打算先将项目部署到服务器,把项目部署这个环境打通。

部署方式:

采用因为目前云原生比较火,又以其中的k8s和docker为最,我的话k8s不太了解,所以打算通过docker+docker-compose的方式进行部署,只需要编写Dockerfile和docker-compose.yml两个配置文件就可以,很简单。

Dockerfile配置:
FROM golang:1.18

MAINTAINER "lemuzhi"

WORKDIR /go/src/douyin-api

COPY . /go/src/douyin-api

RUN go env -w GO111MODULE=on \
    && go env -w GOPROXY=https://goproxy.cn,direct \
    && go env -w CGO_ENABLED=0 \
#    && go env \
#    && go mod tidy \
    && go build -o server .

EXPOSE 8080
ENTRYPOINT ./server

很简单,指定了golang的版本1.18,作者名称,工作目录写的是/go/src/douyin-api,这个可以随便写,只要跟下面的COPY对应上就可以。 COPY的意思是将当前目录下的所有文件和文件夹都拷贝到/go/src/douyin-api目录里,这就是我们的工作目录。 然后是RUN 后面跟的是需要执行的命令,设置环境变量,然后构建可执行文件,然后暴露端口8080供外部访问,之后就是运行我们构建好的程序。

docker-compose.yml配置:
version: '3'

services:
  douyin-api:
    build: .
    ports:
      - 8080:8080
    volumes:
      - ./public:/go/src/douyin-api/public
      

这里面比较简单,开头指定docker-compose.yml文件的版本,然后是具体服务相关的设置,镜像名称是douyin-api,构建地址是当前目录,容器和外部端口映射都是8080。

最后是数据卷,因为我们要上传视频,如果不设置数据卷的话,视频上传后默认存放在容器内部,就会造成我们重新部署项目会导致之前的数据丢失,如果我们设置了数据卷,将外部的文件夹和容器内的文件夹进行关联,数据会同时存在容器外部和内部,并且下次重新部署不会导致数据丢失。

然后就是需要在服务器上安装环境,将mysql、redis、docker、docker-compose等等需要的环境都安装好,具体的教程就不展开说了,可以百度一下,相关教程很多的。

然后拉取git上的项目,进入到项目目录,运行如下命令即可构建并运行,一步到位,非常简单。

docker-compose -p -d --build

可以通过docker ps查看,如果出现对应的IMAGE就表示成功。

image.png

如果没有则失败,通过docker logs -f <CONTAINER ID> 查看日志,分析原因。

其他几个docker常用的命令还有:

查看所以容器列表:
docker ps -a

查看镜像列表:
docker images

启动容器:
docker start <CONTAINER ID>

重启容器:
docker restart <CONTAINER ID>

停止容器:
docker stop <CONTAINER ID>

今天分享就到这里,我们下次再见。