Deploying pyborg on modern computers

..note:: Hey this isn’t up to date
This doesn’t work as is for the poetry-managed source in pyborg v2+

docker-compose

Checkout the Dockerfile(s) in the source. There’s also a docker-compose.yml file to get you started.

Systemd Unit files

  • Create pyborg user (adduser pyborg --no-create-home --shell /bin/false)
  • Install pyborg with poetry from source (git) or via pypi (also via pip).
  • Edit the unit files to match your system. (you probably aren’t named Jack.)
  • install these unit files into your systemd path. (try /usr/lib/systemd/system)
  • reload your systemd (systemctl daemon-reload)
  • Raise the services. (systemctl start pyborg_http & systemctl start pyborg_discord)

pyborg_http.service

[Unit]
Description=Pyborg multiplexing server
After=network.target

[Service]
WorkingDirectory=/home/jack/src/pyborg-1up/pyborg
ExecStart=/usr/local/bin/pipenv run pyborg http
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
User=pyborg

[Install]
WantedBy=multi-user.target

pyborg_discord.service

[Unit]
Description=Pyborg Discord Client
After=network.target
Requires=pyborg_http.service

[Service]
WorkingDirectory=/home/jack/src/pyborg-1up/pyborg
ExecStart=/usr/local/bin/pipenv run pyborg discord
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
User=pyborg

[Install]
WantedBy=multi-user.target

pyborg_http_saver.service

[Unit]
Description=Pyborg HTTP Saver
After=network.target
#Requires=pyborg_http.service

[Service]
WorkingDirectory=/home/jack/src/pyborg-1up/pyborg
# this uses httpie
ExecStart=/usr/bin/http post :2001/save
User=pyborg

pyborg_http_saver.timer

[Unit]
Description=Save and backup pyborg brain

[Timer]
OnBootSec=15min
OnUnitActiveSec=30min

[Install]
WantedBy=timers.target

pyborg_http_stats.service

[Unit]
Description=Pyborg Stats Saver
After=network.target
#Requires=pyborg_http.service

[Service]
WorkingDirectory=/home/jack/src/pyborg-1up/pyborg
ExecStart=/usr/bin/http post :2001/stats
User=pyborg

pyborg_http_stats.timer

[Unit]
Description=Save stats snapshot of pyborg

[Timer]
OnUnitActiveSec=30min

[Install]
WantedBy=timers.target