Add UV run support and systemd service installer
**UV Integration:** - Updated pyproject.toml with [tool.uv.scripts] - Added 'uv run start' to launch wedding phone - Added 'uv run test' to run audio tests - Refactored main code into main() function - Added proper entry point for package installation **Systemd Service:** - Created wedding-phone.service template - Service runs with UV for dependency management - Automatic restart on failure - Proper security hardening (NoNewPrivileges, PrivateTmp) - GPIO and audio group access configured **Service Installer:** - Created install_service.sh automated installer - Auto-detects project path and user - Checks for UV installation and dependencies - Configures service file with correct paths - Option to enable and start immediately - Provides helpful command reference **Installer Features:** - Validates config.json exists (creates from example if missing) - Installs UV dependencies automatically - Updates service file paths dynamically - Color-coded output for clarity - Error checking at each step - Clean installation process **Usage:** ```bash # Run directly with UV uv run start # Install as system service ./install_service.sh # Service management sudo systemctl start wedding-phone sudo systemctl stop wedding-phone sudo journalctl -u wedding-phone -f ``` **Documentation:** - Updated README with UV commands - Added service installation guide - Removed old manual systemd instructions - Added service management commands - Updated file structure documentation **Benefits:** - Easier to run (single command) - Automatic startup on boot - Better dependency management - Professional service integration - Simplified installation process 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
90
README.md
90
README.md
@@ -141,6 +141,18 @@ This will test:
|
||||
|
||||
### 7. Run the System
|
||||
|
||||
#### Option A: Run Directly with UV (Recommended)
|
||||
|
||||
```bash
|
||||
# Run the wedding phone system
|
||||
uv run start
|
||||
|
||||
# Or run the audio test
|
||||
uv run test
|
||||
```
|
||||
|
||||
#### Option B: Run with Python
|
||||
|
||||
```bash
|
||||
python3 rotary_phone_web.py
|
||||
```
|
||||
@@ -149,6 +161,46 @@ The web interface will be available at:
|
||||
- `http://localhost:8080`
|
||||
- `http://<raspberry-pi-ip>:8080`
|
||||
|
||||
### 8. Install as System Service (Optional)
|
||||
|
||||
To run the wedding phone automatically on boot:
|
||||
|
||||
```bash
|
||||
# Run the installer script
|
||||
./install_service.sh
|
||||
```
|
||||
|
||||
The installer will:
|
||||
- Check dependencies
|
||||
- Install the systemd service
|
||||
- Configure for your user and project path
|
||||
- Optionally enable and start the service
|
||||
|
||||
**Manual service commands:**
|
||||
|
||||
```bash
|
||||
# Enable service to start on boot
|
||||
sudo systemctl enable wedding-phone
|
||||
|
||||
# Start service now
|
||||
sudo systemctl start wedding-phone
|
||||
|
||||
# Stop service
|
||||
sudo systemctl stop wedding-phone
|
||||
|
||||
# Restart service
|
||||
sudo systemctl restart wedding-phone
|
||||
|
||||
# View logs (live)
|
||||
sudo journalctl -u wedding-phone -f
|
||||
|
||||
# View status
|
||||
sudo systemctl status wedding-phone
|
||||
|
||||
# Disable service
|
||||
sudo systemctl disable wedding-phone
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### Web Interface
|
||||
@@ -282,6 +334,8 @@ wedding-phone/
|
||||
├── rotary_phone_web.py # Main application
|
||||
├── test_complete.py # Audio testing script
|
||||
├── configure_hifiberry.sh # HiFiBerry setup script
|
||||
├── install_service.sh # Systemd service installer
|
||||
├── wedding-phone.service # Systemd service file
|
||||
├── config.example.json # Example configuration (copy to config.json)
|
||||
├── pyproject.toml # UV/pip package configuration
|
||||
├── AUDIO_FIX.md # Audio configuration guide
|
||||
@@ -423,42 +477,6 @@ If the script won't start:
|
||||
3. Check all paths exist or can be created
|
||||
4. Verify audio device index is correct
|
||||
|
||||
## Auto-start on Boot
|
||||
|
||||
Create a systemd service:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/systemd/system/wedding-phone.service
|
||||
```
|
||||
|
||||
Add (replace `/path/to/wedding-phone` with your actual path):
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Wedding Phone Service
|
||||
After=network.target sound.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=pi
|
||||
WorkingDirectory=/path/to/wedding-phone
|
||||
ExecStart=/usr/bin/python3 /path/to/wedding-phone/rotary_phone_web.py
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
Enable and start:
|
||||
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable wedding-phone.service
|
||||
sudo systemctl start wedding-phone.service
|
||||
sudo systemctl status wedding-phone.service
|
||||
```
|
||||
|
||||
## API Endpoints
|
||||
|
||||
The system provides REST API endpoints:
|
||||
|
||||
Reference in New Issue
Block a user