92 lines
3.3 KiB
Markdown
92 lines
3.3 KiB
Markdown
# Production setup
|
|
|
|
From a local demo to a real site: run Pagerite as a systemd service behind
|
|
a reverse proxy that terminates HTTPS, with Paskia guarding the editing API.
|
|
|
|
The moving parts:
|
|
|
|
- **Pagerite** — serves the public site on `localhost:8100` and the editing
|
|
API under `/_api`.
|
|
- **Paskia** — the SSO server; owns `/auth/` and answers forward-auth
|
|
subrequests.
|
|
- **A reverse proxy** — Caddy below, but nginx or anything with
|
|
forward-auth support works the same way.
|
|
|
|
## Pagerite as a systemd service
|
|
|
|
Install [uv](https://docs.astral.sh/uv/getting-started/installation/) on the
|
|
system, create a user, and add a template unit:
|
|
|
|
```sh
|
|
sudo useradd --system --home-dir /srv/pagerite --create-home pagerite
|
|
curl -LsSf https://astral.sh/uv/install.sh | sudo env UV_INSTALL_DIR=/usr/local/bin sh
|
|
sudo systemctl edit --force --full pagerite.service
|
|
```
|
|
|
|
```ini
|
|
[Unit]
|
|
Description=Pagerite CMS
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=pagerite
|
|
SyslogIdentifier=pagerite
|
|
WorkingDirectory=/srv/pagerite
|
|
ExecStart=uvx pagerite example.com --dbip
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
Replace `example.com` with your actual domain name. `--dbip` keeps the local GeoIP database up to date: leave out if you don't want DBIP data for analytics.
|
|
|
|
```sh
|
|
sudo systemctl enable --now pagerite
|
|
sudo journalctl -ocat -fu pagerite
|
|
```
|
|
|
|
## Running it on internet
|
|
|
|
We recommend Caddy for making your site publicly visible on the Internet. Presumably you already have some proxy, perhaps Nginx, but our setup is not much different of any other service you might already be running. ChatGPT and the likes can also help with the configuration because online documentation is limited. Note that Paskia also has extensive documentation on [running on various proxy servers](https://git.zi.fi/LeoVasanko/paskia/src/branch/main/docs/proxy/index.md)
|
|
|
|
Install [Caddy](https://caddyserver.com/) and follow the [Paskia setup guide](https://git.zi.fi/LeoVasanko/paskia) to get the SSO server running and its `auth` snippets copied to `/etc/caddy/auth` — that guide covers Paskia's own configuration and admin registration in detail.
|
|
|
|
Then the site config. Only the editing API needs gating; the site itself is public:
|
|
|
|
```caddyfile
|
|
example.com {
|
|
import auth/setup
|
|
|
|
reverse_proxy /auth/* localhost:4401
|
|
|
|
@api path /_api/*
|
|
handle @api {
|
|
import auth/require perm=pagerite:admin
|
|
reverse_proxy localhost:8100
|
|
}
|
|
|
|
handle {
|
|
reverse_proxy localhost:8100
|
|
}
|
|
}
|
|
```
|
|
|
|
Reload Caddy, then create a permission with scope `pagerite:admin` in the
|
|
Paskia admin panel (`/auth/admin/`) and assign it to yourself, as the Paskia
|
|
guide describes. Anonymous visitors now get 401 from `/_api`, logged-in
|
|
users without the permission get 403, and admins get the editing pens.
|
|
|
|
## nginx or another proxy
|
|
|
|
The shape is identical everywhere:
|
|
|
|
- `/auth/` proxies to Paskia (`localhost:4401`).
|
|
- `/_api` requires a forward-auth subrequest against Paskia — on nginx that
|
|
is `auth_request` against Paskia's verify endpoint — before proxying to
|
|
Pagerite (`localhost:8100`).
|
|
- Everything else proxies straight to Pagerite.
|
|
|
|
Paskia ships per-proxy forward-auth guides covering
|
|
[Caddy, nginx and others](https://git.zi.fi/LeoVasanko/paskia/src/branch/main/docs/proxy/index.md);
|
|
adapt the matcher to `/auth/` and `/_api` as above and leave the rest public.
|