This repository has been archived by the owner on May 13, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
Dockerfile
93 lines (75 loc) · 4.5 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#######DEMO APP, DO NOT USE THIS FOR ANYTHING BUT TESTING PURPOSES, ITS NOT MEANT FOR PRODUCTION######
FROM golang:1.17.5-alpine3.15
# Install and download deps.
RUN apk add --no-cache git curl python2 build-base openssl-dev openssl
RUN git clone https://github.com/webrtc/apprtc.git
# AppRTC GAE setup
# Required to run GAE dev_appserver.py.
RUN curl https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-367.0.0-linux-x86_64.tar.gz --output gcloud.tar.gz \
&& tar -xf gcloud.tar.gz \
&& google-cloud-sdk/bin/gcloud components install app-engine-python-extras app-engine-python cloud-datastore-emulator --quiet \
&& rm -f gcloud.tar.gz
# Mimick build step by manually copying everything into the appropriate folder and run build script.
RUN python apprtc/build/build_app_engine_package.py apprtc/src/ apprtc/out/ \
&& curl https://webrtc.github.io/adapter/adapter-latest.js --output apprtc/src/web_app/js/adapter.js \
&& cp apprtc/src/web_app/js/*.js apprtc/out/js/
# Wrap AppRTC GAE app in a bash script due to needing to run two apps within one container.
RUN echo -e "#!/bin/sh\n" > /go/start.sh \
&& echo -e "`pwd`/google-cloud-sdk/bin/dev_appserver.py --host 0.0.0.0 `pwd`/apprtc/out/app.yaml &\n" >> /go/start.sh
# Collider setup
# Go environment setup.
RUN export GOPATH=$HOME/goWorkspace/ \
&& go env -w GO111MODULE=off
RUN ln -s `pwd`/apprtc/src/collider/collidermain $GOPATH/src \
&& ln -s `pwd`/apprtc/src/collider/collidertest $GOPATH/src \
&& ln -s `pwd`/apprtc/src/collider/collider $GOPATH/src \
&& cd $GOPATH/src \
&& go get collidermain \
&& go install collidermain
# Add Collider executable to the start.sh bash script.
RUN echo -e "$GOPATH/bin/collidermain -port=8089 -tls=true -room-server=http://localhost &\n" >> /go/start.sh
ENV STUNNEL_VERSION 5.60
WORKDIR /usr/src
RUN curl https://www.stunnel.org/archive/5.x/stunnel-${STUNNEL_VERSION}.tar.gz --output stunnel.tar.gz\
&& tar -xf /usr/src/stunnel.tar.gz
WORKDIR /usr/src/stunnel-${STUNNEL_VERSION}
RUN ./configure --prefix=/usr && make && make install
RUN mkdir /cert
RUN openssl req -x509 -out /cert/cert.crt -keyout /cert/key.pem \
-newkey rsa:2048 -nodes -sha256 \
-subj '/CN=localhost' -extensions EXT -config <( \
printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth") \
&& cat /cert/key.pem > /cert/cert.pem \
&& cat /cert/cert.crt >> /cert/cert.pem \
&& chmod 600 /cert/cert.pem /cert/key.pem /cert/cert.crt
RUN echo -e "foreground=yes\n" > /usr/etc/stunnel/stunnel.conf \
&& echo -e "[AppRTC GAE]\n" >> /usr/etc/stunnel/stunnel.conf \
&& echo -e "accept=0.0.0.0:443\n" >> /usr/etc/stunnel/stunnel.conf \
&& echo -e "connect=0.0.0.0:8080\n" >> /usr/etc/stunnel/stunnel.conf \
&& echo -e "cert=/cert/cert.pem\n" >> /usr/etc/stunnel/stunnel.conf
RUN echo -e "/usr/bin/stunnel &\n" >> /go/start.sh \
&& echo -e "wait -n\n" >> /go/start.sh \
&& echo -e "exit $?\n" >> /go/start.sh \
&& chmod +x /go/start.sh
# Start the bash wrapper that keeps both collider and the AppRTC GAE app running.
CMD /go/start.sh
## Instructions (Tested on Debian 11 only):
# - Download the Dockerfile from the AppRTC repo and put it in a folder, e.g. 'apprtc'
# - Build the Dockerfile into an image: 'sudo docker build apprtc/'
# Note the image ID from the build command, e.g. something like 'Successfully built 503621f4f7bd'.
# - Run: 'sudo docker run -p 443:443 -p 8089:8089 --rm -ti 503621f4f7bd'
# The container will now run in interactive mode and output logging. If you do not want this, omit the '-ti' argument.
# The '-p' options are port mappings to the GAE app and Collider instances, the host ones can be changed.
#
# - On the same machine that this docker image is running on you can now join apprtc calls using
# https://localhost/?wshpp=localhost:8089&wstls=true, once you join the URL will have
# appended the room name which you can share, e.g. 'http://localhost:8080/r/315402015?wshpp=localhost:8089&wstls=true'.
# If you want to connect to this instance from another machine, use the IP address of the machine running this docker container
# instead of localhost.
#
# Keep in mind that you need to pass in those 'wshpp' and 'wstls' URL parameters everytime you join with as they override
# the websocket server address.
#
# The steps assume sudo is required for docker, that can be avoided but is out of scope.
## TODO
# Verify if this docker container run on more OS's?