diff --git a/.env b/.env_default similarity index 85% rename from .env rename to .env_default index af8d447eb50128bf20fdad70b34a11946fe0b4dd..d0a85c567c16a1bd519f4e1cb1b79ab8e3e2cd01 100644 --- a/.env +++ b/.env_default @@ -50,13 +50,18 @@ APP_DEBUG=1 # If this fails, replace ${MYSQL_DATABASE:-rekallfrwsmember} by rekallfrwsmember # and do the same for the other variables -MYSQL_DATABASE=${MYSQL_DATABASE:-rekallfrwsmember} -MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-root} -MYSQL_USER=${MYSQL_USER:-rekallfrwsmember} -MYSQL_PASSWORD=${MYSQL_PASSWORD:-sm4SyZVPu6wpjZfg} +MYSQL_DATABASE=rekallfrwsmember +MYSQL_ROOT_PASSWORD=root +MYSQL_USER=rekallfrwsmember +MYSQL_PASSWORD=sm4SyZVPu6wpjZfg BY_PASS_CODE=ed156b9188ecddf0c556d5712f0a84cc # Use smtp or mail in production MAILER_DSN=null://null -SYMFONY_SECRET=0f817363a768f111a17d2522b8d7e2d72cf738b1 \ No newline at end of file +SYMFONY_SECRET=0f817363a768f111a17d2522b8d7e2d72cf738b1 +LEGACY_SRC_SHARED=./capsule-prototype +LEGACY_URL=http://legacy/ +LEGACY_URL_EXTERNAL=http://localhost:8081/legacy/ +# Should be the path part of the above url +LEGACY_EXTERNAL_PREFIX=/legacy diff --git a/.gitignore b/.gitignore index 3f4745d48a901089a092d27d880209c3cfe99cfd..888011e43cde1d2dfede595c1f49b281f5843429 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,9 @@ yarn-error.log ###< squizlabs/php_codesniffer ### .phpcd +.*.sw? +mysql +log +/legacy/*/ +capsule-prototype/ +.env diff --git a/README.md b/README.md index b824014f4da0d44d121e7b8ce84567c546ac0950..6f7781b21e0818a5318e10b27b9f447d3722773a 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,9 @@ Copy the file `.env_default` to `.env` and adapt it to your needs Run the following commands ```bash -# Clone the docker stack -git clone https://gitlab.tetras-libre.fr/rekall/docker-stack-new -cd docker-stack-new -# Clone the symfony app -git clone https://gitlab.tetras-libre.fr/rekall/memorekall-member-new app +git clone https://gitlab.tetras-libre.fr/rekall/memorekall-member-new +cd memorekall-member-new +git clone https://gitlab.tetras-libre.fr/rekall/capsule-prototype # Build and start the containers docker-compose up --build # In another terminal diff --git a/docker-compose.override.yml b/docker-compose.override.yml deleted file mode 100644 index c042a707906699e34200ca4725b7c7cd281b8c59..0000000000000000000000000000000000000000 --- a/docker-compose.override.yml +++ /dev/null @@ -1,14 +0,0 @@ -version: '3' - -services: -###> symfony/mailer ### - mailer: - image: schickling/mailcatcher - ports: [1025, 1080] -###< symfony/mailer ### - -###> doctrine/doctrine-bundle ### - database: - ports: - - "5432" -###< doctrine/doctrine-bundle ### diff --git a/docker-compose.yml b/docker-compose.yml index a80a8cf90ad60ac55c7da7bc6ab499c5592e7e51..d4c3bf9c4266d899606b20c9f9bfbab896075af4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,21 +1,42 @@ -version: '3' +version: "3.4" services: -###> doctrine/doctrine-bundle ### - database: - image: postgres:${POSTGRES_VERSION:-13}-alpine + mysql: + image: mysql:5.6 environment: - POSTGRES_DB: ${POSTGRES_DB:-app} - # You should definitely change the password in production - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-ChangeMe} - POSTGRES_USER: ${POSTGRES_USER:-symfony} + - MYSQL_DATABASE + - MYSQL_ROOT_PASSWORD + - MYSQL_USER + - MYSQL_PASSWORD volumes: - - db-data:/var/lib/postgresql/data:rw - # You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data! - # - ./docker/db/data:/var/lib/postgresql/data:rw -###< doctrine/doctrine-bundle ### + - "./mysql:/var/lib/mysql:rw" + - "./docker/mysql/init_db_d:/docker-entrypoint-initdb.d" + memorekall-member: + build: ./docker/symfony + depends_on: + - mysql + - legacy + environment: + - MYSQL_DATABASE + - MYSQL_USER + - MYSQL_PASSWORD + volumes: + - $PWD:/sites/memorekall/www/web_dev:rw + networks: + - default + - legacy + ports: + - "${MEMOREKALL_MEMBER_PORT}:80" -volumes: -###> doctrine/doctrine-bundle ### - db-data: -###< doctrine/doctrine-bundle ### + legacy: + build: ./docker/legacy + depends_on: + - mysql + volumes: + - $PWD/legacy:/sites/memorekall/www/web_legacy:rw + - $PWD/log:/sites/memorekall/www/log:rw + - ${LEGACY_SRC_SHARED}:/sites/memorekall/www/web_legacy/shared:ro + networks: + - legacy +networks: + legacy: diff --git a/docker/legacy/Dockerfile b/docker/legacy/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..da9bd3fe9933669887e433e80abfabb7ab0c8d75 --- /dev/null +++ b/docker/legacy/Dockerfile @@ -0,0 +1,29 @@ +FROM php:7.4-apache + +COPY front.conf /etc/apache2/sites-enabled/000-default.conf + +RUN apt-get update && apt-get -y upgrade && apt-get update && apt-get install -y \ + libcurl4-openssl-dev \ + libfreetype6-dev \ + libjpeg62-turbo-dev \ + libonig-dev \ + libpng-dev \ + libpng-dev \ + libzip-dev \ + zlib1g-dev + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg + +RUN docker-php-ext-install -j$(nproc) \ + gd \ + mbstring \ + curl \ + zip + +RUN mkdir -p /sites/memorekall/www + +WORKDIR /sites/memorekall/www + +VOLUME web_legacy +VOLUME log +RUN mkdir -p tmp diff --git a/docker/legacy/front.conf b/docker/legacy/front.conf new file mode 100644 index 0000000000000000000000000000000000000000..cb8390c34bc58b6e3fb34b0c210a97367f4bae91 --- /dev/null +++ b/docker/legacy/front.conf @@ -0,0 +1,28 @@ +<VirtualHost *:80> + ServerName legacy.memorekall.com + ServerAlias www.legacy.memorekall.com + + ServerAdmin webmaster@localhost + DocumentRoot /sites/memorekall/www/web_legacy + <Directory /sites/memorekall/www/web_legacy> + Options Indexes FollowSymLinks + AllowOverride None + Require all granted + + DirectoryIndex index.php, index.html + </Directory> + + # uncomment the following lines if you install assets as symlinks + # or run into problems when compiling LESS/Sass/CoffeeScript assets + # <Directory /var/www/project> + # Options FollowSymlinks + # </Directory> + + # optionally disable the fallback resource for the asset directories + # which will allow Apache to return a 404 error when files are + # not found instead of passing the request to Symfony + + + ErrorLog /sites/memorekall/www/log/legacy_errors.log + CustomLog /sites/memorekall/www/log/legacy_access.log combined +</VirtualHost> diff --git a/docker/symfony/Dockerfile b/docker/symfony/Dockerfile new file mode 100755 index 0000000000000000000000000000000000000000..3a8946a399460bb61c49d93c466ca96ca79b16cb --- /dev/null +++ b/docker/symfony/Dockerfile @@ -0,0 +1,103 @@ +FROM php:7.4-apache + +USER root + +RUN apt-get update && apt-get -y upgrade + +RUN apt-get update && apt-get install -y \ + gnupg \ + wget \ + apt-transport-https \ + git \ + unzip \ + nodejs \ + npm \ + python2 + +ENV PHP_MEMORY_LIMIT=512M + +#!/bin/bash +# To add this repository please do: + +COPY addPhpRepository.sh . +RUN bash addPhpRepository.sh + +RUN a2enmod rewrite headers proxy proxy_http + +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -yq \ + libcurl4-openssl-dev \ + libfreetype6-dev \ + libjpeg62-turbo-dev \ + libonig-dev \ + libpng-dev \ + libpng-dev \ + libzip-dev \ + zlib1g-dev \ + libxml2-dev \ + libicu-dev + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg + +RUN docker-php-ext-install -j$(nproc) \ + mbstring \ + gd \ + pdo_mysql \ + mysqli \ + curl \ + zip \ + pdo \ + ctype \ + iconv \ + json \ + session \ + simplexml \ + tokenizer + +# Install opcache extension for PHP accelerator +RUN docker-php-ext-install opcache \ + && docker-php-ext-enable opcache \ + && rm -rf /var/lib/apt/lists/* \ + && apt-get autoremove -y + +# Install internationalization extension +RUN BUILD_DEPS="g++ libicu-dev" && \ + apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -yq \ + $BUILD_DEPS \ + && docker-php-ext-configure intl \ + && docker-php-ext-install intl \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false -o APT::AutoRemove::SuggestsImportant=false $BUILD_DEPS \ + && rm -rf /var/lib/apt/lists/* + +RUN echo 'date.timezone = "UTC"' >> /usr/local/etc/php/php.ini +RUN echo 'opcache.max_accelerated_files = 20000' >> /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini + + +RUN echo short_open_tag=off >> /usr/local/etc/php/php.ini + +# Install composer +COPY install_composer.sh /bin +RUN chmod u+x /bin/install_composer.sh +RUN /bin/install_composer.sh + +# Install xdebug +RUN pecl install xdebug-2.9.0 \ + && docker-php-ext-enable xdebug + +COPY xdebug.ini $PHP_INI_DIR/conf.d/ + +# Composer is global +RUN mv composer.phar /usr/local/bin/composer && curl -sS https://get.symfony.com/cli/installer | bash && cp /root/.symfony/bin/symfony /usr/local/bin/symfony + +ENV COMPOSER_MEMORY_LIMIT=-1 + +RUN mkdir -p /sites/memorekall/www/web_dev + +WORKDIR /sites/memorekall/www/web_dev + +COPY symfony.conf /etc/apache2/sites-enabled/000-default.conf + +COPY entrypoint.sh /entrypoint.sh + +ENTRYPOINT ["bash","/entrypoint.sh"] + diff --git a/docker/symfony/addPhpRepository.sh b/docker/symfony/addPhpRepository.sh new file mode 100755 index 0000000000000000000000000000000000000000..60eca107c21c2f6740c4526ec1489d067818947c --- /dev/null +++ b/docker/symfony/addPhpRepository.sh @@ -0,0 +1,8 @@ +if [ "$(whoami)" != "root" ]; then + SUDO=sudo +fi + +${SUDO} apt-get -y install apt-transport-https lsb-release ca-certificates curl +${SUDO} wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg +${SUDO} sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' +${SUDO} apt-get update \ No newline at end of file diff --git a/docker/symfony/entrypoint.sh b/docker/symfony/entrypoint.sh new file mode 100755 index 0000000000000000000000000000000000000000..662c8b3cb43b3e568d2f71d9bc5ea5e5ee0bb9bc --- /dev/null +++ b/docker/symfony/entrypoint.sh @@ -0,0 +1,39 @@ +base_dir=/sites/memorekall/www +pushd $base_dir +pushd $base_dir/web_dev + +# Install dependencies using local composer not global because of php 5.5 +composer install + +popd + +# Create required dirs +DIRS="web_dev/var/log web_dev/var/cache" +for d in $DIRS; do + mkdir -p $d +done + +popd + +xdebug_conf="$PHP_INI_DIR/conf.d/xdebug.ini" +npm install +if [ "$ENV" == "prod" ]; then + rm $xdebug_conf + npm run build +else + if [[ "$(uname -r)" =~ "linuxkit" ]]; then + # Connect back does not work in non Linux, deactivate it and use host.docker.internal url + sed -i -e "s/xdebug.remote_connect_back=1/xdebug.remote_connect_back=0/" $xdebug_conf + echo "xdebug.remote_host = host.docker.internal" >> $xdebug_conf + fi + npm run watch & +fi + +# Fix permissions +for d in var vendor assets public node_modules legacy log src; do + chown -R :www-data $base_dir/web_dev/$d + chmod -R g+w $base_dir/web_dev/$d +done +chown -R 999:999 $base_dir/web_dev/mysql + +apache2ctl -DFOREGROUND diff --git a/docker/symfony/install_composer.sh b/docker/symfony/install_composer.sh new file mode 100755 index 0000000000000000000000000000000000000000..585031d99f63d6c5a854d7a1d12762d0032e5731 --- /dev/null +++ b/docker/symfony/install_composer.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +EXPECTED_CHECKSUM="$(php -r 'copy("https://composer.github.io/installer.sig", "php://stdout");')" +php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" +ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")" + +if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ] +then + >&2 echo 'ERROR: Invalid installer checksum' + rm composer-setup.php + exit 1 +fi + +php composer-setup.php --quiet +RESULT=$? +rm composer-setup.php +exit $RESULT \ No newline at end of file diff --git a/docker/symfony/symfony.conf b/docker/symfony/symfony.conf new file mode 100755 index 0000000000000000000000000000000000000000..0820a92b829ae1bbf454c44449fd605d3564bdb6 --- /dev/null +++ b/docker/symfony/symfony.conf @@ -0,0 +1,18 @@ +<VirtualHost *:80> + ServerName project.memorekall.com + ServerAlias www.project.memorekall.com + + DocumentRoot /sites/memorekall/www/web_dev/public + DirectoryIndex /index.php + <Directory /sites/memorekall/www/web_dev/public> + Require all granted + AllowOverride None + Order Allow,Deny + Allow from All + + FallbackResource /index.php + RewriteEngine on + </Directory> + ErrorLog /sites/memorekall/www/web_dev/log/memorekall_member_error.log + CustomLog /sites/memorekall/www/web_dev/log/memorekall_member.log combined +</VirtualHost> diff --git a/docker/symfony/xdebug.ini b/docker/symfony/xdebug.ini new file mode 100755 index 0000000000000000000000000000000000000000..654ab2354e7bd09050a67296b11502fdc7d74c4f --- /dev/null +++ b/docker/symfony/xdebug.ini @@ -0,0 +1,3 @@ +xdebug.remote_port=9000 +xdebug.remote_enable=1 +xdebug.remote_connect_back=1 diff --git a/tools/git-hooks/pre-commit b/tools/git-hooks/pre-commit index 8328e81adfd3c0676604258a42a24434234510f4..003df608e1afd2484f1f0f7f1b0a511e4b9e9e63 100755 --- a/tools/git-hooks/pre-commit +++ b/tools/git-hooks/pre-commit @@ -5,10 +5,10 @@ GREENBOLD='\033[0;32;1m' BOLD='\033[1m' NORMAL='\033[0m' if [ ! -z "$(which docker-compose)" ]; then - composer="docker-compose -f ../docker-compose.yml exec -T memorekall-member composer" -else - composer=composer + docker="docker-compose exec -T memorekall-member" fi +composer="$docker composer" +npm="$docker npm" echo -e "\n ${BOLD} Starting Unit and Functional Tests...\n ${NORMAL}" $composer tests @@ -39,11 +39,11 @@ else fi echo -e "\n ${BOLD} Starting ESLint... \n ${NORMAL}" -npm run lint +$npm run lint if [ $? != 0 ]; then echo -e "\n ${REDBOLD} ESLint verification failed \n ${NORMAL}" exit 1; else echo -e "\n ${GREENBOLD} Your code passed JS linter successfully! \n \n Committing your changes now... \n ${NORMAL}" -fi \ No newline at end of file +fi