From 88d0c83bc59813c846a5b3f1d4017edf988f559b Mon Sep 17 00:00:00 2001 From: Zura Sekhniashvili Date: Mon, 24 Jan 2022 10:14:55 +0400 Subject: [PATCH 01/11] Start Working on docker integration --- docker-compose.yml | 10 ++++++++++ docker/000-default.conf | 10 ++++++++++ docker/Dockerfile | 15 +++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 docker-compose.yml create mode 100644 docker/000-default.conf create mode 100644 docker/Dockerfile diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..44c665e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,10 @@ +version: "3.7" + +services: + app: + build: docker + ports: + - "80:80" + volumes: + # Mount source-code for development + - ./:/var/www diff --git a/docker/000-default.conf b/docker/000-default.conf new file mode 100644 index 0000000..3b74b4b --- /dev/null +++ b/docker/000-default.conf @@ -0,0 +1,10 @@ + + ServerAdmin webmaster@localhost + DocumentRoot /var/www/public + + + Options Indexes FollowSymLinks + AllowOverride All + Require all granted + + \ No newline at end of file diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..51d5243 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,15 @@ +FROM php:8.1-apache + +# Copy virtual host into container +COPY 000-default.conf /etc/apache2/sites-available/000-default.conf + +# Enable rewrite mode +RUN a2enmod rewrite + +WORKDIR /var/www + +# Change the owner of the container document root +RUN chown -R www-data:www-data /var/www + +CMD ["apache2-foreground"] + From 1e130105d5877a06946ec64ae566ef0a9d469e0f Mon Sep 17 00:00:00 2001 From: Zura Sekhniashvili Date: Tue, 25 Jan 2022 10:04:13 +0400 Subject: [PATCH 02/11] Create Dockerfile --- docker/Dockerfile | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docker/Dockerfile b/docker/Dockerfile index 51d5243..856f8eb 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -6,6 +6,20 @@ COPY 000-default.conf /etc/apache2/sites-available/000-default.conf # Enable rewrite mode RUN a2enmod rewrite +# Install git +RUN apt-get update +RUN apt-get install libzip-dev git unzip -y --no-install-recommends + +# RUN docker-php-ext-install zip intl mbstring pdo_mysql exif gd +RUN docker-php-ext-install zip pdo_mysql + +# Install composer +RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" +RUN php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" +RUN php composer-setup.php +RUN php -r "unlink('composer-setup.php');" +RUN mv composer.phar /usr/local/bin/composer + WORKDIR /var/www # Change the owner of the container document root From cee1f78c9500bf010ce1765f80593b61980b3f6c Mon Sep 17 00:00:00 2001 From: Zura Sekhniashvili Date: Wed, 2 Feb 2022 07:53:10 +0400 Subject: [PATCH 03/11] Add Dockerfile and docker-compose.yml --- docker-compose.yml | 12 +++++++++++- docker/Dockerfile | 14 +++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 44c665e..6661f9e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,9 +2,19 @@ version: "3.7" services: app: - build: docker + build: ./docker + image: thecodeholic/php_mvc ports: - "80:80" volumes: # Mount source-code for development - ./:/var/www + db: + image: mysql:8 + ports: + - "3307:3306" + environment: + MYSQL_DATABASE: php_mvc + MYSQL_ROOT_PASSWORD: root + MYSQL_USER: php_mvc + MYSQL_PASSWORD: php_mvc diff --git a/docker/Dockerfile b/docker/Dockerfile index 856f8eb..bf475ed 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -6,11 +6,15 @@ COPY 000-default.conf /etc/apache2/sites-available/000-default.conf # Enable rewrite mode RUN a2enmod rewrite -# Install git -RUN apt-get update -RUN apt-get install libzip-dev git unzip -y --no-install-recommends - -# RUN docker-php-ext-install zip intl mbstring pdo_mysql exif gd +# Install necessary packages +RUN apt-get update && \ + apt-get install \ + libzip-dev \ + git \ + unzip \ + -y --no-install-recommends + +# Install PHP Extensions RUN docker-php-ext-install zip pdo_mysql # Install composer From fd65d8b55b871aec6db687fda9b831c15a2a9924 Mon Sep 17 00:00:00 2001 From: Zura Sekhniashvili Date: Wed, 2 Feb 2022 08:08:05 +0400 Subject: [PATCH 04/11] Adjust parameters in .env.example for docker setup --- .env.example | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index 512046a..dee47ba 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,3 @@ -DB_DSN = mysql:host=localhost;port=3306;dbname=mvc_framework -DB_USER = root -DB_PASSWORD = \ No newline at end of file +DB_DSN = mysql:host=db;port=3306;dbname=php_mvc +DB_USER = php_mvc +DB_PASSWORD = php_mvc \ No newline at end of file From 57a86798a004ad21455e76c3e261418f7cc6e6e7 Mon Sep 17 00:00:00 2001 From: Zura Sekhniashvili Date: Wed, 2 Feb 2022 08:15:02 +0400 Subject: [PATCH 05/11] Update apache outer port in docker-compose.yml --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 6661f9e..a74be14 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,7 @@ services: build: ./docker image: thecodeholic/php_mvc ports: - - "80:80" + - "8080:80" volumes: # Mount source-code for development - ./:/var/www From b2404fd0f895c793bf2b5fa0240bdf39f7ae02d4 Mon Sep 17 00:00:00 2001 From: Zura Sekhniashvili Date: Wed, 2 Feb 2022 08:15:20 +0400 Subject: [PATCH 06/11] Add docker installation section in README.md --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index d2d3bc2..3c025b9 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,17 @@ Minimalistic custom framework created for educational purposes. 7. Start php server by running command `php -S 127.0.0.1:8080` 8. Open in browser http://127.0.0.1:8080 +------ +## Installation using docker +Make sure you have docker installed. To see how you can install docker on Windows [click here](https://youtu.be/2ezNqqaSjq8).
+Make sure `docker` and `docker-compose` commands are available in command line. + +1. Clone the project using git +1. Copy `.env.example` into `.env` (Don't need to change anything for local development) +1. Navigate to the project root directory and run `docker-compose up -d` +1. Install dependencies - `docker-compose exec app composer install` +1. Run migrations - `docker-compose exec app php migrations.php` +8. Open in browser http://127.0.0.1:8080 > The project was created along with Youtube Video Series "[Build PHP MVC Framework](https://www.youtube.com/playlist?list=PLLQuc_7jk__Uk_QnJMPndbdKECcTEwTA1)". > I appreaciate if you share it. From 76d0776bdfab5e4eb95e2ae995560af663aba051 Mon Sep 17 00:00:00 2001 From: Zura Sekhniashvili Date: Wed, 2 Feb 2022 09:24:22 +0400 Subject: [PATCH 07/11] Add php.ini, mysql-config and install-composer files --- docker/Dockerfile | 24 ++++++++++++++++++------ docker/install-composer.sh | 18 ++++++++++++++++++ docker/mysql-config.conf | 11 +++++++++++ docker/php.ini | 3 +++ 4 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 docker/install-composer.sh create mode 100644 docker/mysql-config.conf create mode 100644 docker/php.ini diff --git a/docker/Dockerfile b/docker/Dockerfile index bf475ed..7aa489d 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -10,6 +10,7 @@ RUN a2enmod rewrite RUN apt-get update && \ apt-get install \ libzip-dev \ + wget \ git \ unzip \ -y --no-install-recommends @@ -17,13 +18,24 @@ RUN apt-get update && \ # Install PHP Extensions RUN docker-php-ext-install zip pdo_mysql -# Install composer -RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" -RUN php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" -RUN php composer-setup.php -RUN php -r "unlink('composer-setup.php');" -RUN mv composer.phar /usr/local/bin/composer +# RUN pecl install -o -f xdebug-3.1.3 \ +# && rm -rf /tmp/pear +# Copy composer +COPY ./install-composer.sh ./ + +# Copy php.ini +COPY ./php.ini /usr/local/etc/php/ + +# Cleanup packages and install composer +RUN apt-get purge -y g++ \ + && apt-get autoremove -y \ + && rm -r /var/lib/apt/lists/* \ + && rm -rf /tmp/* \ + && sh ./install-composer.sh \ + && rm ./install-composer.sh + +# Change the current working directory WORKDIR /var/www # Change the owner of the container document root diff --git a/docker/install-composer.sh b/docker/install-composer.sh new file mode 100644 index 0000000..b132791 --- /dev/null +++ b/docker/install-composer.sh @@ -0,0 +1,18 @@ +#!/bin/sh + + +php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" +SIGNATURE=$(php -r "echo hash_file('SHA384', 'composer-setup.php');") +EXPECTED_SIGNATURE=$(wget -q -O - https://composer.github.io/installer.sig) + +if [ "$EXPECTED_SIGNATURE" != "$SIGNATURE" ] +then + echo 'ERROR: Invalid installer signature' + rm composer-setup.php + exit 1 +fi + +php composer-setup.php --quiet --install-dir=/usr/local/bin --filename=composer +RESULT=$? +rm composer-setup.php +exit $RESULT \ No newline at end of file diff --git a/docker/mysql-config.conf b/docker/mysql-config.conf new file mode 100644 index 0000000..1f3bb11 --- /dev/null +++ b/docker/mysql-config.conf @@ -0,0 +1,11 @@ +[client] +default-character-set = utf8mb4 + +[mysql] +default-character-set = utf8mb4 + +[mysqld] +init-connect='SET NAMES utf8mb4' +collation_server=utf8mb4_unicode_ci +character_set_server=utf8mb4 +default_authentication_plugin= mysql_native_password \ No newline at end of file diff --git a/docker/php.ini b/docker/php.ini new file mode 100644 index 0000000..c6d1b76 --- /dev/null +++ b/docker/php.ini @@ -0,0 +1,3 @@ +; General +upload_max_filesize = 200M +post_max_size = 220M From 871ed1bf39a4b0b391eda61f360271c05cfc686b Mon Sep 17 00:00:00 2001 From: Zura Sekhniashvili Date: Wed, 2 Feb 2022 09:30:12 +0400 Subject: [PATCH 08/11] Use mysql-config.cnf in docker-compose.yml --- docker-compose.yml | 4 +++- docker/{mysql-config.conf => mysql-config.cnf} | 0 2 files changed, 3 insertions(+), 1 deletion(-) rename docker/{mysql-config.conf => mysql-config.cnf} (100%) diff --git a/docker-compose.yml b/docker-compose.yml index a74be14..85b5915 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,8 +13,10 @@ services: image: mysql:8 ports: - "3307:3306" + volumes: + - ./docker/mysql-config.cnf:/etc/mysql/conf.d/config.cnf environment: - MYSQL_DATABASE: php_mvc MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: php_mvc MYSQL_USER: php_mvc MYSQL_PASSWORD: php_mvc diff --git a/docker/mysql-config.conf b/docker/mysql-config.cnf similarity index 100% rename from docker/mysql-config.conf rename to docker/mysql-config.cnf From 02fb3b30a35b7f1bd4af57858d2b5a9ce49014f4 Mon Sep 17 00:00:00 2001 From: Zura Sekhniashvili Date: Wed, 2 Feb 2022 09:31:30 +0400 Subject: [PATCH 09/11] Add .dockerignore --- .dockerignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..68aac31 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +.git +runtime \ No newline at end of file From 950569922743287d07e92cb1fe8883deefa3594a Mon Sep 17 00:00:00 2001 From: Zura Sekhniashvili Date: Thu, 3 Feb 2022 08:52:02 +0400 Subject: [PATCH 10/11] Add volume to persist mysql data --- docker-compose.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 85b5915..8531289 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,9 +14,13 @@ services: ports: - "3307:3306" volumes: + - mysql-data:/var/lib/mysql - ./docker/mysql-config.cnf:/etc/mysql/conf.d/config.cnf environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: php_mvc MYSQL_USER: php_mvc MYSQL_PASSWORD: php_mvc + +volumes: + mysql-data: \ No newline at end of file From 7a1b8fdf0864957b067d505bc40fac656bf72527 Mon Sep 17 00:00:00 2001 From: Zura Sekhniashvili Date: Fri, 11 Feb 2022 08:25:00 +0400 Subject: [PATCH 11/11] Add comments in Dockerfile --- docker/Dockerfile | 3 ++- docker/install-composer.sh | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 7aa489d..9740c1d 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -21,7 +21,7 @@ RUN docker-php-ext-install zip pdo_mysql # RUN pecl install -o -f xdebug-3.1.3 \ # && rm -rf /tmp/pear -# Copy composer +# Copy composer installable COPY ./install-composer.sh ./ # Copy php.ini @@ -41,5 +41,6 @@ WORKDIR /var/www # Change the owner of the container document root RUN chown -R www-data:www-data /var/www +# Start Apache in foreground CMD ["apache2-foreground"] diff --git a/docker/install-composer.sh b/docker/install-composer.sh index b132791..bcb1e7a 100644 --- a/docker/install-composer.sh +++ b/docker/install-composer.sh @@ -1,6 +1,5 @@ #!/bin/sh - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" SIGNATURE=$(php -r "echo hash_file('SHA384', 'composer-setup.php');") EXPECTED_SIGNATURE=$(wget -q -O - https://composer.github.io/installer.sig)