这是我参与「第五届青训营 」伴学笔记创作活动的第 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就表示成功。
如果没有则失败,通过docker logs -f <CONTAINER ID> 查看日志,分析原因。
其他几个docker常用的命令还有:
查看所以容器列表:
docker ps -a
查看镜像列表:
docker images
启动容器:
docker start <CONTAINER ID>
重启容器:
docker restart <CONTAINER ID>
停止容器:
docker stop <CONTAINER ID>
今天分享就到这里,我们下次再见。