add things

This commit is contained in:
M1n-0
2025-05-13 17:09:24 +02:00
parent 2f8226075d
commit 11900c2842
10 changed files with 302 additions and 5 deletions

17
Caddyfile Normal file
View File

@@ -0,0 +1,17 @@
# Caddyfile
flask.localhost {
reverse_proxy flask:5000
}
wekan.localhost {
reverse_proxy wekan:8080
}
chat.localhost {
reverse_proxy mattermost:8065
}
keycloak.localhost {
reverse_proxy keycloak:8080
}

View File

@@ -1,7 +1,45 @@
# gesthub # Projet gesthub
## Membres
- Lajus Erika
- Lemoule Duparc Nathan
- LABAT Nino
## Présentation du projet
Ce projet vise à créer une interface fait pour faciliter la gestion et communication au sein d'un projet ou d'une entreprise.
On y retrouve deux roles distints :
**1. Admin :**
<u>Gestion des utilisateurs :</u> Création et suppression de comptes par les admins.
<u> Authentification sécurisée:</u>Avec nom, prénom et mot de passe.
<u> Gestion des annonces :</u> Les admins peuvent publier des annonces sous forme de post-it qui apparait dans une zone défini sur l'interface des membres.
Chaque annonce a une date limite et disparaît automatiquement une fois la date dépassée.
<u> Gestion agenda :</u> ajoute les évènement globaux
<u> Gestionnaire des taches :</u> Création de tableaux, listes et cartes pour l'organisation des tâches.
**2. Membre :**
<u> Agenda/Planning partagé : </u>
Visibilité des événements globaux ajouté par les admins.
Possibilité d'ajouter des événements personnels.
<u> Gestion de projets façon Trello :</u>
Possibilité d'ajouter des cartes
Suivi de l'avancement des projets.
Visibilité sur les différents tableaux.
<u>Messagerie interne :</u>
Système de chat pour la communication en temps réel entre membres.
<u>Liens vers outils externes :</u>
Boutons pour accéder rapidement à des outils comme Discord, etc.
### Membres
- Lajus Erika
- Lemoule Duparc Nathan
- LABAT Nino

135
docker-compose.yml Normal file
View File

@@ -0,0 +1,135 @@
services:
caddy:
image: caddy:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
depends_on:
- flask
- wekan
- mattermost
networks:
- backend
flask:
build: ./web
environment:
- DB_HOST=mariadb
- DB_USER=flaskuser
- DB_PASSWORD=flaskpass
- DB_NAME=flaskdb
depends_on:
- mariadb
- keycloak
volumes:
- ./web:/app
networks:
- backend
mariadb:
image: mariadb:latest
environment:
- MYSQL_ROOT_PASSWORD=rootpass
- MYSQL_DATABASE=flaskdb
- MYSQL_USER=flaskuser
- MYSQL_PASSWORD=flaskpass
volumes:
- mariadb_data:/var/lib/mysql
networks:
- backend
wekan:
image: wekanteam/wekan
environment:
- MONGO_URL=mongodb://mongo:27017/wekan
- ROOT_URL=https://wekan.gesthub
depends_on:
- mongo
networks:
- backend
mongo:
image: mongo:latest
volumes:
- mongo_data:/data/db
networks:
- backend
mattermost:
image: mattermost/mattermost-team-edition:latest
ports:
- "8065:8065"
environment:
- MM_SQLSETTINGS_DRIVERNAME=postgres
- MM_SQLSETTINGS_DATASOURCE=postgres://mmuser:mmuserpass@db:5432/mattermost?sslmode=disable
- MM_SERVICESETTINGS_SITEURL=http://chat.gesthub
depends_on:
- db
volumes:
- mattermost_data:/mattermost/data
networks:
- backend
db:
image: postgres:13
environment:
- POSTGRES_DB=mattermost
- POSTGRES_USER=mmuser
- POSTGRES_PASSWORD=mmuserpass
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- backend
keycloak:
image: quay.io/keycloak/keycloak:22.0.5
command: start-dev
environment:
- KEYCLOAK_ADMIN=admin
- KEYCLOAK_ADMIN_PASSWORD=admin
- KC_DB=postgres
- KC_DB_URL_HOST=keycloak-db
- KC_DB_URL_DATABASE=keycloak
# - KC_DB_USERNAME=keycloak
- KC_DB_PASSWORD=keycloakpass
- KC_HOSTNAME=keycloak
- KC_HTTP_ENABLED=true
- KC_HOSTNAME_STRICT=false
- KC_HOSTNAME_STRICT_HTTPS=false
- KC_PROXY=edge
ports:
- "8080:8080"
depends_on:
- keycloak-db
volumes:
- keycloak_data:/opt/keycloak/data
networks:
- backend
keycloak-db:
image: postgres:13
environment:
- POSTGRES_DB=keycloak
- POSTGRES_USER=keycloak
- POSTGRES_PASSWORD=keycloakpass
volumes:
- keycloakdb_data:/var/lib/postgresql/data
networks:
- backend
volumes:
caddy_data:
caddy_config:
mariadb_data:
mongo_data:
mattermost_data:
postgres_data:
keycloak_data:
keycloakdb_data:
networks:
backend:

