frappe-agent-architect
Use when designing multi-app Frappe architectures, deciding whether to split functionality into separate apps, or implementing cross-app communication…
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,
$ npx -y skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-ops-deployment --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/frappe-ops-deploymentContext preview
The summary Claude sees to decide when to auto-load this skill.
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,
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
Repo: Impertio-Studio/Frappe_Claude_Skill_Package
Use when designing multi-app Frappe architectures, deciding whether to split functionality into separate apps, or implementing cross-app communication…
Use when debugging Frappe errors, using bench console for live inspection, analyzing tracebacks, or reading Frappe log files. Prevents wasted debugging time…
Use when receiving vague or unclear ERPNext/Frappe development requests that need interpretation. Transforms requirements like 'make invoice auto-calculate' or…
Use when migrating a Frappe app between major versions, detecting breaking API changes, or resolving post-migration errors. Prevents failed migrations from…
Use when reviewing or validating Frappe/ERPNext code against best practices and common pitfalls. Checks generated code before deployment, validates against all…
Use when building ERPNext/Frappe API integrations (v14/v15/v16) including REST API, RPC API, authentication, webhooks, and rate limiting. Covers external API…