mirror of
https://github.com/dec0dOS/zero-ui.git
synced 2025-08-19 04:50:35 -07:00
feat: implementation of unified Docker container
This creates a Docker container with ZeroTier-One, zero-ui and ZeroNSd all-in-one solution. It also includes a trivial fix to allow ZeroNSd to work with zero-ui.
This commit is contained in:
parent
0294eb6436
commit
3e698df542
4 changed files with 200 additions and 0 deletions
81
docker/all-in-one/Dockerfile
Normal file
81
docker/all-in-one/Dockerfile
Normal file
|
@ -0,0 +1,81 @@
|
|||
# ---- initialize build stage
|
||||
FROM node:current-alpine as builder
|
||||
|
||||
# ---- build ZeroTier-One
|
||||
RUN apk add --update --no-cache alpine-sdk linux-headers \
|
||||
&& git clone --quiet https://github.com/zerotier/ZeroTierOne.git /src \
|
||||
&& make -C /src -f make-linux.mk
|
||||
|
||||
# ---- build Zero-UI
|
||||
ENV INLINE_RUNTIME_CHUNK=false
|
||||
ENV GENERATE_SOURCEMAP=false
|
||||
|
||||
RUN yarn set version berry
|
||||
|
||||
WORKDIR /app/frontend
|
||||
COPY ./frontend/package*.json /app/frontend
|
||||
COPY ./frontend/yarn.lock /app/frontend
|
||||
RUN yarn install
|
||||
|
||||
COPY ./frontend /app/frontend
|
||||
RUN yarn build
|
||||
|
||||
# ---- build ZeroNSd \
|
||||
FROM rust:alpine as rbuild
|
||||
|
||||
ARG IS_LOCAL=0
|
||||
ARG VERSION=main
|
||||
ARG IS_TAG=0
|
||||
|
||||
RUN apk add --update --no-cache git libressl-dev musl-dev \
|
||||
&& git clone https://github.com/zerotier/zeronsd.git \
|
||||
&& cd zeronsd \
|
||||
&& sh cargo-docker.sh
|
||||
|
||||
# ---- initialize deploy stage
|
||||
FROM node:current-alpine
|
||||
|
||||
LABEL description="ZeroTier One as Docker Image"
|
||||
LABEL org.opencontainers.image.authors="mcondarelli@soft-in.com"
|
||||
|
||||
# ---- copy ZeroTier-One
|
||||
ARG ZT_VERSION
|
||||
|
||||
LABEL version="${ZT_VERSION}"
|
||||
|
||||
RUN apk add --update --no-cache libc6-compat libstdc++
|
||||
|
||||
COPY --from=builder /src/zerotier-one /usr/sbin/
|
||||
RUN mkdir -p /var/lib/zerotier-one \
|
||||
&& ln -s /usr/sbin/zerotier-one /usr/sbin/zerotier-idtool \
|
||||
&& ln -s /usr/sbin/zerotier-one /usr/sbin/zerotier-cli
|
||||
|
||||
EXPOSE 9993/udp
|
||||
|
||||
# ---- copy Zero-UI
|
||||
WORKDIR /app/frontend/build
|
||||
COPY --from=builder /app/frontend/build /app/frontend/build/
|
||||
|
||||
WORKDIR /app/backend
|
||||
COPY ./backend/package*.json /app/backend
|
||||
COPY ./backend/yarn.lock /app/backend
|
||||
RUN yarn install
|
||||
|
||||
COPY ./backend /app/backend
|
||||
|
||||
EXPOSE 4000
|
||||
ENV NODE_ENV=production
|
||||
ENV ZU_SECURE_HEADERS=true
|
||||
ENV ZU_SERVE_FRONTEND=true
|
||||
|
||||
# ---- copy ZeroNSd
|
||||
COPY --from=rbuild /usr/local/cargo/bin/zeronsd /usr/sbin/
|
||||
|
||||
# ---- final setup
|
||||
|
||||
VOLUME /var/lib/zerotier
|
||||
|
||||
COPY docker/all-in-one/entrypoint.sh /entrypoint.sh
|
||||
RUN chmod 755 /entrypoint.sh
|
||||
|
||||
CMD /entrypoint.sh
|
75
docker/all-in-one/Dockerfile.debian
Normal file
75
docker/all-in-one/Dockerfile.debian
Normal file
|
@ -0,0 +1,75 @@
|
|||
# ---- initialize build stage
|
||||
FROM node:current-bullseye as builder
|
||||
|
||||
# ---- build ZeroTier-One
|
||||
RUN apt-get update && apt-get install -y build-essential \
|
||||
&& git clone --quiet https://github.com/zerotier/ZeroTierOne.git /src \
|
||||
&& make -C /src -f make-linux.mk
|
||||
|
||||
# ---- build Zero-UI
|
||||
ENV INLINE_RUNTIME_CHUNK=false
|
||||
ENV GENERATE_SOURCEMAP=false
|
||||
|
||||
RUN yarn set version berry
|
||||
|
||||
WORKDIR /app/frontend
|
||||
COPY ./frontend/package*.json /app/frontend
|
||||
COPY ./frontend/yarn.lock /app/frontend
|
||||
RUN yarn install
|
||||
|
||||
COPY ./frontend /app/frontend
|
||||
RUN yarn build
|
||||
|
||||
# ---- build ZeroNSd \
|
||||
FROM rust:bullseye as rbuild
|
||||
|
||||
ARG IS_LOCAL=0
|
||||
ARG VERSION=main
|
||||
ARG IS_TAG=0
|
||||
|
||||
COPY ./docker/all-in-one/zeronsd.patch /tmp/zeronsd.patch
|
||||
RUN apt-get update && apt-get install --no-install-recommends -y git libssl-dev \
|
||||
&& git clone https://github.com/zerotier/zeronsd.git \
|
||||
&& cd zeronsd \
|
||||
&& patch -p 1 </tmp/zeronsd.patch \
|
||||
&& sh cargo-docker.sh
|
||||
|
||||
# ---- initialize deploy stage
|
||||
FROM node:current-bullseye
|
||||
|
||||
LABEL description="ZeroTier One as Docker Image"
|
||||
LABEL org.opencontainers.image.authors="mcondarelli@soft-in.com"
|
||||
|
||||
# ---- copy ZeroTier-One
|
||||
ARG ZT_VERSION
|
||||
LABEL version="${ZT_VERSION}"
|
||||
COPY --from=builder /src/zerotier-one /usr/sbin/
|
||||
RUN mkdir -p /var/lib/zerotier-one \
|
||||
&& ln -s /usr/sbin/zerotier-one /usr/sbin/zerotier-idtool \
|
||||
&& ln -s /usr/sbin/zerotier-one /usr/sbin/zerotier-cli
|
||||
EXPOSE 9993/udp
|
||||
|
||||
# ---- copy Zero-UI
|
||||
WORKDIR /app/frontend/build
|
||||
COPY --from=builder /app/frontend/build /app/frontend/build/
|
||||
WORKDIR /app/backend
|
||||
COPY ./backend/package*.json /app/backend
|
||||
COPY ./backend/yarn.lock /app/backend
|
||||
RUN yarn install
|
||||
COPY ./backend /app/backend
|
||||
EXPOSE 4000
|
||||
ENV NODE_ENV=production
|
||||
ENV ZU_SECURE_HEADERS=false
|
||||
ENV ZU_SERVE_FRONTEND=true
|
||||
ENV ZU_DATAPATH=/var/lib/zerotier-one/db.json
|
||||
|
||||
# ---- copy ZeroNSd
|
||||
COPY --from=rbuild /usr/local/cargo/bin/zeronsd /usr/sbin/
|
||||
RUN apt-get update && apt-get install --no-install-recommends -y ca-certificates curl
|
||||
|
||||
# ---- final setup
|
||||
|
||||
VOLUME /var/lib/zerotier-one
|
||||
COPY docker/all-in-one/entrypoint.sh /entrypoint.sh
|
||||
RUN chmod 755 /entrypoint.sh
|
||||
CMD /entrypoint.sh
|
32
docker/all-in-one/entrypoint.sh
Normal file
32
docker/all-in-one/entrypoint.sh
Normal file
|
@ -0,0 +1,32 @@
|
|||
#!/bin/sh
|
||||
|
||||
grepzt() {
|
||||
(find /proc -name exe | xargs -I{} readlink {}) 2>/dev/null | grep -q zerotier-one
|
||||
return $?
|
||||
}
|
||||
|
||||
echo "starting zerotier"
|
||||
setsid /usr/sbin/zerotier-one &
|
||||
|
||||
while ! grepzt
|
||||
do
|
||||
echo "zerotier hasn't started, waiting a second"
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo "joining networks"
|
||||
|
||||
for i in "$@"
|
||||
do
|
||||
echo "joining $i"
|
||||
|
||||
while ! zerotier-cli join "$i"
|
||||
do
|
||||
echo "joining $i failed; trying again in 1s"
|
||||
sleep 1
|
||||
done
|
||||
done
|
||||
|
||||
echo "starting node"
|
||||
node ./bin/www
|
||||
echo "at end"
|
12
docker/all-in-one/zeronsd.patch
Normal file
12
docker/all-in-one/zeronsd.patch
Normal file
|
@ -0,0 +1,12 @@
|
|||
diff --git a/src/utils.rs b/src/utils.rs
|
||||
index 0f62d52..0f90e69 100644
|
||||
--- a/src/utils.rs
|
||||
+++ b/src/utils.rs
|
||||
@@ -21,6 +21,7 @@ pub(crate) fn central_config(token: String) -> Configuration {
|
||||
let mut config = Configuration::default();
|
||||
config.user_agent = Some(version());
|
||||
config.bearer_access_token = Some(token);
|
||||
+ config.base_path = "http://localhost:3000/api".to_string();
|
||||
return config;
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue