54 lines
1.7 KiB
Markdown
54 lines
1.7 KiB
Markdown
# SystemD
|
|
|
|
There are many ways to create a systemd compatible service file. This guide is tailored to be "production ready".
|
|
|
|
## Guide
|
|
|
|
1. Create a new user named drawit: `sudo useradd --system --create-home --shell /usr/sbin/nologin drawit`
|
|
2. Create env directory: `sudo mkdir -p /etc/drawit`
|
|
3. Copy `.env.example` here: `sudo cp .env.example /etc/drawit/drawit.env`
|
|
4. Change directory to /opt: `cd /opt`
|
|
5. Follow instructions to [clone the repo](BUILDING.md#guide). Skip steps 4, 5, and 8.
|
|
6. Change permissions to drawit: `sudo chown -R drawit:drawit /opt/drawit /etc/drawit`
|
|
7. Create a new service file: `sudo nano /etc/systemd/system/drawit.service`
|
|
8. Paste in these contents:
|
|
|
|
```
|
|
[Unit]
|
|
Description=DrawIt
|
|
After=syslog.target network.target remote-fs.target nss-lookup.target network-online.target
|
|
Wants=network-online.target
|
|
Requires=nginx.service
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=drawit
|
|
Group=drawit
|
|
WorkingDirectory=/opt/drawit
|
|
Environment=NODE_ENV=production
|
|
Environment=PORT=3000
|
|
EnvironmentFile=/etc/drawit/drawit.env
|
|
ExecStart=/usr/bin/npm run start
|
|
RestartSec=5
|
|
KillSignal=SIGINT
|
|
TimeoutStopSec=30
|
|
SyslogIdentifier=drawit
|
|
TimeoutSec=30
|
|
StandardOutput=journal
|
|
StandardError=journal
|
|
Restart=always
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
9. If you want to use a different port, make sure to change it e.g. `Environment=PORT=10000`
|
|
10. OPTIONALLY reload system daemon: `sudo systemctl daemon-reload`
|
|
11. Enable and start the service: `sudo systemctl enable --now drawit.service`
|
|
12. Check the service for errors: `sudo systemctl status drawit.service`
|
|
|
|
You should now be running your very own DrawIt instance!
|
|
|
|
## Additional reading
|
|
|
|
After you know *it works!*, you should set up a [reverse proxy](REVERSE_PROXIES.md). |