Unify marketplace service - remove duplicate GPU marketplace, keep single marketplace on port 8007
This commit is contained in:
106
.windsurf/skills/aitbc-systemd-git-workflow.md
Normal file
106
.windsurf/skills/aitbc-systemd-git-workflow.md
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
# AITBC Systemd Git Workflow Skill
|
||||||
|
|
||||||
|
## Description
|
||||||
|
Expert skill for managing systemd service files using proper git workflow instead of scp operations. Ensures systemd configurations are always synchronized via git repository rather than direct file copying.
|
||||||
|
|
||||||
|
## Core Principles
|
||||||
|
|
||||||
|
### Git-Tracked Files Only
|
||||||
|
- All systemd service files must be edited in `/opt/aitbc/systemd/` (git-tracked directory)
|
||||||
|
- NEVER edit files directly in `/etc/systemd/system/`
|
||||||
|
- NEVER use scp to copy systemd files between nodes
|
||||||
|
|
||||||
|
### Symbolic Link Architecture
|
||||||
|
- `/etc/systemd/system/aitbc-*.service` -> `/opt/aitbc/systemd/aitbc-*.service`
|
||||||
|
- Symlinks ensure active systemd files always match repository
|
||||||
|
- Changes in repository automatically reflected in active configuration
|
||||||
|
|
||||||
|
## Standard Workflow
|
||||||
|
|
||||||
|
### Local Changes
|
||||||
|
1. Edit files in `/opt/aitbc/systemd/`
|
||||||
|
2. Commit changes: `git add systemd/ && git commit -m "description"`
|
||||||
|
3. Push to gitea: `git push`
|
||||||
|
|
||||||
|
### Remote Sync (aitbc1)
|
||||||
|
1. Pull changes: `git pull`
|
||||||
|
2. Create/update symlinks: `/opt/aitbc/scripts/utils/link-systemd.sh`
|
||||||
|
3. Reload systemd: `systemctl daemon-reload`
|
||||||
|
4. Restart affected services: `systemctl restart aitbc-*`
|
||||||
|
|
||||||
|
## Available Scripts
|
||||||
|
|
||||||
|
### link-systemd.sh
|
||||||
|
- Location: `/opt/aitbc/scripts/utils/link-systemd.sh`
|
||||||
|
- Purpose: Creates symbolic links from `/etc/systemd/system/` to `/opt/aitbc/systemd/`
|
||||||
|
- Usage: `/opt/aitbc/scripts/utils/link-systemd.sh`
|
||||||
|
- Benefits: Automatic sync, no manual file copying needed
|
||||||
|
|
||||||
|
### sync-systemd.sh
|
||||||
|
- Location: `/opt/aitbc/scripts/sync/sync-systemd.sh`
|
||||||
|
- Purpose: Copies repository files to active systemd (alternative to symlinks)
|
||||||
|
- Usage: `/opt/aitbc/scripts/sync/sync-systemd.sh`
|
||||||
|
- Note: Prefer link-systemd.sh for automatic sync
|
||||||
|
|
||||||
|
## Common Issues
|
||||||
|
|
||||||
|
### Git Conflicts on Remote Nodes
|
||||||
|
**Symptom**: `git pull` fails with "local changes would be overwritten"
|
||||||
|
|
||||||
|
**Resolution**:
|
||||||
|
1. Discard local changes: `git reset --hard HEAD`
|
||||||
|
2. Pull changes: `git pull`
|
||||||
|
3. Re-run link-systemd.sh: `/opt/aitbc/scripts/utils/link-systemd.sh`
|
||||||
|
|
||||||
|
### Broken Symlinks
|
||||||
|
**Symptom**: Systemd service fails to load or uses old configuration
|
||||||
|
|
||||||
|
**Resolution**:
|
||||||
|
1. Verify symlinks: `ls -la /etc/systemd/system/aitbc-*`
|
||||||
|
2. Re-create symlinks: `/opt/aitbc/scripts/utils/link-systemd.sh`
|
||||||
|
3. Reload systemd: `systemctl daemon-reload`
|
||||||
|
|
||||||
|
### SCP Usage Warning
|
||||||
|
**Symptom**: Direct scp to `/etc/systemd/system/` breaks symlinks
|
||||||
|
|
||||||
|
**Resolution**:
|
||||||
|
1. Never use scp to `/etc/systemd/system/`
|
||||||
|
2. Always use git workflow
|
||||||
|
3. If scp was used, restore proper symlinks with link-systemd.sh
|
||||||
|
|
||||||
|
## Verification Commands
|
||||||
|
|
||||||
|
### Check Symlink Status
|
||||||
|
```bash
|
||||||
|
ls -la /etc/systemd/system/aitbc-*
|
||||||
|
readlink /etc/systemd/system/aitbc-blockchain-node.service
|
||||||
|
```
|
||||||
|
|
||||||
|
### Verify Git Status
|
||||||
|
```bash
|
||||||
|
git status
|
||||||
|
git diff systemd/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Check Service Configuration
|
||||||
|
```bash
|
||||||
|
systemctl cat aitbc-blockchain-node.service
|
||||||
|
```
|
||||||
|
|
||||||
|
## Best Practices
|
||||||
|
|
||||||
|
1. **Always edit in git-tracked directory**: `/opt/aitbc/systemd/`
|
||||||
|
2. **Commit before pushing**: Ensure changes are properly committed
|
||||||
|
3. **Pull before link-systemd.sh**: Ensure repository is up-to-date
|
||||||
|
4. **Test locally first**: Verify changes work before syncing to remote
|
||||||
|
5. **Document changes**: Use descriptive commit messages
|
||||||
|
6. **Monitor logs**: Check service logs after changes
|
||||||
|
7. **Run as root**: No sudo needed - we are root on both nodes
|
||||||
|
|
||||||
|
## Memory Reference
|
||||||
|
See memory entry `systemd-git-workflow` for detailed workflow documentation (no sudo needed - we are root on both nodes).
|
||||||
|
|
||||||
|
## Related Skills
|
||||||
|
- aitbc-basic-operations-skill: Basic git operations
|
||||||
|
- aitbc-system-architect: System architecture understanding
|
||||||
|
- blockchain-troubleshoot-recovery: Service troubleshooting
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
Description=AITBC Marketplace Service
|
|
||||||
After=network.target postgresql.service redis.service
|
|
||||||
Wants=postgresql.service redis.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
User=root
|
|
||||||
Group=root
|
|
||||||
WorkingDirectory=/opt/aitbc
|
|
||||||
Environment=PATH=/usr/bin:/usr/local/bin:/usr/bin:/bin
|
|
||||||
Environment=PYTHONPATH=/opt/aitbc/services
|
|
||||||
EnvironmentFile=/etc/aitbc/production.env
|
|
||||||
|
|
||||||
# Marketplace execution
|
|
||||||
ExecStart=/opt/aitbc/venv/bin/python /opt/aitbc/services/gpu_marketplace_launcher.py
|
|
||||||
ExecReload=/bin/kill -HUP $MAINPID
|
|
||||||
KillMode=mixed
|
|
||||||
TimeoutStopSec=10
|
|
||||||
|
|
||||||
# Production reliability
|
|
||||||
Restart=always
|
|
||||||
RestartSec=5
|
|
||||||
StartLimitBurst=5
|
|
||||||
StartLimitIntervalSec=60
|
|
||||||
|
|
||||||
# Production logging
|
|
||||||
StandardOutput=journal
|
|
||||||
StandardError=journal
|
|
||||||
SyslogIdentifier=aitbc-marketplace
|
|
||||||
|
|
||||||
# Production security
|
|
||||||
NoNewPrivileges=true
|
|
||||||
ProtectHome=true
|
|
||||||
|
|
||||||
# Production performance
|
|
||||||
LimitNOFILE=65536
|
|
||||||
LimitNPROC=4096
|
|
||||||
MemoryMax=2G
|
|
||||||
CPUQuota=50%
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
Reference in New Issue
Block a user