Docker

Pull and run the official Timecrack Docker image from Docker Hub for a quick, consistent setup without manually installing PHP, MySQL, or a web server on your host machine.

About

This Docker image is built on PHP 8.2 with Apache and is designed to run the Laravel-based Timecrack application. On container startup, the entrypoint script automatically generates the Laravel .env file from Docker environment variables, runs database migrations, and caches the configuration for optimal performance.

Prerequisites

  • Docker installed on your computer

Quick Start

From your command line, start a MySQL instance and then pull and run the app:

# Start a MySQL instance
docker run -d --name timecrack-db \
  -e MYSQL_ROOT_PASSWORD=secret \
  -e MYSQL_DATABASE=timecrack \
  mysql:8.0

# Pull and run the app
docker run -d --name timecrack-app \
  --link timecrack-db:db \
  -p 80:80 \
  -e APP_URL=http://localhost \
  -e DB_HOST=db \
  -e DB_DATABASE=timecrack \
  -e DB_USERNAME=root \
  -e DB_PASSWORD=secret \
  alextselegidis/timecrack:latest

Docker Compose

You can use the following docker-compose.yml file to set up Timecrack with a MySQL database:

services:

  timecrack:
    image: alextselegidis/timecrack:latest
    restart: always
    ports:
      - '80:80'
    environment:
      - APP_NAME=Timecrack
      - APP_ENV=production
      - APP_DEBUG=false
      - APP_URL=http://localhost
      - DB_CONNECTION=mysql
      - DB_HOST=mysql
      - DB_PORT=3306
      - DB_DATABASE=timecrack
      - DB_USERNAME=root
      - DB_PASSWORD=secret
      - MAIL_MAILER=smtp
      - MAIL_HOST=smtp.example.org
      - MAIL_PORT=587
      - MAIL_USERNAME=
      - MAIL_PASSWORD=
      - MAIL_ENCRYPTION=tls
      - MAIL_FROM_ADDRESS=info@example.org
      - MAIL_FROM_NAME=Timecrack
    volumes:
      - timecrack-storage:/var/www/html/storage

  mysql:
    image: mysql:8.0
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_DATABASE=timecrack
    volumes:
      - mysql:/var/lib/mysql

volumes:
  timecrack-storage:
  mysql:

Environment Variables

The Docker image uses standard Laravel environment variables. All variables are passed through to the .env file that is generated on container startup.

Application

VariableDefaultDescription
APP_NAMETimecrackApplication name
APP_ENVproductionApplication environment (production, local, testing)
APP_KEY(auto-generated)Application encryption key. If left empty, one is generated automatically on first start
APP_DEBUGfalseEnable debug mode (true / false)
APP_URLhttp://localhostThe public URL of the application

Logging

VariableDefaultDescription
LOG_CHANNELstackLaravel log channel (stack, single, daily, stderr, etc.)
LOG_LEVELerrorMinimum log level (debug, info, notice, warning, error, critical)

Database

VariableDefaultDescription
DB_CONNECTIONmysqlDatabase driver (mysql, pgsql, sqlite)
DB_HOSTdbDatabase hostname
DB_PORT3306Database port
DB_DATABASEtimecrackDatabase name
DB_USERNAMErootDatabase username
DB_PASSWORDsecretDatabase password

Cache & Session

VariableDefaultDescription
CACHE_DRIVERfileCache driver (file, redis, memcached, database)
SESSION_DRIVERfileSession driver (file, redis, database, cookie)
SESSION_LIFETIME120Session lifetime in minutes
QUEUE_CONNECTIONsyncQueue connection (sync, redis, database)
BROADCAST_DRIVERlogBroadcast driver (log, redis, pusher)
FILESYSTEM_DISKlocalDefault filesystem disk

Redis

VariableDefaultDescription
REDIS_HOST127.0.0.1Redis hostname
REDIS_PASSWORDnullRedis password
REDIS_PORT6379Redis port

Mail

VariableDefaultDescription
MAIL_MAILERsmtpMail driver (smtp, sendmail, mailgun, ses, log)
MAIL_HOSTmailpitSMTP hostname
MAIL_PORT1025SMTP port
MAIL_USERNAMEnullSMTP username
MAIL_PASSWORDnullSMTP password
MAIL_ENCRYPTIONnullSMTP encryption (tls, ssl, or null)
MAIL_FROM_ADDRESShello@example.comSender email address
MAIL_FROM_NAMETimecrackSender name

Startup Behavior

On every container start the entrypoint script will:

  1. Generate the Laravel .env file from the Docker environment variables.
  2. Set correct permissions on storage/ and bootstrap/cache/.
  3. Auto-generate an APP_KEY if one was not provided.
  4. Run php artisan migrate --force to apply pending database migrations.
  5. Create the storage:link symbolic link.
  6. Cache configuration, routes, and views for performance.
  7. Start the Apache web server.

Need Help?

If you run into issues with Docker: