Skip to content

Commit 9f3376b

Browse files
committed
Update Dockerfile to make sense
1 parent 3dfd030 commit 9f3376b

File tree

1 file changed

+88
-16
lines changed

1 file changed

+88
-16
lines changed

Dockerfile

Lines changed: 88 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,39 @@
1-
# Spreed WebRTC server.
1+
# Spreed WebRTC server in Docker
22
#
3-
# To execute it install docker and then run 'sudo docker build .'
3+
# This Dockerfile creates a container which runs Spreed WebRTC as found in the
4+
# current folder. It is intended for development.
45
#
6+
# Install docker and then run `docker build -t spreed-webrtc .` to build the
7+
# image. Afterwards run the container like this:
8+
#
9+
# ```
10+
# docker run --rm --name my-spreed-webrtc -p 8080:8080 -p 8443:8443 \
11+
# -v `pwd`:/srv/extra -i -t spreed-webrtc
12+
# ```
13+
#
14+
# Now you can either use a frontend proxy like Nginx to provide TLS to Spreed
15+
# WebRTC and even run it in production like that from the Docker container, or
16+
# for easy development testing, the container also provides a TLS listener with
17+
# a self-signed certificate on port 8443.
18+
#
19+
# To use custom configuration, use the `server.conf.in` file as template and
20+
# remove the listeners from [http] and [https] sections. Then provide that file
21+
# when running the docker container as with `-c` parameter like this:
22+
#
23+
# ```
24+
# docker run --rm --name my-spreed-webrtc -p 8080:8080 \
25+
# -v `pwd`:/srv/extra -i -t spreed-webrtc` \
26+
# -c /srv/extra/server.conf
27+
# ```
28+
#
29+
# And last, this container checks environment variables NEWCERT and NEWSECRETS,
30+
# on startup. Set those to `1` to regenerate the corresponding values on start.
31+
# The current certificate and secrets are printed before startup so you can use
32+
# them easily for other services. Of course, if you want to have persistent cert
33+
# and secrets, the container needs to be persistent in the first place, so no
34+
# `--rm` parameter in the example from above in that case.
35+
#
36+
537
FROM ubuntu:xenial
638
MAINTAINER Simon Eisenmann <[email protected]>
739

@@ -11,29 +43,69 @@ ENV LC_ALL en_US.UTF-8
1143

1244
ENV DEBIAN_FRONTEND noninteractive
1345

14-
# Base system
15-
RUN apt-get update -q
16-
1746
# Base build dependencies.
18-
RUN apt-get install -qy golang nodejs build-essential git mercurial automake autoconf
47+
RUN apt-get update && apt-get install -qy \
48+
golang nodejs build-essential git automake autoconf
1949

