From 1f618201f9a4fb252f704546cbda0d4a5089fde9 Mon Sep 17 00:00:00 2001 From: HappyLoLTroll <71263735+HappyLoLTroll@users.noreply.github.com> Date: Tue, 22 Apr 2025 12:14:39 +0200 Subject: [PATCH] fix docker build (#7) --- Dockerfile | 71 ++++++++++++++++++++++++++++++++++++++------- README.md | 2 -- docker-compose.yaml | 14 +++++---- 3 files changed, 69 insertions(+), 18 deletions(-) diff --git a/Dockerfile b/Dockerfile index c276a35..ef9fb0c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,70 @@ -FROM golang:alpine +FROM golang:bookworm -RUN apk update && \ - apk upgrade && \ - apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community \ - ffmpeg \ - libheif \ - libheif-dev \ +ARG FFMPEG_VERSION=7.1 +ARG LIBHEIF_VERSION=1.19.7 + +RUN apt-get update && \ + apt-get upgrade -y && \ + apt-get install -y --no-install-recommends \ bash \ git \ - pkgconfig \ - build-base + pkg-config \ + build-essential \ + tar \ + wget \ + xz-utils \ + gcc \ + cmake \ + libde265-dev && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* +# libheif +ENV LIBHEIF_BUILD="https://github.com/strukturag/libheif/releases/download/v${LIBHEIF_VERSION}/libheif-${LIBHEIF_VERSION}.tar.gz" +RUN wget -O libheif.tar.gz ${LIBHEIF_BUILD} && \ + mkdir -p libheif && \ + tar -xzvf libheif.tar.gz -C libheif --strip-components=1 && \ + rm libheif.tar.gz && \ + cd libheif && \ + mkdir build && \ + cd build && \ + cmake --preset=release .. && \ + make && \ + make install + +# ffmpeg +RUN mkdir -p \ + /usr/local/bin \ + /usr/local/lib/pkgconfig/ \ + /usr/local/lib/ \ + /usr/local/include + +RUN ARCH=$(uname -m) && \ + if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then \ + echo "detected ARM architecture" && \ + export FFMPEG_BUILD="https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-n${FFMPEG_VERSION}-latest-linuxarm64-gpl-shared-${FFMPEG_VERSION}.tar.xz"; \ + else \ + echo "detected x86_64 architecture" && \ + export FFMPEG_BUILD="https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-n${FFMPEG_VERSION}-latest-linux64-gpl-shared-${FFMPEG_VERSION}.tar.xz"; \ + fi && \ + wget -O ffmpeg.tar.xz ${FFMPEG_BUILD} && \ + mkdir -p ffmpeg && \ + tar -xf ffmpeg.tar.xz -C ffmpeg --strip-components=1 && \ + rm ffmpeg.tar.xz && \ + cp -rv ffmpeg/bin/* /usr/local/bin/ && \ + cp -rv ffmpeg/lib/* /usr/local/lib/ && \ + cp -rv ffmpeg/include/* /usr/local/include/ && \ + cp -rv ffmpeg/lib/pkgconfig/* /usr/local/lib/pkgconfig/ && \ + ldconfig /usr/local + +# env for building +ENV CGO_CFLAGS="-I/usr/local/include" +ENV CGO_LDFLAGS="-L/usr/local/lib" +ENV PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" + WORKDIR /bot -RUN mkdir downloads +RUN mkdir -p downloads COPY . . diff --git a/README.md b/README.md index c22a759..9b37664 100644 --- a/README.md +++ b/README.md @@ -46,8 +46,6 @@ _this method only works on linux and macos, if you want to build the bot on wind ``` ## docker (recommended) -> [!WARNING] -> this method is currently not working due to a wrong version of the libav (ffmpeg) library in the docker image. feel free to open a PR if you can fix it. 1. build the image using the dockerfile: diff --git a/docker-compose.yaml b/docker-compose.yaml index 8875f8c..a693fc6 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,22 +1,24 @@ services: govd-bot: image: govd-bot + container_name: govd-bot restart: unless-stopped networks: - govd-network env_file: - .env depends_on: - - db + - db db: - image: mysql + image: mariadb:latest + container_name: mariadb restart: unless-stopped environment: - MYSQL_DATABASE: govd - MYSQL_USER: govd - MYSQL_PASSWORD: password - MYSQL_ROOT_PASSWORD: example + MARIADB_DATABASE: govd + MARIADB_USER: govd + MARIADB_PASSWORD: password + MARIADB_ROOT_PASSWORD: example networks: - govd-network