diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..1b2778f --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,35 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "PHP 8.0", + "type": "php", + "request": "launch", + "pathMappings": { + "/web/backend": "${workspaceFolder}\\src\\backend" + }, + "skipFiles": [ + "${workspaceFolder}/src/backend/vendor/**" + ], + "port": 7780, + "hostname": "127.0.0.1", + "xdebugSettings": { + "max_children": 100, + } + }, + { + "name": "PHP 8.0 with vendor", + "type": "php", + "request": "launch", + "pathMappings": { + "/web/backend": "${workspaceFolder}\\src\\backend" + }, + "port": 7780, + "hostname": "127.0.0.1", + "xdebugSettings": { + "max_children": 100, + } + } + + ] +} \ No newline at end of file diff --git a/docker/.gitignore b/docker/.gitignore new file mode 100644 index 0000000..fe869a5 --- /dev/null +++ b/docker/.gitignore @@ -0,0 +1,4 @@ +logs/* +!logs/.gitkeep +cache/*/* +!cache/*/.gitkeep diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..3f01d67 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,50 @@ +FROM debian:10 + +RUN apt update \ + && echo "Binary::apt::APT::Keep-Downloaded-Packages \"true\";" | tee /etc/apt/apt.conf.d/01keep-debs \ + && apt install -y wget lsb-release ca-certificates apt-transport-https software-properties-common gnupg2 gcc g++ make \ + && echo "configure repos" \ + && echo "deb https://packages.sury.org/php/ buster main" | tee /etc/apt/sources.list.d/php.list \ + && echo "deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main" | tee /etc/apt/sources.list.d/postgresql.list \ + && echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/buster pgadmin4 main" | tee /etc/apt/sources.list.d/pgdg.list \ + && echo "download keys" \ + && (wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - ) \ + && (wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - ) \ + && (wget -qO - https://www.pgadmin.org/static/packages_pgadmin_org.pub | apt-key add - ) \ + && echo "install nodejs" \ + && wget -qO - https://deb.nodesource.com/setup_16.x | bash - \ + && echo "update repos" \ + && apt update \ + && echo "install software" \ + && apt install -y aptitude unzip \ + && apt install -y postgresql pgadmin4 \ + && apt install -y php8.0 php8.0-ctype php8.0-iconv php8.0-simplexml php8.0-tokenizer php8.0-fpm php8.0-pdo php8.0-pdo-pgsql php8.0-pgsql php8.0-mbstring php8.0-zip php8.0-xdebug \ + && apt install -y nginx \ + && apt install -y nodejs \ + && echo "configure tools" \ + && echo "# angular" \ + && npm install -g @angular/cli \ + && echo "# composer" \ + && php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \ + && php composer-setup.php --install-dir=/usr/local/bin/ --filename=composer \ + && php -r "unlink('composer-setup.php');" \ + && echo "# nginx" \ + && ln -s /web/config/nginx/app.conf /etc/nginx/conf.d/app.conf \ + && ln -s /web/config/nginx/php80.conf /etc/nginx/php80.conf \ + && echo "# postgresql" \ + && echo "postgres:WeryStronkPaz2" | chpasswd \ + && echo "# pgadmin4" \ + && bash -c 'PGADMIN_SETUP_EMAIL="admin@pgadmin.localhost" PGADMIN_SETUP_PASSWORD="WeryStronkPaz2" /usr/pgadmin4/bin/setup-web.sh --yes' \ + && echo "" > /etc/nginx/sites-enabled/default \ + && echo "!!! DONE !!!" + +RUN apt install -y nano openssh-server telnet +VOLUME /web/backend/vendor +VOLUME /web/backend/var +VOLUME /web/frontend/node_modules + +EXPOSE 7700 7780 7781 + +STOPSIGNAL SIGQUIT + +CMD ["bash", "/web/config/startup.sh"] diff --git a/docker/cache/.gitkeep b/docker/cache/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docker/cache/apt/.gitkeep b/docker/cache/apt/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docker/cache/postgres/.gitkeep b/docker/cache/postgres/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..4678e24 --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,22 @@ +version: "3.9" +services: + app: + build: . + ports: + - 7700:7700 + expose: + - 7780:7780 + - 7781:7781 + volumes: + - .:/web/config + - ../src/backend:/web/backend:cached + - ../src/frontend:/web/frontend:cached + - ./logs:/var/log + - vendor:/web/backend/vendor + - var:/web/backend/var + - nodemodules:/web/frontend/node_modules +volumes: + nodemodules: + vendor: + var: + nodemodules: \ No newline at end of file diff --git a/docker/logs/.gitkeep b/docker/logs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docker/nginx/app.conf b/docker/nginx/app.conf new file mode 100644 index 0000000..b585ffc --- /dev/null +++ b/docker/nginx/app.conf @@ -0,0 +1,27 @@ +server { + server_name localhost; + listen 7700; + root /web/backend/public; + index index.htm index.html index.php; + location / { + proxy_bind 127.0.0.1; + proxy_pass http://localhost:4200; + } + location /api/ { + try_files $uri $uri/ /index.php/$uri?$query_string; + } + location /coverage/ { + alias /web/coverage/html-coverage/; + index index.html; + } + location /pgadmin4/ { + include proxy_params; + proxy_bind 127.0.0.1; + proxy_pass http://localhost:80; + proxy_set_header X-Script-Name /pgadmin4; + } + proxy_intercept_errors on; + fastcgi_intercept_errors on; + fastcgi_hide_header X-Powered-By; + include "php80.conf"; +} diff --git a/docker/nginx/php80.conf b/docker/nginx/php80.conf new file mode 100644 index 0000000..d08c54d --- /dev/null +++ b/docker/nginx/php80.conf @@ -0,0 +1,14 @@ +index index.php index.html index.htm; +include snippets/fastcgi-php.conf; +location ~ [^/]\.php(/|$) { + fastcgi_split_path_info ^(.+?\.php)(/.*)$; + if (!-f $document_root$fastcgi_script_name) { + return 404; + } + fastcgi_param HTTP_PROXY ""; + fastcgi_pass unix:/run/php/php8.0-fpm.sock; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + fastcgi_buffering off; +} \ No newline at end of file diff --git a/docker/php8.0/xdebug-cli.ini b/docker/php8.0/xdebug-cli.ini new file mode 100644 index 0000000..80b4894 --- /dev/null +++ b/docker/php8.0/xdebug-cli.ini @@ -0,0 +1,12 @@ +zend_extension=xdebug.so + +[xdebug] +xdebug.mode=coverage +xdebug.start_with_request=yes +xdebug.client_host=host.docker.internal +xdebug.client_port=7781 + +xdebug.show_exception_trace = 1 +xdebug.show_error_trace = 1 + +xdebug.log_level = 0 \ No newline at end of file diff --git a/docker/php8.0/xdebug-fpm.ini b/docker/php8.0/xdebug-fpm.ini new file mode 100644 index 0000000..8d3cc4c --- /dev/null +++ b/docker/php8.0/xdebug-fpm.ini @@ -0,0 +1,12 @@ +zend_extension=xdebug.so + +[xdebug] +xdebug.mode=debug +xdebug.start_with_request=yes +xdebug.client_host=host.docker.internal +xdebug.client_port=7780 + +xdebug.show_exception_trace = 1 +xdebug.show_error_trace = 1 + +xdebug.log_level = 0 \ No newline at end of file diff --git a/docker/postgres/init-data.sql b/docker/postgres/init-data.sql new file mode 100644 index 0000000..04899c1 --- /dev/null +++ b/docker/postgres/init-data.sql @@ -0,0 +1,4 @@ +ALTER USER postgres WITH PASSWORD 'WeryStronkPaz2'; +CREATE USER curenet WITH PASSWORD 'WeryStronkPaz2'; +CREATE DATABASE curenet; +GRANT ALL PRIVILEGES ON DATABASE curenet to curenet; \ No newline at end of file diff --git a/docker/run b/docker/run new file mode 100644 index 0000000..d326db1 --- /dev/null +++ b/docker/run @@ -0,0 +1 @@ +docker compose -p curenet up \ No newline at end of file diff --git a/docker/startup.sh b/docker/startup.sh new file mode 100644 index 0000000..8335257 --- /dev/null +++ b/docker/startup.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +echo "> Configure logs" + mkdir -p /var/log/{apache2,nginx,pgadmin,postgresql} + chown postgres:adm /var/log/postgresql -R + chown root:postgres /var/log/postgresql + +echo "> Configure volumes" + [ -e /web/frontend/node_modules ] || ln -s /web/node /web/frontend/node_modules + [ -e /web/backend/var ] || ln -s /web/var /web/backend/var + [ -e /web/backend/vendor ] || ln -s /web/vendor /web/backend/vendor + +echo "> Starting php8.0-fpm server" + [ -e /etc/php/8.0/fpm/conf.d/20-xdebug.ini ] && rm /etc/php/8.0/fpm/conf.d/20-xdebug.ini || echo OK + [ -e /etc/php/8.0/cli/conf.d/20-xdebug.ini ] && rm /etc/php/8.0/cli/conf.d/20-xdebug.ini || echo OK + cp /web/config/php8.0/xdebug-fpm.ini /etc/php/8.0/fpm/conf.d/20-xdebug.ini + cp /web/config/php8.0/xdebug-cli.ini /etc/php/8.0/cli/conf.d/20-xdebug.ini + service php8.0-fpm start + +echo "> Starting nginx server" + service nginx start + +echo "> Starting apache2 server for pgAdmin4" + service apache2 start + +echo "> Starting postgresql database" + service postgresql start + +echo "> Starting ssh server" + service ssh start + +echo "> Configure database" + su postgres -c psql postgres < /web/config/postgres/init-data.sql + +echo "> Configure symfony" + cd /web/backend + composer install + +echo "> Configure angular" + cd /web/frontend + npm i + +echo "> Starting angular" + ng serve diff --git a/src/backend/.env.beta b/src/backend/.env.beta new file mode 100644 index 0000000..0a48360 --- /dev/null +++ b/src/backend/.env.beta @@ -0,0 +1,3 @@ +APP_ENV=dev +APP_SECRET=0fc8d6b67b9f1100b3eb3e3c80d36fda +DATABASE_URL="postgresql://db_user:db_password@127.0.0.1:5432/db_name?serverVersion=13&charset=utf8" diff --git a/src/backend/.env.dev b/src/backend/.env.dev new file mode 100644 index 0000000..2502619 --- /dev/null +++ b/src/backend/.env.dev @@ -0,0 +1,3 @@ +APP_ENV=dev +APP_SECRET=0fc8d6b67b9f1100b3eb3e3c80d36fda +DATABASE_URL="postgresql://curenet:WeryStronkPaz2@127.0.0.1:5432/curenet?serverVersion=13&charset=utf8" diff --git a/src/backend/.env.prod b/src/backend/.env.prod new file mode 100644 index 0000000..0a48360 --- /dev/null +++ b/src/backend/.env.prod @@ -0,0 +1,3 @@ +APP_ENV=dev +APP_SECRET=0fc8d6b67b9f1100b3eb3e3c80d36fda +DATABASE_URL="postgresql://db_user:db_password@127.0.0.1:5432/db_name?serverVersion=13&charset=utf8" diff --git a/src/frontend/angular.json b/src/frontend/angular.json index 1f311f0..08083a6 100644 --- a/src/frontend/angular.json +++ b/src/frontend/angular.json @@ -38,7 +38,7 @@ "build": { "builder": "@angular-devkit/build-angular:browser", "options": { - "outputPath": "dist/frontend", + "outputPath": "dist", "index": "src/index.html", "main": "src/main.ts", "polyfills": "src/polyfills.ts",