On Tue, 19 Nov 2019 at 03:15, <ru...@apache.org> wrote: > This is an automated email from the ASF dual-hosted git repository. > > rubys pushed a commit to branch master > in repository https://gitbox.apache.org/repos/asf/whimsy.git > > > The following commit(s) were added to refs/heads/master by this push: > new 014c726 rough in a Dockerfile for whimsy development > 014c726 is described below > > commit 014c72694289d7e07012421979e7730751b54d49 > Author: Sam Ruby <ru...@intertwingly.net> > AuthorDate: Mon Nov 18 22:14:49 2019 -0500 > > rough in a Dockerfile for whimsy development > --- > DOCKER.md | 62 > ++++++++++++++++++++++++++++++++++++++++++++++ > Rakefile | 44 ++++++++++++++++++++++++++++++++ > docker/Dockerfile | 50 +++++++++++++++++++++++++++++++++++++ > docker/docker-compose.yaml | 14 +++++++++++ > 4 files changed, 170 insertions(+) > > diff --git a/DOCKER.md b/DOCKER.md > new file mode 100644 > index 0000000..6063723 > --- /dev/null > +++ b/DOCKER.md > @@ -0,0 +1,62 @@ > +Docker execution instructions > +============================= > + > +This is experimental at this point. > + > +These steps will enable you to run a full Whimsy system inside a > +container on your development machine. You can edit files inside > +your favorite IDE on your host machine. > + > +Prerequisites > +------------- > + > +You will need Docker, git, and subversion. And approximately 30Gb of > +disk space (over 20Gb of which will be to have a copy of iclas, cclas, > +and grants for the secretary workbench; perhaps in the future these > +could be made optional). > + > +Direct link to [docker for > +macOS](https://download.docker.com/mac/stable/Docker.dmg) (this avoids > the > +need to login to Docker Hub). > + > +A development class machine and a high speed internet connection would > +be in order. Some things appear to perform well, other things perform > +noticeably slower than a native (non-container) installation of whimsy. > + > +Installation instructions > +------------------------- > + > +* Create an empty directory > +* `cd` into that directory > +* `git clone g...@github.com:apache/whimsy.git` (or alternately > + `git clone https://github.com/apache/whimsy.git` > <https://github.com/apache/whimsy.git>) > +* `cd whimsy` > +* `rake update` > +* `rake up` >
It looks to me as though those tasks are under the docker namespace? > +* visit `http://localhost:1999/` <http://localhost:1999/> in your > favorite browser > + > +Note: the `rake udpate` step will take a long time as it will need to > +download and install all of the Ubuntu packages, Ruby gems, build and > +install Passenger, checkout numerous svn repositories and two git > +repositories. The good news is that this can be entirely unattended as > +there will be no prompts required during this process. > + > +This should be enough to get the board agenda tool to launch. It is not > +known yet what functions work and what functions do not. > + > +Known not to work (ToDos) > +------------------------- > + > +* Board agenda web socket (used to communicate updates from the server to > + browsers) > +* Automatic restarting of passenger based tools when source code changes > are > + made. > + > +Uninstallation procedures > +------------------------- > + > +* Remove the entire directory created as step 1 of the installation > + instructions. > +* `docker image prune -f` > +* `docker container prune -f` > + > diff --git a/Rakefile b/Rakefile > index e2b492b..0ac387d 100644 > --- a/Rakefile > +++ b/Rakefile > @@ -90,6 +90,7 @@ namespace :svn do > svn = ASF::Config.get(:svn) > svn = Array(svn).find {|path| String === path and path.end_with? '/*'} > if svn.instance_of? String and svn.end_with? '/*' > + mkdir_p File.dirname(svn) unless Dir.exists? File.dirname(svn) > Dir.chdir File.dirname(svn) do > require 'uri' > base = URI.parse('https://svn.apache.org/repos/') > @@ -201,6 +202,7 @@ namespace :git do > # clone/pull git repositories > git = ASF::Config.get(:git) > if git.instance_of? String and git.end_with? '/*' > + mkdir_p File.dirname(git) unless Dir.exists? File.dirname(git) > Dir.chdir File.dirname(git) do > require 'uri' > base = URI.parse('git://git.apache.org/') > @@ -252,3 +254,45 @@ task :default do > end > end > end > + > +# Docker support > +namespace :docker do > + task :build => 'docker/work/whimsy.conf' do > + Dir.chdir File.join(__dir__, 'docker') do > + sh 'docker-compose build web' > + end > + end > + > + task :update => :build do > + Dir.chdir File.join(__dir__, 'docker') do > + sh 'docker-compose run --entrypoint ' + > + %('bash -c "git pull; rake update svn:update git:pull"') + > + ' web' > + end > + end > + > + task :up do > + Dir.chdir File.join(__dir__, 'docker') do > + sh 'docker-compose up' > + end > + end > + > + task :exec do > + Dir.chdir File.join(__dir__, 'docker') do > + sh 'docker-compose exec web /bin/bash' > + end > + end > + > + task :entrypoint do > + sh 'ruby -I lib -r whimsy/asf -e "ASF::LDAP.configure"' > + sh 'apache2ctl -DFOREGROUND' > + end > +end > + > +file 'docker/work' do > + mkdir_p 'docker/work' > +end > + > +file 'docker/work/whimsy.conf' => ['docker/work', 'config/whimsy.conf'] do > + cp 'config/whimsy.conf', 'docker/work/whimsy.conf' > +end > diff --git a/docker/Dockerfile b/docker/Dockerfile > new file mode 100644 > index 0000000..75b1ef0 > --- /dev/null > +++ b/docker/Dockerfile > @@ -0,0 +1,50 @@ > +FROM ubuntu:18.04 > +ENV GEM_HOME="/srv/gems" \ > + LANG=C.UTF-8 \ > + LC_ALL=C.UTF-8 > +RUN apt-get update && \ > + apt-get install -y curl && \ > + curl -sL https://deb.nodesource.com/setup_12.x | bash - && \ > + apt-get update && \ > + DEBIAN_FRONTEND='noninteractive' apt-get install -y \ > + apache2 \ > + subversion \ > + git \ > + build-essential \ > + libgmp3-dev \ > + libldap2-dev \ > + libsasl2-dev \ > + python3-pip \ > + ruby-dev \ > + zlib1g-dev \ > + imagemagick \ > + img2pdf \ > + nodejs \ > + procmail \ > + poppler-utils \ > + texlive-extra-utils \ > + gnupg2 \ > + libcurl4-openssl-dev \ > + libssl-dev \ > + apache2-dev \ > + libapr1-dev \ > + libaprutil1-dev && \ > + gem install bundler passenger --install_dir=/var/lib/gems/2.5.0 && \ > + passenger-install-apache2-module --auto && \ > + passenger-install-apache2-module --snippet > > /etc/apache2/conf-enabled/passenger.conf && \ > + pip3 install img2pdf && \ > + a2enmod cgi && \ > + a2enmod headers && \ > + a2enmod rewrite && \ > + a2enmod authnz_ldap && \ > + a2enmod speling && \ > + a2enmod remoteip && \ > + a2enmod expires && \ > + a2enmod proxy_wstunnel &&\ > + echo "ServerName whimsy.local" > > /etc/apache2/conf-enabled/servername.conf > +COPY work/whimsy.conf /etc/apache2/sites-enabled/000-default.conf > +RUN echo 'SetEnv GEM_HOME /srv/gems' > > /etc/apache2/conf-enabled/gemhome.conf > +WORKDIR /srv/whimsy > +EXPOSE 80 > + > +CMD ["/usr/local/bin/rake", "docker:entrypoint"] > diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml > new file mode 100644 > index 0000000..d568bc6 > --- /dev/null > +++ b/docker/docker-compose.yaml > @@ -0,0 +1,14 @@ > +version: '3' > +services: > + web: > + image: whimsy-web > + build: . > + ports: > + - "1999:80" > + networks: > + - default > + volumes: > + - ../..:/srv > + - $HOME/.subversion:/root/.subversion > + - $HOME/.gitconfig:/root/.gitconfig > + - $HOME/.ssh:/root/.ssh > >