diff options
| -rw-r--r-- | .dockerignore | 0 | ||||
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | Dockerfile | 33 | ||||
| -rw-r--r-- | README.md | 18 | ||||
| -rwxr-xr-x | build/configure.sh | 34 | ||||
| -rw-r--r-- | build/frontend_config.json | 3 | ||||
| -rw-r--r-- | build/keys.json | 7 | ||||
| -rw-r--r-- | build/supervisord.conf | 16 |
8 files changed, 109 insertions, 3 deletions
diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/.dockerignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..496ee2ca --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store
\ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..9df8dca5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,33 @@ +FROM node:7.4 +MAINTAINER Sacheendra Talluri <sacheendra.t@gmail.com> + +# Installing python, yarn, gulp and web-server dependencies +RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ + && echo "deb http://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ + && echo "deb http://ftp.debian.org/debian stretch main" >> /etc/apt/sources.list \ + && apt-get update \ + && apt-get -y -t stretch install gcc-6 g++-6 \ + && apt-get install -y python python-pip yarn git sqlite3 sed supervisor \ + && pip install oauth2client eventlet flask-socketio \ + && npm install -g gulp-cli \ + && rm -rf /var/lib/apt/lists/* + +# Copy opendc +COPY ./ /opendc + +# Setting up simulator +RUN mkdir -p /data/database \ + && chmod 555 /opendc/build/configure.sh \ + && cd /opendc/opendc-simulator/Simulator \ + && rm -f ./simulator ./sqlite3.o \ + && make \ + && chmod 555 ./simulator \ + && git config --global url."https://".insteadOf git:// \ + && cd /opendc/opendc-frontend \ + && rm -rf /opendc/opendc-frontend/build \ + && yarn \ + && gulp --config=../build/frontend_config.json + +CMD ["sh", "-c", "cd /opendc && ./build/configure.sh /data/database && /usr/bin/supervisord -c /opendc/build/supervisord.conf"] + +VOLUME ["/data/database"]
\ No newline at end of file @@ -14,12 +14,24 @@ The simulator monitors this `queued_experiments` table, and simulates experiment ## Setup -To build and run the full OpenDC stack locally: +The official way to run OpenDC is using Docker. -First, clone this repository and its submodules: +To build and run the full OpenDC stack locally: ```bash +# Clone the repo and its submodules git clone --recursive https://github.com/tudelft-atlarge/opendc.git + +# Enter the directory +cd opendc/ + +# Build the Docker image +docker build -t="opendc" . + +# Start a container with the image +docker run -d --name opendc -p 8081:8081 -e 'SERVER_URL=http://localhost:8081' -e 'OAUTH_CLIENT_ID=your-google-oauth-client-id' -e 'OAUTH_CLIENT_SECRET=your-google-oauth-secret' opendc + +# Wait a few seconds and open http://localhost:8081 in your browser ``` -Then... [TO DO] + diff --git a/build/configure.sh b/build/configure.sh new file mode 100755 index 00000000..75a61e7d --- /dev/null +++ b/build/configure.sh @@ -0,0 +1,34 @@ +if [ ! -f "$1/opendc.db" ]; then + sqlite3 "$1/opendc.db" < ./database/schema.sql + sqlite3 "$1/opendc.db" < ./database/test.sql +fi + +if [ -z "$OAUTH_CLIENT_ID" ] +then + echo "OAuth client id not found. Define environment variable OAUTH_CLIENT_ID" + exit 1 +fi + +if [ -z "$OAUTH_CLIENT_SECRET" ] +then + echo "OAuth client secret not found. Define environment variable OAUTH_CLIENT_SECRET" + exit 2 +fi + +if [ -z "$SERVER_URL" ] +then + echo "URL of server not found. Define environment variable SERVER_URL" + exit 2 +fi + +sed -i "s/client-id/$OAUTH_CLIENT_ID/g" ./build/keys.json +sed -i "s/client-secret/$OAUTH_CLIENT_SECRET/g" ./build/keys.json + +# ignore non ASCII characters +LC_CTYPE=C +LANG=C + +find ./opendc-frontend/build -type f -exec sed -i "s/the-google-oauth-client-id/$OAUTH_CLIENT_ID/g" {} \; +find ./opendc-frontend/build -type f -exec sed -i "s,https://opendc.ewi.tudelft.nl:443,$SERVER_URL,g" {} \; +find ./opendc-frontend/build -type f -exec sed -i "s,https://opendc.ewi.tudelft.nl,$SERVER_URL,g" {} \; +find ./opendc-frontend/build -type f -exec sed -i 's,LOCAL_MODE = (document.location.hostname === "localhost"),LOCAL_MODE = false,g' {} \;
\ No newline at end of file diff --git a/build/frontend_config.json b/build/frontend_config.json new file mode 100644 index 00000000..bdaede00 --- /dev/null +++ b/build/frontend_config.json @@ -0,0 +1,3 @@ +{ + "GOOGLE_OAUTH_CLIENT_ID": "the-google-oauth-client-id" +}
\ No newline at end of file diff --git a/build/keys.json b/build/keys.json new file mode 100644 index 00000000..6af01a9c --- /dev/null +++ b/build/keys.json @@ -0,0 +1,7 @@ +{ + "OAUTH_CLIENT_ID": "client-id", + "OAUTH_CLIENT_SECRET": "client-secret", + "ROOT_DIR": "/opendc", + "FLASK_SECRET": "This is a super duper secret flask key", + "DATABASE_LOCATION": "/data/database/opendc.db" +}
\ No newline at end of file diff --git a/build/supervisord.conf b/build/supervisord.conf new file mode 100644 index 00000000..534eda29 --- /dev/null +++ b/build/supervisord.conf @@ -0,0 +1,16 @@ +[supervisord] +nodaemon=true + +[program:web-server] +command=/usr/bin/python2.7 /opendc/opendc-web-server/main.py /opendc/build/keys.json +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 + +[program:simulator] +command=/bin/sh -c '/opendc/opendc-simulator/Simulator/simulator /data/database/opendc.db' +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0
\ No newline at end of file |
