Docker environment for developing, deploying, and running Frappe applications (ERPNext and custom apps) in production and development
Find a file
ExarLabs 5671dec923
Merge pull request #1 from ExarLabs/dev
KAN-63: academy lms dockerization + CI/CD started
2025-06-26 15:39:12 +03:00
.github KAN-63: academy lms dockerization + CI/CD started 2025-06-26 15:18:07 +03:00
.vscode chore(lint): Run prettier 2021-12-10 11:53:43 +03:00
devcontainer-example Update docker-compose.yml (#1415) 2024-06-25 10:36:25 +05:30
development chore: Update vscode-example scripts (#1613) 2025-04-12 11:06:57 +05:30
docs chore: Update EOL NodeJS to 20.19.2 (#1638) 2025-05-29 17:33:28 +05:30
images KAN-63: academy lms dockerization + CI/CD started 2025-06-26 15:18:07 +03:00
nginx KAN-63: academy lms dockerization + CI/CD started 2025-06-26 15:18:07 +03:00
overrides Compose with restart (#1567) 2025-02-15 12:03:57 +05:30
resources fix: pwd SocketIO Origin in nginx conf (#1552) 2025-01-24 12:36:30 +05:30
scripts KAN-63: academy lms dockerization + CI/CD started 2025-06-26 15:18:07 +03:00
tests fix: tests 2024-12-10 16:26:59 +05:30
.dockerignore Global refactoring (#617) 2022-03-14 11:23:03 +05:30
.editorconfig chore: Use pre-commit framework (#604) 2021-12-10 11:48:00 +03:00
.env.example KAN-63: academy lms dockerization + CI/CD started 2025-06-26 15:18:07 +03:00
.gitignore fix: gitignore (#1391) 2024-05-01 12:25:49 +05:30
.pre-commit-config.yaml chore(deps): Update pre-commit hooks (#1576) 2025-02-28 12:56:36 +05:30
.shellcheckrc chore(lint): Take hooks configs out so linting works without pre-commit too (#609) 2021-12-10 12:31:44 +03:00
CODE_OF_CONDUCT.md #1402 Environment variables for custom image (#1403) 2024-06-08 00:21:17 +05:30
compose.yaml KAN-63: academy lms dockerization + CI/CD started 2025-06-26 15:18:07 +03:00
CONTRIBUTING.md ci: refactor (#1158) 2023-06-26 11:54:37 +05:30
DEPLOYMENT.md KAN-63: academy lms dockerization + CI/CD started 2025-06-26 15:18:07 +03:00
docker-bake.hcl ci: push frappe or erpnext branch as tag (#1508) 2024-11-11 11:52:27 +05:30
example.env chore: Update example.env 2025-06-25 05:20:34 +00:00
install_x11_deps.sh Cypress UI Test service and updates to installer.py (#1250) 2023-10-26 08:35:31 +05:30
LICENSE chore: Rename LICENSE.md to LICENSE (#608) 2021-12-10 16:25:57 +05:30
pwd.yml chore: Update example.env 2025-06-25 05:20:34 +00:00
README.md KAN-63: academy lms dockerization + CI/CD started 2025-06-26 15:18:07 +03:00
requirements-test.txt chore(deps): bump pytest from 8.3.5 to 8.4.0 (#1644) 2025-06-09 07:53:27 +05:30
setup.cfg Use pytest (#705) 2022-03-24 10:40:56 +03:00

Academy Docker - Automated Deployment for Academy LMS Stack

This repository provides an automated deployment solution for the Academy LMS stack on Hetzner Cloud. It monitors changes in the application repositories and automatically builds, pushes, and deploys updated Docker images.

🎯 Purpose

This is a fork of frappe/frappe_docker customized to:

  • Automatically deploy the Academy LMS stack with custom Frappe apps
  • Monitor and react to changes in watched repositories
  • Provide CI/CD pipeline for Hetzner deployment
  • Integrate AI-powered tutoring capabilities via LangChain

📦 Components

The stack includes:

  1. Academy LMS - Custom fork of Frappe LMS
  2. Academy AI Tutor Chat - AI-powered tutoring Frappe app
  3. Academy LangChain - LangChain service for AI functionality
  4. Frappe Framework - The underlying framework
  5. Supporting Services - MariaDB, Redis, PostgreSQL, Nginx

🚀 Quick Start

For detailed deployment instructions, see DEPLOYMENT.md.

Prerequisites

  • GitHub account with access to all repositories
  • Hetzner server (Ubuntu 20.04+ recommended)
  • GitHub Personal Access Token
  • OpenAI API key (for AI features)

Basic Setup

  1. Fork this repository
  2. Configure GitHub secrets:
    • HETZNER_SSH_KEY
    • ACADEMY_DOCKER_PAT
  3. Add webhook workflows to watched repositories
  4. Run setup script on Hetzner server
  5. Configure environment variables
  6. Trigger initial deployment

🔄 Automated Workflow

graph LR
    A[Code Push] --> B[Webhook Trigger]
    B --> C[Build Docker Image]
    C --> D[Push to GHCR]
    D --> E[Deploy to Hetzner]
    E --> F[Run Migrations]
    F --> G[Health Check]

📁 Repository Structure

academy_docker/
├── .github/workflows/       # CI/CD workflows
│   ├── deploy.yml          # Main deployment workflow
│   └── webhook-*.yml       # Webhook templates for watched repos
├── images/                 # Docker image definitions
│   └── custom/            # Custom Frappe image with apps
├── nginx/                  # Nginx configuration
├── scripts/               # Utility scripts
│   ├── migrate-all-sites.sh
│   └── setup-hetzner.sh
├── compose.yaml           # Docker Compose configuration
├── .env.example          # Environment variables template
└── DEPLOYMENT.md         # Detailed deployment guide

🔧 Configuration

Key environment variables:

  • MARIADB_ROOT_PASSWORD - Database root password
  • ADMIN_PASSWORD - Frappe admin password
  • OPENAI_API_KEY - OpenAI API key for AI features
  • FRAPPE_SITE_NAME_HEADER - Your domain name
  • LANGCHAIN_API_URL - LangChain service URL

🛡️ Security

  • All secrets stored in GitHub Secrets
  • Firewall rules configured automatically
  • SSL/TLS support for production
  • Regular automated backups

📊 Monitoring

  • Check service status: docker compose ps
  • View logs: docker compose logs -f
  • System health: docker compose exec backend bench doctor

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Submit a pull request

📝 License

This project inherits the license from the original frappe_docker repository.

🆘 Support

  • Check DEPLOYMENT.md for detailed instructions
  • Review GitHub Actions logs for deployment issues
  • Open an issue for bugs or feature requests

Built with ❤️ for automated Academy LMS deployment