chore(deploy): systemd unit, push.sh, one-time setup notes
This commit is contained in:
53
deploy/README.md
Normal file
53
deploy/README.md
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
# Deploy notes — Void 2.0
|
||||||
|
|
||||||
|
## App deploy (CT 311 — `void2-app`)
|
||||||
|
|
||||||
|
One-time setup on the target host:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Node 22 (from nodesource if Debian's default is older)
|
||||||
|
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
|
||||||
|
apt install -y nodejs
|
||||||
|
|
||||||
|
# Service user + working dir
|
||||||
|
useradd -r -m -d /opt/void-server void
|
||||||
|
mkdir -p /opt/void-server
|
||||||
|
chown void: /opt/void-server
|
||||||
|
|
||||||
|
# systemd
|
||||||
|
install -m 644 void-server.service /etc/systemd/system/void-server.service
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl enable void-server
|
||||||
|
|
||||||
|
# Secrets — /opt/void-server/.env must contain:
|
||||||
|
# DATABASE_URL=postgres://void:<password>@<db-host>:5432/void
|
||||||
|
# OWNER_TOKEN=<32+ char secret>
|
||||||
|
# PORT=3000
|
||||||
|
# NODE_ENV=production
|
||||||
|
chmod 600 /opt/void-server/.env
|
||||||
|
chown void: /opt/void-server/.env
|
||||||
|
```
|
||||||
|
|
||||||
|
Then from the dev box:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /project/src/void-v2
|
||||||
|
./deploy/push.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Maintenance
|
||||||
|
|
||||||
|
```bash
|
||||||
|
journalctl -u void-server -f # follow logs
|
||||||
|
systemctl status void-server # check status
|
||||||
|
systemctl restart void-server # cycle
|
||||||
|
|
||||||
|
# Run migrations on the deployed copy:
|
||||||
|
ssh root@void2-app 'cd /opt/void-server && npm run migrate'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- `.env` is excluded from the rsync to avoid clobbering production secrets with dev values.
|
||||||
|
- The push script uses `--omit=dev` to skip test deps on the target.
|
||||||
|
- `tests/` is excluded — they're for the dev environment only.
|
||||||
22
deploy/push.sh
Executable file
22
deploy/push.sh
Executable file
@@ -0,0 +1,22 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# Push dev source to void2-app (CT 311) and restart the service.
|
||||||
|
# Run from /project/src/void-v2.
|
||||||
|
#
|
||||||
|
# Override TARGET / REMOTE_DIR via env if needed:
|
||||||
|
# TARGET=root@192.168.1.16 ./deploy/push.sh
|
||||||
|
|
||||||
|
TARGET=${TARGET:-root@void2-app}
|
||||||
|
REMOTE_DIR=${REMOTE_DIR:-/opt/void-server}
|
||||||
|
|
||||||
|
rsync -avz --delete \
|
||||||
|
--exclude node_modules \
|
||||||
|
--exclude .git \
|
||||||
|
--exclude tests \
|
||||||
|
--exclude coverage \
|
||||||
|
--exclude .env \
|
||||||
|
./ "$TARGET:$REMOTE_DIR/"
|
||||||
|
|
||||||
|
ssh "$TARGET" "cd $REMOTE_DIR && npm install --omit=dev && systemctl restart void-server"
|
||||||
|
echo "Deployed."
|
||||||
18
deploy/void-server.service
Normal file
18
deploy/void-server.service
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Void 2.0 server
|
||||||
|
After=network-online.target
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=void
|
||||||
|
WorkingDirectory=/opt/void-server
|
||||||
|
EnvironmentFile=/opt/void-server/.env
|
||||||
|
ExecStart=/usr/bin/node /opt/void-server/server.js
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
StandardOutput=journal
|
||||||
|
StandardError=journal
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
Reference in New Issue
Block a user