# URL shortener — deploy (FE → BE) **Topology:** same as [INFRA.md](../../docs/INFRA.md) — TLS on Gentoo FE, app on Alpine BE `:80`. ## Prerequisites (confirmed) | Item | Status | |------|--------| | DNS `s.f0xx.org` → FE | PO | | FE TLS cert | `/etc/letsencrypt/live/s.f0xx.org/` | | Git remote | `git://f0xx.org/androicast_project/url-shortener` | | MariaDB schema `url_shortener` | `sql/schema.mariadb.sql` | | DB app user | **`androidcast`** (shared with crash reporter; same password as `androidcast_crashes` in crashes `config.php`) | ## MariaDB (BE) **Database:** `url_shortener` **App user:** `androidcast` @ `localhost` + `127.0.0.1` — **same password** as crash reporter (`examples/crash_reporter/backend/config/config.php` → `db.mysql.password`). ```bash # 1) Schema (root) mysql -u root -p < sql/schema.mariadb.sql # 2) Grants for existing androidcast user (root) — skip if already granted ./scripts/init-mariadb-grants.sh # 3) Config on BE cp config/config.example.php config/config.php # edit password to match crashes config (do not commit config.php) # 4) Smoke mysql -u androidcast -p -h 127.0.0.1 url_shortener -e 'SHOW TABLES;' ``` Template: [config/config.example.php](config/config.example.php) ## FE (Gentoo) Add `deploy/nginx.fe-s.f0xx.org.snippet` inside a new `server { listen 443 ssl; server_name s.f0xx.org; }` block (mirror `apps.f0xx.org` TLS paths; cert paths above). ```bash nginx -t && rc-service nginx reload ``` ## BE (Alpine) 1. Sync this tree to docroot (suggested): `/var/www/localhost/htdocs/apps/s/` 2. Include `deploy/nginx.be-url-shortener.fragment` in `apps.conf` **or** dedicated `server_name` on BE 3. Apply SQL migration 4. `rc-service php-fpm81 restart` if needed ```bash nginx -t && rc-service nginx reload ``` **Alpine/nginx note:** regex locations with `{n,m}` quantifiers must be **double-quoted** or nginx parses `{` as a block delimiter (`nginx: [emerg] improper regexp`). ## Verify ```bash curl -sSI https://s.f0xx.org/api/v1/health ./scripts/smoke_shorten.sh ``` Not added to `validate_be_services.sh` until first production deploy (SPEC).