sub-store / Dockerfile
ymv1uu09's picture
Update Dockerfile
ad5711f verified
Raw
History Blame Contribute Delete
3.32 kB
FROM alpine:latest
WORKDIR /opt/app
# 设置时区并保留 tzdata 以保证时区功能正常
ENV TIME_ZONE=Asia/Shanghai
RUN apk add --no-cache nodejs curl tzdata unzip \
&& cp /usr/share/zoneinfo/$TIME_ZONE /etc/localtime \
&& echo $TIME_ZONE > /etc/timezone
# 预先创建数据目录以便一次性设置权限
RUN mkdir -p /opt/app/data
# 在一个层中下载所有需要的文件以减少镜像大小
RUN curl -s -L --connect-timeout 5 --max-time 10 --retry 3 --retry-delay 2 \
-o /opt/app/sub-store.bundle.js https://github.com/sub-store-org/Sub-Store/releases/latest/download/sub-store.bundle.js \
&& curl -s -L --connect-timeout 5 --max-time 10 --retry 3 --retry-delay 2 \
-o /opt/app/dist.zip https://github.com/sub-store-org/Sub-Store-Front-End/releases/latest/download/dist.zip \
&& unzip /opt/app/dist.zip -d /opt/app \
&& mv /opt/app/dist /opt/app/frontend \
&& rm /opt/app/dist.zip \
&& curl -s -L --connect-timeout 5 --max-time 10 --retry 3 --retry-delay 2 \
-o /opt/app/http-meta.bundle.js https://github.com/xream/http-meta/releases/latest/download/http-meta.bundle.js \
&& curl -s -L --connect-timeout 5 --max-time 10 --retry 3 --retry-delay 2 \
-o /opt/app/data/tpl.yaml https://github.com/xream/http-meta/releases/latest/download/tpl.yaml \
&& curl -s -L --connect-timeout 5 --max-time 10 --retry 3 --retry-delay 2 \
-o /opt/app/data/GeoLite2-Country.mmdb https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-Country.mmdb \
&& curl -s -L --connect-timeout 5 --max-time 10 --retry 3 --retry-delay 2 \
-o /opt/app/data/GeoLite2-ASN.mmdb https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-ASN.mmdb
# 在单独的层中下载并解压 mihomo 以便更好地缓存
RUN version=$(curl -s -L --connect-timeout 5 --max-time 10 --retry 3 --retry-delay 2 \
'https://github.com/MetaCubeX/mihomo/releases/download/Prerelease-Alpha/version.txt') \
&& arch=$(arch | sed s/aarch64/arm64/ | sed s/x86_64/amd64-compatible/) \
&& url="https://github.com/MetaCubeX/mihomo/releases/download/Prerelease-Alpha/mihomo-linux-$arch-$version.gz" \
&& curl -s -L --connect-timeout 5 --max-time 10 --retry 3 --retry-delay 2 "$url" -o /opt/app/data/http-meta.gz \
&& gunzip /opt/app/data/http-meta.gz \
&& chmod +x /opt/app/data/http-meta
# 设置权限并清理
RUN chmod 755 -R /opt/app \
&& apk del unzip \
&& rm -rf /var/cache/apk/*
# 设置运行时配置的环境变量 - 修复了可能导致错误的环境变量配置
ENV SUB_STORE_BACKEND_API_HOST=:: \
SUB_STORE_FRONTEND_HOST=:: \
SUB_STORE_FRONTEND_PORT=7860 \
SUB_STORE_BACKEND_MERGE=true \
SUB_STORE_FRONTEND_BACKEND_PATH="/" \
SUB_STORE_FRONTEND_PATH=/opt/app/frontend \
SUB_STORE_DATA_BASE_PATH=/opt/app/data \
SUB_STORE_MMDB_COUNTRY_PATH=/opt/app/data/GeoLite2-Country.mmdb \
SUB_STORE_MMDB_ASN_PATH=/opt/app/data/GeoLite2-ASN.mmdb \
META_FOLDER=/opt/app/data \
HOST=:: \
PORT=9876
# 创建启动脚本
COPY --chmod=755 <<'EOF' /opt/app/entrypoint.sh
#!/bin/sh
cd /opt/app/data
node /opt/app/http-meta.bundle.js > /opt/app/data/http-meta.log 2>&1 &
echo "HTTP-META is running..."
exec node /opt/app/sub-store.bundle.js
EOF
ENTRYPOINT ["/opt/app/entrypoint.sh"]
# 暴露端口
EXPOSE 7860