frappe-agent-architect
Use when designing multi-app Frappe architectures, deciding whether to split functionality into separate apps, or implementing…
Use when deploying Frappe/ERPNext to production, configuring Nginx or Supervisor, setting up Docker, enabling SSL, or hardening security. Prevents insecure deployments, missing reverse proxy config, and broken process management. Covers production setup, Nginx configuration,
Claude Code
$ npx -y skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-ops-deployment --agent claude-code
Codex
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-ops-deployment -a codex -y
Cursor
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-ops-deployment -a cursor -y
Gemini CLI
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-ops-deployment -a gemini-cli -y
GitHub Copilot
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-ops-deployment -a github-copilot -y
OpenCode
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-ops-deployment -a opencode -y
Windsurf
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-ops-deployment -a windsurf -y
name: frappe-ops-deployment description: > Use when deploying Frappe/ERPNext to production, configuring Nginx or Supervisor, setting up Docker, enabling SSL, or hardening security. Prevents insecure deployments, missing reverse proxy config, and broken process management. Covers production setup, Nginx configuration, Supervisor/systemd, Docker Compose, Let's Encrypt SSL, firewall rules, security hardening. Keywords: deployment, production, nginx, supervisor, docker, ssl, letsencrypt, security, gunicorn, systemd, go live, production setup, HTTPS setup, server config, deploy to VPS, Docker setup.. license: MIT compatibility: "Claude Code, Claude.ai Projects, Claude API. Frappe v14-v16." metadata: author: OpenAEC-Foundation version: "2.0"
Deploy Frappe/ERPNext to production using either traditional (bench + Nginx + Supervisor) or Docker (frappe_docker + Compose). Frappe officially recommends Docker for new deployments.
# Traditional production setup (one command) sudo bench setup production [frappe-user] # What it configures: # 1. Supervisor — process management (gunicorn, workers, Redis, socketio) # 2. Nginx — reverse proxy, static files, websocket proxy # 3. Sudoers — allows frappe-user to restart services # Individual setup commands bench setup supervisor # Generate supervisor config bench setup nginx # Generate nginx config bench setup sudoers $(whoami) # Allow service restarts without password # Symlink configs into system directories sudo ln -s $(pwd)/config/supervisor.conf /etc/supervisor/conf.d/frappe-bench.conf sudo ln -s $(pwd)/config/nginx.conf /etc/nginx/conf.d/frappe-bench.conf # SSL setup sudo -H bench setup lets-encrypt [site-name] sudo -H bench setup lets-encrypt [site-name] --custom-domain [domain] # DNS multitenancy (multiple sites on port 80/443) bench config dns_multitenant on bench setup nginx sudo service nginx reload
---
Which deployment method? | +-- New server, minimal ops experience? | +-- Docker (frappe_docker) — recommended by Frappe | +-- Existing server with bench already installed? | +-- Traditional (bench setup production) | +-- Need custom Frappe apps or complex build? | +-- Docker with custom image build | +-- Cloud hosting (AWS/GCP/Azure)? | +-- Docker on VM or Kubernetes | +-- OR Frappe Cloud (managed) | +-- Single site or multi-site? | +-- Single site: standard setup | +-- Multi-site: DNS multitenancy required
---
Internet → Nginx (port 80/443)
|
+-- Static files served directly
+-- /api, /app → Gunicorn (port 8000)
+-- /socket.io → Node.js socketio (port 9000)
Supervisor manages:
- frappe-bench-web (gunicorn)
- frappe-bench-socketio (node)
- frappe-bench-worker-short
- frappe-bench-worker-default
- frappe-bench-worker-long
- frappe-bench-redis-cache
- frappe-bench-redis-queue
- frappe-bench-schedule (scheduler)# 1. Install bench (as non-root user) sudo pip3 install frappe-bench bench init frappe-bench --frappe-branch version-15 cd frappe-bench # 2. Create site bench new-site mysite.example.com bench --site mysite.example.com install-app erpnext # 3. Production setup (configures nginx + supervisor + sudoers) sudo bench setup production $(whoami) # 4. Verify processes are running sudo supervisorctl status # 5. Verify nginx config sudo nginx -t && sudo systemctl reload nginx
`bench setup nginx` generates `config/nginx.conf` with:
**ALWAYS disable default nginx site** to avoid port 80 conflicts:
sudo rm /etc/nginx/sites-enabled/default # OR disable: sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
`bench setup supervisor` generates `config/supervisor.conf` with:
For CentOS/RHEL: use `.ini` extension instead of `.conf` for supervisor configs.
---
# Automated setup with cron renewal sudo -H bench setup lets-encrypt mysite.example.com # For custom domain (site name differs from domain) sudo -H bench setup lets-encrypt mysite.example.com --custom-domain www.example.com # Manual renewal sudo bench renew-lets-encrypt
**Prerequisites**:
**Certificate locations**: `/etc/letsencrypt/live/example.com/`
Certificates expire every 90 days. The setup command adds a monthly cron for renewal.
# 1. Place certificate files sudo mkdir -p /etc/nginx/conf.d/ssl sudo cp certificate.crt /etc/nginx/conf.d/ssl/ sudo cp private.key /etc/nginx/conf.d/ssl/ sudo chmod 600 /etc/nginx/conf.d/ssl/private.key # 2. Configure site bench set-config ssl_certificate "/etc/nginx/conf.d/ssl/certificate.crt" bench set-config ssl_certificate_key "/etc/nginx/conf.d/ssl/private.key" # 3. Regenerate and reload bench setup nginx sudo systemctl reload nginx
All HTTP traffic is automatically redirected to HTTPS after SSL is configured.
---
# Enable DNS-based site routing bench config dns_multitenant on # Create sites with domain names bench new-site site1.example.com bench new-site site2.example.com # Regenerate nginx (creates server blocks per site) bench setup nginx sudo systemctl reload nginx
ALWAYS use the actual domain as the
60 deterministic Claude AI skills for Frappe Framework & ERPNext v14-v16 development and operations
Use when designing multi-app Frappe architectures, deciding whether to split functionality into separate apps, or implementing…
Use when debugging Frappe errors, using bench console for live inspection, analyzing tracebacks, or reading Frappe log files.…
Use when receiving vague or unclear ERPNext/Frappe development requests that need interpretation. Transforms requirements like…
Use when migrating a Frappe app between major versions, detecting breaking API changes, or resolving post-migration errors.…
Use when reviewing or validating Frappe/ERPNext code against best practices and common pitfalls. Checks generated code before…
Use when building ERPNext/Frappe API integrations (v14/v15/v16) including REST API, RPC API, authentication, webhooks, and rate…
Behavioral guidelines to reduce common LLM coding mistakes. Use when writing, reviewing, or refactoring code to avoid…
Design and build AI agents for any domain. Use when users: (1) ask to "create an agent", "build an assistant", or "design an AI…