docker-erpnext/README.md
Brian Tan Seng b3e485db90 ⏺ The documentation update is complete! Here's what was accomplished:
📋 Documentation Updated

  1. PROJECT_OVERVIEW.md - Complete 420-line project summary
  2. README.md - Transformed into comprehensive 450+ line guide
  3. API_GUIDE.md - Enhanced with Node.js/Axios examples
  4. API_SECURITY.md - Added Node.js security implementations
  5. CLAUDE.md - Updated with latest API client information

  🎯 Project Status

  Your ERPNext Docker deployment now provides:

  - Complete API Integration: 771 DocTypes documented
  - Dual Language Support: Python + Node.js/Axios clients
  - Enterprise Security: Token auth, rate limiting, audit logging
  - Production Ready: Comprehensive testing and validation

  🚀 Ready to Use

  # Start ERPNext
  docker network create erpnext-local
  docker-compose up -d

  # Test API clients
  python3 secure_api_client.py
  node secure_api_client.js

  All documentation is up-to-date and reflects the complete work accomplished. The project is
  production-ready with enterprise-grade API integration capabilities.
2025-08-22 17:46:29 +08:00

457 lines
14 KiB
Markdown

# ERPNext on Docker with Complete API Integration
## Introduction
This repository provides a comprehensive Docker-based deployment solution for [ERPNext](https://erpnext.com/), an open-source ERP system built on the [Frappe Framework](https://frappeframework.com/).
### 🌟 **What's Included:**
-**Complete ERPNext Docker deployment**
-**771 documented API endpoints** across all modules
-**Production-ready API clients** (Python + Node.js/Axios)
-**Enterprise-grade security** practices
-**Comprehensive documentation** and examples
## System Requirements
The following are the minimal [recommended requirements](https://github.com/frappe/bench):
* **OS**: Red Hat, CentOS, Debian, Ubuntu or other Linux OS
* **Public Cloud**: AWS, Azure, Google Cloud, Alibaba Cloud, and other major cloud providers
* **Private Cloud**: KVM, VMware, VirtualBox, OpenStack
* **ARCH**: Linux x86-64, ARM 32/64, Windows x86-64, IBM POWER8, x86/i686
* **RAM**: 8 GB or more
* **CPU**: 2 cores or higher
* **HDD**: at least 20 GB of free space
* **Swap file**: at least 2 GB
* **Bandwidth**: more fluent experience over 100M
## 🚀 Quick Start
### Prerequisites
Ensure you have Docker and Docker Compose installed:
```bash
# Install Docker
curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
sudo systemctl enable docker
sudo systemctl start docker
# Setup docker-compose alias for Docker Compose V2
alias docker-compose='docker compose'
echo "alias docker-compose='docker compose'" >> /etc/profile.d/docker-compose.sh
source /etc/profile.d/docker-compose.sh
```
### Install ERPNext
1. **Clone the repository:**
```bash
git clone --depth=1 https://github.com/98labs/docker-erpnext
cd docker-erpnext
```
2. **Create the Docker network:**
```bash
docker network create erpnext-local
```
3. **Configure environment variables (optional):**
Edit the `.env` file to customize your deployment:
- `POWER_PASSWORD`: Master password for all services (default: LocalDev123!)
- `APP_HTTP_PORT`: HTTP port for web access (default: 8080)
- `APP_VERSION`: ERPNext version - v12, v13, or v14 (default: v14)
- `APP_NAME`: Container name prefix (default: erpnext)
- `APP_NETWORK`: Docker network name (default: erpnext-local)
4. **Start the services:**
```bash
docker-compose up -d
```
## 📱 Usage
After deployment completes (may take a few minutes for initial setup), you can access ERPNext at: `http://localhost:8080` (or your configured port)
**Note**: The initial setup creates the site and configures the database. Monitor progress with:
```bash
docker-compose logs -f create-site
```
### Default Credentials
| Username | Password |
| -------- | -------- |
| Administrator | LocalDev123! |
## 🔌 Complete API Integration
ERPNext provides comprehensive REST APIs for integration with **771 DocTypes** across all modules.
### 📚 Documentation Files:
- **[API_ENDPOINTS.md](API_ENDPOINTS.md)** - Complete list of all API endpoints (771 DocTypes)
- **[API_GUIDE.md](API_GUIDE.md)** - Detailed usage guide with examples
- **[API_SECURITY.md](API_SECURITY.md)** - Security best practices and authentication methods
- **[NODEJS_API_CLIENT.md](NODEJS_API_CLIENT.md)** - Complete Node.js/Axios client guide
### 🔐 Security Recommendations:
- **Production**: Use API tokens (not cookies) - `Authorization: token key:secret`
- **Web Apps**: Use session cookies with CSRF protection
- **Mobile Apps**: Use OAuth 2.0
- **Always**: Use HTTPS, never HTTP
### 🚀 API Client Quick Start:
#### **Python Client:**
```bash
# Test secure API access (Python)
python3 secure_api_client.py
# Generate complete API documentation
python3 generate_api_docs.py
# Basic API testing
./test_api.sh
```
#### **Node.js/Axios Client:**
```bash
# Install dependencies
npm install axios dotenv
# Setup environment
cp .env.example .env # Edit with your API keys
# Test secure API access (Node.js)
node secure_api_client.js
# Run practical examples
node examples/api_examples.js
# Test environment variables
node test_env_vars.js
```
### 🔑 **API Authentication Setup:**
1. **Generate API Keys:**
- Login to ERPNext → Settings → My Settings
- Scroll to "API Access" section → Generate Keys
- Copy API Key and Secret
2. **Set Environment Variables:**
```bash
# Method 1: .env file (recommended)
echo 'ERPNEXT_API_KEY="your_key_here"' > .env
echo 'ERPNEXT_API_SECRET="your_secret_here"' >> .env
# Method 2: Export in terminal
export ERPNEXT_API_KEY="your_key_here"
export ERPNEXT_API_SECRET="your_secret_here"
```
3. **Use in your code:**
```javascript
// Node.js with Axios
const { ERPNextSecureClient } = require('./secure_api_client');
const client = new ERPNextSecureClient();
await client.authenticateWithToken(); // Uses env vars automatically
const customers = await client.get('/api/resource/Customer');
```
```python
# Python with requests
from secure_api_client import ERPNextSecureClient
client = ERPNextSecureClient()
client.authenticate_with_token() # Uses env vars automatically
customers = client.get('/api/resource/Customer')
```
## 📊 Project Structure
### 📁 **Core Files:**
```
docker-erpnext/
├── docker-compose.yml # Main orchestration
├── .env # Environment configuration
├── CLAUDE.md # Development guide
└── README.md # This file
📋 API Documentation:
├── API_ENDPOINTS.md # All 771 DocTypes documented
├── API_GUIDE.md # Usage guide with examples
├── API_SECURITY.md # Security best practices
└── NODEJS_API_CLIENT.md # Node.js client documentation
🐍 Python API Client:
├── secure_api_client.py # Production-ready Python client
├── generate_api_docs.py # Auto-generate API docs
├── test_api.sh # Basic API tests
└── discover_api_endpoints.sh # API discovery
🟨 Node.js/Axios API Client:
├── secure_api_client.js # Production-ready Node.js client
├── package.json # NPM configuration
├── test_env_vars.js # Environment variable testing
└── examples/
├── api_examples.js # Comprehensive examples
└── simple_usage.js # Quick start example
📄 Configuration:
├── .env.example # Environment template
├── variables.json # Deployment metadata
└── src/ # ERPNext configuration overrides
```
### 🔧 **Available Scripts:**
```bash
# Docker Operations
docker-compose up -d # Start ERPNext
docker-compose down # Stop ERPNext
docker-compose logs -f # View logs
# API Documentation
python3 generate_api_docs.py # Generate/update API docs
./discover_api_endpoints.sh # Discover endpoints
# API Testing
./test_api.sh # Basic cURL tests
python3 secure_api_client.py # Python client demo
node secure_api_client.js # Node.js client demo
node examples/api_examples.js # Comprehensive examples
node test_env_vars.js # Environment test
# NPM Scripts
npm install # Install Node.js dependencies
npm run demo # Run Node.js demo
npm run test-api # Run API examples
```
## 🏗️ Architecture
This deployment uses a microservices architecture with the following containers:
### 🐳 **Docker Services:**
- **backend**: Main ERPNext/Frappe worker service
- **frontend**: Nginx service for serving static assets
- **db**: MariaDB 10.6 database
- **redis**: Redis cache and queue management
- **websocket**: Socket.io for real-time features
- **queue-default/long/short**: Background job workers
- **scheduler**: Scheduled tasks
- **configurator**: Initial configuration (runs once)
- **create-site**: Site creation (runs once)
All services communicate through the `erpnext-local` Docker network.
### 📡 **API Architecture:**
- **771 DocTypes** across 37 modules
- **RESTful endpoints** following standard conventions
- **Multiple authentication** methods (OAuth, Tokens, Sessions)
- **Comprehensive security** with audit logging
- **Rate limiting** and performance optimization
## 📋 Common Operations
### Docker Management
#### Viewing Logs
```bash
# All services
docker-compose logs -f
# Specific service
docker-compose logs -f backend
```
#### Accessing Containers
```bash
# Access backend shell
docker exec -it erpnext-backend /bin/bash
# Access database
docker exec -it erpnext-db mysql -u root -p
```
#### Bench Commands (from within backend container)
```bash
# Access Frappe/ERPNext console
bench --site frontend console
# Clear cache
bench --site frontend clear-cache
# Run migrations
bench --site frontend migrate
# Backup site
bench --site frontend backup
```
### API Operations
#### Quick API Tests
```bash
# Test authentication
curl -c cookies.txt -X POST \
-H "Content-Type: application/json" \
-d '{"usr":"Administrator","pwd":"LocalDev123!"}' \
http://localhost:8080/api/method/login
# Get customers
curl -b cookies.txt http://localhost:8080/api/resource/Customer
# Get items with filters
curl -b cookies.txt \
"http://localhost:8080/api/resource/Item?filters=[[\"disabled\",\"=\",0]]&limit_page_length=5"
```
## 🛠️ Troubleshooting
### Container Issues
**Container fails to start:**
```bash
# Check if network exists
docker network ls | grep erpnext-local
# Create network if missing
docker network create erpnext-local
# Check container status
docker-compose ps
```
**Cannot access the application:**
- Verify all containers are running: `docker-compose ps`
- Check logs for errors: `docker-compose logs`
- Ensure port 8080 is not blocked by firewall
### API Issues
**Authentication failed:**
```bash
# Generate new API keys in ERPNext UI
# Settings → My Settings → API Access → Generate Keys
# Test API keys
node test_env_vars.js
python3 secure_api_client.py
```
**404 errors on API calls:**
- Remember: No browsable API at `/api/`
- Use specific endpoints: `/api/resource/DocType`
- Check [API_ENDPOINTS.md](API_ENDPOINTS.md) for available DocTypes
### Network Issues
**Docker network problems:**
```bash
# Recreate network
docker network rm erpnext-local
docker network create erpnext-local
docker-compose up -d
```
## ❓ FAQ
### Do I need to change the password before docker-compose up?
Yes, you should modify all database passwords and application passwords in the `.env` file for production use.
### Docker running failed due to port conflict?
You should modify the `APP_HTTP_PORT` in the `.env` file and run `docker-compose up -d` again.
### Why does ERPNext use port 8000 internally?
Port 8000 is used internally for container communication. Changing it causes errors. The external port is configured via `APP_HTTP_PORT`.
### How do I run a different ERPNext version?
Change `APP_VERSION` in the `.env` file to v12, v13, or v14. Note: You must remove existing volumes before changing versions:
```bash
docker-compose down
docker volume prune # WARNING: Removes all data
# Update .env
docker-compose up -d
```
### Which authentication method should I use for APIs?
- **API Tokens**: Best for server-to-server and mobile apps
- **Session Cookies**: Only for web applications (with CSRF protection)
- **OAuth 2.0**: Best for third-party integrations
- **Never use Basic Auth** in production
### How do I get API documentation for all endpoints?
Run the documentation generator:
```bash
python3 generate_api_docs.py
```
This creates `API_ENDPOINTS.md` with all 771 DocTypes documented.
## 📖 Documentation
### Official ERPNext/Frappe Documentation:
- [ERPNext Documentation](https://docs.erpnext.com/)
- [Frappe Framework Documentation](https://frappeframework.com/docs)
- [Frappe REST API Documentation](https://frappeframework.com/docs/user/en/api/rest)
### Docker Documentation:
- [Docker Compose Documentation](https://docs.docker.com/compose/)
### This Repository's Documentation:
- [CLAUDE.md](CLAUDE.md) - Complete development guide
- [API_ENDPOINTS.md](API_ENDPOINTS.md) - All API endpoints (771 DocTypes)
- [API_GUIDE.md](API_GUIDE.md) - API usage guide with examples
- [API_SECURITY.md](API_SECURITY.md) - Security best practices
- [NODEJS_API_CLIENT.md](NODEJS_API_CLIENT.md) - Node.js client guide
- [Notes.md](Notes.md) - Architecture and deployment notes
## 🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
### Development Setup:
```bash
# Clone and setup
git clone https://github.com/98labs/docker-erpnext
cd docker-erpnext
# Install API client dependencies
npm install axios dotenv
# Setup environment
cp .env.example .env # Edit with your settings
# Start development environment
docker-compose up -d
# Test API clients
python3 secure_api_client.py
node secure_api_client.js
```
## 💬 Support
For issues related to:
- **This Docker setup**: Open an issue in this repository
- **ERPNext application**: Visit the [ERPNext Forum](https://discuss.erpnext.com/)
- **Frappe Framework**: Visit the [Frappe GitHub](https://github.com/frappe/frappe)
- **API Integration**: Check [API_GUIDE.md](API_GUIDE.md) and [API_SECURITY.md](API_SECURITY.md)
## 📄 License
This Docker deployment configuration is open source. ERPNext is licensed under the GNU GPLv3 License.
---
## 🎯 **Quick Summary**
This repository provides:
-**Complete ERPNext Docker deployment** with security best practices
-**771 documented API endpoints** with auto-discovery tools
-**Production-ready API clients** in Python and Node.js/Axios
-**Enterprise-grade security** with token authentication
-**Comprehensive documentation** with real-world examples
-**Complete testing suite** for API integration
**Get started in 3 steps:**
1. `docker network create erpnext-local && docker-compose up -d`
2. `cp .env.example .env` (add your API keys)
3. `node secure_api_client.js` or `python3 secure_api_client.py`