diff --git a/.dockerignore b/.dockerignore index 87087e5526..1ff2e91ddd 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,4 @@ client/.tmp/ -client/node_modules/ +node_modules/ +.tmp/ .git/ -.vagrant/ diff --git a/.gitignore b/.gitignore index 58529596d6..ac80720fa6 100644 --- a/.gitignore +++ b/.gitignore @@ -20,9 +20,6 @@ venv dump.rdb -# Docker related -docker-compose.yml - node_modules .tmp .sass-cache diff --git a/Dockerfile b/Dockerfile index 4824c50398..348c828196 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,51 +1,10 @@ -FROM ubuntu:trusty +FROM redash/base:latest -# Ubuntu packages -RUN apt-get update && \ - apt-get install -y python-pip python-dev curl build-essential pwgen libffi-dev sudo git-core wget \ - # Postgres client - libpq-dev \ - # Additional packages required for data sources: - libssl-dev libmysqlclient-dev freetds-dev libsasl2-dev && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* +# We first copy only the requirements file, to avoid rebuilding on every file +# change. +COPY requirements.txt requirements_dev.txt requirements_all_ds.txt ./ +RUN pip install -r requirements.txt -r requirements_dev.txt -r requirements_all_ds.txt -# Users creation -RUN useradd --system --comment " " --create-home redash +COPY . ./ -# Pip requirements for all data source types -RUN pip install -U setuptools==23.1.0 && \ - pip install supervisor==3.1.2 - -COPY . /opt/redash/current -RUN chown -R redash /opt/redash/current - -# Setting working directory -WORKDIR /opt/redash/current - -# Install project specific dependencies -RUN pip install -r requirements_all_ds.txt && \ - pip install -r requirements.txt - -RUN curl https://deb.nodesource.com/setup_4.x | bash - && \ - apt-get install -y nodejs && \ - sudo -u redash -H make deps && \ - rm -rf node_modules client/node_modules /home/redash/.npm /home/redash/.cache && \ - apt-get purge -y nodejs && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* - -# Setup supervisord -RUN mkdir -p /opt/redash/supervisord && \ - mkdir -p /opt/redash/logs && \ - cp /opt/redash/current/setup/docker/supervisord/supervisord.conf /opt/redash/supervisord/supervisord.conf - -# Fix permissions -RUN chown -R redash /opt/redash - -# Expose ports -EXPOSE 5000 -EXPOSE 9001 - -# Startup script -CMD ["supervisord", "-c", "/opt/redash/supervisord/supervisord.conf"] +ENTRYPOINT ["/app/bin/docker-entrypoint"] diff --git a/Makefile b/Makefile index a059280b1d..f487ca91a6 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ deps: pack: sed -ri "s/^__version__ = '([0-9.]*)'/__version__ = '$(FULL_VERSION)'/" redash/__init__.py - tar -zcv -f $(FILENAME) --exclude="optipng*" --exclude=".git*" --exclude="*.pyc" --exclude="*.pyo" --exclude="venv" --exclude="node_modules" --exclude="client/app" * + tar -zcv -f $(FILENAME) --exclude="optipng*" --exclude=".git*" --exclude="*.pyc" --exclude="*.pyo" --exclude="venv" --exclude="node_modules" * upload: python bin/release_manager.py $(CIRCLE_SHA1) $(BASE_VERSION) $(FILENAME) diff --git a/Procfile.dev b/Procfile.dev deleted file mode 100644 index 289b30418e..0000000000 --- a/Procfile.dev +++ /dev/null @@ -1,2 +0,0 @@ -web: ./manage.py runserver -p $PORT --host 0.0.0.0 -worker: ./bin/run celery worker --app=redash.worker --beat -Qqueries,celery,scheduled_queries diff --git a/Vagrantfile b/Vagrantfile deleted file mode 100644 index 875cca8fa6..0000000000 --- a/Vagrantfile +++ /dev/null @@ -1,15 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! -VAGRANTFILE_API_VERSION = "2" - -Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| - config.vm.box = "redash/dev" - config.vm.synced_folder "./", "/opt/redash/current" - config.vm.network "forwarded_port", guest: 5000, host: 9001 - config.vm.provision "shell" do |s| - s.inline = "/opt/redash/current/setup/vagrant/provision.sh" - s.privileged = false - end -end diff --git a/bin/docker-entrypoint b/bin/docker-entrypoint new file mode 100755 index 0000000000..435c57be9c --- /dev/null +++ b/bin/docker-entrypoint @@ -0,0 +1,73 @@ +#!/bin/bash +set -e + +worker() { + WORKERS_COUNT=${WORKERS_COUNT:-2} + QUEUES=${QUEUES:-queries,scheduled_queries,celery} + + echo "Starting $WORKERS_COUNT workers for queues: $QUEUES..." + exec sudo -E -u redash /usr/local/bin/celery worker --app=redash.worker -c$WORKERS_COUNT -Q$QUEUES -linfo --maxtasksperchild=10 -Ofair +} + +scheduler() { + WORKERS_COUNT=${WORKERS_COUNT:-1} + QUEUES=${QUEUES:-celery} + + echo "Starting scheduler and $WORKERS_COUNT workers for queues: $QUEUES..." + + exec sudo -E -u redash /usr/local/bin/celery worker --app=redash.worker --beat -c$WORKERS_COUNT -Q$QUEUES -linfo --maxtasksperchild=10 -Ofair +} + +server() { + exec sudo -E -u redash /usr/local/bin/gunicorn -b 0.0.0.0:5000 --name redash -w4 redash:app +} + +help() { + echo "Redash Docker." + echo "" + echo "Usage:" + echo "" + + echo "server -- start Redash server (with gunicorn)" + echo "worker -- start Celery worker" + echo "scheduler -- start Celery worker with a beat (scheduler) process" + echo "" + echo "shell -- open shell" + echo "dev_server -- start Flask development server with debugger and auto reload" + echo "create_db -- create database tables" +} + +tests() { + export REDASH_DATABASE_URL="postgresql://postgres@postgres/tests" + exec sudo -E -u redash make test +} + +case "$1" in + worker) + shift + worker + ;; + server) + shift + server + ;; + scheduler) + shift + scheduler + ;; + dev_server) + exec sudo -E -u redash /app/manage.py runserver --debugger --reload -h 0.0.0.0 + ;; + shell) + exec sudo -E -u redash /app/manage.py shell + ;; + create_db) + exec sudo -E -u redash /app/manage.py database create_tables + ;; + tests) + tests + ;; + *) + help + ;; +esac diff --git a/bin/vagrant_ctl.sh b/bin/vagrant_ctl.sh deleted file mode 100755 index da08abb236..0000000000 --- a/bin/vagrant_ctl.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -set -e - -help() { - echo "Usage: " - echo "`basename "$0"` {start, test}" -} - -case "$1" in - start) - vagrant up - vagrant ssh -c "cd /opt/redash/current; bin/run honcho start -f Procfile.dev;" - ;; - test) - vagrant up - vagrant ssh -c "cd /opt/redash/current; make test" - ;; - *) - help - ;; -esac \ No newline at end of file diff --git a/client/app/components/app-header/app-header.css b/client/app/components/app-header/app-header.css new file mode 100644 index 0000000000..11c7c3fd84 --- /dev/null +++ b/client/app/components/app-header/app-header.css @@ -0,0 +1,7 @@ +.menu-search { + margin-top: 3px; +} + +.menu-search input[type="text"] { + height: 30px; +} \ No newline at end of file diff --git a/client/app/components/app-header/app-header.html b/client/app/components/app-header/app-header.html index 62f9b168e0..aef9bec1af 100644 --- a/client/app/components/app-header/app-header.html +++ b/client/app/components/app-header/app-header.html @@ -37,10 +37,12 @@