chore: add deploy config with systemd services for auto-start on boot

- frappe-bench-web, worker, schedule, socketio, watch services
- frappe-bench.target to group all services
- bench-env.sh wrapper for proper PATH resolution
- deploy README with installation/management instructions
This commit is contained in:
Claus Lohmar 2026-07-15 20:44:59 +00:00
parent 0b0cf7e4a2
commit 759fac5a67
8 changed files with 154 additions and 0 deletions

44
deploy/README.md Normal file
View file

@ -0,0 +1,44 @@
# Deployment Configuration
## Systemd Services
The Frappe Bench (ERPNext) is managed via systemd for automatic startup on boot.
### Services
| Service | Description | Port |
|---------|-------------|------|
| `frappe-bench-web.service` | Web server (gunicorn) | 8000 |
| `frappe-bench-worker.service` | Background async worker | - |
| `frappe-bench-schedule.service` | Scheduled job runner | - |
| `frappe-bench-socketio.service` | Realtime WebSocket server | 9000 |
| `frappe-bench-watch.service` | File watcher (dev/assets) | - |
### Management
```bash
# View status of all services
systemctl status frappe-bench-web.service
# Start/Stop all services
systemctl start frappe-bench.target
systemctl stop frappe-bench.target
# View logs
journalctl -u frappe-bench-web.service -f
journalctl -u frappe-bench-worker.service -f
```
### Installation
```bash
sudo cp deploy/frappe-bench-*.service deploy/frappe-bench.target /etc/systemd/system/
sudo cp deploy/bench-env.sh /opt/erpnext/frappe-bench/bench-env.sh
sudo systemctl daemon-reload
sudo systemctl enable frappe-bench.target
sudo systemctl start frappe-bench.target
```
### Credentials
Admin credentials are stored in `/root/erpnext-admin-credentials.txt`.

6
deploy/bench-env.sh Executable file
View file

@ -0,0 +1,6 @@
#!/bin/bash
# Environment wrapper for Frappe bench services
export PATH="/opt/erpnext/home/.local/share/pipx/venvs/frappe-bench/bin:/opt/erpnext/frappe-bench/env/bin:$PATH"
export HOME="/opt/erpnext/home"
cd /opt/erpnext/frappe-bench
exec "$@"

View file

@ -0,0 +1,19 @@
[Unit]
Description=Frappe Bench Scheduler
Documentation=https://frappeframework.com
After=network.target redis-server.service
Requires=redis-server.service
[Service]
Type=simple
User=erpnext
Group=erpnext
WorkingDirectory=/opt/erpnext/frappe-bench
ExecStart=/opt/erpnext/frappe-bench/bench-env.sh bench schedule
Restart=always
RestartSec=10
StandardOutput=append:/opt/erpnext/frappe-bench/logs/schedule.log
StandardError=append:/opt/erpnext/frappe-bench/logs/schedule.error.log
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,19 @@
[Unit]
Description=Frappe Bench SocketIO (Realtime)
Documentation=https://frappeframework.com
After=network.target redis-server.service
Requires=redis-server.service
[Service]
Type=simple
User=erpnext
Group=erpnext
WorkingDirectory=/opt/erpnext/frappe-bench
ExecStart=/opt/erpnext/frappe-bench/bench-env.sh bench socketio
Restart=always
RestartSec=10
StandardOutput=append:/opt/erpnext/frappe-bench/logs/socketio.log
StandardError=append:/opt/erpnext/frappe-bench/logs/socketio.error.log
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,19 @@
[Unit]
Description=Frappe Bench File Watcher (Development)
Documentation=https://frappeframework.com
After=network.target
PartOf=frappe-bench-web.service
[Service]
Type=simple
User=erpnext
Group=erpnext
WorkingDirectory=/opt/erpnext/frappe-bench
ExecStart=/opt/erpnext/frappe-bench/bench-env.sh bench watch
Restart=always
RestartSec=10
StandardOutput=append:/opt/erpnext/frappe-bench/logs/watch.log
StandardError=append:/opt/erpnext/frappe-bench/logs/watch.error.log
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,19 @@
[Unit]
Description=Frappe Bench Web Server (ERPNext)
Documentation=https://frappeframework.com
After=network.target redis-server.service
Requires=redis-server.service
[Service]
Type=simple
User=erpnext
Group=erpnext
WorkingDirectory=/opt/erpnext/frappe-bench
ExecStart=/opt/erpnext/frappe-bench/bench-env.sh bench serve --port 8000
Restart=always
RestartSec=10
StandardOutput=append:/opt/erpnext/frappe-bench/logs/web.log
StandardError=append:/opt/erpnext/frappe-bench/logs/web.error.log
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,19 @@
[Unit]
Description=Frappe Bench Background Worker
Documentation=https://frappeframework.com
After=network.target redis-server.service
Requires=redis-server.service
[Service]
Type=simple
User=erpnext
Group=erpnext
WorkingDirectory=/opt/erpnext/frappe-bench
ExecStart=/opt/erpnext/frappe-bench/bench-env.sh bench worker
Restart=always
RestartSec=10
StandardOutput=append:/opt/erpnext/frappe-bench/logs/worker.log
StandardError=append:/opt/erpnext/frappe-bench/logs/worker.error.log
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,9 @@
[Unit]
Description=Frappe Bench (ERPNext) - All Services
Documentation=https://frappeframework.com
Requires=redis-server.service
After=redis-server.service network.target
Wants=frappe-bench-web.service frappe-bench-worker.service frappe-bench-schedule.service frappe-bench-socketio.service frappe-bench-watch.service
[Install]
WantedBy=multi-user.target