This guide provides instructions for setting up Hi.Events locally without using Docker, including the necessary prerequisites, setup steps, and configuration details.
ℹ️ For a faster and more reliable setup, we strongly recommend using the official Docker setup.
Ensure the following PHP extensions are installed: gd, pdo_pgsql, sodium, curl, intl, mbstring, xml, zip, bcmath.
First, fork the repository and clone it locally:
git clone https://github.com/youraccount/Hi.Events.gitHi.Events has two main directories: backend (Laravel) and frontend (React).
-
Create the
.envfile:Navigate to the
backenddirectory and copy the example.envfile:cd backend cp .env.example .envThe example file is set up for local development. For a production install, set:
APP_ENV=production APP_DEBUG=false
-
Database Configuration:
Update the
.envfile with your database credentials:DB_CONNECTION=pgsql DB_HOST=localhost DB_PORT=5432 DB_DATABASE=postgres DB_USERNAME=postgres DB_PASSWORD=postgres
This assume the default PostgreSQL configuration. Update the values as needed.
-
Mail Server Configuration:
Configure Mailtrap for email handling, or use the
logdriver to log emails locally:MAIL_MAILER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=your_mailtrap_username MAIL_PASSWORD=your_mailtrap_password MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=your_email MAIL_FROM_NAME="${APP_NAME}" # Alternatively use just this value to log emails locally: MAIL_MAILER=log
-
URL Configuration:
Set the application and frontend URLs in the
.envfile:APP_URL=http://localhost APP_PORT=8000 APP_FRONTEND_URL=http://localhost:5678
-
Install Dependencies:
Install the backend dependencies:
composer install
-
Generate Application Key and JWT Secret:
Generate the Laravel application key and the secret that signs login tokens:
php artisan key:generate php artisan jwt:secret --force
-
Run Migrations:
Run the database migrations:
php artisan migrate
-
Configure File Storage:
Set the following values in your
.envfile:FILESYSTEM_PUBLIC_DISK=public FILESYSTEM_PRIVATE_DISK=local APP_CDN_URL=http://localhost:8000/storage
Then create a symbolic link for storage:
php artisan storage:link
-
Start the Backend Server:
Start the Laravel development server:
php artisan serve
Visit
http://localhost:8000to verify the backend is running. -
Optional: Configure Stripe (for Payment Integration):
If you want to test the payment functionality, configure Stripe:
STRIPE_PUBLIC_KEY=your_public_key
STRIPE_SECRET_KEY=your_secret_key
STRIPE_WEBHOOK_SECRET=your_webhook_secretPoint a Stripe webhook at /api/public/webhooks/stripe and subscribe it to payment_intent.succeeded, payment_intent.payment_failed, charge.succeeded, charge.updated, charge.refunded, refund.created, refund.updated, account.updated, payout.paid, payout.updated and terminal.reader.action_failed (box office card readers).
- Optional: Enterprise features:
Reserved seating, the box office and enterprise single sign-on are Hi.Events Enterprise features. Set APP_LICENCE_KEY in .env to the licence key you received: it removes the "Powered by Hi.Events" notice and unlocks the Enterprise features your licence includes. Without a key they stay off, and everything else works as normal.
For development and testing, you can set APP_LICENCE_KEY to development instead. That unlocks them with a "Development licence" notice shown to ticket buyers, and must not be used for real events. A superadmin (php artisan user:make-superadmin <user id>) can check the licence status at /admin/licence.
- Optional: Reverse proxies and rate limiting:
Rate limits are keyed by client IP. The default, APP_TRUSTED_PROXIES=*, trusts whichever proxy connects to the app and reads the client IP from its X-Forwarded-For. That works with no proxy or a single proxy, but lets clients that reach the app directly spoof their IP. Behind two or more proxies (for example Cloudflare in front of Traefik, Caddy or nginx) the default sees the outer proxy as the client, so many visitors share one rate limit. In both cases, list every proxy between the visitor and the app instead (cloudflare expands to Cloudflare's published ranges), including the frontend server if it calls the API from another host:
APP_TRUSTED_PROXIES=127.0.0.1,10.0.0.0/8,cloudflareIf the frontend server's address can't be listed (for example it has no fixed IP), set the same random value on the backend and the frontend server instead, so server-rendered pages keep each visitor's IP:
APP_SSR_SHARED_SECRET=a_long_random_stringNavigate to the frontend directory and copy the example .env file:
cd frontend
cp .env.example .envUpdate the .env file with the following settings:
VITE_API_URL_CLIENT=http://localhost:8000
VITE_API_URL_SERVER=http://localhost:8000
VITE_FRONTEND_URL=http://localhost:5678
VITE_STRIPE_PUBLISHABLE_KEY=pk_test_XXXXXXXXInstall the frontend dependencies:
yarn installSet the environment variables before starting the frontend app.
-
Windows:
$env:VITE_API_URL_CLIENT="http://localhost:8000" $env:VITE_API_URL_SERVER="http://localhost:8000" $env:VITE_FRONTEND_URL="http://localhost:5678" $env:VITE_STRIPE_PUBLISHABLE_KEY="pk_test_XXXXXXXX"
-
Linux/Mac:
export VITE_API_URL_CLIENT="http://localhost:8000" export VITE_API_URL_SERVER="http://localhost:8000" export VITE_FRONTEND_URL="http://localhost:5678" export VITE_STRIPE_PUBLISHABLE_KEY="pk_test_XXXXXXXX"
Run the following commands to build and start the frontend application:
yarn build
yarn startVisit http://localhost:5678 to view the frontend.
-
Composer Install Errors:
Ensure the required PHP extensions are installed. Check by running:php -m
-
Database Connection Issues:
Verify the database credentials in the.envfile and ensure the PostgreSQL service is running. -
Mail Server Errors:
Ensure that your mail server credentials (e.g., Mailtrap) are correct or use thelogdriver for local email logging. -
Frontend not connecting to the backend:
Ensure the API URLs are set correctly in both the frontend.envfile and the backend.envfile. Also, verify that environment variables are properly exported in the terminal.