2050
# Add and build Spreed WebRTC server.
2151
ADD . /srv/spreed-webrtc
2252
WORKDIR /srv/spreed-webrtc
23-
RUN ./autogen.sh
24-
RUN ./configure
25-
RUN make pristine && make get && make
53+
RUN ./autogen.sh && ./configure && make pristine && make get && make
54+
55+
# Create entrypoint script.
56+
RUN echo '\n\
57+
set -e\n\
58+
if [ "$NEWCERT" = "1" -o ! -e /srv/cert.pem ]; then\n\
59+
echo "Creating new self signed TLS certificate ..."\n\
60+
rm -f /srv/privkey.pem\n\
61+
rm -f /srv/cert.pem\n\
62+
openssl ecparam -genkey -name secp384r1 -out /srv/privkey.pem\n\
63+
openssl req -new -x509 -key /srv/privkey.pem \\\n\
64+
-out /srv/cert.pem -days 3650 \\\n\
65+
-subj /CN=spreed-webrtc \\\n\
66+
-config /etc/ssl/openssl.cnf \\\n\
67+
-sha256 -extensions v3_req\n\
68+
69+
fi\n\
70+
echo "TLS certificate:"\n\
71+
openssl x509 -in /srv/cert.pem -text\n\
72+
if [ "$NEWSECRETS" = "1" -o ! -e /srv/secrets.conf ]; then\n\
73+
echo "Creating new server secrets ..."\n\
74+
rm -f /srv/secrets.conf.tmp\n\
75+
echo "SESSION_SECRET=$(openssl rand -hex 32)" >>/srv/secrets.conf.tmp\n\
76+
echo "ENCRYPTION_SECRET=$(openssl rand -hex 32)" >>/srv/secrets.conf.tmp\n\
77+
echo "SERVER_TOKEN=$(openssl rand -hex 32)" >>/srv/secrets.conf.tmp\n\
78+
echo "SHARED_SECRET=$(openssl rand -hex 32)" >>/srv/secrets.conf.tmp\n\
79+
. /srv/secrets.conf.tmp\n\
80+
sed -i -e "s/sessionSecret =.*/sessionSecret = $SESSION_SECRET/" /srv/spreed-webrtc/default.conf\n\
81+
sed -i -e "s/encryptionSecret =.*/encryptionSecret = $ENCRYPTION_SECRET/" /srv/spreed-webrtc/default.conf\n\
82+
sed -i -e "s/serverToken =.*/serverToken = $SERVER_TOKEN/" /srv/spreed-webrtc/default.conf\n\
83+
sed -i -e "s/;sharedsecret_secret =.*/sharedsecret_secret = $SHARED_SECRET/" /srv/spreed-webrtc/default.conf\n\
84+
mv /srv/secrets.conf.tmp /srv/secrets.conf\n\
85+
fi\n\
86+
echo "Server secrets:"\n\
87+
cat /srv/secrets.conf\n\
88+
echo "Staring Spreed WebRTC server ..."\n\
89+
exec /srv/spreed-webrtc/spreed-webrtc-server "$@"\n'\
90+
>> /srv/entrypoint.sh
2691

2792
# Create default config file.
28-
RUN cp -v /srv/spreed-webrtc/server.conf.in /srv/spreed-webrtc/server.conf && \
29-
sed -i 's|listen = 127.0.0.1:8080|listen = 0.0.0.0:8080|' /srv/spreed-webrtc/server.conf && \
30-
sed -i 's|;root = .*|root = /srv/spreed-webrtc|' /srv/spreed-webrtc/server.conf
93+
RUN cp -v /srv/spreed-webrtc/server.conf.in /srv/spreed-webrtc/default.conf && \
94+
sed -i 's|listen = 127.0.0.1:8080|listen = 0.0.0.0:8080|' /srv/spreed-webrtc/default.conf && \
95+
sed -i 's|;root = .*|root = /srv/spreed-webrtc|' /srv/spreed-webrtc/default.conf && \
96+
sed -i 's|;listen = 127.0.0.1:8443|listen = 0.0.0.0:8443|' /srv/spreed-webrtc/default.conf && \
97+
sed -i 's|;certificate = .*|certificate = /srv/cert.pem|' /srv/spreed-webrtc/default.conf && \
98+
sed -i 's|;key = .*|key = /srv/privkey.pem|' /srv/spreed-webrtc/default.conf
99+
RUN touch /srv/spreed-webrtc/server.conf
31100

32-
# Allow to mount.
33-
VOLUME /srv/spreed-webrtc
101+
# Add mount point for extra things.
102+
RUN mkdir /srv/extra
103+
VOLUME /srv/extra
34104

35105
# Tell about our service.
36106
EXPOSE 8080
107+
EXPOSE 8443
37108

38-
# Define entry point.
39-
ENTRYPOINT ["/srv/spreed-webrtc/spreed-webrtc-server", "-c /srv/spreed-webrtc/server.conf"]
109+
# Define entry point with default command.
110+
ENTRYPOINT ["/bin/sh", "/srv/entrypoint.sh", "-dc", "/srv/spreed-webrtc/default.conf"]
111+
CMD ["-c", "/srv/spreed-webrtc/server.conf"]

0 commit comments

Comments
 (0)