|
@@ -1,30 +1,54 @@
|
|
|
|
|
|
|
|
|
-FROM alpine:3.11
|
|
|
+ARG BASE_IMAGE=alpine:3.11
|
|
|
+ARG SOURCE_DIR_PATH=/switchbot-mqtt
|
|
|
+ARG VIRTUALENV_PATH=$SOURCE_DIR_PATH/.venv
|
|
|
+
|
|
|
+
|
|
|
+FROM $BASE_IMAGE as build
|
|
|
|
|
|
RUN apk add --no-cache \
|
|
|
gcc \
|
|
|
glib-dev \
|
|
|
make \
|
|
|
musl-dev \
|
|
|
- tini
|
|
|
-
|
|
|
-RUN apk add --no-cache py3-virtualenv
|
|
|
-
|
|
|
-
|
|
|
+ py3-virtualenv
|
|
|
|
|
|
+ARG SOURCE_DIR_PATH
|
|
|
+RUN mkdir $SOURCE_DIR_PATH \
|
|
|
+ && chown nobody $SOURCE_DIR_PATH
|
|
|
USER nobody
|
|
|
|
|
|
-ARG SOURCE_DIR_PATH=/switchbot-mqtt
|
|
|
-ARG SWITCHBOT_MQTT_VERSION=
|
|
|
-COPY --chown=nobody . $SOURCE_DIR_PATH
|
|
|
+ARG VIRTUALENV_PATH
|
|
|
+RUN virtualenv --no-site-packages $VIRTUALENV_PATH
|
|
|
+ENV PATH=$VIRTUALENV_PATH/bin:$PATH
|
|
|
WORKDIR $SOURCE_DIR_PATH
|
|
|
-RUN virtualenv --no-site-packages .venv \
|
|
|
- && source .venv/bin/activate \
|
|
|
- && pip install --no-cache-dir pipenv \
|
|
|
- && SETUPTOOLS_SCM_PRETEND_VERSION=$SWITCHBOT_MQTT_VERSION pipenv install --deploy --verbose \
|
|
|
- && pipenv clean --verbose
|
|
|
+RUN pip install --no-cache-dir pipenv
|
|
|
+COPY --chown=nobody . $SOURCE_DIR_PATH
|
|
|
+ARG SWITCHBOT_MQTT_VERSION=
|
|
|
+RUN SETUPTOOLS_SCM_PRETEND_VERSION=$SWITCHBOT_MQTT_VERSION pipenv install --deploy --verbose
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+USER 0
|
|
|
+RUN chown -R 0:0 $SOURCE_DIR_PATH
|
|
|
+
|
|
|
+
|
|
|
+FROM $BASE_IMAGE
|
|
|
+
|
|
|
+RUN apk add --no-cache \
|
|
|
+ glib \
|
|
|
+ python3 \
|
|
|
+ tini \
|
|
|
+ && find / -xdev -type f -perm /u+s -exec chmod -c u-s {} \; \
|
|
|
+ && find / -xdev -type f -perm /g+s -exec chmod -c g-s {} \;
|
|
|
+
|
|
|
+
|
|
|
+USER nobody
|
|
|
|
|
|
-ENV PATH=$SOURCE_DIR_PATH/.venv/bin:$PATH
|
|
|
+ARG SOURCE_DIR_PATH
|
|
|
+COPY --from=build $SOURCE_DIR_PATH $SOURCE_DIR_PATH
|
|
|
+ARG VIRTUALENV_PATH
|
|
|
+ENV PATH=$VIRTUALENV_PATH/bin:$PATH
|
|
|
ENTRYPOINT ["tini", "--"]
|
|
|
CMD ["switchbot-mqtt"]
|