445 lines
26 KiB
Markdown
445 lines
26 KiB
Markdown
# 0.7.3 -> 0.8.0 deployment changes
|
||
|
||
## 0.15.1 -> 0.16.0
|
||
|
||
There is no SQLite schema migration. Existing vhosts, backends, cache files, administrator accounts and sessions are retained.
|
||
|
||
Custom locations are now interpreted only as overrides. An untouched legacy synthetic `root` prefix `/` location with no custom backend/cache/ACL/header/rewrite/local-response behavior is normalized away and replaced by the internal main-vhost fallback. A deliberately customized `/` location remains a real override. No manual edit is required for the normal legacy `root` entry.
|
||
|
||
Publishing the administration listener through a vhost remains explicit-risk functionality. For reserved session-cookie passthrough the public request must be HTTPS, the external hostname must be listed in `administration.allowed_hosts`, the backend must directly address the configured administration listener by IP, and that backend must have `accept_local_listener_risk=true`. Ordinary upstreams continue to have `rustproxy_session` removed in both directions.
|
||
|
||
Access-log JSON may contain the additional fields `http_version`, `transport`, `websocket_bootstrap`, `websocket_phase`, `websocket_error`, `h3_reset_code` and `upstream_status`. Cache/system metrics add memory-breakdown gauges; existing consumers should ignore unknown fields as usual.
|
||
|
||
## 0.15.0 -> 0.15.1
|
||
|
||
There is no schema or configuration-format migration. This patch changes only administration UI language-pack placement, Custom locations editing/help/preview and dashboard visualizations. Existing vhosts, locations, cache settings and SQLite data remain unchanged.
|
||
|
||
## 0.14.0 -> 0.15.0
|
||
|
||
There is no new SQLite schema version in 0.15.0. Renewal observations remain in the existing
|
||
schema-v3 `certificate_renewals` table. The application no longer contains a runtime JSON importer.
|
||
|
||
When `upgrade.sh` / `scripts/upgrade.py` is used while RustProxy is stopped, an obsolete
|
||
`<data-dir>/certs/renewals.json` observation sidecar is validated as a regular file and removed as
|
||
the final source-upgrade step. It is not imported and no second legacy copy is retained. If the
|
||
source-upgrade transaction fails before that final removal, the old sidecar remains untouched.
|
||
|
||
If a site replaces source manually instead of using the stopped upgrader, the old sidecar is simply
|
||
ignored. Back it up and remove it. An empty renewal-observation table is safe: the ordinary scheduler
|
||
reconstructs non-secret status/timestamps on its first 5–10 minute startup check, while certificates,
|
||
keys, ACME account material and renewal profiles remain unchanged.
|
||
|
||
## 0.13.1 -> 0.13.2
|
||
|
||
Back up `config.sqlite3` and the configured certificate files before updating. On first
|
||
0.13.2 open, RustProxy applies the additive SQLite schema-v3 migration and creates
|
||
`certificate_renewals`; existing configuration, administrator accounts, sessions, audit
|
||
records and revisions are retained. The table stores only non-secret renewal observation
|
||
state (timestamps/status/message). If it is empty and the older private
|
||
`certs/renewals.json` exists, validated observations are imported once and the sidecar is
|
||
removed only after the database write succeeds. That one-time runtime compatibility path existed in
|
||
0.13.2/0.14.0 and is removed in 0.15.0; use the 0.15.0 stopped upgrader described above instead.
|
||
|
||
The managed `update.sh` path for 0.13.2+ also marks the stop as a software update so an
|
||
enabled cold tier receives remaining hot cache objects even when ordinary
|
||
`cold_on_shutdown=false`. This is a best-effort persistent handoff bounded by the managed
|
||
stop timeout; no cache persistence is possible when cold storage is disabled.
|
||
|
||
The raw JSON editor moved to **Settings -> Manual config**. `/configuration` remains a
|
||
browser compatibility alias, so old bookmarks do not require migration.
|
||
|
||
## 0.8.0 -> 0.8.1 cache behavior
|
||
|
||
The source default for `cache.enabled` changes to `true`. Existing saved configurations
|
||
that explicitly contain `enabled: false` remain disabled; the new default applies to new
|
||
or missing cache settings and is not a silent rewrite of an administrator choice.
|
||
`cache.max_object_bytes` may now be configured up to 1 GiB when `cache.max_bytes` is at
|
||
least as large. Browser conditional requests/no-cache refreshes now use conditional HIT
|
||
or backend revalidation instead of blanket BYPASS; `no-store` remains a hard exclusion.
|
||
|
||
|
||
- Existing vhosts deserialize new traffic-policy fields with conservative/default-off
|
||
behavior except `http2_enabled` and `http3_enabled`, which default true to preserve prior protocol behavior.
|
||
- The pre-production inline/global listener format is intentionally no longer readable.
|
||
Recreate development listener configuration under `listeners.endpoints` and bind each
|
||
vhost with `frontend.listener_ids`. No automatic vhost migration is performed.
|
||
- Existing backend TLS settings are preserved. Only newly created panel backend rows use
|
||
the 0.13.0 default `tls_verify:false`; enable verification explicitly for origins that require certificate identity checks.
|
||
- First installs fetch verified GeoIP country files. Existing installations upgraded with
|
||
`update.sh` keep their data directory; install the two verified files under `data/geoip`
|
||
before enabling country rules if the installation predates 0.8.0.
|
||
|
||
|
||
No database schema migration is introduced. The release changes deployment defaults
|
||
and control-plane startup behavior:
|
||
|
||
- `admin setup-token` can create the one-time setup token before first server start.
|
||
- New managed systemd installations default to `0.0.0.0:80` and `0.0.0.0:443`.
|
||
Existing installations keep the saved service unit during `update.sh`; update does
|
||
not silently add port 443.
|
||
- Wildcard administration is opt-in only. Direct server startup requires
|
||
`--admin-listen 0.0.0.0:9090 serve --allow-remote-admin`.
|
||
The installer uses the equivalent `--admin` and `--allow-remote-admin` options.
|
||
This is plain HTTP; keep it behind a firewall/private network or use a tunnel.
|
||
|
||
Back up private state before updating and run the real Rust check/test suite on the
|
||
target build host.
|
||
|
||
---
|
||
|
||
# 0.7.1 -> 0.7.2 build fix
|
||
|
||
This is a distinct source release. It removes the absent-SWAGGER-environment panic;
|
||
it does not migrate the database, alter vhosts or reset any account/certificate.
|
||
Back up private data as usual and update the complete source tree, not just build.rs.
|
||
The patch changes Cargo dependencies and adds a required build helper, so copying
|
||
only the Rust file would leave an inconsistent package.
|
||
|
||
The existing `dev.sh` Python 3.10+ requirement now also applies to direct Cargo
|
||
builds. No `.cargo/config.toml` or manual `SWAGGER_UI_DOWNLOAD_URL` export is required.
|
||
The default pinned tag is fetched on the first build; a reviewed local tag archive
|
||
remains supported for restricted build hosts. See [API_ACCESS.md](API_ACCESS.md).
|
||
No default to an older Swagger distribution is introduced.
|
||
|
||
Use the existing stopped-source `update.sh --source-tree` workflow or build a new
|
||
binary and use the managed-service updater as documented in [INSTALL.md](INSTALL.md).
|
||
`dev.sh` backs up an older Cargo.lock before regenerating it; do not fake the new
|
||
lockfile by replacing its root version text. A valid new lockfile is not included.
|
||
Rebuild/restart after successful tests; the old process cannot load embedded changes.
|
||
There is no need to clear application data or certificates, or to run `cargo clean`
|
||
just to remove this panic. Test the real admin session and `/docs` after building.
|
||
|
||
---
|
||
|
||
# 0.7.0 -> 0.7.1 access changes
|
||
|
||
No database/configuration schema migration is introduced by this patch. Back up
|
||
existing data/certificates and use the existing install/update instructions.
|
||
The reported release is source-only; compile and test before installing a binary.
|
||
|
||
Operational JS and full translation packs are now session-protected. Old tabs
|
||
should be reloaded after upgrading. Automation reading `/api/auth/status.version`
|
||
or `/healthz.version` must use authenticated `/api/status` instead. Dedicated
|
||
Prometheus scraping retains its own CIDR/token policy and remains independent of
|
||
browser sessions. No reverse-proxy vhost auth policy is relaxed by this patch.
|
||
|
||
In 0.7.1 the Swagger pin depended on `.cargo/config.toml`. That requirement is
|
||
removed in 0.7.2 (see the build notes above). Source-tree updates still back up and
|
||
replace that managed directory; retain any unrelated local Cargo settings from
|
||
your private backup. Read [API_ACCESS.md](API_ACCESS.md) for current build inputs.
|
||
|
||
Run `python3 scripts/admin_audit.py --url http://127.0.0.1:9090` after deployment.
|
||
It prints only status checks, no response bodies or credentials.
|
||
|
||
---
|
||
|
||
# Updating, backup and recovery
|
||
|
||
## 0.7.0: renewal and service deployment
|
||
|
||
See [INSTALL.md](INSTALL.md) for separate installer/updater commands and complete
|
||
code-plus-data rollback. Older source deployments retain `update.sh --source-tree`.
|
||
Back up the entire private state, including Certbot profiles, before any update.
|
||
Do not overlay a new binary onto a live, untested database without a recovery plan.
|
||
|
||
Managed 0.6 certificate issuer metadata defaults to automatic renewal in 0.7.
|
||
The scheduler starts after a 5-10 minute delay and reuses existing consented
|
||
profiles. Imported PEM without issuer metadata is not scheduled. Review auto-renew
|
||
flags, service PATH, DNS permissions and HTTP-01 reachability before starting.
|
||
The new process does not implicitly switch staging certificates to production.
|
||
|
||
Missing WebSocket flags preserve existing enabled behavior. New UI-authored vhosts
|
||
default to disabled. Existing backend members remain in the normal pool; new
|
||
dedicated location origins default to `pool_eligible:false`. Basic Auth is opt-in,
|
||
requires actual TLS by default and combines with (rather than bypasses) IP ACLs.
|
||
|
||
Normal dev/server startup no longer starts the demonstration origin. Existing
|
||
sample vhosts are not silently deleted: remove or replace them deliberately, or
|
||
explicitly enable the protocol fixture in an isolated old test installation. New
|
||
databases show a neutral informational landing page with no sample backend.
|
||
|
||
New fields are not a promise of backward parser compatibility. Downgrade by
|
||
restoring both old code and the pre-upgrade private-data snapshot. No verified Rust
|
||
build is supplied; run check/test and server acceptance before rollout.
|
||
|
||
## 0.6.0: historical vhost migration note
|
||
|
||
0.6.0 originally shipped a one-way importer from the pre-vhost development format.
|
||
That importer is removed in 0.8.0. Current builds accept only `vhosts`, named
|
||
`listeners.endpoints` and `frontend.listener_ids`. Development databases containing
|
||
top-level route/backend documents or inline frontend listeners must be recreated or
|
||
manually rewritten before starting 0.8.0. No automatic compatibility conversion runs.
|
||
|
||
The dedicated Prometheus listener remains opt-in/disabled by default. Settings ->
|
||
Prometheus controls it. A restart is required for enable/bind/token-variable changes.
|
||
Certificate provider metadata remains additive and secrets remain outside exported
|
||
configuration.
|
||
|
||
## 0.5.0 behavior changes
|
||
|
||
Back up the database and configured PEM pairs before upgrading. The managed
|
||
updater replaces the full source tree, not live data. Build and test on staging.
|
||
No verified binary or fabricated Cargo.lock is supplied.
|
||
|
||
TLS bindings with omitted `http3` now enable UDP with defaults; older versions
|
||
omitted disabled options when serializing, so review ALL TLS bindings. To retain
|
||
TCP-only operation, explicitly save `http3: null` on the named TLS listener before
|
||
restarting the new process. Shared/wildcard
|
||
IP-port bindings must agree on all protocol flags and H3 limits. A UDP bind failure
|
||
is not silently ignored. HTTP/1.1 and optional HTTP/2 remain on TCP.
|
||
|
||
`diagnostic_headers.hide_mock_origin` was removed and is no longer accepted or
|
||
exported; use explicit response-header rules if needed. X-Mock-Origin is a normal upstream field; remove it with ordinary
|
||
response-header rules when desired. Request ID remains off by default. The removed 0.17 `diagnostic_headers.revision` field is no longer part of the configuration schema. Custom Server values
|
||
are NOT automatically rewritten to the new binary version.
|
||
|
||
Cache contents are process-local. Reserved admin-cookie removal now occurs before
|
||
cache eligibility; application cookies still bypass. Domain counters reset on
|
||
configuration publication. See CACHE_DIAGNOSTICS.md for explaining BYPASS.
|
||
|
||
ACME/RFC2136 is optional and adds external Python/Certbot/plugin requirements.
|
||
No DNS update or CA request happens simply by upgrading. Issuance is explicit,
|
||
staging-first and does not activate a certificate without import. Existing
|
||
`dev.sh backup` does not include the private `certs/acme` account/TSIG profiles;
|
||
back those up separately when issuance is idle. No automatic renewal is included.
|
||
See ACME_RFC2136.md for limitations and restoration responsibilities.
|
||
|
||
|
||
## Reported auth module compilation failure
|
||
|
||
0.0.1 used `src/auth.rs`. 0.0.2 moved the implementation into `src/auth/mod.rs` and
|
||
`src/auth/store.rs`. Overlay extraction can retain both layouts and cause Rust
|
||
E0761. Missing `Store::session_at`, `admin_record`, `end_session` and
|
||
`revoke_all_sessions` messages can follow because the implementation module did not
|
||
load. The 0.0.2 archive itself did not contain both auth layouts.
|
||
|
||
0.4.0 retains an explicit `#[path = "auth/mod.rs"]` declaration, including for direct
|
||
Cargo invocations. Preflight also detects mixed source trees. It recognizes the
|
||
exact original auth file by SHA-256 and moves it to
|
||
`.upgrade-backup/legacy-auth/auth.rs.0.0.1`. Unknown custom source is left untouched
|
||
and the development script stops with instructions. Never delete custom files just
|
||
to silence a compiler error.
|
||
|
||
```bash
|
||
bash dev.sh doctor
|
||
bash dev.sh repair
|
||
```
|
||
|
||
These commands do not require Rust. Repair is deliberately limited; a safe whole
|
||
source-tree update is preferable to extracting individual files over a checkout.
|
||
|
||
## Recommended source update
|
||
|
||
Extract the new archive beside, not inside, the installed project. First back up
|
||
the existing database using the new backup script. The destination must not exist:
|
||
|
||
```bash
|
||
unzip RustProxy-0.4.0.zip -d /home/mg/rustproxy-040-staging
|
||
cd /home/mg/rustproxy-040-staging/RustProxy
|
||
python3 scripts/backup.py --data-dir /home/mg/RustProxy/data \
|
||
/home/mg/RustProxy-backup-before-0.4.0
|
||
```
|
||
|
||
A missing database means there is no database to back up. Do not initialize an empty
|
||
replacement accidentally. For data stored elsewhere, use the actual directory.
|
||
|
||
Stop RustProxy using its terminal or service manager. Then:
|
||
|
||
```bash
|
||
bash upgrade.sh /home/mg/RustProxy --stopped
|
||
# External data directory: also pass --data-dir /actual/private/data
|
||
cd /home/mg/RustProxy
|
||
bash dev.sh test
|
||
bash dev.sh
|
||
```
|
||
|
||
The updater checks a process lock on POSIX, requires the explicit `--stopped`
|
||
acknowledgement and rejects nested source/target paths and managed symlinks.
|
||
It preserves `.env`, `data`, `.git`, `target` and unmanaged files. Source, scripts,
|
||
tests, examples and documentation are replaced as whole managed paths. Old managed
|
||
files remain in `.upgrade-backup/before-0.4.0-<identifier>`. An interrupted copy
|
||
exception triggers source rollback. Abrupt power loss is not a transactional
|
||
filesystem update; inspect the backup and source tree before restarting.
|
||
|
||
The updater does not evaluate the old `.env` or discover arbitrary external data
|
||
paths. Pass `--data-dir` when necessary, and stop every process yourself before
|
||
changing source. It does not perform a database migration or backup automatically.
|
||
Custom source edits are backed up, not merged.
|
||
|
||
## Database compatibility
|
||
|
||
RustProxy 0.13.2 advances the SQLite schema from version 2 to **version 3** with one
|
||
additive `certificate_renewals` table for non-secret ACME observation state. The existing
|
||
0.0.1-to-0.0.2 auth migration still runs when needed. Configuration-document additions
|
||
remain defaulted/non-destructive. Existing accounts, policies, revisions and configuration
|
||
remain intact. Starting with 0.15.0 the application reads renewal observations only from this table;
|
||
historical JSON observation state is handled, when present, by the stopped source-upgrade remove
|
||
described above rather than by the running service.
|
||
|
||
The generated default certificate is created on first TLS-enabled startup, in
|
||
`<data-dir>/certs`. Its key is never overwritten by startup. A partial or invalid
|
||
pair causes a clear startup error; it is not silently discarded. Demo settings
|
||
never overwrite an existing configuration, including an empty existing one.
|
||
|
||
## Backup contents and restore
|
||
|
||
`./dev.sh backup NEW_DIRECTORY` uses SQLite's online backup API, so committed WAL
|
||
content is included. The result contains a private `config.sqlite3`, `backup.json`
|
||
with hashes/revision metadata and any configured/default certificate files under
|
||
`certs/`. Unreferenced staged certificate files are not included. Do not rotate or
|
||
manually replace certificate files while taking a backup. This is a consistent
|
||
SQLite snapshot plus file copies, not one cross-filesystem transaction.
|
||
|
||
Backups contain credential hashes, session records and private keys. Keep them
|
||
private, encrypted at rest as appropriate, and outside public web directories.
|
||
They do not contain `.env`, source edits or a generated dependency lockfile; preserve
|
||
those separately. Existing backup destinations and certificate symlinks are refused.
|
||
|
||
To restore, stop the server, verify backup hashes and keep the current data directory
|
||
as a separate recovery copy. Restore into a **new private directory**, including
|
||
`config.sqlite3` and `certs/` together, then point `RUST_PROXY_DATA_DIR` to it.
|
||
Use directory mode 700 and file mode 600. Do not copy stale `-wal` or `-shm` files
|
||
from another database beside the restored snapshot. Start the matching version and
|
||
run `./dev.sh admin logout-all` or reset the password to revoke restored sessions.
|
||
Verify routes, TLS identities and administration before resuming traffic.
|
||
|
||
## Downgrade
|
||
|
||
Older versions reject unknown configuration fields such as `tls`, `protocol` or
|
||
`tls_ca_pem`. Restoring old source alone is therefore not a safe downgrade after
|
||
saving new configuration. Restore the matching pre-upgrade database and environment
|
||
from a verified backup, with the server stopped. Do not edit password hashes or
|
||
schema versions manually.
|
||
|
||
|
||
## 0.0.6 -> 0.1.0 document and source changes
|
||
|
||
No new SQL schema version is introduced. Old documents default to inherited
|
||
listeners, disabled cache/compression and preserve-Server behavior. New optional
|
||
route cache policy does not change existing route behavior. Existing account,
|
||
revision, TLS and ACL state is retained.
|
||
|
||
Managed paths now include build.rs, langs, deploy and make_zip.py. Extra *.json
|
||
language packs from the installed langs directory are copied into the new tree
|
||
when the new distribution does not contain the same filename. Shipped packs are
|
||
updated, with old bytes preserved in the source backup. Invalid custom packs can
|
||
correctly block a build; review them with scripts/langs_check.py. No symlinked
|
||
language pack is followed. The updater never copies a database from the package.
|
||
|
||
The old lockfile is preserved in the managed source backup and a new dependency
|
||
graph is generated by Cargo on first build. No 0.1.0 resolved Cargo.lock is included
|
||
because Cargo was unavailable here. Keep the actual newly resolved file afterward.
|
||
|
||
Saving any 0.1.0 document serializes its new fields. Older binaries use strict
|
||
unknown-field rejection, so rolling back only the source/binary may fail startup.
|
||
Restore the pre-upgrade database/certificates into a new private directory and keep
|
||
the newer data separately. Do not directly edit live SQLite to remove fields.
|
||
|
||
A saved invalid listener address or missing low-port permission can prevent
|
||
startup. The online config CLI cannot repair an offline server. Keep a pre-change
|
||
backup and use the documented stopped-server restore path; remove persisted
|
||
listener overrides through Settings while the service is still running before
|
||
changing deployment assumptions. The cache itself is RAM only and is not backed up.
|
||
|
||
## 0.1.0 -> 0.2.0: compression, vhosts and pool behavior
|
||
|
||
The `SizeAbove` u16/u64 mismatch is fixed by replacing that predicate with a custom
|
||
u64 implementation. Do not use `try_into().unwrap()` or truncate the setting to
|
||
work around the old source: configured thresholds above 65535 must remain valid.
|
||
This source change removes that call, but is not a successful compiler result;
|
||
run `bash dev.sh check` and `bash dev.sh test` on a Rust-enabled staging machine.
|
||
|
||
SQL schema version stays 2; accounts, ACLs, certificates and revisions are retained.
|
||
New `vhosts` defaults empty; named TLS listeners default to H2/H3 capability when those fields are omitted. Legacy routes
|
||
continue on the global listeners and are never silently migrated or exposed on
|
||
additional IPs. The editor's explicit migration action converts one unambiguous
|
||
route group in a single revision and keeps the migrated route group's existing health behavior.
|
||
|
||
New vhosts default to TCP health checks and remain unavailable until
|
||
`rise` checks succeed. Plan the correct path/status/timeouts before migration.
|
||
Health/counter/affinity observations are ephemeral. They survive compatible edits,
|
||
not restarts; new/changed/re-enabled origins require new checks. Cache and idle
|
||
upstream pools are not carried across config publication. Admitted exchanges finish
|
||
with their old snapshot and are not replayed on a different backend.
|
||
|
||
HTTPS origins previously configured `http2` now retain HTTP/1.1 ALPN compatibility.
|
||
Plaintext `http2` is still strict h2c. Per-listener IP/port/TLS/HTTP2 changes require
|
||
restart. During an address move, hot routing can deny the previous destination
|
||
before the new socket is bound. Plan a maintenance window, verify assigned IPs,
|
||
privileges/certificates and retain an offline-restorable backup.
|
||
|
||
After saving any 0.2.0 document, 0.1.0 can reject new fields even without a vhost,
|
||
because `https_http2` is serialized. Downgrade requires matching pre-0.2.0 data,
|
||
source and environment. Never remove fields by editing a live SQLite database.
|
||
The archive contains no fabricated lockfile, executable, database or private key.
|
||
Generate and retain the real dependency graph before acceptance/deployment.
|
||
|
||
## 0.2.0 -> 0.3.0
|
||
|
||
The reported `json_internal!` recursion error is addressed by splitting
|
||
`status_payload` into small JSON values and inserting feature flags through a map.
|
||
Do not overlay only this function: this release also adds the `query` Axum feature,
|
||
`src/pages.rs`, `management.js`, new configuration fields and matching UI assets.
|
||
The earlier u64 compression predicate remains in place. Compilation has not been
|
||
executed in the packaging environment; this is not a successful-build assertion.
|
||
|
||
Existing database documents deserialize with empty/default `pages`, vhost `cache`
|
||
and `certificate_id` fields. No SQL schema migration is added. Per-vhost certificate
|
||
selection rewrites the effective SNI map in a snapshot, not the files. Upload is a
|
||
staging action: Save must publish a validated configuration before traffic uses it.
|
||
Canceling the editor leaves an unbound pair, not an active certificate change.
|
||
|
||
Use the complete backup/whole-source update procedure above. The existing backup
|
||
copies configured keys and fallback files. Unbound upload staging files are not in
|
||
the configuration and therefore are not part of that configured-certificate backup.
|
||
Retain them separately only when needed. Never delete a filename still referenced
|
||
by the configuration or currently serving snapshot; stop the process before manual
|
||
cleanup and preserve a backup of the full private certificate directory.
|
||
|
||
New defaults do not activate custom pages or vhost cache overrides. An explicitly
|
||
disabled global cache can still be overridden by one vhost; the global byte/entry/object
|
||
limits still bound it. Current releases rotate cache compatibility only for configuration
|
||
changes that can alter cached/origin semantics; unrelated control-plane publication preserves
|
||
reusable objects. The dedicated per-vhost Purge action remains selective.
|
||
|
||
Downgrade requires restoring the earlier database/configuration together with its
|
||
matching source: 0.2.0 rejects the new fields. Do not merely relabel a new document.
|
||
The source archive contains no fabricated lockfile. Resolve and retain Cargo.lock
|
||
on the first compiler-enabled build and run all tests before restarting production.
|
||
|
||
## 0.3.0 -> 0.4.0
|
||
|
||
Use the full-source update above, not an overlay of a few Rust files. This revision
|
||
adds Quinn/h3 dependencies, new modules and a new embedded integrations.js asset.
|
||
No successful compiler run or dependency resolution is claimed. Generate and retain
|
||
a real Cargo.lock, then run check and all tests before acceptance.
|
||
|
||
SQL schema stays 2. Proxy sockets are persisted only in `listeners.endpoints`; a new
|
||
database is seeded from startup CLI listener addresses. Existing development documents
|
||
using the removed listener format are rejected rather than migrated. Tinyauth and
|
||
vhost Server policy continue to use their normal defaults. New diagnostic defaults remove x-request-id from client responses unless it is enabled explicitly where needed. Access logs retain request IDs. The old revision diagnostic field/header behavior was removed in 0.18.2. Forwarding headers are
|
||
rebuilt from actual peers unless known proxy CIDRs are explicitly configured.
|
||
|
||
Reference named listener IDs per vhost instead of duplicating bindings. There is no
|
||
inline/global compatibility conversion path in 0.8.0. Scope names have no firewall meaning. Changed sockets, ALPN or H3 limits
|
||
require restart; opening UDP is necessary for H3. Saving intent does not prove
|
||
that an OS bind or UDP firewall rule will succeed.
|
||
|
||
The certificate directory/fallback is prepared even with HTTP-only startup, so
|
||
library uploads can be staged before enabling TLS. The generated fallback is
|
||
self-signed development material and does not automatically open an HTTPS socket.
|
||
Import the PEM pair in Certificates, save inventory, then select its ID in SSL.
|
||
Unbound staged files are not automatically backed up; preserve private files needed
|
||
for rollback and never remove any currently referenced certificate/key.
|
||
|
||
Tinyauth-protected vhosts bypass shared cache regardless of cache toggles. Failures
|
||
deny access instead of serving cached/static content. Configure its verifier URL,
|
||
public login URL and explicit private-origin permission before enabling it on an
|
||
existing service. Test login, refusal, logout/revocation and WebSockets on staging.
|
||
|
||
The examples are complete replacement documents for disposable test databases,
|
||
not merge patches. Saving a 0.4 document serializes new fields; older binaries may
|
||
reject them. Downgrade requires matching pre-upgrade database, certificates,
|
||
environment and source, with the process stopped. The source backup alone is not
|
||
a database/configuration rollback.
|