17
start-gesthub.sh Normal file
View File

@@ -0,0 +1,17 @@
#!/bin/bash
PROJECT_DOMAIN="gesthub"
HOSTS_LINE="127.0.0.1 flask.$PROJECT_DOMAIN wekan.$PROJECT_DOMAIN chat.$PROJECT_DOMAIN"
echo "🔧 Vérification des droits (sudo peut être requis pour modifier /etc/hosts)..."
# Ajout dans /etc/hosts si absent
if ! grep -q "$PROJECT_DOMAIN" /etc/hosts; then
echo "✅ Ajout de $PROJECT_DOMAIN dans /etc/hosts..."
echo "$HOSTS_LINE" | sudo tee -a /etc/hosts > /dev/null
else
echo "✔️ Domaine $PROJECT_DOMAIN déjà présent dans /etc/hosts."
fi
echo "🚀 Lancement des services Docker..."
docker compose up --build

17
start-infra.sh Normal file
View File

@@ -0,0 +1,17 @@
#!/bin/bash
PROJECT_DOMAIN="gesthub"
HOSTS_LINE="127.0.0.1 flask.$PROJECT_DOMAIN wekan.$PROJECT_DOMAIN chat.$PROJECT_DOMAIN"
echo "🔧 Vérification des droits (sudo peut être requis pour modifier /etc/hosts)..."
# Ajout dans /etc/hosts si absent
if ! grep -q "$PROJECT_DOMAIN" /etc/hosts; then
echo "✅ Ajout de $PROJECT_DOMAIN dans /etc/hosts..."
echo "$HOSTS_LINE" | sudo tee -a /etc/hosts > /dev/null
else
echo "✔️ Domaine $PROJECT_DOMAIN déjà présent dans /etc/hosts."
fi
echo "🚀 Lancement des services Docker..."
docker compose up --build

8
web/Dockerfile Normal file
View File

@@ -0,0 +1,8 @@
FROM python:3.11
WORKDIR /web
COPY . /web
RUN pip install flask flask_sqlalchemy pymysql authlib requests
CMD ["python", "app.py"]

50
web/app.py Normal file
View File

@@ -0,0 +1,50 @@
from flask import Flask, redirect, url_for, session, render_template
from flask_sqlalchemy import SQLAlchemy
from authlib.integrations.flask_client import OAuth
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://flaskuser:flaskpass@mariadb/flaskdb'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.secret_key = 'ninolabat'
db = SQLAlchemy(app)
# Configuration de Authlib
oauth = OAuth(app)
keycloak = oauth.register(
name='keycloak',
client_id='flask-app',
client_secret='jp4T3FnlpzHyc4Ch4zNoO8cAakXzHi50',
server_metadata_url='http://keycloak:8080/realms/GestHub/.well-known/openid-configuration',
client_kwargs={
'scope': 'openid profile email',
}
)
@app.route('/')
def index():
user = session.get('user')
if user:
return render_template('/view/index.html', user=user)
return redirect(url_for('login'))
@app.route('/login')
def login():
redirect_uri = url_for('auth', _external=True)
return keycloak.authorize_redirect(redirect_uri)
@app.route('/auth')
def auth():
token = keycloak.authorize_access_token()
userinfo = keycloak.parse_id_token(token)
session['user'] = userinfo
return redirect('/')
@app.route('/logout')
def logout():
session.pop('user', None)
return redirect('/')
if __name__ == '__main__':
app.run(host='0.0.0.0')

3
web/assets/css/index.css Normal file
View File

@@ -0,0 +1,3 @@
body{
background-color: bisque;
}

View File

12
web/view/index.html Normal file
View File

@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
Hello World!
<h1>Welcome to the GestHub Web Interface</h1>
</body>
</html>