Un système de monitoring météorologique moderne alliant performance et fiabilité
🚀 Installation • 📖 Documentation • 🛠️ Configuration • 🤝 Contribution
- 🌟 Caractéristiques
- 🏗️ Architecture
- 🚀 Installation
- ⚙️ Configuration
- 📡 API Reference
- 🔧 Maintenance
- 💻 Développement
- 🐛 Dépannage
-
Performance Optimale
- ⚡ Backend ultra-rapide en Rust
- 🔄 Traitement asynchrone des requêtes
- 📊 Mise en cache optimisée
-
Surveillance Complète
- 📈 Monitoring en temps réel
- 🌡️ Mesures de température précises
- 💧 Suivi de l'humidité
- 📍 Support multi-localisation
-
Sécurité
- 🔒 Système de permissions granulaire
- 🛡️ Protection contre les attaques DDOS
- 🔐 Chiffrement des communications
graph TD
A[Capteur DHT11] -->|Données brutes| B[Raspberry Pi Client]
B -->|HTTP POST| C[API Rust]
C -->|Stockage| D[(MariaDB)]
C -->|Monitoring| E[Monit]
F[Nginx] -->|Reverse Proxy| C
# Mise à jour du système
sudo apt update && sudo apt upgrade -y
# Installation des dépendances
sudo apt install -y \
pkg-config \
libssl-dev \
mariadb-server \
nginx \
monit \
build-essential \
git
-- Connexion à MariaDB
sudo mysql -u root -p
-- Création de la base et des privilèges
CREATE DATABASE meteo_db;
CREATE USER '<db_name>'@'localhost' IDENTIFIED BY '<password>';
GRANT ALL PRIVILEGES ON meteo_db.* TO '<db_name>'@'localhost';
FLUSH PRIVILEGES;
-- Structure de la base
USE meteo_db;
CREATE TABLE measurements (
id INT AUTO_INCREMENT PRIMARY KEY,
temperature FLOAT NOT NULL,
humidity FLOAT NOT NULL,
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
location VARCHAR(50) NOT NULL DEFAULT 'interior'
);
# Clone du repository
git clone https://github.com/LukaChassaing/meteo_api_server.git
cd meteo-monitoring
# Compilation
cargo build --release
# Installation
sudo ./install.sh
# /opt/meteo-server/config.env
DATABASE_URL=mysql://<db_name>:<password>@localhost/meteo_db
PORT=<port>
RUST_LOG=info
# /etc/nginx/sites-available/meteo-server
server {
listen 80;
server_name meteo.votredomaine.com;
location / {
proxy_pass http://localhost:<port>;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
# /etc/monit/conf.d/meteo-server
check process meteo-server with pidfile /var/run/meteo-server.pid
start program = "/bin/systemctl start meteo-server"
stop program = "/bin/systemctl stop meteo-server"
if failed host localhost port <port> protocol http
and request "/measurements"
with timeout 10 seconds
then restart
Méthode | Endpoint | Description | Authentification |
---|---|---|---|
POST | /push-measures |
Envoie de nouvelles mesures | ✅ |
GET | /measurements |
Liste toutes les mesures | ❌ |
GET | /measurements/{location} |
Mesures par localisation | ❌ |
GET | /stats |
Statistiques globales | ❌ |
curl -X POST http://localhost:<port>/push-measures \
-H "Content-Type: application/json" \
-d '{
"temperature": {
"value": 23.5,
"unit": "°C"
},
"humidity": {
"value": 65.0,
"unit": "%"
},
"location": "interior"
}'
curl http://localhost:<port>/stats
# Statut des services
sudo systemctl status meteo-server
sudo systemctl status nginx
sudo monit status
# Logs
sudo journalctl -u meteo-server -f
sudo tail -f /var/log/nginx/error.log
# Backup de la base
mysqldump -u root -p meteo_db > backup_$(date +%Y%m%d).sql
Période | Action | Commande |
---|---|---|
Quotidien | Vérification des logs | sudo journalctl -u meteo-server --since "24h ago" |
Hebdomadaire | Backup base de données | mysqldump -u root -p meteo_db > backup.sql |
Mensuel | Purge des anciennes données | mysql -u root -p meteo_db < cleanup.sql |
meteo-monitoring/
├── src/
│ ├── main.rs # Point d'entrée
│ ├── models.rs # Modèles de données
│ ├── handlers.rs # Gestionnaires de routes
│ └── db.rs # Interactions base de données
├── config/
│ ├── nginx/ # Configuration Nginx
│ └── monit/ # Configuration Monit
└── scripts/
├── install.sh # Script d'installation
└── backup.sh # Script de sauvegarde
# Tests unitaires
cargo test
# Tests d'intégration
cargo test --test '*'
# Benchmarks
cargo bench
Problème | Cause Possible | Solution |
---|---|---|
Connection refused |
Service non démarré | sudo systemctl start meteo-server |
Permission denied |
Droits insuffisants | sudo chown -R meteo:meteo /opt/meteo-server |
Erreurs DHT11 | Câblage incorrect | Vérifier les connexions GPIO |
# Vérification réseau
netstat -tulpn | grep meteo-server
# Test de la base de données
mysqlshow -u <db_name> -p meteo_db
# Surveillance ressources
htop
Nous accueillons toutes les contributions ! Voici comment participer :
- Forkez le projet
- Créez votre branche (
git checkout -b feature/AmazingFeature
) - Committez vos changements (
git commit -m 'Add AmazingFeature'
) - Pushez sur la branche (
git push origin feature/AmazingFeature
) - Ouvrez une Pull Request
Ce projet est sous licence GNU GPL v3.
Fait avec ❤️ par Luka Chassaing