Snapshot: openadr-deploy-2026-06-10
This commit is contained in:
BIN
snapshots/20260610_101227/cariflex-logo.jpg
Normal file
BIN
snapshots/20260610_101227/cariflex-logo.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 56 KiB |
100
snapshots/20260610_101227/docker-compose.yml
Normal file
100
snapshots/20260610_101227/docker-compose.yml
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
---
|
||||||
|
# FlexMeasures Stack — Docker Compose
|
||||||
|
# Adapté pour Traefik avec sous-domaines digitribe.fr
|
||||||
|
|
||||||
|
services:
|
||||||
|
# ─── PostgreSQL ────────────────────────────────────────────────
|
||||||
|
flexmeasures-db:
|
||||||
|
image: postgres:17
|
||||||
|
container_name: flexmeasures-db
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
POSTGRES_DB: flexmeasures
|
||||||
|
POSTGRES_USER: flexmeasures
|
||||||
|
POSTGRES_PASSWORD: ${FLEXMEASURES_DB_PASSWORD:-Digitribe972}
|
||||||
|
volumes:
|
||||||
|
- flexmeasures_db_data:/var/lib/postgresql/data
|
||||||
|
networks:
|
||||||
|
- traefik_network
|
||||||
|
mem_limit: 1g
|
||||||
|
cpus: 1
|
||||||
|
|
||||||
|
# ─── Redis (queue) ─────────────────────────────────────────────
|
||||||
|
flexmeasures-redis:
|
||||||
|
image: redis:7-alpine
|
||||||
|
container_name: flexmeasures-redis
|
||||||
|
restart: unless-stopped
|
||||||
|
command: redis-server --loglevel warning --requirepass ${FLEXMEASURES_REDIS_PASSWORD:-Digitribe972} --aclfile /dev/null
|
||||||
|
volumes:
|
||||||
|
- flexmeasures_redis_data:/data
|
||||||
|
networks:
|
||||||
|
- traefik_network
|
||||||
|
mem_limit: 512m
|
||||||
|
cpus: 0.5
|
||||||
|
|
||||||
|
# ─── FlexMeasures Server ───────────────────────────────────────
|
||||||
|
flexmeasures-server:
|
||||||
|
image: lfenergy/flexmeasures:latest
|
||||||
|
container_name: flexmeasures-server
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
- flexmeasures-db
|
||||||
|
- flexmeasures-redis
|
||||||
|
environment:
|
||||||
|
SQLALCHEMY_DATABASE_URI: "postgresql://flexmeasures:${FLEXMEASURES_DB_PASSWORD:-Digitribe972}@flexmeasures-db:5432/flexmeasures"
|
||||||
|
SECRET_KEY: ${FLEXMEASURES_SECRET_KEY:-flexmeasures-secret-key-change-me}
|
||||||
|
SECURITY_TOTP_SECRETS: '{"1": "totp-secret-change-me"}'
|
||||||
|
FLEXMEASURES_ENV: production
|
||||||
|
FLEXMEASURES_REDIS_URL: "flexmeasures-redis"
|
||||||
|
FLEXMEASURES_REDIS_PORT: "6379"
|
||||||
|
FLEXMEASURES_REDIS_DB_NR: "0"
|
||||||
|
FLEXMEASURES_REDIS_PASSWORD: "${FLEXMEASURES_REDIS_PASSWORD:-Digitribe972}"
|
||||||
|
LOGGING_LEVEL: INFO
|
||||||
|
FLEXMEASURES_ALLOW_DATA_DELETION: "true"
|
||||||
|
FLEXMEASURES_PUBLIC_ACCOUNTS: "true"
|
||||||
|
networks:
|
||||||
|
- traefik_network
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.cariflex.rule=Host(`cariflex.digitribe.fr`)"
|
||||||
|
- "traefik.http.routers.cariflex.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.cariflex.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.services.cariflex.loadbalancer.server.port=5000"
|
||||||
|
- "traefik.http.routers.cariflex.middlewares=redirect-https"
|
||||||
|
mem_limit: 2g
|
||||||
|
cpus: 2
|
||||||
|
|
||||||
|
# ─── FlexMeasures Worker (jobs) ────────────────────────────────
|
||||||
|
flexmeasures-worker:
|
||||||
|
image: lfenergy/flexmeasures:latest
|
||||||
|
container_name: flexmeasures-worker
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
- flexmeasures-db
|
||||||
|
- flexmeasures-redis
|
||||||
|
- flexmeasures-server
|
||||||
|
environment:
|
||||||
|
SQLALCHEMY_DATABASE_URI: "postgresql://flexmeasures:${FLEXMEASURES_DB_PASSWORD:-Digitribe972}@flexmeasures-db:5432/flexmeasures"
|
||||||
|
SECRET_KEY: ${FLEXMEASURES_SECRET_KEY:-flexmeasures-secret-key-change-me}
|
||||||
|
SECURITY_TOTP_SECRETS: '{"1": "totp-secret-change-me"}'
|
||||||
|
FLEXMEASURES_ENV: production
|
||||||
|
FLEXMEASURES_REDIS_URL: "flexmeasures-redis"
|
||||||
|
FLEXMEASURES_REDIS_PORT: "6379"
|
||||||
|
FLEXMEASURES_REDIS_DB_NR: "0"
|
||||||
|
FLEXMEASURES_REDIS_PASSWORD: "${FLEXMEASURES_REDIS_PASSWORD:-Digitribe972}"
|
||||||
|
LOGGING_LEVEL: INFO
|
||||||
|
networks:
|
||||||
|
- traefik_network
|
||||||
|
mem_limit: 2g
|
||||||
|
cpus: 2
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
flexmeasures_db_data:
|
||||||
|
driver: local
|
||||||
|
flexmeasures_redis_data:
|
||||||
|
driver: local
|
||||||
|
|
||||||
|
networks:
|
||||||
|
traefik_network:
|
||||||
|
name: traefik-public
|
||||||
|
external: true
|
||||||
BIN
snapshots/20260610_101227/flexmeasures-preview.jpg
Normal file
BIN
snapshots/20260610_101227/flexmeasures-preview.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 130 KiB |
10
snapshots/20260610_101227/flexmeasures.cfg
Normal file
10
snapshots/20260610_101227/flexmeasures.cfg
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
FLEXMEASURES_ENV = 'production'
|
||||||
|
FLEXMEASURES_REDIS_URL = 'flexmeasures-redis'
|
||||||
|
FLEXMEASURES_REDIS_PORT = 6379
|
||||||
|
FLEXMEASURES_REDIS_DB_NR = 0
|
||||||
|
FLEXMEASURES_REDIS_PASSWORD='***'
|
||||||
|
FLEXMEASURES_DATABASE_URI = 'postgresql://flexmeasures:***@flexmeasures-db:5432/flexmeasures'
|
||||||
|
SECRET_KEY='***'
|
||||||
|
LOGGING_LEVEL = 'INFO'
|
||||||
|
FLEXMEASURES_PLATFORM_NAME = 'Cariflex'
|
||||||
|
FLEXMEASURES_MENU_LOGO_PATH = '/ui/static/images/cariflex-logo.jpg'
|
||||||
10
snapshots/20260610_101227/footer.html
Normal file
10
snapshots/20260610_101227/footer.html
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<footer class="page-footer font-small pt-4 mt-auto">
|
||||||
|
<div class="footer text-center">
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div style="text-align: center; padding: 10px;">
|
||||||
|
<img src="/ui/static/images/cariflex-logo.jpg" alt="Cariflex" style="max-height: 40px;">
|
||||||
|
<p style="margin-top: 10px; color: #666;">Cariflex - 2026</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
3
snapshots/20260610_101227/info.txt
Normal file
3
snapshots/20260610_101227/info.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
Description: openadr-deploy-2026-06-10
|
||||||
|
Date: Wed Jun 10 10:12:27 AST 2026
|
||||||
|
Host: ns3087950
|
||||||
59
snapshots/20260610_101227/login_user.html
Normal file
59
snapshots/20260610_101227/login_user.html
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% set active_page = "logged-in-user" %}
|
||||||
|
|
||||||
|
{% block title %} Please log in {% endblock %}
|
||||||
|
|
||||||
|
{% from "security/_macros.html" import render_field_with_errors, render_field %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block divs %}
|
||||||
|
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="row" style="text-align: center; padding-bottom: 30px;">
|
||||||
|
<div class="col-md-12">
|
||||||
|
{% block platform_title %}
|
||||||
|
<h2>Cariflex</h2>
|
||||||
|
{% endblock platform_title %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-4">
|
||||||
|
<div class="card">
|
||||||
|
<div class="login-form">
|
||||||
|
<h1>{{ _fsdomain('Login') }}</h1>
|
||||||
|
<form action="{{ url_for_security('login') }}" method="POST" name="login_user_form">
|
||||||
|
{{ login_user_form.hidden_tag() }}
|
||||||
|
{{ render_field_with_errors(login_user_form.email) }}
|
||||||
|
{{ render_field_with_errors(login_user_form.password) }}
|
||||||
|
{{ render_field_with_errors(login_user_form.remember) }}
|
||||||
|
{{ render_field(login_user_form.submit) }}
|
||||||
|
</form>
|
||||||
|
<form action="/reset" method="get">
|
||||||
|
<button class="btn btn-sm btn-responsive btn-link" type="submit">Forgot password?</button>
|
||||||
|
</form>
|
||||||
|
{% if FLEXMEASURES_MODE == "demo" and FLEXMEASURES_PUBLIC_DEMO_CREDENTIALS %}
|
||||||
|
<div class="alert alert-info col-md-8">
|
||||||
|
<h2>Interested in a demo?</h2>
|
||||||
|
<p>
|
||||||
|
Simply log in as our demo user.
|
||||||
|
<ul>
|
||||||
|
<li>Email: {{ FLEXMEASURES_PUBLIC_DEMO_CREDENTIALS[0] }}</li>
|
||||||
|
<li>Password: {{ FLEXMEASURES_PUBLIC_DEMO_CREDENTIALS[1] }}</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-4">
|
||||||
|
<div class="card">
|
||||||
|
{% include 'includes/teaser.html' %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-4"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock divs %}
|
||||||
73
snapshots/20260610_101227/navbar.html
Normal file
73
snapshots/20260610_101227/navbar.html
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
<nav class="navbar navbar-expand-lg fixed-top mt-0 navbar-default mb-2 navbar-fixed-top " id="topnavbar">
|
||||||
|
<div class="container-fluid" id="navbar-container">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="navbar-brand">
|
||||||
|
<a href="/">
|
||||||
|
<span class="navbar-tool-name">
|
||||||
|
{% if menu_logo %}
|
||||||
|
<img id="navbar-logo" src="/ui/static/images/cariflex-logo.jpg"/>
|
||||||
|
{% else %}
|
||||||
|
<img id="navbar-logo" src="/ui/static/images/cariflex-logo.jpg" alt="Cariflex"/>
|
||||||
|
{% endif %}
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="navbar-toggler border-0"
|
||||||
|
type="button"
|
||||||
|
data-bs-toggle="collapse"
|
||||||
|
data-bs-target="#navbarSupportedContent"
|
||||||
|
aria-controls="navbarSupportedContent"
|
||||||
|
aria-expanded="false"
|
||||||
|
aria-label="Toggle navigation"
|
||||||
|
>
|
||||||
|
<i class="fa fa-bars"></i>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="collapse navbar-collapse justify-content-end flex-row" id="navbarSupportedContent">
|
||||||
|
<ul class="nav navbar-nav d-flex">
|
||||||
|
{% for href, id, caption, tooltip, icon in navigation_bar %}
|
||||||
|
{% if id == "tasks" %}
|
||||||
|
<li {% if id == active_page %} class="nav-item dropdown active" {% else %} class="nav-item dropdown" {% endif %}>
|
||||||
|
<a class="nav-link dropdown-toggle" href="#" id="tasksDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||||
|
<span class="fa fa-tasks" aria-hidden="true"></span>
|
||||||
|
Tasks
|
||||||
|
</a>
|
||||||
|
<ul class="dropdown-menu" aria-labelledby="tasksDropdown">
|
||||||
|
{% for queue in queue_names %}
|
||||||
|
<li {% if current_user.has_role('anonymous') %} class="disabled" {% endif %}>
|
||||||
|
<a class="dropdown-item" {% if not current_user.has_role('anonymous') %} href="/tasks/0/view/jobs/{{ queue }}/started/10/asc/1" {% endif %}>
|
||||||
|
{{ queue | capitalize }}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
<li {% if current_user.has_role('anonymous') %} class="disabled" {% endif %}>
|
||||||
|
<a class="dropdown-item" {% if not current_user.has_role('anonymous') %} href="/tasks/" {% endif %}>
|
||||||
|
Overview
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
{% else %}
|
||||||
|
<li {% if id == active_page %} class="nav-item active" {% else %} class="nav-item" {% endif %}
|
||||||
|
data-bs-toggle="tooltip" title="{{ tooltip }}" data-placement="bottom"
|
||||||
|
{% if id == 'upload' or (current_user.has_role('anonymous') and id in ('tasks', 'users')) %}
|
||||||
|
class="disabled" {% endif %}>
|
||||||
|
<a {% if not ( id == 'upload' or (current_user.has_role('anonymous') and id in ('tasks', 'users')) ) %} href="/{{ href|e }}" {% endif %}
|
||||||
|
{% if id in ['openapi-docs', 'docs'] %} target="_blank" {% endif %} class="nav-link">
|
||||||
|
<span class="fa fa-{{ icon }}" aria-hidden="true"></span>
|
||||||
|
{{ caption|e }}
|
||||||
|
|
||||||
|
{# use tooltip as caption for small screens showing a collapsed menu #}
|
||||||
|
{% if not caption %}
|
||||||
|
<span class="d-inline d-lg-none">{{ tooltip }}</span>
|
||||||
|
{% endif %}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
54
snapshots/20260610_101227/teaser.html
Normal file
54
snapshots/20260610_101227/teaser.html
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
<div class="carousel-container">
|
||||||
|
<div id="myCarousel" class="carousel slide" data-bs-ride="carousel">
|
||||||
|
|
||||||
|
<!-- Indicators -->
|
||||||
|
<div class="carousel-indicators">
|
||||||
|
<button type="button" data-bs-target="#myCarousel" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
|
||||||
|
<button type="button" data-bs-target="#myCarousel" data-bs-slide-to="1" aria-label="Slide 2"></button>
|
||||||
|
<button type="button" data-bs-target="#myCarousel" data-bs-slide-to="2" aria-label="Slide 3"></button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Wrapper for slides -->
|
||||||
|
<div class="carousel-inner">
|
||||||
|
<div class="carousel-item active">
|
||||||
|
<img src="ui/static/images/flexmeasures-preview.jpg"
|
||||||
|
alt="The FlexMeasures platform on a laptop."
|
||||||
|
title="FlexMeasures provides in-depth analytics of flexibility in your portfolio."
|
||||||
|
>
|
||||||
|
<div class="carousel-caption">
|
||||||
|
In-depth analytics of flexibility in your portfolio.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="carousel-item">
|
||||||
|
<img src="ui/static/images/tj-k-349056-unsplash.jpg"
|
||||||
|
alt="A landscape with wind farms."
|
||||||
|
title="FlexMeasures helps to forecast costs and revenues with precision."
|
||||||
|
>
|
||||||
|
<div class="carousel-caption">
|
||||||
|
Costs and revenues forecast with precision.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="carousel-item">
|
||||||
|
<img src="ui/static/images/chase-lewis-506404-unsplash.jpg"
|
||||||
|
alt="A tesla charging station."
|
||||||
|
title="FlexMeasures provides charging strategies that help balance the grid."
|
||||||
|
>
|
||||||
|
<div class="carousel-caption">
|
||||||
|
Charging strategies that help balance the grid.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Left and right controls -->
|
||||||
|
<button class="carousel-control-prev" type="button" data-bs-target="#myCarousel" data-bs-slide="prev">
|
||||||
|
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
||||||
|
<span class="visually-hidden">Previous</span>
|
||||||
|
</button>
|
||||||
|
<button class="carousel-control-next" type="button" data-bs-target="#myCarousel" data-bs-slide="next">
|
||||||
|
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
||||||
|
<span class="visually-hidden">Next</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
Reference in New Issue
Block a user