From d810e7d0180e2bc22ae33e2c009448b74b78dfbc Mon Sep 17 00:00:00 2001 From: David GUENAULT Date: Mon, 5 Oct 2015 20:00:37 +0200 Subject: [PATCH 1/2] First work about fabmanager docker container --- contrib/docker/Dockerfile | 85 ++++++++++++++++++++++++ contrib/docker/Makefile | 33 +++++++++ contrib/docker/README.md | 118 +++++++++++++++++++++++++++++++++ contrib/docker/fabmanager.conf | 23 +++++++ contrib/docker/fabmanager.yml | 6 ++ 5 files changed, 265 insertions(+) create mode 100644 contrib/docker/Dockerfile create mode 100644 contrib/docker/Makefile create mode 100644 contrib/docker/README.md create mode 100644 contrib/docker/fabmanager.conf create mode 100644 contrib/docker/fabmanager.yml diff --git a/contrib/docker/Dockerfile b/contrib/docker/Dockerfile new file mode 100644 index 000000000..ee938ebcb --- /dev/null +++ b/contrib/docker/Dockerfile @@ -0,0 +1,85 @@ +FROM ubuntu:latest +MAINTAINER David GUENAULT + +ENV GITBRANCH dev + +# base os upgrade +RUN apt-get -y update && \ + apt-get -y upgrade + +# prerequisites +RUN apt-get -y install git-core libpq-dev redis-server imagemagick npm vim-nox postgresql sudo curl + +RUN apt-get -y install build-essential openssl libreadline6 libreadline6-dev zlib1g zlib1g-dev \ + libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf \ + libc6-dev ncurses-dev automake libtool bison subversion + +# create a setup entry in sudo to gain root privilege without password +RUN cp /etc/sudoers /etc/sudoers.orig && \ + groupadd setup && \ + echo "%setup ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/setup + +# create user and add it to group setup (gain privilege for everything in setup mode) +RUN mkdir -p /home/fabmanager && \ + useradd fabmanager && \ + chown fabmanager:fabmanager /home/fabmanager && \ + usermod -a -G setup fabmanager + +# install rvm +RUN su - fabmanager -c "cd /home/fabmanager && \ + gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 && \ + curl -sSL https://get.rvm.io | bash -s stable --rails" + +# install dev env +RUN chsh -s /bin/bash fabmanager && \ + su - fabmanager -c "cd /home/fabmanager && \ + git clone https://github.com/LaCasemate/fab-manager.git && \ + git checkout $GITBRANCH + cd /home/fabmanager/fab-manager && \ + mkdir -p /home/fabmanager/fab-manager/tmp/pids && \ + rvm current && \ + bundle install" + +# remove privileges +RUN usermod -G fabmanager fabmanager + +# make default template unicode compatible +RUN /etc/init.d/postgresql start && \ + su - postgres -c "psql -c \"UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';\"" && \ + su - postgres -c "psql -c \"DROP DATABASE template1;\"" && \ + su - postgres -c "psql -c \"CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE';\"" && \ + su - postgres -c "psql -c \"UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';\"" && \ + su - postgres -c "psql -d template1 -c \"VACUUM FREEZE\"" && \ + /etc/init.d/postgresql stop + +# prepare database +RUN /etc/init.d/postgresql start && \ + /etc/init.d/redis-server start && \ + su - postgres -c "psql -c \"CREATE USER fabmanager WITH ENCRYPTED PASSWORD 'fabmanager';\"" && \ + su - postgres -c "psql -c \"ALTER ROLE fabmanager WITH CREATEDB;\"" && \ + su - postgres -c "psql -c \"CREATE DATABASE fabmanager_development OWNER fabmanager;\"" && \ + su - postgres -c "psql -c \"CREATE DATABASE fabmanager_production OWNER fabmanager;\"" && \ + cd /home/fabmanager/fab-manager/config && \ + cp database.yml.default database.yml && \ + sed -i "s/sleede/fabmanager/g" /home/fabmanager/fab-manager/config/database.yml && \ + /etc/init.d/postgresql stop + +# setup database +RUN /etc/init.d/postgresql start && \ + /etc/init.d/redis-server start && \ + su -l fabmanager -s /bin/bash -c "cd /home/fabmanager/fab-manager && \ + rake db:setup" && \ + /etc/init.d/postgresql stop && \ + /etc/init.d/redis-server stop + +# install supervisor +RUN apt-get -y install supervisor && \ + sed -i "s/\(\$PORT\)/3000 -b 0.0.0.0/g" /home/fabmanager/fab-manager/Procfile + +# make redis run foreground +RUN sed -i "s/daemonize yes/daemonize no/g" /etc/redis/redis.conf + +ADD fabmanager.conf /etc/supervisor/conf.d/fabmanager.conf + +CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisor/supervisord.conf"] + diff --git a/contrib/docker/Makefile b/contrib/docker/Makefile new file mode 100644 index 000000000..52f5f3586 --- /dev/null +++ b/contrib/docker/Makefile @@ -0,0 +1,33 @@ +DOCKER=/usr/bin/docker +COMPOSE=/usr/local/bin/docker-compose +COMPOSEFILE=fabmanager.yml +REPOSITORY=fabmanager +IMAGE=fabmanager +TAG=latest +IMAGENAME=$(REPOSITORY)/$(IMAGE):$(TAG) +CONTAINERNAME=fabmanager + +build: + @$(DOCKER) build -t $(IMAGENAME) . + +interactive: + @$(DOCKER) run -ti --rm $(IMAGENAME) /bin/bash + +up: + @$(COMPOSE) -f $(COMPOSEFILE) up -d + +ps: + @$(COMPOSE) -f $(COMPOSEFILE) ps + +stop: + @$(COMPOSE) -f $(COMPOSEFILE) stop + +start: + @$(COMPOSE) -f $(COMPOSEFILE) start + +kill: + @$(COMPOSE) -f $(COMPOSEFILE) kill + +rm: + @$(COMPOSE) -f $(COMPOSEFILE) rm -v --force + diff --git a/contrib/docker/README.md b/contrib/docker/README.md new file mode 100644 index 000000000..e0c406d18 --- /dev/null +++ b/contrib/docker/README.md @@ -0,0 +1,118 @@ +## Prérequis + +Les "outils" suivants sont un prérequis à l'utilisation de fab-manager en tant que conteneur. + +- docker (prérequis) +- docker-compose (option) +- docker-enter (option) +- make (option) + +## Installation de docker + +Voir la documentation docker : https://docs.docker.com/installation/ + +## Installation de docker-compose + +docker-compose permet de gérer l'orchestration de conteneurs docker. En soit et dans le cas de fabmanager il n'est pas "encore" utile mais apporte une souplesse par rapport à la ligne de commande. Il sera par contre utilisé quand on aura sorti redis et postgres du conteneur (travail en cours). + +L'installation de docker-compose peut se faire via pip. Cela est optionnel mais pratique pour gérer l'utilisation du conteneur au quotidien. + +``` +pip install --upgrade docker-compose +``` +## Installation de docker-enter + +docker-enter est un wrapper sur nsenter. Cet outil permet d'ouvrir un shell sur un conteneur en cours de fonctionnement. On évite ainsi d'avoir à installer un serveur ssh sur le conteneur. Il peut être remplacé par la commande exec (docker exec) depuis la version 1.3 de docker. Malgré tout je trouve docker-enter plus "stable" que docker exec. + +Le dépôt github de docker-exec est : https://github.com/jpetazzo/nsenter + +``` +git clone https://github.com/jpetazzo/nsenter +cd nsenter +docker exec -it CONTAINER_NAME /bin/bash +``` + +## Installation de make + +L'installation de make est optionnelle mais est pratique pour l'utilisation du conteneur au quotidiebn + +# Construction de l'image docker + +## La procédure classique + +``` +cd fab-manager/contrib/docker +docker build -t fabmanager:latest . +``` + +## La procédure make + +``` +cd fab-manager/contrib/docker +make build +``` + +Cela produira une image nommée fabmanager/fabmanager:latest. Vous pouvez surcharger le nomage (repository/name:tag) de la manière suivante: + +``` +make build REPOSITORY=toto IMAGE=fabmanager TAG=1.1 +``` + +Cela va produire une image nommée toto/fabmanager:1.1 + +# Utilisation de l'image + +## Classique + +``` +docker run -d --name fabmanager fabmanager/fabmanager:latest +``` + +## Makefile + +### Premier lancement + +``` +make up +``` + +### Arrêt du conteneur + +``` +make stop +``` + +### Lancer le conteneur (après premier lancement) + +``` +make start +``` + +### Etat du conteneur + +``` +make ps +``` + +### Tuer le conteneur + +``` +make kill +``` + +### Effacer le conteneur + +``` +make rm +``` + +### Sequence de commande + +On peut lancer une séquence de commande en une seule ligne. Par exemple tuer le conteneur, supprimer le conteneur, construire l'image, lancer le conteneur. +``` +make kill rm build up +``` + +### Notes + +- Lors du lancement avec make le port 3000 est mappé sur le port 3000 de l'hôte local. Cela permet de joindre fabmanager dans un navigateur à l'url "http://ipdelhotedocker:3000" diff --git a/contrib/docker/fabmanager.conf b/contrib/docker/fabmanager.conf new file mode 100644 index 000000000..2afe1a9fa --- /dev/null +++ b/contrib/docker/fabmanager.conf @@ -0,0 +1,23 @@ +[program:redis] +command=/usr/bin/redis-server /etc/redis/redis.conf +autostart=true +autorestart=true +user=root +stdout_logfile=/var/log/supervisor/redis.log +stderr_logfile=/var/log/supervisor/rediserror.log + +[program:postgresql] +command=/usr/lib/postgresql/9.3/bin/postgres -D /var/lib/postgresql/9.3/main -c config_file=/etc/postgresql/9.3/main/postgresql.conf +autostart=true +autorestart=true +user=postgres +stdout_logfile=/var/log/supervisor/postgres.log +stderr_logfile=/var/log/supervisor/postgreserror.log + +[program:fabmanager] +command=su -l fabmanager -c "cd /home/fabmanager/fab-manager && foreman start" +directory=/home/fabmanager/fab-manager +autostart=true +autorestart=true +stdout_logfile=/var/log/supervisor/fabmanager.log +stderr_logfile=/var/log/supervisor/fabmanagererror.log \ No newline at end of file diff --git a/contrib/docker/fabmanager.yml b/contrib/docker/fabmanager.yml new file mode 100644 index 000000000..e692bd735 --- /dev/null +++ b/contrib/docker/fabmanager.yml @@ -0,0 +1,6 @@ +fabmanager: + hostname: fabmanager + container_name: fabmanager + image: squaregolab/fabmanager:latest + ports: + - "3000:3000" From 9c8f35bd1fda7c317b60461878eadb82bf3ce771 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Tue, 6 Oct 2015 12:03:46 +0200 Subject: [PATCH 2/2] fix UI : dashbord button overflow on SM devices --- app/assets/templates/shared/header.html.erb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/assets/templates/shared/header.html.erb b/app/assets/templates/shared/header.html.erb index a767388e2..c7c1c6143 100644 --- a/app/assets/templates/shared/header.html.erb +++ b/app/assets/templates/shared/header.html.erb @@ -26,7 +26,7 @@ - {{currentUser.name}} + \ No newline at end of file +