DEVELOPMENT.md
Rama main · réplica de lectura del repositorio original.
# OpenGRC Local Development Guide
This guide will help you set up OpenGRC for local development on macOS, Linux, or Windows (WSL).
## Prerequisites
Before you begin, ensure you have the following installed:
| Requirement | Minimum Version | Check Command |
|-------------|-----------------|---------------|
| PHP | 8.2+ | `php -v` |
| Composer | 2.x | `composer -V` |
| Node.js | 16+ | `node -v` |
| NPM | 9+ | `npm -v` |
### PHP Extensions Required
The following PHP extensions must be enabled:
- `fileinfo`
- `pdo_sqlite` (for SQLite, the default database)
- `pdo_mysql` (optional, for MySQL)
- `mbstring`
- `xml`
- `curl`
- `zip`
- `gd`
- `bcmath`
- `intl`
### Installing Prerequisites
#### macOS (using Homebrew)
```bash
brew install php@8.2 composer node
```
#### Ubuntu/Debian
```bash
sudo apt update
sudo apt install php8.2 php8.2-cli php8.2-common php8.2-sqlite3 php8.2-mysql \
php8.2-zip php8.2-gd php8.2-mbstring php8.2-curl php8.2-xml php8.2-bcmath \
php8.2-intl composer nodejs npm
```
## Quick Start
For the impatient, here's the minimal setup. The installer uses **SQLite** by default, which requires no database server.
> **Note:** The `.env.example` defaults to MySQL. The installer will automatically configure SQLite for you, or you can manually update `.env` to use `DB_CONNECTION=sqlite` for local development.
```bash
# 1. Clone the repository
git clone https://github.com/LeeMangold/OpenGRC.git
cd OpenGRC
# 2. Install dependencies
composer install
npm install
# 3. Run the automated installer
php artisan opengrc:install --unattended
# 4. Start the development server
php artisan serve
```
Then open http://localhost:8000 in your browser.
**Default login credentials** (unattended install):
- Email: `admin@example.com`
- Password: `password`
For interactive installation with custom settings, omit `--unattended`:
```bash
php artisan opengrc:install
```
## Detailed Setup
### Step 1: Clone the Repository
```bash
git clone https://github.com/LeeMangold/OpenGRC.git
cd OpenGRC
```
### Step 2: Install PHP Dependencies
```bash
composer install
```
This will also run `php artisan filament:upgrade` automatically.
### Step 3: Install Node.js Dependencies
```bash
npm install
```
### Step 4: Run the Installer
OpenGRC includes an installation wizard that handles environment setup, database creation, migrations, and initial seeding:
**Interactive mode** (recommended for custom configuration):
```bash
php artisan opengrc:install
```
**Unattended mode** (uses defaults - SQLite, admin@example.com/password):
```bash
php artisan opengrc:install --unattended
```
The installer will:
- Create/update the `.env` file
- Generate the application key
- Configure the database (SQLite by default)
- Run all migrations
- Create an admin user
- Seed default settings and permissions
- Build frontend assets
- Create the storage symlink
### Alternative: Manual Configuration
If you prefer to configure manually:
#### Configure Environment
Copy the example environment file:
```bash
cp .env.example .env
```
**For local development, update `.env` to use SQLite** (simpler, no database server required):
```env
DB_CONNECTION=sqlite
# Comment out or remove these MySQL lines:
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel
# DB_USERNAME=root
# DB_PASSWORD=
```
Generate an application key:
```bash
php artisan key:generate
```
#### Using MySQL
If you prefer MySQL, keep the default `.env` settings and update with your database credentials:
```env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=opengrc
DB_USERNAME=root
DB_PASSWORD=your_password
```
Then create the database in MySQL:
```sql
CREATE DATABASE opengrc CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
#### Run Migrations and Seeders
```bash
# Create SQLite file (if using SQLite)
touch database/opengrc.sqlite
# Run migrations
php artisan migrate
# Seed essential data
php artisan db:seed --class=SettingsSeeder
php artisan db:seed --class=RolePermissionSeeder
# Create admin user
php artisan opengrc:create-user admin@example.com password
```
#### Available Seeders
OpenGRC includes several seeders for compliance frameworks:
| Seeder | Description |
|--------|-------------|
| `DatabaseSeeder` | Default seeder (runs essential seeders) |
| `DemoSeeder` | Sample data for demonstration |
| `FullDemoSeeder` | Complete demo with all frameworks |
| `SP800171r2Seeder` | NIST SP 800-171 Rev 2 |
| `SP800171r3Seeder` | NIST SP 800-171 Rev 3 |
| `SP80053LowSeeder` | NIST SP 800-53 Low Baseline |
| `CMMC2L2Seeder` | CMMC Level 2 |
| `HipaaSeeder` | HIPAA Security Rule |
| `TSC2017Seeder` | SOC 2 Trust Services Criteria |
To run a specific seeder:
```bash
php artisan db:seed --class=DemoSeeder
```
### Step 7: Build Frontend Assets
For development (with hot reload):
```bash
npm run dev
```
For production build:
```bash
npm run build
```
### Step 8: Start the Development Server
```bash
php artisan serve
```
The application will be available at http://localhost:8000.
**Note:** When running `npm run dev` in a separate terminal, Vite will handle asset compilation with hot module replacement.
## Development Workflow
### Running Development Servers
You'll typically need two terminal windows:
**Terminal 1 - PHP Server:**
```bash
php artisan serve
```
**Terminal 2 - Vite (for asset hot-reload):**
```bash
npm run dev
```
### Code Quality Tools
#### Laravel Pint (Code Formatting)
```bash
vendor/bin/pint
```
#### PHPStan (Static Analysis)
```bash
vendor/bin/phpstan
```
### Running Tests
```bash
# Run all tests
php artisan test
# Run specific test file
php artisan test tests/Feature/ExampleTest.php
# Run with coverage
php artisan test --coverage
```
### Creating Filament Resources
```bash
# Create a new resource
php artisan make:filament-resource ModelName
# Generate with all options
php artisan make:filament-resource ModelName --generate --view
```
### Database Operations
```bash
# Fresh migration (drops all tables)
php artisan migrate:fresh
# Fresh migration with seeding
php artisan migrate:fresh --seed
# Rollback last migration
php artisan migrate:rollback
```
### Clearing Caches
```bash
# Clear all caches
php artisan optimize:clear
# Individual cache clearing
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
```
## Default Login Credentials
After running the installer, you can log in with:
**Unattended install defaults:**
- **Email:** `admin@example.com`
- **Password:** `password`
**Interactive install:** Use the credentials you provided during installation.
To create additional users:
```bash
php artisan opengrc:create-user email@example.com yourpassword
```
## Troubleshooting
### "No application encryption key has been specified"
Run:
```bash
php artisan key:generate
```
### Database connection errors (SQLite)
Ensure the database file exists and is writable:
```bash
touch database/opengrc.sqlite
chmod 664 database/opengrc.sqlite
```
### Permission issues (Linux servers)
If deploying to a Linux server with a web server (Apache/Nginx), run:
```bash
./set_permissions
```
This script sets proper ownership and permissions for the web server.
### "Class not found" errors
Clear and regenerate autoload:
```bash
composer dump-autoload
php artisan optimize:clear
```
### Vite manifest not found
Build the frontend assets:
```bash
npm run build
```
Or ensure Vite dev server is running:
```bash
npm run dev
```
### Storage link missing
Create the symbolic link for public storage:
```bash
php artisan storage:link
```
## IDE Setup
### VS Code Extensions
Recommended extensions for OpenGRC development:
- PHP Intelephense
- Laravel Blade Snippets
- Tailwind CSS IntelliSense
- Laravel Extra Intellisense
### PHPStorm
Enable the Laravel plugin and configure:
- Set PHP interpreter to PHP 8.2+
- Configure Composer path
- Enable Laravel Pint as the code formatter
## Additional Resources
- [OpenGRC Documentation](https://docs.opengrc.com)
- [Laravel Documentation](https://laravel.com/docs)
- [Filament Documentation](https://filamentphp.com/docs)
- [Tailwind CSS Documentation](https://tailwindcss.com/docs)