diff --git a/deploy/README.md b/deploy/README.md new file mode 100644 index 0000000..568ac2e --- /dev/null +++ b/deploy/README.md @@ -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`. diff --git a/deploy/bench-env.sh b/deploy/bench-env.sh new file mode 100755 index 0000000..e4d5698 --- /dev/null +++ b/deploy/bench-env.sh @@ -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 "$@" diff --git a/deploy/frappe-bench-schedule.service b/deploy/frappe-bench-schedule.service new file mode 100644 index 0000000..8ee645c --- /dev/null +++ b/deploy/frappe-bench-schedule.service @@ -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 diff --git a/deploy/frappe-bench-socketio.service b/deploy/frappe-bench-socketio.service new file mode 100644 index 0000000..2888d5b --- /dev/null +++ b/deploy/frappe-bench-socketio.service @@ -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 diff --git a/deploy/frappe-bench-watch.service b/deploy/frappe-bench-watch.service new file mode 100644 index 0000000..12ff4da --- /dev/null +++ b/deploy/frappe-bench-watch.service @@ -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 diff --git a/deploy/frappe-bench-web.service b/deploy/frappe-bench-web.service new file mode 100644 index 0000000..4b37000 --- /dev/null +++ b/deploy/frappe-bench-web.service @@ -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 diff --git a/deploy/frappe-bench-worker.service b/deploy/frappe-bench-worker.service new file mode 100644 index 0000000..cb96be6 --- /dev/null +++ b/deploy/frappe-bench-worker.service @@ -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 diff --git a/deploy/frappe-bench.target b/deploy/frappe-bench.target new file mode 100644 index 0000000..ebc0c5e --- /dev/null +++ b/deploy/frappe-bench.target @@ -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