mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2025-03-15 12:29:16 +01:00
Merge branch 'dev' into english
Conflicts: README.md app/assets/templates/shared/leftnav.html.erb
This commit is contained in:
commit
7ca1c841b6
@ -147,6 +147,12 @@
|
||||
top: 18px; right: 18px;
|
||||
padding: 3px 6px 1px 6px;
|
||||
}
|
||||
.menu-badge {
|
||||
position: absolute;
|
||||
top: 0; right: 0;
|
||||
padding: 2px 4px 1px 3px;
|
||||
border: 2px solid white;
|
||||
}
|
||||
}
|
||||
.fa { color: black; font-size: rem-calc(24); }
|
||||
}
|
||||
|
@ -217,7 +217,7 @@
|
||||
border: 2px solid $yellow;
|
||||
background-color: transparent;
|
||||
text-transform: uppercase;
|
||||
font-family: "proxima-nova-condensed";
|
||||
font-family: $font-proxima-condensed;
|
||||
font-weight: 600;
|
||||
&:hover {
|
||||
background-color: $yellow;
|
||||
|
@ -78,10 +78,10 @@ $link-hover-decoration: underline;
|
||||
|
||||
// Semibold = 600, Bold = 700, ExtraB = 800
|
||||
|
||||
$font-family-sans-serif: "proxima-nova", Helvetica, Arial, sans-serif !default;
|
||||
$font-proxima-condensed: "proxima-nova-condensed", Helvetica, Arial, sans-serif !default;
|
||||
$font-family-sans-serif: "Open Sans", Helvetica, Arial, sans-serif !default;
|
||||
$font-proxima-condensed: "Open Sans Condensed", Helvetica, Arial, sans-serif !default;
|
||||
$font-family-serif: Georgia, "Times New Roman", Times, serif !default;
|
||||
$font-felt: "felt-tip-roman", sans-serif;
|
||||
$font-felt: "Loved by the King", sans-serif;
|
||||
|
||||
//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.
|
||||
// $font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace !default;
|
||||
|
@ -6,11 +6,57 @@
|
||||
<!-- nav -->
|
||||
<nav class="nav-primary hidden-xs">
|
||||
<ul class="nav nav-main m-t-xs" data-ride="collapse" >
|
||||
<li class="hidden-sm hidden-md hidden-lg" ng-if="!isAuthenticated()"><a href="#" class="auto" ng-click="signup($event)"><i class="fa fa-rocket"></i> <span>Register</span></a></li>
|
||||
<li class="hidden-sm hidden-md hidden-lg" ng-if="!isAuthenticated()">
|
||||
<a href="#" class="auto" ng-click="login($event)"><i class="fa fa-sign-in"></i> <span>Login</span></a>
|
||||
</li>
|
||||
|
||||
<!-- Disconnected user menu for small devices -->
|
||||
<li class="hidden-sm hidden-md hidden-lg" ng-if-start="!isAuthenticated()">
|
||||
<a href="#" class="auto" ng-click="signup($event)">
|
||||
<i class="fa fa-rocket"></i> <span>Register</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="hidden-sm hidden-md hidden-lg" ng-if-end>
|
||||
<a href="#" class="auto" ng-click="login($event)">
|
||||
<i class="fa fa-sign-in"></i> <span>Login</span>
|
||||
</a>
|
||||
</li>
|
||||
<!-- Connected user menu for small devices -->
|
||||
<li class="notification-open hidden-sm hidden-md hidden-lg" ng-if-start="isAuthenticated()">
|
||||
<a href="#" ui-sref="app.logged.notifications">
|
||||
<i>
|
||||
<i class="fa fa-bell fa-2x black"></i> <span class="menu-badge badge" ng-class="{'bg-red': notifications.length > 0}">{{notifications.length}}</span>
|
||||
</i>
|
||||
<span>Notifications</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="hidden-sm hidden-md hidden-lg">
|
||||
<a href="#" ng-click="logout($event)">
|
||||
<i class="fa fa-power-off"></i> <span>Logout</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="hidden-sm hidden-md hidden-lg" >
|
||||
<a href="#" ui-sref="app.logged.dashboard.profile">
|
||||
<i class="fa fa-user"></i> <span>My profile</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="hidden-sm hidden-md hidden-lg">
|
||||
<a href="#" ui-sref="app.logged.dashboard.projects">
|
||||
<i class="fa fa-puzzle-piece"></i> <span>My projects</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="hidden-sm hidden-md hidden-lg">
|
||||
<a href="#" ui-sref="app.logged.dashboard.trainings">
|
||||
<i class="fa fa-graduation-cap"></i> <span>My trainings</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="hidden-sm hidden-md hidden-lg">
|
||||
<a href="#" ui-sref="app.logged.dashboard.events">
|
||||
<i class="fa fa-calendar-o"></i> <span>My courses and workshops</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="hidden-sm hidden-md hidden-lg" ng-if-end>
|
||||
<a href="#" ui-sref="app.logged.dashboard.invoices">
|
||||
<i class="fa fa-file-pdf-o"></i> <span>My invoices</span>
|
||||
</a>
|
||||
</li>
|
||||
<!-- Common menu entries -->
|
||||
<li class="" ng-repeat="navLink in navLinks" >
|
||||
<a ng-click="toggleNavSize($event)" ui-sref="{{navLink.state}}" ui-sref-active="active" class="auto" data-toggle="class:nav-off-screen" data-target="#nav">
|
||||
<i class="fa fa-{{navLink.linkIcon}} fa-lg"></i>
|
||||
@ -19,7 +65,7 @@
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!-- Admin -->
|
||||
<!-- Admin entries -->
|
||||
<div class="line-s bg-red-dark dk " ng-if="isAuthorized('admin')"></div>
|
||||
<div class="text-xs font-bold text-bordeau hidden-nav-xs padder m-t-lg m-b-sm" ng-if="isAuthorized('admin')">Admin</div>
|
||||
<ul class="nav" ng-if="isAuthorized('admin')">
|
||||
|
@ -10,7 +10,7 @@ class UserPolicy < ApplicationPolicy
|
||||
end
|
||||
|
||||
def show?
|
||||
user.is_admin? or (record.is_allow_contact and record.has_role?(:member))
|
||||
user.is_admin? or (record.is_allow_contact and record.has_role?(:member)) or (user.id == record.id)
|
||||
end
|
||||
|
||||
def create?
|
||||
|
@ -7,11 +7,11 @@
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="sleede">
|
||||
|
||||
<title>Fab Lab Manager</title>
|
||||
|
||||
<script type="text/javascript" src="//use.typekit.net/rih5zfr.js"></script>
|
||||
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
|
||||
<title>Fab-Manager</title>
|
||||
|
||||
<link href='https://fonts.googleapis.com/css?family=Open+Sans:400,400italic,600,600italic,700,800,700italic' rel='stylesheet' type='text/css'>
|
||||
<link href='https://fonts.googleapis.com/css?family=Open+Sans+Condensed:300,700,300italic' rel='stylesheet' type='text/css'>
|
||||
<link href='https://fonts.googleapis.com/css?family=Loved+by+the+King' rel='stylesheet' type='text/css'>
|
||||
|
||||
<%= stylesheet_link_tag "application", media: 'all' %>
|
||||
<%= stylesheet_link_tag "app.printer", media: 'print' %>
|
||||
|
@ -22,11 +22,11 @@ development:
|
||||
# Connect on a TCP socket. Omitted by default since the client uses a
|
||||
# domain socket that doesn't need configuration. Windows does not have
|
||||
# domain sockets, so uncomment these lines.
|
||||
#host: localhost
|
||||
host: localhost
|
||||
|
||||
# The TCP port the server listens on. Defaults to 5432.
|
||||
# If your server runs on a different port number, change accordingly.
|
||||
#port: 5432
|
||||
port: 5432
|
||||
|
||||
# Schema search path. The server defaults to $user,public
|
||||
#schema_search_path: myapp,sharedapp,public
|
||||
|
85
contrib/docker/Dockerfile
Normal file
85
contrib/docker/Dockerfile
Normal file
@ -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"]
|
||||
|
33
contrib/docker/Makefile
Normal file
33
contrib/docker/Makefile
Normal file
@ -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
|
||||
|
118
contrib/docker/README.md
Normal file
118
contrib/docker/README.md
Normal file
@ -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"
|
23
contrib/docker/fabmanager.conf
Normal file
23
contrib/docker/fabmanager.conf
Normal file
@ -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
|
6
contrib/docker/fabmanager.yml
Normal file
6
contrib/docker/fabmanager.yml
Normal file
@ -0,0 +1,6 @@
|
||||
fabmanager:
|
||||
hostname: fabmanager
|
||||
container_name: fabmanager
|
||||
image: squaregolab/fabmanager:latest
|
||||
ports:
|
||||
- "3000:3000"
|
Loading…
x
Reference in New Issue
Block a user