- config.toml
# 记录当前服务器的ip和启动端口号,当前服务器的ip用于生成对应的视频链接地址
[server]
ip = "127.0.0.1"
port = 8080
# 关系型数据库配置
[mysql]
host = "host.docker.internal"
port = 3307
database = "douyin"
username = "root"
password = "123456"
charset = "utf8mb4"
parse_time = true
loc = "Local"
# redis存储每个用户是否对某个视频点赞,以及关注了某个人
[redis]
host = "host.docker.internal:6379"
port = 49153
database = 0
# 保存视频的路径,截图的路径(截图放在lib目录)
[path]
ffmpeg_path = "./lib/ffmpeg.exe"
static_source_path = "./static"
- docker-compose.yml
version: '3.7' # docker compose语法版本
networks:
todolist: # 网络
driver: bridge # 驱动程序
services:
mysql:
container_name: mysql
image: mysql:latest
restart: always # 容器在停止后总是重新启动
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=tiktok
- MYSQL_USER=tiktok
- MYSQL_PASSWORD=tiktok
- TZ=Asia/Shanghai
volumes:
- ./config/sql:/docker-entrypoint-initdb.d/ # 将本地目录 ./config/sql 挂载到容器内部的 /docker-entrypoint-initdb.d/ 目录,提供用于初始化数据库的SQL脚本
ports:
- "3306:3306" # 将容器的3306端口映射到主机的3306端口
redis:
container_name: redis
image: redis:latest
restart: always
volumes:
- /usr/local/redis:/usr/local/redis # 将主机目录 /usr/local/redis 挂载到容器内部的 /usr/local/redis 目录,可以在主机上持久化存储Redis数据
ports:
- "6379:6379"
- Dockerfile
FROM golang:1.20.7 as builder
ENV GO111MODULE=on
GOPROXY=https://goproxy.cn,direct
# 设置工作目录为 /app
WORKDIR /app
# 将当前目录下的所有文件复制到容器的 /app 目录中
COPY . .
RUN go mod tidy
# 切换工作目录到 /app/cmd
WORKDIR /app/cmd
RUN CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="-w -s" -o ../main
# 切换工作目录回到 /app
WORKDIR /app
# 创建一个名为 publish 的目录,并将编译后的可执行文件 main 和 conf 目录复制到 publish 目录中
RUN mkdir publish
&& cp main publish
&& cp -r conf publish
# 指定基础镜像为 Busybox 1.28.4
FROM busybox:1.28.4
# 设置工作目录为 /app
WORKDIR /app
# 从builder阶段的镜像中复制 /app/publish目录到当前镜像的 /app目录
COPY --from=builder /app/publish .
# 指定Gin框架的运行模式为发布模式
ENV GIN_MODE=release
# 容器将监听的端口号为 8080
EXPOSE 8080
# 运行编译后的可执行文件 main
ENTRYPOINT ["./main"]
项目启动后,回到docker-desktop查看