diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 58c97180..e40cef56 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,6 +23,10 @@ Docker users: install both docker and docker-compose, then run a dev instance: ```bash docker-compose up ``` +Create configuration file and replace DSN string: +```bash +cp ./WEB-INF/config.php.dist ./WEB-INF/config.php && sed -i "s|mysqli://root:no@localhost/dbname|mysqli://anuko_user:anuko_pw@anuko_db/timetracker|g" ./WEB-INF/config.php +``` Navigate to: http://localhost:8080 to use Time Tracker. Default credentials for initial login are: ``` usr: admin diff --git a/docker-compose.yml b/docker-compose.yml index e621c410..fa8de916 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,6 +12,10 @@ services: # Use localhost:8080 to connect to timetracker via browser. ports: - "8080:80" + volumes: + - .:/var/www/html + extra_hosts: + - "host.docker.internal:host-gateway" # anuko_db is a mariadb instance to which timetracker connects. # Connect parameters are also specified in timetracker dockerfile after diff --git a/dockerfile-db b/dockerfile-db index 757aa0b3..4ad66306 100644 --- a/dockerfile-db +++ b/dockerfile-db @@ -1,5 +1,5 @@ # This file is for development work. Not suitable for production. -FROM mariadb:latest +FROM mariadb:10.8 # Copy database creation script. COPY mysql.sql /docker-entrypoint-initdb.d/ diff --git a/dockerfile-tt b/dockerfile-tt index 9c79f478..a47ba3a6 100644 --- a/dockerfile-tt +++ b/dockerfile-tt @@ -1,5 +1,11 @@ # This file is for development work. Not suitable for production. -FROM php:7.2-apache +FROM php:8.1-apache + +# Arguments for user and group modification. Needed for file permissions. +ARG USER_NAME=www-data +ARG USER_GROUP=www-data +ARG USER_ID=1000 +ARG GROUP_ID=1000 # Use the default production configuration. RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" @@ -7,33 +13,29 @@ RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" # Override with custom settings. # COPY config/php_tt.ini $PHP_INI_DIR/conf.d/ -# Install mysqli extension. -RUN docker-php-ext-install mysqli - -# Install gd extension. -RUN apt-get update && apt-get install libpng-dev libfreetype6-dev -y \ - && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ \ - && docker-php-ext-install gd - -# Install ldap extension. -RUN apt-get install libldap2-dev -y \ - && docker-php-ext-install ldap -# TODO: check if ldap works, as the above is missing this step: -# && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ && \ - -# Cleanup. The intention was to keep image size down. -# RUN rm -rf /var/lib/apt/lists/* -# -# The above does not work. Files are removed, but -# image files (zipped or not) are not getting smaller. Why? - -# Copy application source code to /var/www/html/. -COPY . /var/www/html/ -# Create configuration file. -RUN cp /var/www/html/WEB-INF/config.php.dist /var/www/html/WEB-INF/config.php -# Replace DSN value to something connectable to a Docker container running mariadb. -RUN sed -i "s|mysqli://root:no@localhost/dbname|mysqli://anuko_user:anuko_pw@anuko_db/timetracker|g" /var/www/html/WEB-INF/config.php -# Note that db is defined as anuko_db/timetracker where anuko_db is service name and timetracker is db name. -# See docker-compose.yml for details. - -RUN chown -R www-data /var/www/html/ +# Install php extensions. +RUN apt-get update && apt-get install --no-install-recommends -y \ + libpng-dev \ + libfreetype6-dev \ + libldap2-dev && \ + rm -rf /var/lib/apt/lists/* + +# Configure and install php extensions. +RUN docker-php-ext-configure gd --with-freetype \ + && docker-php-ext-install gd \ + ldap \ + mysqli + +# Install xdebug. +RUN pecl install xdebug \ + && docker-php-ext-enable xdebug + +# Copy xdebug config. +COPY xdebug.ini /usr/local/etc/php/conf.d/ + +# Change www-data users uid and www-data groups gid. +RUN usermod --uid $USER_ID $USER_NAME && groupmod --gid $GROUP_ID $USER_GROUP + +# Set default user and working directory. +USER www-data +WORKDIR /var/www/html diff --git a/xdebug.ini b/xdebug.ini new file mode 100644 index 00000000..b155414b --- /dev/null +++ b/xdebug.ini @@ -0,0 +1,6 @@ +[XDebug] +xdebug.mode=debug +xdebug.client_host = host.docker.internal + +# Enable for automatic connection. This is useful for CLI debugging. +#xdebug.start_with_request=yes \ No newline at end of file