From b7f400f477f7f6e510eb52daa90561697ad551cf Mon Sep 17 00:00:00 2001 From: lifegpc Date: Wed, 3 Jul 2024 00:57:20 +0000 Subject: [PATCH] Add docker health check --- .github/workflows/docker.yml | 4 ++-- Dockerfile | 26 ++++++++++++++++++++++++++ src/opthelper.rs | 24 +++++++++++++----------- 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 897984f..1f79e56 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -20,7 +20,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 submodules: true @@ -40,7 +40,7 @@ jobs: - name: Switch docker driver run: docker buildx create --use - name: Build and push Docker image - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v6 with: context: . cache-from: type=gha,scope=docker-${{ steps.cache_key.outputs.cache_key }} diff --git a/Dockerfile b/Dockerfile index c29ad5f..b6ecee7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -45,6 +45,26 @@ RUN export PKG_CONFIG_PATH=/clib/lib/pkgconfig \ && ./configure --enable-shared --disable-static --enable-gpl --enable-version3 --enable-libx264 --prefix=/clib \ && make -j$(grep -c ^processor /proc/cpuinfo) && make install \ && cd ~ && rm -rf ffmpeg +RUN cd ~ && \ + curl -L "https://github.com/curl/curl/releases/download/curl-8_8_0/curl-8.8.0.tar.gz" -o curl-8.8.0.tar.gz && \ + tar -xzvf curl-8.8.0.tar.gz && \ + cd curl-8.8.0 && \ + mkdir build && cd build && \ + cmake -DCMAKE_BUILD_TYPE=Release -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_SRP=ON \ + -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON \ + -DCURL_DISABLE_DIGEST_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON \ + -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_DICT=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_FILE=ON \ + -DCURL_DISABLE_FORM_API=ON -DCURL_DISABLE_FTP=ON -DCURL_DISABLE_GETOPTIONS=ON \ + -DCURL_DISABLE_GOPHER=ON -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_HSTS=ON \ + -DCURL_DISABLE_HTTP_AUTH=ON -DCURL_DISABLE_IMAP=ON -DCURL_DISABLE_LDAP=ON \ + -DCURL_DISABLE_LDAPS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MQTT=ON \ + -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_POP3=ON \ + -DCURL_DISABLE_PROXY=ON -DCURL_DISABLE_RTSP=ON -DCURL_DISABLE_SMB=ON \ + -DCURL_DISABLE_SMTP=ON -DCURL_DISABLE_TELNET=ON -DCURL_DISABLE_TFTP=ON \ + -DUSE_MANUAL=OFF -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=ON -DCURL_USE_LIBPSL=OFF \ + -DCURL_USE_LIBSSH2=OFF -DCMAKE_INSTALL_PREFIX=/clib -DBUILD_TESTING=OFF ../ && \ + make -j$(grep -c ^processor /proc/cpuinfo) && make install && \ + cd ~ && rm -rf curl-8.8.0 curl-8.8.0.tar.gz WORKDIR /app COPY . /app RUN export PKG_CONFIG_PATH=/clib/lib/pkgconfig \ @@ -69,9 +89,15 @@ RUN apt-get update && apt-get install -y \ COPY --from=builder /app/target/release/pixiv_downloader /app/pixiv_downloader COPY --from=builder /clib/lib /app/lib COPY --from=builder /app/i18n-output /app +COPY --from=builder /clib/bin /app/bin ENV LD_LIBRARY_PATH=/app/lib +ENV PATH=/app/bin:$PATH +ENV LC_ALL=C.utf8 RUN mkdir -p /app/data && mkdir -p /app/downloads && mkdir -p /app/temp ENTRYPOINT [ "/app/pixiv_downloader" ] CMD [ "s" ] + +HEALTHCHECK --interval=30s --timeout=30s --start-period=10s --retries=3 \ + CMD curl -Lk -fsS http://localhost:8080/api/version || exit 1 diff --git a/src/opthelper.rs b/src/opthelper.rs index a540039..f29408c 100644 --- a/src/opthelper.rs +++ b/src/opthelper.rs @@ -413,20 +413,22 @@ impl OptHelper { #[cfg(feature = "server")] /// Return the server pub fn server(&self) -> SocketAddr { - match self.opt.get_ref().server { - Some(server) => { - return server; - } - None => {} - } - if self.settings.get_ref().have("server") { - let v = self.settings.get_ref().get("server").unwrap(); - return SocketAddr::from_str(v.as_str().unwrap()).unwrap(); - } #[cfg(feature = "docker")] return SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), 8080); #[cfg(not(feature = "docker"))] - SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080) + { + match self.opt.get_ref().server { + Some(server) => { + return server; + } + None => {} + } + if self.settings.get_ref().have("server") { + let v = self.settings.get_ref().get("server").unwrap(); + return SocketAddr::from_str(v.as_str().unwrap()).unwrap(); + } + SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080) + } } /// Return whether to use description from Web API when description from APP API is empty.