eporsche / daybreak

Simple timesheets and vacation management for small businesses.
MIT License
127 stars 37 forks source link

How to run daybreak as Docker Container #7

Closed foorschtbar closed 3 years ago

foorschtbar commented 3 years ago

I found this great project, but unfortunately I can't get it to run. I would like to run it as a Docker container, but I have seen that daybreak uses docker itself - because of sail. Is there any way to run it inside a Docker container? I'm not a fan of building a Docker container with Docker in it....

eporsche commented 3 years ago

Daybreak is just a regular laravel application. There are some tutorials in the internet which describe the deployment without using sail: https://www.digitalocean.com/community/tutorials/how-to-install-and-set-up-laravel-with-docker-compose-on-ubuntu-20-04 Additional you could look into the source code of sail itself which Dockerfiles are being used: https://github.com/laravel/sail/tree/1.x/runtimes/8.0 Hope this helps!

foorschtbar commented 3 years ago

For other user with the same quest, here is my working Dockerfile:

FROM php:7.4-cli

# Arguments defined in docker-compose.yml
ARG user
ARG uid

# update image
RUN set -eux; \
    apt-get update; \
    apt-get upgrade -y --with-new-pkgs; \
    apt-get install -y --no-install-recommends \
    libmcrypt-dev \
    libonig-dev \
    git \
    curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
    chown -R $user:$user /home/$user

# Set working directory
WORKDIR /daybreak

RUN  git clone https://github.com/eporsche/daybreak.git /daybreak

RUN composer install

RUN chown -R $user:$user /daybreak

USER $user

EXPOSE 8000
CMD php artisan migrate && php artisan serve --host=0.0.0.0 --port=8000

and a docker-compose example:

version: "3"
services:
    app:
        build:
            context: ./
            dockerfile: Dockerfile
            args:
                user: daybreak
                uid: 1000
        restart: unless-stopped
        container_name: daybreak-app
        volumes:
            - ./.env:/daybreak/.env
            - ./data/app/logs:/daybreak/storage/logs
        networks:
            - internal
            - reverse-proxy
        depends_on:
            - db
            - redis

    db:
        image: mariadb:10.5
        restart: unless-stopped
        container_name: daybreak-db
        volumes:
            - ./data/db:/var/lib/mysql
        environment:
            - MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
            - MYSQL_PASSWORD=${DB_PASSWORD}
            - MYSQL_DATABASE=${DB_DATABASE}
            - MYSQL_USER=${DB_USERNAME}
        networks:
            - internal

    redis:
        image: "redis:alpine"
        restart: unless-stopped
        container_name: daybreak-redis
        ports:
            - "${REDIS_PORT}:6379"
        networks:
            - internal

    mail:
        image: bytemark/smtp
        restart: unless-stopped
        container_name: daybreak-mail
        networks:
            - internal

networks:
    internal:
        external: false
    reverse-proxy:
        external: true