589 lines
11 KiB
Plaintext
589 lines
11 KiB
Plaintext
---
|
|
title: Project Setup Guide
|
|
description: Complete guide to setting up Chatwoot for development and contribution
|
|
sidebarTitle: Setup Guide
|
|
---
|
|
|
|
# Project Setup Guide
|
|
|
|
This comprehensive guide will walk you through setting up Chatwoot for development, from initial repository setup to running your first successful build.
|
|
|
|
## Prerequisites Check
|
|
|
|
Before starting, ensure you have completed the [Local Development Setup](../environment-setup/local-development) guide and have all required dependencies installed.
|
|
|
|
### Quick Prerequisites Verification
|
|
|
|
```bash
|
|
# Check Ruby version (should be 3.3.3)
|
|
ruby --version
|
|
|
|
# Check Node.js version (should be 20+)
|
|
node --version
|
|
|
|
# Check PostgreSQL
|
|
psql --version
|
|
|
|
# Check Redis
|
|
redis-cli --version
|
|
|
|
# Check Git
|
|
git --version
|
|
```
|
|
|
|
## Repository Setup
|
|
|
|
### 1. Fork and Clone
|
|
|
|
```bash
|
|
# Fork the repository on GitHub first
|
|
# Then clone your fork
|
|
git clone https://github.com/YOUR_USERNAME/chatwoot.git
|
|
cd chatwoot
|
|
|
|
# Add upstream remote for syncing
|
|
git remote add upstream https://github.com/chatwoot/chatwoot.git
|
|
|
|
# Verify remotes
|
|
git remote -v
|
|
# Should show:
|
|
# origin https://github.com/YOUR_USERNAME/chatwoot.git (fetch)
|
|
# origin https://github.com/YOUR_USERNAME/chatwoot.git (push)
|
|
# upstream https://github.com/chatwoot/chatwoot.git (fetch)
|
|
# upstream https://github.com/chatwoot/chatwoot.git (push)
|
|
```
|
|
|
|
### 2. Branch Strategy
|
|
|
|
```bash
|
|
# Create a development branch
|
|
git checkout -b develop
|
|
|
|
# For feature work, create feature branches
|
|
git checkout -b feature/your-feature-name
|
|
|
|
# Keep your fork synced
|
|
git fetch upstream
|
|
git checkout develop
|
|
git merge upstream/develop
|
|
git push origin develop
|
|
```
|
|
|
|
## Environment Configuration
|
|
|
|
### 1. Environment File Setup
|
|
|
|
```bash
|
|
# Copy the example environment file
|
|
cp .env.example .env
|
|
|
|
# Open the file for editing
|
|
nano .env
|
|
```
|
|
|
|
### 2. Basic Configuration
|
|
|
|
Update your `.env` file with the following essential settings:
|
|
|
|
```bash
|
|
# Rails Environment
|
|
RAILS_ENV=development
|
|
NODE_ENV=development
|
|
|
|
# Application URLs
|
|
FRONTEND_URL=http://localhost:3000
|
|
FORCE_SSL=false
|
|
|
|
# Database Configuration
|
|
DATABASE_URL=postgresql://chatwoot:password@localhost:5432/chatwoot_development
|
|
REDIS_URL=redis://localhost:6379/0
|
|
|
|
# Email Configuration (for development)
|
|
MAILER_SENDER_EMAIL=dev@chatwoot.local
|
|
SMTP_ADDRESS=localhost
|
|
SMTP_PORT=1025
|
|
|
|
# File Storage
|
|
ACTIVE_STORAGE_SERVICE=local
|
|
|
|
# Development Features
|
|
ENABLE_DEVELOPMENT_FEATURES=true
|
|
LOG_LEVEL=debug
|
|
RAILS_LOG_LEVEL=debug
|
|
|
|
# Disable SSL in development
|
|
SMTP_ENABLE_STARTTLS_AUTO=false
|
|
SMTP_TLS=false
|
|
```
|
|
|
|
### 3. Generate Secret Keys
|
|
|
|
```bash
|
|
# Generate secret key base
|
|
bundle exec rails secret
|
|
|
|
# Add to your .env file
|
|
echo "SECRET_KEY_BASE=your-generated-secret" >> .env
|
|
```
|
|
|
|
## Database Setup
|
|
|
|
### 1. Database Creation
|
|
|
|
```bash
|
|
# Create development and test databases
|
|
bundle exec rails db:create
|
|
|
|
# Expected output:
|
|
# Created database 'chatwoot_development'
|
|
# Created database 'chatwoot_test'
|
|
```
|
|
|
|
### 2. Database Migration
|
|
|
|
```bash
|
|
# Run database migrations
|
|
bundle exec rails db:migrate
|
|
|
|
# Check migration status
|
|
bundle exec rails db:migrate:status
|
|
```
|
|
|
|
### 3. Database Seeding
|
|
|
|
```bash
|
|
# Seed the database with sample data
|
|
bundle exec rails db:seed
|
|
|
|
# This creates:
|
|
# - Sample account
|
|
# - Admin user
|
|
# - Sample conversations
|
|
# - Test data for development
|
|
```
|
|
|
|
### 4. Test Database Setup
|
|
|
|
```bash
|
|
# Prepare test database
|
|
RAILS_ENV=test bundle exec rails db:create
|
|
RAILS_ENV=test bundle exec rails db:migrate
|
|
```
|
|
|
|
## Dependency Installation
|
|
|
|
### 1. Ruby Dependencies
|
|
|
|
```bash
|
|
# Install Ruby gems
|
|
bundle install
|
|
|
|
# If you encounter issues, try:
|
|
bundle install --retry=3
|
|
|
|
# For development and test gems
|
|
bundle install --with development test
|
|
```
|
|
|
|
### 2. Node.js Dependencies
|
|
|
|
```bash
|
|
# Install Node.js packages
|
|
pnpm install
|
|
|
|
# If pnpm is not available, install it first:
|
|
npm install -g pnpm
|
|
|
|
# Clear cache if needed
|
|
pnpm store prune
|
|
```
|
|
|
|
### 3. Additional Tools
|
|
|
|
```bash
|
|
# Install Foreman for process management
|
|
gem install foreman
|
|
|
|
# Install MailHog for email testing (optional)
|
|
# macOS
|
|
brew install mailhog
|
|
|
|
# Ubuntu/Debian
|
|
sudo apt-get install mailhog
|
|
|
|
# Or download binary from GitHub releases
|
|
```
|
|
|
|
## Application Startup
|
|
|
|
### 1. Using Foreman (Recommended)
|
|
|
|
```bash
|
|
# Start all services with Foreman
|
|
foreman start -f Procfile.dev
|
|
|
|
# This starts:
|
|
# - Rails server (port 3000)
|
|
# - Webpack dev server
|
|
# - Sidekiq worker
|
|
```
|
|
|
|
### 2. Manual Startup
|
|
|
|
If you prefer to run services separately:
|
|
|
|
```bash
|
|
# Terminal 1: Rails server
|
|
bundle exec rails server -p 3000
|
|
|
|
# Terminal 2: Webpack dev server
|
|
pnpm run dev
|
|
|
|
# Terminal 3: Sidekiq worker
|
|
bundle exec sidekiq
|
|
|
|
# Terminal 4: MailHog (optional)
|
|
mailhog
|
|
```
|
|
|
|
### 3. Verify Installation
|
|
|
|
Once all services are running, verify your setup:
|
|
|
|
- **Web Application**: http://localhost:3000
|
|
- **API Health Check**: http://localhost:3000/api
|
|
- **Sidekiq Web UI**: http://localhost:3000/sidekiq
|
|
- **MailHog**: http://localhost:8025 (if running)
|
|
|
|
## Initial Login
|
|
|
|
### Default Credentials
|
|
|
|
After seeding the database, you can log in with:
|
|
|
|
```
|
|
Email: john@acme.inc
|
|
Password: Password1!
|
|
```
|
|
|
|
### Creating Additional Users
|
|
|
|
```bash
|
|
# Access Rails console
|
|
bundle exec rails console
|
|
|
|
# Create a new user
|
|
user = User.create!(
|
|
name: "Your Name",
|
|
email: "your.email@example.com",
|
|
password: "Password123!",
|
|
password_confirmation: "Password123!"
|
|
)
|
|
|
|
# Make user an administrator
|
|
user.account_users.first.update!(role: 'administrator')
|
|
```
|
|
|
|
## Development Workflow
|
|
|
|
### 1. Code Quality Setup
|
|
|
|
```bash
|
|
# Install pre-commit hooks (optional but recommended)
|
|
# Create .git/hooks/pre-commit
|
|
cat > .git/hooks/pre-commit << 'EOF'
|
|
#!/bin/sh
|
|
# Run RuboCop
|
|
bundle exec rubocop --parallel
|
|
|
|
# Run ESLint
|
|
pnpm run lint
|
|
|
|
# Run tests
|
|
bundle exec rspec --fail-fast
|
|
EOF
|
|
|
|
chmod +x .git/hooks/pre-commit
|
|
```
|
|
|
|
### 2. Running Tests
|
|
|
|
```bash
|
|
# Run Ruby tests
|
|
bundle exec rspec
|
|
|
|
# Run specific test file
|
|
bundle exec rspec spec/models/user_spec.rb
|
|
|
|
# Run JavaScript tests
|
|
pnpm run test
|
|
|
|
# Run E2E tests (requires Playwright)
|
|
pnpm exec playwright install
|
|
pnpm run test:e2e
|
|
|
|
# Run tests with coverage
|
|
COVERAGE=true bundle exec rspec
|
|
```
|
|
|
|
### 3. Code Linting and Formatting
|
|
|
|
```bash
|
|
# Ruby linting with RuboCop
|
|
bundle exec rubocop
|
|
|
|
# Auto-fix Ruby issues
|
|
bundle exec rubocop -a
|
|
|
|
# JavaScript linting
|
|
pnpm run lint
|
|
|
|
# Auto-fix JavaScript issues
|
|
pnpm run lint:fix
|
|
|
|
# Format code with Prettier
|
|
pnpm run format
|
|
```
|
|
|
|
## IDE Configuration
|
|
|
|
### VS Code Setup
|
|
|
|
Create `.vscode/settings.json`:
|
|
|
|
```json
|
|
{
|
|
"ruby.intellisense": "rubyLocate",
|
|
"ruby.codeCompletion": "rcodetools",
|
|
"ruby.format": "rubocop",
|
|
"editor.formatOnSave": true,
|
|
"editor.rulers": [120],
|
|
"files.trimTrailingWhitespace": true,
|
|
"files.insertFinalNewline": true,
|
|
"eslint.autoFixOnSave": true,
|
|
"prettier.requireConfig": true,
|
|
"ruby.rubocop.executePath": "./bin/",
|
|
"ruby.rubocop.onSave": true
|
|
}
|
|
```
|
|
|
|
Create `.vscode/extensions.json`:
|
|
|
|
```json
|
|
{
|
|
"recommendations": [
|
|
"rebornix.ruby",
|
|
"wingrunr21.vscode-ruby",
|
|
"bradlc.vscode-tailwindcss",
|
|
"esbenp.prettier-vscode",
|
|
"dbaeumer.vscode-eslint",
|
|
"ms-vscode.vscode-typescript-next",
|
|
"shopify.ruby-lsp"
|
|
]
|
|
}
|
|
```
|
|
|
|
### RubyMine Setup
|
|
|
|
1. **Open Project**: File → Open → Select chatwoot directory
|
|
2. **Configure Ruby SDK**: File → Project Structure → SDKs → Add Ruby SDK
|
|
3. **Database Connection**: Database tool window → Add PostgreSQL connection
|
|
4. **Code Style**: File → Settings → Editor → Code Style → Import scheme
|
|
|
|
## Debugging Setup
|
|
|
|
### Rails Debugging
|
|
|
|
Add to your code for debugging:
|
|
|
|
```ruby
|
|
# Using Pry (recommended)
|
|
binding.pry
|
|
|
|
# Using built-in debugger
|
|
debugger
|
|
|
|
# Using byebug
|
|
byebug
|
|
```
|
|
|
|
### JavaScript Debugging
|
|
|
|
```javascript
|
|
// Browser debugging
|
|
console.log('Debug info:', variable);
|
|
debugger;
|
|
|
|
// Node.js debugging
|
|
console.log('Debug info:', variable);
|
|
```
|
|
|
|
### Database Debugging
|
|
|
|
```bash
|
|
# Rails console
|
|
bundle exec rails console
|
|
|
|
# Database console
|
|
bundle exec rails dbconsole
|
|
|
|
# Check queries in development log
|
|
tail -f log/development.log | grep -E "(SELECT|INSERT|UPDATE|DELETE)"
|
|
```
|
|
|
|
## Performance Optimization
|
|
|
|
### Development Performance
|
|
|
|
```bash
|
|
# Use Spring for faster Rails commands
|
|
bundle exec spring binstub --all
|
|
|
|
# Precompile assets for faster loading
|
|
bundle exec rails assets:precompile
|
|
|
|
# Use parallel testing
|
|
bundle exec rspec --parallel
|
|
|
|
# Monitor memory usage
|
|
ps aux | grep -E "(ruby|node)" | head -10
|
|
```
|
|
|
|
### Database Performance
|
|
|
|
```ruby
|
|
# Add to config/environments/development.rb for query analysis
|
|
config.active_record.verbose_query_logs = true
|
|
|
|
# Enable query plan logging
|
|
config.active_record.dump_schema_after_migration = false
|
|
```
|
|
|
|
## Troubleshooting Setup Issues
|
|
|
|
### Common Setup Problems
|
|
|
|
<Accordion title="Bundle install fails">
|
|
**Error**: `An error occurred while installing pg`
|
|
|
|
**Solution**:
|
|
```bash
|
|
# macOS
|
|
brew install postgresql
|
|
bundle config build.pg --with-pg-config=/usr/local/bin/pg_config
|
|
|
|
# Ubuntu/Debian
|
|
sudo apt-get install libpq-dev
|
|
bundle install
|
|
```
|
|
</Accordion>
|
|
|
|
<Accordion title="Database connection refused">
|
|
**Error**: `could not connect to server: Connection refused`
|
|
|
|
**Solution**:
|
|
```bash
|
|
# Check if PostgreSQL is running
|
|
sudo systemctl status postgresql
|
|
|
|
# Start PostgreSQL
|
|
sudo systemctl start postgresql
|
|
|
|
# macOS with Homebrew
|
|
brew services start postgresql
|
|
```
|
|
</Accordion>
|
|
|
|
<Accordion title="Redis connection refused">
|
|
**Error**: `Redis::CannotConnectError`
|
|
|
|
**Solution**:
|
|
```bash
|
|
# Check if Redis is running
|
|
redis-cli ping
|
|
|
|
# Start Redis
|
|
sudo systemctl start redis
|
|
|
|
# macOS with Homebrew
|
|
brew services start redis
|
|
```
|
|
</Accordion>
|
|
|
|
<Accordion title="Webpack compilation fails">
|
|
**Error**: `Module not found` or compilation errors
|
|
|
|
**Solution**:
|
|
```bash
|
|
# Clear webpack cache
|
|
rm -rf tmp/cache/webpacker
|
|
|
|
# Reinstall node modules
|
|
rm -rf node_modules
|
|
pnpm install
|
|
|
|
# Restart webpack dev server
|
|
pnpm run dev
|
|
```
|
|
</Accordion>
|
|
|
|
### Verification Commands
|
|
|
|
```bash
|
|
# Check all services are running
|
|
ps aux | grep -E "(rails|sidekiq|webpack|mailhog)"
|
|
|
|
# Test database connection
|
|
bundle exec rails runner "puts ActiveRecord::Base.connection.execute('SELECT 1').first"
|
|
|
|
# Test Redis connection
|
|
bundle exec rails runner "puts Redis.new.ping"
|
|
|
|
# Check application health
|
|
curl http://localhost:3000/api
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
After successful setup:
|
|
|
|
1. **Explore the Codebase**: Familiarize yourself with the project structure
|
|
2. **Read Contributing Guidelines**: Review code standards and workflow
|
|
3. **Pick Your First Issue**: Look for "good first issue" labels
|
|
4. **Join the Community**: Connect with other contributors
|
|
|
|
### Useful Development Commands
|
|
|
|
```bash
|
|
# Generate new migration
|
|
bundle exec rails generate migration AddColumnToTable column:type
|
|
|
|
# Generate new model
|
|
bundle exec rails generate model ModelName attribute:type
|
|
|
|
# Generate new controller
|
|
bundle exec rails generate controller ControllerName
|
|
|
|
# Run specific migration
|
|
bundle exec rails db:migrate:up VERSION=20231201000000
|
|
|
|
# Rollback migration
|
|
bundle exec rails db:rollback STEP=1
|
|
|
|
# Reset database (careful!)
|
|
bundle exec rails db:drop db:create db:migrate db:seed
|
|
```
|
|
|
|
## Getting Help
|
|
|
|
If you encounter issues during setup:
|
|
|
|
- **Check Common Errors**: See [Common Errors](./common-errors) guide
|
|
- **Environment Variables**: Review [Environment Variables](./environment-variables) guide
|
|
- **GitHub Issues**: Search existing issues or create a new one
|
|
- **Discord Community**: Join the Chatwoot Discord server
|
|
- **Documentation**: Check the official documentation
|
|
|
|
---
|
|
|
|
You're now ready to start developing with Chatwoot! Your development environment should be fully functional and ready for contribution. |