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+
537FROM ubuntu:xenial
638MAINTAINER Simon Eisenmann <
[email protected] >
739
@@ -11,29 +43,69 @@ ENV LC_ALL en_US.UTF-8
1143
1244ENV 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.
2151ADD . /srv/spreed-webrtc
2252WORKDIR /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.
36106EXPOSE 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