You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@whimsical.apache.org by ru...@apache.org on 2019/11/19 03:15:12 UTC
[whimsy] branch master updated: rough in a Dockerfile for whimsy
development
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 git@github.com:apache/whimsy.git` (or alternately
+ `git clone https://github.com/apache/whimsy.git`)
+* `cd whimsy`
+* `rake update`
+* `rake up`
+* visit `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
Re: [whimsy] branch master updated: rough in a Dockerfile for whimsy development
Posted by sebb <se...@gmail.com>.
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 git@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
>
>