diff --git a/Dockerfile b/Dockerfile index c5d1741..4147105 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,19 @@ FROM avatao/ubuntu:16.04 -RUN curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - &&\ - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - &&\ +RUN curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - &&\ + curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - &&\ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list &&\ - apt-get update &&\ + apt-get update &&\ apt-get install -y --no-install-recommends \ - nodejs \ - yarn \ - supervisor \ - libzmq5 \ - nginx \ - gettext-base \ - libbz2-dev \ - libreadline-dev \ - libsqlite3-dev &&\ + nodejs \ + yarn \ + supervisor \ + libzmq5 \ + nginx \ + gettext-base \ + libbz2-dev \ + libreadline-dev \ + libsqlite3-dev &&\ rm -rf /var/lib/apt/lists/* USER ${AVATAO_USER} @@ -23,14 +23,14 @@ COPY requirements.txt /tmp ARG PYTHON_VERSION="3.6.4" ARG PYENV_INSTALLER_URL="https://raw.githubusercontent.com/pyenv/pyenv-installer/78cfd4d/bin/pyenv-installer" ARG PYENV_INSTALLER_HASH=9509348b828f0564358fff456f7f693dd9ace351dc3f240854d7685ad8a8e1dd -RUN curl -fSL -o pyenv-installer ${PYENV_INSTALLER_URL} &&\ +RUN curl -fSL -o pyenv-installer ${PYENV_INSTALLER_URL} &&\ echo "${PYENV_INSTALLER_HASH} *pyenv-installer" | sha256sum -c - &&\ - bash pyenv-installer &&\ - rm pyenv-installer &&\ - echo "source $HOME/.pyenvrc" >> .bashrc &&\ - . $HOME/.pyenvrc &&\ - pyenv install ${PYTHON_VERSION} &&\ - pyenv global ${PYTHON_VERSION} &&\ + bash pyenv-installer &&\ + rm pyenv-installer &&\ + echo "source $HOME/.pyenvrc" >> .bashrc &&\ + . $HOME/.pyenvrc &&\ + pyenv install ${PYTHON_VERSION} &&\ + pyenv global ${PYTHON_VERSION} &&\ pip install -r /tmp/requirements.txt USER root @@ -39,54 +39,57 @@ COPY src/frontend /data/ RUN yarn install --frozen-lockfile RUN yarn build --no-progress -ENV TFW_WEB_PORT=4242 -ENV TFW_LOGIN_APP_PORT=6666 -ENV TFW_TERMINADO_PORT=7878 -ENV TFW_SUPERVISOR_HTTP_PORT=9001 -ENV TFW_PUBLIC_PORT=8888 -ENV TFW_CONTROLLER_PORT=7777 -ENV TFW_CRP_LISTENER_PORT=5555 -ENV TFW_PUBLISHER_PORT=7654 -ENV TFW_RECEIVER_PORT=8765 -EXPOSE ${TFW_PUBLIC_PORT} -EXPOSE ${TFW_CRP_LISTENER_PORT} +ENV TFW_PUBLIC_PORT=8888 \ + TFW_WEB_PORT=4242 \ + TFW_LOGIN_APP_PORT=6666 \ + TFW_TERMINADO_PORT=7878 \ + TFW_SUPERVISOR_HTTP_PORT=9001 \ + TFW_CONTROLLER_PORT=7777 \ + TFW_CRP_LISTENER_PORT=5555 \ + TFW_PUBLISHER_PORT=7654 \ + TFW_RECEIVER_PORT=8765 -ENV TFW_SUPERVISOR_HTTP_URI="http://localhost:${TFW_SUPERVISOR_HTTP_PORT}" -ENV TFW_EVENT_HANDLERS_DIR="/opt/event_handlers" -ENV TFW_APP_DIR="/srv/app" -ENV TFW_CONTROLLER_DIR="/srv/controller" -ENV TFW_FRONTEND_DIR="/srv/frontend" -ENV TFW_LOGIN_APP_DIR="/tmp/source_code_server" -ENV TFW_TERMINADO_DIR="/tmp/terminado_server" -ENV TFW_WEBIDE_WD="/home/${AVATAO_USER}/workdir" -ENV TFW_TERMINADO_WD=${TFW_WEBIDE_WD} -ENV TFW_LIB_DIR="/usr/local/lib/" -ENV TFW_SUPERVISORD_CONF="/etc/supervisor/supervisord.conf" -ENV TFW_SUPERVISORD_COMPONENTS="/etc/supervisor/conf" -ENV TFW_NGINX_CONF="/etc/nginx/sites-enabled/default" -ENV TFW_NGINX_COMPONENTS="/etc/nginx/components" -ENV PYTHONPATH=${TFW_LIB_DIR} +EXPOSE ${TFW_PUBLIC_PORT} ${TFW_CRP_LISTENER_PORT} + +ENV PYTHONPATH="/usr/local/lib/" \ + TFW_SUPERVISOR_HTTP_URI="http://localhost:${TFW_SUPERVISOR_HTTP_PORT}" \ + TFW_SUPERVISORD_CONF="/etc/supervisor/supervisord.conf" \ + TFW_SUPERVISORD_COMPONENTS="/etc/supervisor/conf" \ + TFW_NGINX_CONF="/etc/nginx/sites-enabled/default" \ + TFW_NGINX_COMPONENTS="/etc/nginx/components" \ + TFW_LIB_DIR="/usr/local/lib/" \ + TFW_CONTROLLER_DIR="/srv/controller" \ + TFW_TERMINADO_DIR="/tmp/terminado_server" \ + TFW_FRONTEND_DIR="/srv/frontend" COPY nginx/nginx.conf ${TFW_NGINX_CONF} COPY nginx/components/ ${TFW_NGINX_COMPONENTS} -RUN chown -R ${AVATAO_USER} /var/log/nginx /var/lib/nginx &&\ - sed -i 's#pid /run/nginx.pid;#pid /tmp/nginx.pid;#g' /etc/nginx/nginx.conf &&\ - for f in "${TFW_NGINX_CONF}" ${TFW_NGINX_COMPONENTS}/*.conf; do \ +RUN chown -R ${AVATAO_USER} /var/log/nginx /var/lib/nginx &&\ + sed -i 's#pid /run/nginx.pid;#pid /tmp/nginx.pid;#g' /etc/nginx/nginx.conf &&\ + for f in "${TFW_NGINX_CONF}" ${TFW_NGINX_COMPONENTS}/*.conf; do \ envsubst "$(printenv | cut -d= -f1 | grep TFW_ | sed -e 's/^/$/g')" < $f > $f ;\ done -COPY lib ${TFW_LIB_DIR} COPY supervisor/supervisord.conf ${TFW_SUPERVISORD_CONF} COPY supervisor/components/ ${TFW_SUPERVISORD_COMPONENTS} -COPY src/app ${TFW_APP_DIR} -COPY src/event_handlers ${TFW_EVENT_HANDLERS_DIR} +COPY lib ${TFW_LIB_DIR} COPY src/controller ${TFW_CONTROLLER_DIR} +COPY lib/tfw/components/terminado_mini_server.py ${TFW_TERMINADO_DIR}/ + +### TFW internals ^ ### DEMO v ############################################################### + +ENV TFW_APP_DIR="/srv/app" \ + TFW_LOGIN_APP_DIR="/tmp/source_code_server" \ + TFW_WEBIDE_WD="/home/${AVATAO_USER}/workdir" \ + TFW_TERMINADO_WD="/home/${AVATAO_USER}/workdir" RUN mv /data/dist ${TFW_FRONTEND_DIR} -COPY src/event_handlers/source_code_server/server.py ${TFW_LOGIN_APP_DIR}/ -COPY src/event_handlers/source_code_server/users.db ${TFW_LOGIN_APP_DIR}/ -COPY src/event_handlers/source_code_server/login_component.py ${TFW_WEBIDE_WD}/ +COPY src/demo ${TFW_APP_DIR}/ + +COPY src/demo/source_code_server/server.py ${TFW_LOGIN_APP_DIR}/ +COPY src/demo/source_code_server/users.db ${TFW_LOGIN_APP_DIR}/ +COPY src/demo/source_code_server/login_component.py ${TFW_WEBIDE_WD}/ RUN chown -R ${AVATAO_USER} ${TFW_WEBIDE_WD} && chmod -R 755 ${TFW_WEBIDE_WD} diff --git a/src/event_handlers/source_code_event_handler.py b/lib/tfw/components/source_code_event_handler.py similarity index 100% rename from src/event_handlers/source_code_event_handler.py rename to lib/tfw/components/source_code_event_handler.py diff --git a/src/event_handlers/terminado_event_handler.py b/lib/tfw/components/terminado_event_handler.py similarity index 72% rename from src/event_handlers/terminado_event_handler.py rename to lib/tfw/components/terminado_event_handler.py index 9852247..4222e05 100644 --- a/src/event_handlers/terminado_event_handler.py +++ b/lib/tfw/components/terminado_event_handler.py @@ -1,5 +1,3 @@ -from shutil import rmtree, copytree - from tfw.event_handler_base import EventHandlerBase from tfw.util import SupervisorMixin from tfw.config import tfwenv @@ -12,11 +10,6 @@ class TerminadoEventHandler(EventHandlerBase, SupervisorMixin): super().__init__(anchor) self.working_directory = tfwenv.TERMINADO_DIR self.process_name = process_name - self.setup_terminado_server() - - def setup_terminado_server(self): - rmtree(self.working_directory, ignore_errors=True) - copytree('terminado_server/', self.working_directory) self.start_process() def handle_event(self, anchor, data_json): diff --git a/src/event_handlers/terminado_server/server.py b/lib/tfw/components/terminado_mini_server.py similarity index 100% rename from src/event_handlers/terminado_server/server.py rename to lib/tfw/components/terminado_mini_server.py diff --git a/src/app/app.py b/src/demo/app.py similarity index 100% rename from src/app/app.py rename to src/demo/app.py diff --git a/src/event_handlers/event_handler_main.py b/src/demo/event_handler_main.py similarity index 65% rename from src/event_handlers/event_handler_main.py rename to src/demo/event_handler_main.py index b349b6b..f7623a9 100644 --- a/src/event_handlers/event_handler_main.py +++ b/src/demo/event_handler_main.py @@ -1,5 +1,5 @@ -from source_code_event_handler import SourceCodeEventHandler -from terminado_event_handler import TerminadoEventHandler +from tfw.components.source_code_event_handler import SourceCodeEventHandler +from tfw.components.terminado_event_handler import TerminadoEventHandler from tornado.ioloop import IOLoop from tfw.config import tfwenv diff --git a/src/event_handlers/source_code_server/login_component.py b/src/demo/source_code_server/login_component.py similarity index 100% rename from src/event_handlers/source_code_server/login_component.py rename to src/demo/source_code_server/login_component.py diff --git a/src/event_handlers/source_code_server/server.py b/src/demo/source_code_server/server.py similarity index 100% rename from src/event_handlers/source_code_server/server.py rename to src/demo/source_code_server/server.py diff --git a/src/event_handlers/source_code_server/users.db b/src/demo/source_code_server/users.db similarity index 100% rename from src/event_handlers/source_code_server/users.db rename to src/demo/source_code_server/users.db diff --git a/src/app/sql_injection_fsm.py b/src/demo/sql_injection_fsm.py similarity index 100% rename from src/app/sql_injection_fsm.py rename to src/demo/sql_injection_fsm.py diff --git a/supervisor/components/event_handlers.conf b/supervisor/components/event_handlers.conf index 887c1c6..a28afe5 100644 --- a/supervisor/components/event_handlers.conf +++ b/supervisor/components/event_handlers.conf @@ -1,3 +1,3 @@ [program:event_handler_main] -directory=%(ENV_TFW_EVENT_HANDLERS_DIR)s +directory=%(ENV_TFW_APP_DIR)s command=env python event_handler_main.py diff --git a/supervisor/components/terminado.conf b/supervisor/components/terminado.conf index ccf7595..30c441d 100644 --- a/supervisor/components/terminado.conf +++ b/supervisor/components/terminado.conf @@ -1,4 +1,4 @@ [program:terminado] directory=%(ENV_TFW_TERMINADO_DIR)s -command=env python server.py +command=env python terminado_mini_server.py autostart=false