From d504ab5964ad09d643f91ddfaf4300f3f1a76096 Mon Sep 17 00:00:00 2001 From: hex Date: Sat, 18 Jan 2025 18:05:21 -0800 Subject: [PATCH] add docker containerization --- README.md | 97 +++++++++++++++++++++++++++++++++++++----------- app.py | 4 ++ requirements.txt | 1 + 3 files changed, 81 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 9bbf617..23d34a0 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ A delightful recipe management application built with Flask, featuring a cozy, w - 🎨 Beautiful, responsive design with custom styling - 🚀 Modern interactions using HTMX - 🌙 Warm, inviting color scheme +- 🐳 Docker support for easy deployment ## 🛠️ Technology Stack @@ -18,8 +19,11 @@ A delightful recipe management application built with Flask, featuring a cozy, w - **Database**: SQLite - **Authentication**: Flask-Login - **Styling**: CSS Variables + Modern CSS Features +- **Deployment**: Docker + Gunicorn -## 🚀 Getting Started +## 🚀 Quick Start with Docker + +The easiest way to run Butter Garden is using Docker: 1. Clone the repository: ```bash @@ -27,49 +31,100 @@ A delightful recipe management application built with Flask, featuring a cozy, w cd ButterGarden ``` -2. Create and activate a virtual environment: - ```bash - python -m venv venv - source venv/bin/activate # On Windows: venv\Scripts\activate - ``` - -3. Install dependencies: - ```bash - pip install -r requirements.txt - ``` - -4. Set up your environment variables: +2. Set up environment variables: ```bash cp .env.example .env # Edit .env with your preferred settings ``` -5. Initialize the database: +3. Start with Docker Compose: + ```bash + docker-compose up -d + ``` + +That's it! Visit `http://localhost:5000` to start using Butter Garden. + +## 🐳 Docker Details + +### Container Features +- Production-grade Gunicorn server +- Automatic health checks +- Persistent SQLite database volume +- Non-root user for security +- Automatic restarts on failure + +### Container Management + +**Start the container:** +```bash +docker-compose up -d +``` + +**View logs:** +```bash +docker-compose logs -f +``` + +**Stop the container:** +```bash +docker-compose down +``` + +**Rebuild after changes:** +```bash +docker-compose up -d --build +``` + +### Docker Configuration +- Port: 5000 (configurable in docker-compose.yml) +- Database location: /app/instance (mounted as volume) +- Environment variables: loaded from .env file +- Health check interval: 30 seconds + +## 📝 Manual Installation (Without Docker) + +If you prefer to run without Docker: + +1. Create and activate a virtual environment: + ```bash + python -m venv venv + source venv/bin/activate # On Windows: venv\Scripts\activate + ``` + +2. Install dependencies: + ```bash + pip install -r requirements.txt + ``` + +3. Set up environment variables: + ```bash + cp .env.example .env + # Edit .env with your preferred settings + ``` + +4. Initialize the database: ```bash python init_db.py ``` -6. Run the application: +5. Run the development server: ```bash flask run ``` -Visit `http://localhost:5000` to start using Butter Garden! - ## 🔒 Environment Variables -Create a `.env` file with the following variables: -``` +Required variables in `.env`: +```bash FLASK_SECRET_KEY=your-secret-key-here ADMIN_USERNAME=your-admin-username ADMIN_PASSWORD=your-secure-password -FLASK_ENV=development +FLASK_ENV=production # or development ``` ## 👩‍💻 Development The application uses modern CSS features and HTMX for enhanced interactivity: - - CSS Variables for easy theme customization - Responsive design, mobile friendly - HTMX for dynamic content updates diff --git a/app.py b/app.py index 5426daa..754661e 100644 --- a/app.py +++ b/app.py @@ -135,6 +135,10 @@ def delete_recipe_htmx(recipe_id): db.session.commit() return '', 200 +@app.route('/health') +def health_check(): + return {'status': 'healthy'}, 200 + @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': diff --git a/requirements.txt b/requirements.txt index 41a0429..dc26a29 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,4 @@ Flask-Login==0.6.3 Flask-WTF==1.2.1 Werkzeug==3.0.1 python-dotenv==1.0.0 +gunicorn==21.2.0