Skip to main content

Installation Guide

Set up Event Schedule on your own server with this step-by-step guide. For automated installation, consider using Softaculous or Docker.

Overview

This guide walks you through manually installing Event Schedule on your own server. The installation process involves setting up a database, downloading the application files, configuring permissions, and setting up scheduled tasks.

Automated Installation Options

For easier installation, you can use:

  • Softaculous - One-click installation on cPanel hosts
  • Docker - Containerized deployment with Docker Compose

Requirements

Before you begin, ensure your server meets the following requirements:

Requirement Minimum Version Notes
PHP 8.1+ With required extensions (see below)
MySQL 5.7+ or MariaDB 10.3+ For database storage
Web Server Apache or Nginx With mod_rewrite or equivalent
SSL Certificate Required HTTPS is required for security

Required PHP Extensions

  • BCMath
  • Ctype
  • Fileinfo
  • JSON
  • Mbstring
  • OpenSSL
  • PDO (with MySQL driver)
  • Tokenizer
  • XML
  • cURL
  • GD or Imagick

1. Set Up the Database

Create a MySQL database and user for Event Schedule. Run the following commands in your MySQL client:

SQL
CREATE DATABASE eventschedule;
CREATE USER 'eventschedule'@'localhost' IDENTIFIED BY 'change_me';
GRANT ALL PRIVILEGES ON eventschedule.* TO 'eventschedule'@'localhost';
Security Note

Replace change_me with a strong, unique password. Never use default or weak passwords in production.

2. Download the Application

Download the latest release and extract it to your web server's document root.

  1. Download eventschedule.zip from the latest GitHub release
  2. Upload the zip file to your server
  3. Extract the contents to your web root directory
bash
# Example: Extract to web root
cd /var/www
unzip eventschedule.zip
Web Root Configuration

Your web server should point to the public directory inside the extracted folder, not the root directory itself.

3. Set File Permissions

Ensure the web server has proper permissions to write to storage and cache directories.

bash
cd /path/to/eventschedule
chmod -R 755 storage
sudo chown -R www-data:www-data storage bootstrap public
User Note

The user www-data is typical for Apache on Debian/Ubuntu. Your web server may run under a different user (e.g., nginx, apache, or http). Check your server configuration. Docker images based on Alpine often have no www-data name at all, only the numeric UID 82, so use chown -R 82:82 ... there instead.

.env must be writable too

The web-server user must also be able to write to the .env file, not just storage. The setup wizard generates the app key, saves your configuration to .env, and runs database migrations for you, so include .env in the ownership change above (e.g. sudo chown www-data:www-data .env). If it is read-only, setup cannot complete.

4. Configure Environment

Copy the example environment file to create your configuration:

bash
cp .env.example .env
Leave APP_URL blank

Do not set APP_URL in .env yourself. The setup wizard only appears while it is blank, and it writes the correct value for you once setup succeeds. You also do not need to fill in the database credentials by hand; just create the empty database from step 1 and enter its details in the wizard, which creates all the tables.

Now access your application at https://your-domain.com in your browser. You'll see the setup wizard where you can configure:

  • Database connection details
  • Application name and URL
  • Email settings
  • Admin account credentials

The setup wizard will guide you through the initial configuration and run database migrations automatically.

5. Set Up the Cron Job

Event Schedule requires a cron job to run scheduled tasks like sending reminder emails, syncing calendars, and releasing expired ticket reservations.

Add the following line to your server's crontab:

crontab
* * * * * php /path/to/eventschedule/artisan schedule:run

Adding the Cron Job

To edit your crontab, run:

bash
crontab -e

Add the cron line at the end of the file, making sure to replace /path/to/eventschedule with your actual installation path.

cPanel Users

If using cPanel, you can add cron jobs via the "Cron Jobs" section in your control panel without using the command line.

Verification

After completing the installation, verify everything is working correctly:

  1. Access the application: Visit https://your-domain.com and confirm the homepage loads
  2. Create an account: Register a new user account to verify database connectivity
  3. Create a schedule: Create a test schedule and add an event
  4. Check logs: Review storage/logs/laravel.log for any errors
Need Help?

If you encounter any issues during installation, check the GitHub Issues or start a Discussion.

Next Steps

Now that Event Schedule is installed, you may want to:

  • Configure Stripe payments for ticket sales
  • Set up Google Calendar integration
  • Set up Twilio SMS for phone verification (set TWILIO_SID, TWILIO_AUTH_TOKEN, and TWILIO_FROM_NUMBER in your .env)
  • Configure email settings for notifications
  • Customize your branding and appearance

Troubleshooting

"Permission denied" writing storage/logs/laravel.log

The web-server user cannot write to storage (and often .env). Re-run the ownership and permission commands from the file permissions step, making sure to use the user your web server actually runs as. On Alpine-based Docker images that is the numeric UID 82, not www-data.

A 500 error, or you can't get back to the setup wizard

This usually means the database has no tables yet (migrations did not run). The setup wizard reappears automatically whenever the database is empty, so fix the underlying cause (database privileges or the file permissions above) and reload the page to run setup again.

Manual fallback

If the wizard still does not appear, open .env, clear the APP_URL value so it is blank, and reload. The wizard will run again and rewrite APP_URL once setup succeeds.

Custom translations

Rename built-in UI terms (for example "Talent" to "Artist", or "Curator" to "Event Planner") without your changes being wiped out by php artisan app:update.

Drop a PHP file in:

storage/app/lang/{locale}/{file}.php

The three files you can override are messages.php (UI strings), accessibility.php, and marketing.php. List the keys you want to change and nothing else; the bundled translations fill in the rest:

<?php
// storage/app/lang/en/messages.php
return [
    'talent' => 'Artist',
    'talents' => 'Artists',
    'curator' => 'Event Planner',
    'curators' => 'Event Planners',
];

Create one directory per locale you want to override (en, es, fr, …). The full list of supported locales lives in config/app.php under supported_languages.

Why this works

Changes apply on the next request, no cache clear is required. storage/app/ is gitignored, so your overrides survive php artisan app:update, git pull, and fresh checkouts. New keys added in future releases continue to show their bundled English (or translated) value until you override them.