Un template moderne, prêt pour la production, pour les projets FastAPI avec authentification, CRUD, mise en cache, limitation de débit, et bien plus.
- 🚀 FastAPI Framework: Haute performance, facile à apprendre, rapide à coder
- 🔒 JWT Authentication: Authentification sécurisée avec tokens de rafraîchissement
- 👮 RBAC: Contrôle d'accès basé sur les rôles
- 🐘 PostgreSQL & MySQL: Support pour plusieurs bases de données
- 🧩 SQLAlchemy ORM: ORM de base de données avec la dernière syntaxe SQLAlchemy 2.0
- 📈 Alembic Migrations: Versionnement et migrations de base de données
- ✅ Pydantic Validation: Validation de schéma avec Pydantic v2
- 📚 OpenAPI Documentation: Documentation API auto-générée
- ⚡ Redis Caching: Mise en cache haute performance
- 🛡️ Rate Limiting: Protection contre les abus
- 🐳 Docker: Conteneurisation pour le développement et la production
- 🔄 CI/CD: Workflows GitHub Actions pour les tests et le déploiement
- 📝 Logging: Logging JSON structuré
- 🧪 Testing: Configuration pytest avec rapports de couverture
- 💎 Code Quality: Configuration Black, Flake8, mypy, isort
- 🔐 Security: Analyse de sécurité et bonnes pratiques
- Docker et Docker Compose
- Python 3.11 ou supérieur (pour le développement local)
- Git
- Cloner le dépôt et initialiser le projet:
git clone https://github.com/Ibrahimzongo/fastapi-template.git mon-projet
cd mon-projet
python init_project.py # Script d'initialisation automatique- Créer un fichier
.env:
cp .env.example .env
# Éditer .env avec votre configuration- Démarrer l'environnement de développement:
docker-compose up --build-
Accéder à l'API à http://localhost:8000
-
Accéder à la documentation de l'API à http://localhost:8000/docs
Pour le développement local sans Docker:
# Créer un environnement virtuel
python -m venv venv
source venv/bin/activate # Sur Windows: venv\Scripts\activate
# Installer les dépendances
pip install -r requirements/dev.txt
# Définir les variables d'environnement
export DATABASE_TYPE=postgresql
export DATABASE_HOST=localhost
export DATABASE_PORT=5432
export DATABASE_USER=postgres
export DATABASE_PASSWORD=password123
export DATABASE_NAME=fastapi_db
export SECRET_KEY=your-secret-key
# Exécuter l'application
uvicorn src.main:app --reloadfastapi-template/
├── .github/ # Workflows GitHub Actions
├── alembic/ # Migrations de base de données
├── docker/ # Configurations Docker
│ ├── dev/ # Config Docker de développement
│ └── prod/ # Config Docker de production
├── src/ # Code source de l'application
│ ├── api/ # Routes et endpoints API
│ ├── core/ # Configurations de base
│ ├── db/ # Modèles et repositories de base de données
│ ├── models/ # Modèles SQLAlchemy
│ └── schemas/ # Schémas Pydantic
├── tests/ # Suite de tests
├── scripts/ # Scripts utilitaires
└── docs/ # Documentation
Pour gérer les migrations de base de données:
# Initialiser la base de données
python scripts/migrate.py init
# Créer une nouvelle migration
python scripts/migrate.py create --message "description"
# Appliquer les migrations
python scripts/migrate.py migrate
# Annuler les migrations
python scripts/migrate.py rollbackLe projet inclut un Makefile pour faciliter les tâches courantes:
# Afficher l'aide
make help
# Construire les conteneurs
make build
# Démarrer les conteneurs
make up
# Arrêter les conteneurs
make down
# Afficher les logs
make logs
# Exécuter les tests
make test
# Formater le code
make fmt
# Linter le code
make lintL'API utilise des tokens JWT pour l'authentification avec un mécanisme de token de rafraîchissement.
# Enregistrer un nouvel utilisateur
curl -X POST http://localhost:8000/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"username": "username",
"password": "password123",
"full_name": "User Name"
}'
# Connexion
curl -X POST http://localhost:8000/api/v1/auth/login \
-d "username=username&password=password123"
# Accéder à un endpoint protégé
curl -X GET http://localhost:8000/api/v1/posts/ \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
# Rafraîchir le token
curl -X POST http://localhost:8000/api/v1/auth/refresh \
-H "Content-Type: application/json" \
-d '{"refresh_token": "YOUR_REFRESH_TOKEN"}'-
Configuration des Secrets GitHub:
Configurez les secrets suivants dans votre dépôt GitHub:
DOCKERHUB_USERNAME: Votre nom d'utilisateur Docker HubDOCKERHUB_TOKEN: Votre token Docker HubSTAGING_HOST: Hôte de stagingSTAGING_USER: Utilisateur SSH de stagingSTAGING_SSH_KEY: Clé SSH de stagingPRODUCTION_HOST: Hôte de productionPRODUCTION_USER: Utilisateur SSH de productionPRODUCTION_SSH_KEY: Clé SSH de production
-
Déploiement en Production:
Pour déployer en production, créez un tag et poussez-le:
git tag v1.0.0 git push origin v1.0.0
Le template supporte trois environnements:
- Development: Pour le développement local
- Staging: Pour les tests avant production
- Production: Pour l'environnement de production
La documentation complète est disponible dans le dossier docs/:
- Documentation de l'API
- Documentation d'authentification
- Documentation de mise en cache
- Documentation CI/CD
- Documentation de déploiement
- Forker le dépôt
- Créer une branche de fonctionnalité:
git checkout -b feature/ma-fonctionnalité - Commiter vos changements:
git commit -am 'Ajouter ma fonctionnalité' - Pousser vers la branche:
git push origin feature/ma-fonctionnalité - Soumettre une pull request
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.