Update CLAUDE.md: correct production server, mail host, deploy checklist
Server IP was stale (pre-migration host, 69.62.106.94) - production has been on h1 (163.172.67.77) for a while. Documents the MAIL_HOST incident, the first-time git linking done today, and that PHP-FPM + queue worker restarts are needed on every deploy, not just composer/config changes. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -10,9 +10,31 @@ Libra Law Firm is a bilingual (Arabic/English) web platform for managing client
|
|||||||
|
|
||||||
## Production Environment
|
## Production Environment
|
||||||
|
|
||||||
- **Server:** Rocky Linux 9.6 on 69.62.106.94
|
- **Server:** h1 (`h1.elenoslabs.com`, `163.172.67.77`) — Rocky Linux 9, ElenosLabs-owned. **Not**
|
||||||
- **PHP:** 8.4 (use `php84` command, not `php`)
|
`69.62.106.94` — that stale IP is left over from before the migration to h1 and does not serve
|
||||||
- **Database:** MariaDB/MySQL
|
this app; a past `.env` even had `MAIL_HOST` pointed at it by mistake (see *Mail* below). Full
|
||||||
|
server details: `wiki/prod_servers/elenoslabs/h1server.md` (Jarvis workspace), § libra.adv.ps.
|
||||||
|
- **App user:** `libra` — app root `/home/libra/public_html/`, logs `/home/libra/logs/`
|
||||||
|
- **PHP:** 8.4 (use `php84` command — there is no bare `php` binary on this box; even Composer
|
||||||
|
needs `php84 /usr/local/bin/composer ...`)
|
||||||
|
- **Database:** MariaDB, Redis (sessions/cache/queue)
|
||||||
|
- **Queue worker:** `libra-queue.service` (`queue:work redis`) — a **long-running process**, see
|
||||||
|
the queue note below.
|
||||||
|
- **Git:** production was file-copied at initial migration and only properly linked to git for
|
||||||
|
the first time on 2026-09-28 (`git checkout -f -B main origin/main` after backing up the prior
|
||||||
|
state) — before that date, `git pull` on production did nothing (empty local branch, no
|
||||||
|
commits). It is now a normal git-tracked checkout; a plain `git pull` works going forward.
|
||||||
|
|
||||||
|
### Mail
|
||||||
|
|
||||||
|
`MAIL_HOST` must be `mx1.elenoslabs.com` (h1's own Postfix/Dovecot stack, MX for `adv.ps`) — **not**
|
||||||
|
`mail.adv.ps`, which resolves to the stale `69.62.106.94` host and times out. This caused a real
|
||||||
|
incident (2026-09-28): the workshop-registration form's emails silently never arrived because of
|
||||||
|
this wrong value, and a separate real bug in `App\Services\AdminNotificationService` (a Carbon
|
||||||
|
`TypeError` on a string `throttle_minutes` config value — fixed, see git history around
|
||||||
|
2026-09-28) masked the actual SMTP error in the logs the whole time it was broken. If mail seems
|
||||||
|
to silently fail again, check `MAIL_HOST` first, then `storage/logs/laravel.log` for a
|
||||||
|
`TransportException`.
|
||||||
|
|
||||||
### Production Commands
|
### Production Commands
|
||||||
All artisan commands on production require `php84` prefix:
|
All artisan commands on production require `php84` prefix:
|
||||||
@@ -24,16 +46,25 @@ php84 artisan optimize:clear
|
|||||||
|
|
||||||
### Deployment Checklist
|
### Deployment Checklist
|
||||||
```bash
|
```bash
|
||||||
# On production server
|
# On production server (as the libra user, in /home/libra/public_html)
|
||||||
composer install --no-dev --optimize-autoloader
|
git pull
|
||||||
php84 artisan migrate --force
|
php84 /usr/local/bin/composer install --no-dev --optimize-autoloader # only if composer.json/lock changed
|
||||||
|
npm install && npm run build # only if frontend/Tailwind classes changed
|
||||||
php84 artisan optimize:clear
|
php84 artisan optimize:clear
|
||||||
php84 artisan config:cache
|
php84 artisan config:cache
|
||||||
php84 artisan route:cache
|
php84 artisan route:cache
|
||||||
php84 artisan view:cache
|
php84 artisan view:cache
|
||||||
|
|
||||||
# IMPORTANT: Always restart PHP-FPM after deployment
|
# IMPORTANT: always restart PHP-FPM after ANY deploy, even a content/lang-only change.
|
||||||
|
# 2026-09-28 incident: opcache.validate_timestamps is On with revalidate_freq=2, which should
|
||||||
|
# have picked up a changed lang/*.php file within 2 seconds on its own — it didn't, and only a
|
||||||
|
# full php84-php-fpm restart made the change visible. Root cause not fully diagnosed; until it
|
||||||
|
# is, treat the restart as mandatory on every deploy, not just composer/config changes.
|
||||||
sudo systemctl restart php84-php-fpm
|
sudo systemctl restart php84-php-fpm
|
||||||
|
|
||||||
|
# IMPORTANT: always restart the queue worker too — it's a long-running process that holds old
|
||||||
|
# code and old .env/config values in memory until restarted, independent of the php-fpm restart.
|
||||||
|
php84 artisan queue:restart
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note:** The server has both PHP 8.3 and 8.4. Always use `php84` for artisan commands. Failing to restart PHP-FPM can cause cached config issues.
|
**Note:** The server has both PHP 8.3 and 8.4. Always use `php84` for artisan commands. Failing to restart PHP-FPM can cause cached config issues.
|
||||||
|
|||||||
Reference in New Issue
Block a user