Dockerfile 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. # ----------------------------------------
  2. # 第一阶段,拉取 node 基础镜像并安装依赖,执行构建
  3. FROM node:16-alpine as builder
  4. ARG BUILD_COUNTRY=""
  5. LABEL Author="Rex <talebook@foxmail.com>"
  6. LABEL Thanks="oldiy <oldiy2018@gmail.com>"
  7. WORKDIR /app
  8. RUN if [ "x${BUILD_COUNTRY}" = "xCN" ]; then \
  9. echo "using repo mirrors for ${BUILD_COUNTRY}"; \
  10. npm config set registry http://mirrors.tencent.com/npm/; \
  11. fi
  12. COPY ["app/package.json", "app/package-lock.json*", "/app/"]
  13. RUN npm install
  14. # spa build mode will clear ssr build data, run it first
  15. COPY app/ /app/
  16. RUN npm run build
  17. #RUN rm -rf node_modules && npm install --production
  18. # ----------------------------------------
  19. # 第二阶段,构建环境
  20. FROM talebook/calibre-docker as server
  21. ARG BUILD_COUNTRY=""
  22. # Set mirrors in china
  23. RUN if [ "x${BUILD_COUNTRY}" = "xCN" ]; then \
  24. echo "using repo mirrors for ${BUILD_COUNTRY}"; \
  25. sed 's@deb.debian.org/debian@mirrors.aliyun.com/debian@' -i /etc/apt/sources.list; \
  26. pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/; \
  27. fi
  28. # install envsubst
  29. RUN apt-get update && apt-get install -y gettext procps vim
  30. # intall nodejs for nuxtjs server side render
  31. RUN curl -fsSL https://deb.nodesource.com/setup_16.x | bash -
  32. RUN apt-get install -y nodejs
  33. # install python packages
  34. COPY ["requirements.txt", "/tmp/"]
  35. RUN pip install -r /tmp/requirements.txt
  36. # ----------------------------------------
  37. # 测试阶段
  38. FROM server as test
  39. RUN pip install flake8 pytest
  40. COPY webserver/ /var/www/talebook/webserver/
  41. COPY tests/ /var/www/talebook/tests/
  42. CMD ["pytest", "/var/www/talebook/tests"]
  43. # ----------------------------------------
  44. # 生产环境
  45. FROM server as production
  46. ARG GIT_VERSION=""
  47. # prepare dirs
  48. RUN mkdir -p /data/log/nginx/ && \
  49. mkdir -p /data/books/library && \
  50. mkdir -p /data/books/extract && \
  51. mkdir -p /data/books/upload && \
  52. mkdir -p /data/books/imports && \
  53. mkdir -p /data/books/convert && \
  54. mkdir -p /data/books/progress && \
  55. mkdir -p /data/books/settings && \
  56. mkdir -p /data/books/ssl && \
  57. mkdir -p /var/www/talebook/ && \
  58. chmod a+w -R /data/log /data/books /var/www
  59. COPY . /var/www/talebook/
  60. COPY conf/nginx/ssl.* /data/books/ssl/
  61. COPY conf/nginx/talebook.conf /etc/nginx/conf.d/talebook.conf
  62. COPY conf/supervisor/talebook.conf /etc/supervisor/conf.d/
  63. COPY --from=builder /app/.nuxt/ /var/www/talebook/app/.nuxt/
  64. COPY --from=builder /app/node_modules/ /var/www/talebook/app/node_modules/
  65. RUN rm -f /etc/nginx/sites-enabled/default /var/www/html -rf && \
  66. cd /var/www/talebook/ && \
  67. echo "VERSION = \"$GIT_VERSION\"" > webserver/version.py && \
  68. echo 'settings = {}' > /data/books/settings/auto.py && \
  69. chmod a+w /data/books/settings/auto.py && \
  70. cp webserver/tags.yaml /data/books/settings/ && \
  71. calibredb add --library-path=/data/books/library/ -r docker/book/ && \
  72. rm -f webserver/*.pyc && \
  73. mkdir -p /prebuilt/ && \
  74. mv /data/* /prebuilt/ && \
  75. chmod +x /var/www/talebook/docker/start.sh
  76. EXPOSE 80 443
  77. VOLUME ["/data"]
  78. CMD ["/var/www/talebook/docker/start.sh"]