Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 108 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
FROM zonemaster/cli:local AS build

ARG version

USER root

RUN apk add --no-cache \
make \
curl \
gcc \
perl-dev \
musl-dev \
perl-app-cpanminus

RUN apk add --no-cache \
jq \
perl-class-method-modifiers \
perl-config-inifiles \
perl-dbd-sqlite \
perl-dbi \
perl-file-share \
perl-file-slurp \
perl-html-parser \
perl-http-parser-xs \
perl-mojolicious \
perl-io-stringy \
perl-log-any \
perl-log-dispatch \
perl-moose \
perl-parallel-forkmanager \
perl-plack \
perl-role-tiny \
perl-test-nowarnings \
perl-test-differences \
perl-test-exception \
perl-try-tiny \
perl-doc

# for METRIC
RUN cpanm --notest --no-wget --from https://cpan.metacpan.org/ \
Net::Statsd

COPY ./Zonemaster-Backend-${version}.tar.gz ./Zonemaster-Backend-${version}.tar.gz

RUN cpanm --notest --no-wget --from https://cpan.metacpan.org \
./Zonemaster-Backend-${version}.tar.gz


FROM zonemaster/cli:local
USER root

COPY --from=build /usr/local/share/perl5 /usr/local/share/perl5
COPY --from=build /usr/local/bin/ /usr/local/bin/
COPY --from=build /usr/lib/perl5 /usr/lib/perl5

RUN apk add --no-cache \
jq \
perl-config-inifiles \
perl-mojolicious \
perl-moose \
perl-dbi \
perl-dbd-sqlite \
perl-plack \
perl-parallel-forkmanager

# Create zonemaster user and group
RUN addgroup -S zonemaster
RUN adduser -S zonemaster -G zonemaster

RUN cd `perl -MFile::ShareDir=dist_dir -E 'say dist_dir("Zonemaster-Backend")'` && \
install -v -m 755 -d /etc/zonemaster && \
install -v -m 775 -g zonemaster -d /var/log/zonemaster && \
install -v -m 640 -g zonemaster ./backend_config.ini /etc/zonemaster/


# Init SQLite database
RUN install -v -m 755 -o zonemaster -g zonemaster -d /var/lib/zonemaster
USER zonemaster
RUN $(perl -MFile::ShareDir -le 'print File::ShareDir::dist_dir("Zonemaster-Backend")')/create_db.pl
USER zonemaster
COPY zonemaster_launch /usr/local/bin

USER root
ARG S6_OVERLAY_VERSION=3.2.1.0

# Install S6
ADD https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz /tmp
RUN tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz
ADD https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-x86_64.tar.xz /tmp
RUN tar -C / -Jxpf /tmp/s6-overlay-x86_64.tar.xz


# RPCAPI service
RUN mkdir /etc/s6-overlay/s6-rc.d/rpcapi
RUN echo "longrun" > /etc/s6-overlay/s6-rc.d/rpcapi/type
RUN echo "#!/command/with-contenv sh" > /etc/s6-overlay/s6-rc.d/rpcapi/run
RUN echo "zonemaster_launch rpcapi" >> /etc/s6-overlay/s6-rc.d/rpcapi/run

# TESTAGENT sevice
RUN mkdir /etc/s6-overlay/s6-rc.d/testagent
RUN echo "longrun" > /etc/s6-overlay/s6-rc.d/testagent/type
RUN echo "#!/command/with-contenv sh" > /etc/s6-overlay/s6-rc.d/testagent/run
RUN echo "zonemaster_launch testagent" >> /etc/s6-overlay/s6-rc.d/testagent/run

RUN touch /etc/s6-overlay/s6-rc.d/user/contents.d/rpcapi
RUN touch /etc/s6-overlay/s6-rc.d/user/contents.d/testagent

ENTRYPOINT ["/usr/local/bin/zonemaster_launch"]
2 changes: 2 additions & 0 deletions MANIFEST.SKIP
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
^.*\.log
^.*\.swp$
^MANIFEST\.SKIP$
^Dockerfile$
^zonemaster_launch$
^\.github/
^docs/internal-documentation/
\.po$
Expand Down
15 changes: 14 additions & 1 deletion Makefile.PL
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,20 @@ sub MY::postamble {
$text = 'pure_all :: share/Makefile' . "\n"
. "\t" . 'cd share && $(MAKE) all' . "\n";
};
return $text;
my $docker = <<'END_DOCKER';

docker-build:
docker build --tag zonemaster/backend:local --build-arg version=$(VERSION) .

docker-tag-version:
docker tag zonemaster/backend:local zonemaster/backend:$(VERSION)

docker-tag-latest:
docker tag zonemaster/backend:local zonemaster/backend:latest

END_DOCKER

return $text . $docker;
};

install_share;
Expand Down
44 changes: 44 additions & 0 deletions zonemaster_launch
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#!/bin/sh


case $1 in

cli)
shift 1
zonemaster-cli $@
;;

zmb)
shift 1
zmb $@
;;

zmtest)
shift 1
zmtest $@
;;

rpcapi)
/usr/local/bin/starman --listen=0.0.0.0:5000 --preload-app --user=zonemaster --group=zonemaster /usr/local/bin/zonemaster_backend_rpcapi.psgi

;;

testagent)
/usr/local/bin/zonemaster_backend_testagent -user=zonemaster --group=zonemaster foreground
;;

full)
exec /init
;;
*)
echo "'$1' is not a valid option.
Available options:
- cli : pass argument to zonemaster-cli then quit
- full : start both rpcapi & testagent
- rpcapi
- testagent
- zmb
- zmtest
"
;;
esac;
Loading