# Deployment Plan: HRM System on payrollcpp.com (Hostinger Server) > **Status:** Proposed Plan > **Target Server IP:** `145.79.25.55:65002` > **SSH Username:** `u487818195` > **Target Domain / Web Root:** `payrollcpp.com` (`/home/u487818195/domains/payrollcpp.com/public_html`) > **Application Name:** `CONSOLIDATED PAPER PRODUCT INC` > **Application URL:** `https://payrollcpp.com` > **Database:** MySQL `u487818195_payroll` / User: `u487818195_payroll` > **Git Repository:** `ssh://gitea-qzlf.srv1050180.hstgr.cloud:48594/admin/HRM-System.git` --- ## 1. Executive Summary & Architecture This plan establishes the deployment of the HRM application to a new Hostinger hosting account (`u487818195` on `145.79.25.55:65002`) serving `https://payrollcpp.com`. The deployment includes: 1. **Server Environment & SSH Provisioning**: Connect via SSH, inspect directory layout, PHP CLI binary, and permissions. 2. **Git Repository Setup & Clone**: Set up deployment keys / credentials to clone the HRM codebase directly into `payrollcpp.com/public_html`. 3. **Environment Configuration (`.env`)**: Configure custom App Name (`CONSOLIDATED PAPER PRODUCT INC`), URL, MySQL credentials, and application key. 4. **Database Migration & Initialization**: Execute database migrations (`php artisan migrate --force`) and initial seeding/admin accounts. 5. **Storage Symlink & Asset Delivery**: Run `php artisan storage:link`, verify pre-compiled Vite production assets (`public/build`), and configure proper permissions. 6. **Automated Deployment Webhook (`git-pull.php`)**: Deploy the standalone zero-downtime `public/git-pull.php` webhook with token authentication for 1-command deployment. --- ## 2. Infrastructure & Credentials Specification | Parameter | Configuration Value | | :--- | :--- | | **Server IP** | `145.79.25.55` | | **SSH Port** | `65002` | | **SSH User** | `u487818195` | | **Domain** | `payrollcpp.com` | | **Target Directory** | `/home/u487818195/domains/payrollcpp.com/public_html` | | **Database Host** | `127.0.0.1` / `3306` | | **Database Name** | `u487818195_payroll` | | **Database User** | `u487818195_payroll` | | **App Name** | `CONSOLIDATED PAPER PRODUCT INC` | | **App URL** | `https://payrollcpp.com` | | **PHP Version** | PHP 8.3 (`/opt/alt/php83/usr/bin/lsphp` or `php`) | --- ## 3. Phased Implementation Roadmap ### Phase 1: SSH Connectivity & Directory Layout Check - [ ] Connect to `145.79.25.55:65002` using SSH credentials (`u487818195`). - [ ] Inspect existing directory structure under `/home/u487818195/domains/payrollcpp.com/public_html`. - [ ] Check PHP CLI version (`php -v`, `/opt/alt/php83/usr/bin/lsphp -v`) and verify installed extensions (`pdo_mysql`, `mbstring`, `openssl`, `gd`, `zip`, `xml`). ### Phase 2: Git Repository Cloning & Remote Configuration - [ ] Ensure Git SSH access from the new server to the central Git server (`gitea-qzlf.srv1050180.hstgr.cloud:48594`) or initialize tracking. - [ ] Clone the latest `main` branch into `public_html` (or pull into target directory). - [ ] Verify `vendor/` packages and pre-compiled `public/build/` assets. ### Phase 3: Production Environment (`.env`) Configuration - [ ] Create `/home/u487818195/domains/payrollcpp.com/public_html/.env`: ```ini APP_NAME="CONSOLIDATED PAPER PRODUCT INC" APP_ENV=production APP_KEY=base64:... APP_DEBUG=false APP_URL=https://payrollcpp.com LOG_CHANNEL=stack LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=error DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=u487818195_payroll DB_USERNAME=u487818195_payroll DB_PASSWORD="2>L?QV663GgC" BROADCAST_DRIVER=log CACHE_DRIVER=file FILESYSTEM_DISK=public QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 ``` - [ ] Generate unique application key if not set (`php artisan key:generate --force`). ### Phase 4: Database Migrations & Initial Setup - [ ] Test database connectivity from CLI. - [ ] Run full migrations: ```bash php artisan migrate --force ``` - [ ] Run initial setup seeders (roles, permissions, admin user if required for initial login). - [ ] Link public storage: ```bash php artisan storage:link ``` ### Phase 5: Cache Warming & Optimization - [ ] Clear bootstrap caches and warm up production caches: ```bash php artisan optimize:clear php artisan config:cache php artisan route:cache php artisan view:cache ``` - [ ] Verify directory permissions (`storage/` and `bootstrap/cache/` set to `775`). ### Phase 6: Automated Pull Webhook & Verification - [ ] Ensure `public/git-pull.php` is deployed with secure token `7f3b89e902a2cdb8b5de9f2e30f14d8a245fca9b`. - [ ] Test webhook execution: `curl -s "https://payrollcpp.com/git-pull.php?token=7f3b89e902a2cdb8b5de9f2e30f14d8a245fca9b"` - [ ] Run live HTTP check on `https://payrollcpp.com` to verify proper login screen rendering, title display (`CONSOLIDATED PAPER PRODUCT INC`), and asset loading. --- ## 4. Verification Checklist | Check | Expected Result | | :--- | :--- | | **SSH Connectivity** | Successful auth on `145.79.25.55:65002` as `u487818195` | | **Database Connection** | MySQL tables created in `u487818195_payroll` without errors | | **Storage Symlink** | `public/storage` points to `storage/app/public` | | **Web Endpoint** | `https://payrollcpp.com` loads HTTP 200/302 with title "CONSOLIDATED PAPER PRODUCT INC" | | **Webhook Pull** | `curl` to `git-pull.php` reports successful git reset, cache clear, and OPCache reset |