Dockerfile 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. FROM alpine:3.21
  2. ARG S6_VER=3.2.0.2
  3. ARG KOREADER_SYNC_SERVER_VER=2.0
  4. ENV PATH=/opt/openresty/nginx/sbin:$PATH
  5. # run gin in production mode
  6. ENV GIN_ENV production
  7. ENV UID=1000
  8. ENV GID=1000
  9. ENV S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0
  10. WORKDIR /app
  11. COPY --chmod=755 root /
  12. RUN apk update \
  13. # install lua openresty
  14. && apk add --no-cache shadow ca-certificates tzdata openssl openresty readline lua5.1 redis luarocks bash \
  15. && apk add --no-cache --virtual koreader-sync-server-dep git wget build-base openssl-dev readline-dev lua5.1-dev \
  16. && ln -s /usr/bin/luarocks-5.1 /usr/bin/luarocks \
  17. # install s6-overlay
  18. && if [ "$(uname -m)" = "x86_64" ];then s6_arch=x86_64;elif [ "$(uname -m)" = "aarch64" ];then s6_arch=aarch64;elif [ "$(uname -m)" = "armv7l" ];then s6_arch=arm; fi \
  19. && wget -P /tmp https://github.com/just-containers/s6-overlay/releases/download/v${S6_VER}/s6-overlay-noarch.tar.xz \
  20. && tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz \
  21. && wget -P /tmp https://github.com/just-containers/s6-overlay/releases/download/v${S6_VER}/s6-overlay-${s6_arch}.tar.xz \
  22. && tar -C / -Jxpf /tmp/s6-overlay-${s6_arch}.tar.xz \
  23. && wget -P /tmp https://github.com/just-containers/s6-overlay/releases/download/v${S6_VER}/s6-overlay-symlinks-noarch.tar.xz \
  24. && tar -C / -Jxpf /tmp/s6-overlay-symlinks-noarch.tar.xz \
  25. && wget -P /tmp https://github.com/just-containers/s6-overlay/releases/download/v${S6_VER}/s6-overlay-symlinks-arch.tar.xz \
  26. && tar -C / -Jxpf /tmp/s6-overlay-symlinks-arch.tar.xz \
  27. # koreader-sync-server
  28. && wget -O /tmp/koreader-sync-server.tar.gz https://github.com/koreader/koreader-sync-server/archive/refs/tags/v${KOREADER_SYNC_SERVER_VER}.tar.gz \
  29. && mkdir -p /app/koreader-sync-server \
  30. && tar -xvf /tmp/koreader-sync-server.tar.gz -C /app/koreader-sync-server --strip-components 1 \
  31. && mv /app/koreader-sync-server/config /app/koreader-sync-server/config.default \
  32. # nginx crt
  33. && mkdir -p /etc/nginx/ssl \
  34. && openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt -subj "/" \
  35. # luarocks install
  36. && luarocks install --verbose luasocket \
  37. && luarocks install luasec \
  38. && luarocks install redis-lua \
  39. && luarocks install busted \
  40. # patch gin for https support
  41. # https://github.com/gster/gin.git
  42. && git clone --depth 1 https://github.com/ostinelli/gin.git \
  43. # luaposix 36.2.1
  44. && sed -i s/33.3.1/36.2.1/g gin/gin-0.2.0-1.rockspec \
  45. && cd gin \
  46. && luarocks make \
  47. #run gin in foreground
  48. && echo "daemon off;" >> /app/koreader-sync-server/config.default/nginx.conf \
  49. #create koreader user
  50. && useradd -u 1000 -U -d /app -s /bin/false koreader \
  51. && usermod -G users koreader \
  52. #
  53. && apk del koreader-sync-server-dep \
  54. && rm -rf gin /var/cache/apk/* /tmp/*
  55. VOLUME /var/log/redis /var/lib/redis /config
  56. EXPOSE 7200
  57. ENTRYPOINT [ "/init" ]