yourtar-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/bin/backTemplate/.env.dev-example +55 -0
  2. package/bin/backTemplate/.env.prod-example +54 -0
  3. package/bin/backTemplate/.env.stage-example +55 -0
  4. package/bin/backTemplate/Makefile +29 -0
  5. package/bin/backTemplate/Readme.md +32 -0
  6. package/bin/backTemplate/config/packages/nelmio_cors.yaml +24 -0
  7. package/bin/backTemplate/docker/config/nginx/default.conf +22 -0
  8. package/bin/backTemplate/docker/config/php/php-ini-overrides.ini +0 -0
  9. package/bin/backTemplate/docker/docker-compose.dev.yml +68 -0
  10. package/bin/backTemplate/docker/docker-compose.prod.yml +86 -0
  11. package/bin/backTemplate/docker/docker-compose.stage.yml +79 -0
  12. package/bin/backTemplate/docker/dockerfile/cron/Dockerfile +36 -0
  13. package/bin/backTemplate/docker/dockerfile/cron/entrypoint.sh +12 -0
  14. package/bin/backTemplate/docker/dockerfile/cron/scheduler +1 -0
  15. package/bin/backTemplate/docker/dockerfile/php/Dockerfile +27 -0
  16. package/bin/dockerfile/Dockerfile +30 -0
  17. package/bin/frontTemplate/Makefile +13 -0
  18. package/bin/frontTemplate/README.md +18 -0
  19. package/bin/frontTemplate/docker/.env.dev +5 -0
  20. package/bin/frontTemplate/docker/.env.prod +5 -0
  21. package/bin/frontTemplate/docker/.env.stage +5 -0
  22. package/bin/frontTemplate/docker/config/nginx/default.conf +33 -0
  23. package/bin/frontTemplate/docker/docker-compose.dev.yml +18 -0
  24. package/bin/frontTemplate/docker/docker-compose.prod.yml +40 -0
  25. package/bin/frontTemplate/docker/docker-compose.stage.yml +34 -0
  26. package/bin/frontTemplate/docker/dockerfile/node/Dockerfile +12 -0
  27. package/bin/frontTemplate/docker/dockerfile/node/Dockerfile.prod +15 -0
  28. package/bin/index.js +83 -0
  29. package/bin/scripts/fileManager.js +31 -0
  30. package/package.json +18 -0
@@ -0,0 +1,55 @@
1
+ # In all environments, the following files are loaded if they exist,
2
+ # the latter taking precedence over the former:
3
+ #
4
+ # * .env contains default values for the environment variables needed by the app
5
+ # * .env.local uncommitted file with local overrides
6
+ # * .env.$APP_ENV committed environment-specific defaults
7
+ # * .env.$APP_ENV.local uncommitted environment-specific overrides
8
+ #
9
+ # Real environment variables win over .env files.
10
+ #
11
+ # DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES.
12
+ # https://symfony.com/doc/current/configuration/secrets.html
13
+ #
14
+ # Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2).
15
+ # https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration
16
+
17
+ ###> symfony/framework-bundle ###
18
+ APP_ENV=dev
19
+ APP_MODE=dev
20
+ APP_SECRET=004d1ffe63ec5a21138b820b78e4ffe5
21
+ ###< symfony/framework-bundle ###
22
+
23
+ ###> doctrine/doctrine-bundle ###
24
+ DATABASE_URL=mysql://root:password@mysql_{{name}}_back/test
25
+ DATABASE_USER=root
26
+ DATABASE_PASSWORD=password
27
+ DATABASE_NAME=test
28
+ DATABASE_HOST=mysql_{{name}}_back
29
+ ###< doctrine/doctrine-bundle ###
30
+
31
+ ###> symfony/mailer ###
32
+ MAILER_DSN=gmail://forytmailing:sherthdhczseiouh@localhost?encryption=tls&auth_mode=oauth
33
+ ###< symfony/mailer ###
34
+
35
+ ###> symfony/sendgrid-mailer ###
36
+ # MAILER_DSN=sendgrid://KEY@default
37
+ ###< symfony/sendgrid-mailer ###
38
+
39
+ ###> nelmio/cors-bundle ###
40
+ CORS_ALLOW_ORIGIN=^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$
41
+ ###< nelmio/cors-bundle ###
42
+
43
+ ###> symfony/mercure-bundle ###
44
+ # See https://symfony.com/doc/current/mercure.html#configuration
45
+ # The URL of the Mercure hub, used by the app to publish updates (can be a local URL)
46
+ MERCURE_URL=http://mercure_smurno_back/.well-known/mercure
47
+ # The public URL of the Mercure hub, used by the browser to connect
48
+ MERCURE_PUBLIC_URL=http://mercure_smurno_back/.well-known/mercure
49
+ # The secret used to sign the JWTs
50
+ MERCURE_JWT_SECRET=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXJjdXJlIjp7InN1YnNjcmliZSI6W10sInB1Ymxpc2giOlsiKiJdfX0.iet30AwoLji0CfuBtCf1gaFZT5L-qOi6ZyW-om4l3zY
51
+ ###< symfony/mercure-bundle ###
52
+
53
+ ###> symfony/messenger ###
54
+ MESSENGER_TRANSPORT_DSN=amqp://admin:13121994@back.yourtar.ru:5672/%2f
55
+ ###< symfony/messenger ###
@@ -0,0 +1,54 @@
1
+ # In all environments, the following files are loaded if they exist,
2
+ # the latter taking precedence over the former:
3
+ #
4
+ # * .env contains default values for the environment variables needed by the app
5
+ # * .env.local uncommitted file with local overrides
6
+ # * .env.$APP_ENV committed environment-specific defaults
7
+ # * .env.$APP_ENV.local uncommitted environment-specific overrides
8
+ #
9
+ # Real environment variables win over .env files.
10
+ #
11
+ # DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES.
12
+ # https://symfony.com/doc/current/configuration/secrets.html
13
+ #
14
+ # Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2).
15
+ # https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration
16
+
17
+ ###> symfony/framework-bundle ###
18
+ APP_ENV=prod
19
+ APP_MODE=prod
20
+ APP_SECRET=004d1ffe63ec5a21138b820b78e4ffe5
21
+ ###< symfony/framework-bundle ###
22
+
23
+ ###> doctrine/doctrine-bundle ###
24
+ DATABASE_URL=mysql://root:QPrU5XuTdUUCMf6j4LvK@mysql_{{name}}_back/tusur
25
+ DATABASE_USER=root
26
+ DATABASE_PASSWORD=QPrU5XuTdUUCMf6j4LvK
27
+ DATABASE_NAME=tusur
28
+ DATABASE_HOST=mysql_{{name}}_back
29
+ ###< doctrine/doctrine-bundle ###
30
+
31
+ ###> nelmio/cors-bundle ###
32
+ CORS_ALLOW_ORIGIN=^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$
33
+ ###< nelmio/cors-bundle ###
34
+
35
+ ###> symfony/mercure-bundle ###
36
+ # See https://symfony.com/doc/current/mercure.html#configuration
37
+ # The URL of the Mercure hub, used by the app to publish updates (can be a local URL)
38
+ MERCURE_URL=http://mercure_smurno_back/.well-known/mercure
39
+ # The public URL of the Mercure hub, used by the browser to connect
40
+ MERCURE_PUBLIC_URL=http://mercure_smurno_back/.well-known/mercure
41
+ # The secret used to sign the JWTs
42
+ MERCURE_JWT_SECRET=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXJjdXJlIjp7InN1YnNjcmliZSI6W10sInB1Ymxpc2giOlsiKiJdfX0.iet30AwoLji0CfuBtCf1gaFZT5L-qOi6ZyW-om4l3zY
43
+ ###< symfony/mercure-bundle ###
44
+
45
+ ###> symfony/messenger ###
46
+ MESSENGER_TRANSPORT_DSN=amqp://admin:13121994@back.yourtar.ru:5672/%2f
47
+ ###< symfony/messenger ###
48
+ YANDEX_DISK_OAUTH=y
49
+
50
+ MAILER_DSN=gmail://forytmailing:sherthdhczseiouh@localhost?encryption=tls&auth_mode=oauth
51
+
52
+ FRONT_URL=https://tusur.yourtar.ru
53
+
54
+ FIREBASE_TOKEN=AAAA5G-Egts:APA91bGBXcxsx7AOTheBbNvIQvb6thOr7M0tAlAFf22B_p_PHnUECm2KZ3f6NSwdDAQqRPneNn6S5ZVQrMIOgUdvj2bHLNQF-OzhnLR9uu7DSWayH84WWRjkqbUzeVyzleOdZNRS57fq
@@ -0,0 +1,55 @@
1
+ # In all environments, the following files are loaded if they exist,
2
+ # the latter taking precedence over the former:
3
+ #
4
+ # * .env contains default values for the environment variables needed by the app
5
+ # * .env.local uncommitted file with local overrides
6
+ # * .env.$APP_ENV committed environment-specific defaults
7
+ # * .env.$APP_ENV.local uncommitted environment-specific overrides
8
+ #
9
+ # Real environment variables win over .env files.
10
+ #
11
+ # DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES.
12
+ # https://symfony.com/doc/current/configuration/secrets.html
13
+ #
14
+ # Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2).
15
+ # https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration
16
+
17
+ ###> symfony/framework-bundle ###
18
+ APP_ENV=prod
19
+ APP_MODE=stage
20
+ APP_SECRET=004d1ffe63ec5a21138b820b78e4ffe5
21
+ ###< symfony/framework-bundle ###
22
+
23
+ ###> doctrine/doctrine-bundle ###
24
+ DATABASE_URL=mysql://root:password@mysql_{{name}}_back/test
25
+ DATABASE_USER=user
26
+ DATABASE_PASSWORD=password
27
+ DATABASE_NAME=test
28
+ DATABASE_HOST=mysql_{{name}}_back
29
+ ###< doctrine/doctrine-bundle ###
30
+
31
+ ###> nelmio/cors-bundle ###
32
+ CORS_ALLOW_ORIGIN=^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$
33
+ ###< nelmio/cors-bundle ###
34
+
35
+ ###> symfony/mercure-bundle ###
36
+ # See https://symfony.com/doc/current/mercure.html#configuration
37
+ # The URL of the Mercure hub, used by the app to publish updates (can be a local URL)
38
+ MERCURE_URL=http://mercure_smurno_back/.well-known/mercure
39
+ # The public URL of the Mercure hub, used by the browser to connect
40
+ MERCURE_PUBLIC_URL=http://mercure_smurno_back/.well-known/mercure
41
+ # The secret used to sign the JWTs
42
+ MERCURE_JWT_SECRET=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXJjdXJlIjp7InN1YnNjcmliZSI6W10sInB1Ymxpc2giOlsiKiJdfX0.iet30AwoLji0CfuBtCf1gaFZT5L-qOi6ZyW-om4l3zY
43
+ ###< symfony/mercure-bundle ###
44
+
45
+ MAILER_DSN=gmail://forytmailing:sherthdhczseiouh@localhost?encryption=tls&auth_mode=oauth
46
+
47
+ ###> symfony/messenger ###
48
+ MESSENGER_TRANSPORT_DSN=amqp://admin:13121994@back.yourtar.ru:5672/%2f
49
+ ###< symfony/messenger ###
50
+ YANDEX_DISK_OAUTH=y
51
+
52
+ FRONT_URL=https://бакен.демо-стенд.рф
53
+
54
+ FIREBASE_TOKEN=AAAA5G-Egts:APA91bGBXcxsx7AOTheBbNvIQvb6thOr7M0tAlAFf22B_p_PHnUECm2KZ3f6NSwdDAQqRPneNn6S5ZVQrMIOgUdvj2bHLNQF-OzhnLR9uu7DSWayH84WWRjkqbUzeVyzleOdZNRS57fq
55
+
@@ -0,0 +1,29 @@
1
+ ENV ?= dev
2
+ include .env.${ENV}-example
3
+ -include .env
4
+
5
+ up:
6
+ ifeq (,$(wildcard ./.env))
7
+ cp .env.${ENV}-example .env
8
+ endif
9
+ ifeq (,$(wildcard .//docker/.env))
10
+ cp .env.${ENV}-example ./docker/.env
11
+ endif
12
+ cd docker && docker-compose --env-file ../.env -f docker-compose.${APP_MODE}.yml up -d --build
13
+ ifeq ("dev", "$(APP_ENV)")
14
+ cd docker && docker-compose -f docker-compose.${APP_MODE}.yml exec php_{{name}}_back composer install
15
+ else
16
+ cd docker && docker-compose -f docker-compose.${APP_MODE}.yml exec php_{{name}}_back composer install --no-dev
17
+ cd docker && docker-compose -f docker-compose.${APP_MODE}.yml exec php_{{name}}_back composer dump-autoload --no-dev --classmap-authoritative
18
+ endif
19
+ cd docker && docker-compose -f docker-compose.${APP_MODE}.yml exec php_{{name}}_back bin/console doctrine:database:create --if-not-exists
20
+ cd docker && docker-compose -f docker-compose.${APP_MODE}.yml exec php_{{name}}_back bin/console doctrine:migrations:migrate --no-interaction
21
+
22
+ down:
23
+ cd docker && docker-compose -f docker-compose.${APP_MODE}.yml down
24
+
25
+ shell:
26
+ cd docker && docker-compose -f docker-compose.${APP_MODE}.yml run php_{{name}}_back bash
27
+
28
+ database:
29
+ cd docker && docker-compose -f docker-compose.${APP_MODE}.yml exec mysql_{{name}}_back mysql -uroot -p$(DATABASE_PASSWORD)
@@ -0,0 +1,32 @@
1
+ # {{name}} - серверная часть проекта
2
+
3
+ Данное ПО предназначено для ...
4
+ Запускается данный продукт с помощью Makefile на операционных системах MacOS и Linux. В проекте активно используется Docker и Docker Compose. Прочие технологии запускаются за счет них.
5
+ В качестве прочих технологий используются фреймворк Symfony на основе PHP, база данных на основе MySQL.
6
+
7
+ Для запуска проекта в режиме разработки необходимо использовать следующую команду:
8
+ ```
9
+ make up
10
+ ```
11
+ Для запуска проекта в режиме тестового сервера или продакшн необходимо добавить переменную ENV со значениями stage и prod соответственно (только для первого запуска):
12
+ ```
13
+ # test mode on server
14
+ make up ENV=stage
15
+ # production mode on server
16
+ make up ENV=prod
17
+ ```
18
+
19
+ Чтобы остановить работу проекта, используйте команду:
20
+ ```
21
+ make down
22
+ ```
23
+
24
+ Чтобы устанавливать новые зависимости и производить прочие операции с проектом, используйте команду для входа в контейнер с кодом:
25
+ ```
26
+ make shell
27
+ ```
28
+
29
+ Чтобы посмотреть хранящиеся данные и сделать пару запросов, необходимо войти в базу данных, используя команду:
30
+ ```
31
+ make database
32
+ ```
@@ -0,0 +1,24 @@
1
+ nelmio_cors:
2
+ defaults:
3
+ allow_credentials: false
4
+ allow_origin: []
5
+ allow_headers: []
6
+ allow_methods: []
7
+ expose_headers: []
8
+ max_age: 0
9
+ hosts: []
10
+ origin_regex: false
11
+ forced_allow_origin_value: ~
12
+ paths:
13
+ '^/api/':
14
+ allow_origin: ['*']
15
+ allow_headers: ['YT-AUTH-TOKEN', "Content-type"]
16
+ allow_methods: ['POST', 'OPTION', 'PUT', 'PATCH', 'GET', 'DELETE']
17
+ max_age: 3600
18
+ '^/':
19
+ origin_regex: true
20
+ allow_origin: ['^http://localhost:[0-9]+']
21
+ allow_headers: ['YT-AUTH-TOKEN', "Content-type"]
22
+ allow_methods: ['POST', 'OPTION', 'PUT', 'PATCH', 'GET', 'DELETE']
23
+ max_age: 3600
24
+ hosts: ['^api\.']
@@ -0,0 +1,22 @@
1
+ server {
2
+ server_name ~.*;
3
+
4
+ location / {
5
+ root /var/www/html/public;
6
+
7
+ try_files $uri /index.php$is_args$args;
8
+ }
9
+
10
+ location ~ ^/index\.php(/|$) {
11
+ client_max_body_size 50m;
12
+
13
+ fastcgi_pass php_{{name}}_back:9000;
14
+ fastcgi_buffers 16 16k;
15
+ fastcgi_buffer_size 32k;
16
+ include fastcgi_params;
17
+ fastcgi_param SCRIPT_FILENAME //var/www/html/public/index.php;
18
+ }
19
+
20
+ error_log /dev/stderr debug;
21
+ access_log /dev/stdout;
22
+ }
@@ -0,0 +1,68 @@
1
+ version: '3.7'
2
+
3
+ services:
4
+ php_{{name}}_back:
5
+ container_name: php_{{name}}_back
6
+ platform: linux/arm64
7
+ build: dockerfile/php
8
+ restart: on-failure
9
+ expose:
10
+ - "9000"
11
+ volumes:
12
+ - ../:/var/www/html/
13
+ - ../vendor:/var/www/html/vendor
14
+ links:
15
+ - mysql_{{name}}_back
16
+
17
+ nginx_{{name}}_back:
18
+ container_name: nginx_{{name}}_back
19
+ platform: linux/arm64
20
+ image: nginx:latest
21
+ restart: on-failure
22
+ ports:
23
+ - "8000:80"
24
+ volumes:
25
+ - ../:/var/www/html/
26
+ - ./logs/nginx:/var/log/nginx
27
+ - ./config/nginx:/etc/nginx/conf.d
28
+ links:
29
+ - php_{{name}}_back
30
+
31
+ mysql_{{name}}_back:
32
+ container_name: mysql_{{name}}_back
33
+ platform: linux/arm64
34
+ image: mysql:latest
35
+ restart: on-failure
36
+ expose:
37
+ - "3306"
38
+ environment:
39
+ MYSQL_ROOT_PASSWORD: ${DATABASE_PASSWORD}
40
+ volumes:
41
+ - ./db:/var/lib/mysql
42
+
43
+ # cron_{{name}}_back:
44
+ # container_name: cron_{{name}}_back
45
+ # platform: linux/arm64
46
+ # build: dockerfile/cron
47
+ # depends_on:
48
+ # - php_{{name}}_back
49
+ # volumes:
50
+ # - ../:/var/www/html/
51
+ # - ../vendor:/var/www/html/vendor
52
+ # - ../var:/var/www/html/var:rw
53
+ # restart: on-failure
54
+ # links:
55
+ # - mysql_{{name}}_back
56
+
57
+ # message_consumer_{{name}}_back:
58
+ # container_name: message_consumer_{{name}}_back
59
+ # platform: linux/arm64
60
+ # build: dockerfile/php
61
+ # depends_on:
62
+ # - php_{{name}}_back
63
+ # volumes:
64
+ # - ../:/var/www/html/
65
+ # - ../vendor:/var/www/html/vendor
66
+ # - ../var:/var/www/html/var:rw
67
+ # restart: unless-stopped
68
+ # command: [ "php", "bin/console", "messenger:consume", "async", "-vv", "--memory-limit=128M", "--limit=30", "--queues=messages_tusur"]
@@ -0,0 +1,86 @@
1
+ version: '3.7'
2
+
3
+ services:
4
+ php_{{name}}_back:
5
+ container_name: php_{{name}}_back
6
+ build: dockerfile/php
7
+ restart: on-failure
8
+ networks:
9
+ - yourtar
10
+ - {{name}}
11
+ expose:
12
+ - "9000"
13
+ volumes:
14
+ - ../:/var/www/html/
15
+ - ../vendor:/var/www/html/vendor
16
+ - ./config/php/php-ini-overrides.ini:/usr/local/etc/php/conf.d/php-ini-overrides.ini
17
+ links:
18
+ - mysql_{{name}}_back
19
+
20
+ nginx_{{name}}_back:
21
+ container_name: nginx_{{name}}_back
22
+ image: nginx:latest
23
+ restart: on-failure
24
+ networks:
25
+ - yourtar
26
+ - {{name}}
27
+ expose:
28
+ - "80"
29
+ volumes:
30
+ - ../:/var/www/html/
31
+ - /var/www/html/var
32
+ - ./logs/nginx:/var/log/nginx
33
+ - ./config/nginx:/etc/nginx/conf.d
34
+ links:
35
+ - php_{{name}}_back
36
+
37
+ mysql_{{name}}_back:
38
+ container_name: mysql_{{name}}_back
39
+ image: mysql:latest
40
+ restart: on-failure
41
+ networks:
42
+ - yourtar
43
+ - {{name}}
44
+ expose:
45
+ - "3306"
46
+ environment:
47
+ MYSQL_ROOT_PASSWORD: ${DATABASE_PASSWORD}
48
+ volumes:
49
+ - ./db:/var/lib/mysql
50
+
51
+ # message_consumer_{{name}}_back:
52
+ # container_name: message_consumer_{{name}}_back
53
+ # build: dockerfile/php
54
+ # depends_on:
55
+ # - php_{{name}}_back
56
+ # volumes:
57
+ # - ../:/var/www/html/
58
+ # - /var/www/html/var
59
+ # - ../vendor:/var/www/html/vendor
60
+ # restart: unless-stopped
61
+ # command: [ "php", "bin/console", "messenger:consume", "async", "-vv", "--memory-limit=128M", "--limit=30", "--queues=messages_tusur"]
62
+ # networks:
63
+ # - yourtar
64
+ # - {{name}}
65
+
66
+ # cron_{{name}}_back:
67
+ # container_name: cron_{{name}}_back
68
+ # build: dockerfile/cron
69
+ # depends_on:
70
+ # - php_{{name}}_back
71
+ # volumes:
72
+ # - ../:/var/www/html/:cached
73
+ # - /var/www/html/var
74
+ # - ../vendor:/var/www/html/vendor
75
+ # networks:
76
+ # - yourtar
77
+ # - {{name}}
78
+ # restart: on-failure
79
+
80
+ networks:
81
+ yourtar:
82
+ external:
83
+ name: yourtar
84
+ {{name}}:
85
+ external:
86
+ name: {{name}}
@@ -0,0 +1,79 @@
1
+ version: '3.7'
2
+
3
+ services:
4
+ php_{{name}}_back:
5
+ container_name: php_{{name}}_back
6
+ build: dockerfile/php
7
+ restart: on-failure
8
+ networks:
9
+ - demo
10
+ expose:
11
+ - "9000"
12
+ volumes:
13
+ - ../:/var/www/html/
14
+ - ../vendor:/var/www/html/vendor
15
+ - ./config/php/php-ini-overrides.ini:/usr/local/etc/php/php.ini
16
+ depends_on:
17
+ - mysql_{{name}}_back
18
+ links:
19
+ - mysql_{{name}}_back
20
+
21
+ nginx_{{name}}_back:
22
+ container_name: nginx_{{name}}_back
23
+ image: nginx:latest
24
+ restart: on-failure
25
+ networks:
26
+ - demo
27
+ expose:
28
+ - "80"
29
+ volumes:
30
+ - ../:/var/www/html/
31
+ - /var/www/html/var
32
+ - ./logs/nginx:/var/log/nginx
33
+ - ./config/nginx:/etc/nginx/conf.d
34
+ links:
35
+ - php_{{name}}_back
36
+
37
+ mysql_{{name}}_back:
38
+ container_name: mysql_{{name}}_back
39
+ image: mysql:5.7
40
+ restart: on-failure
41
+ networks:
42
+ - demo
43
+ expose:
44
+ - "3306"
45
+ environment:
46
+ - MYSQL_ROOT_PASSWORD=${DATABASE_PASSWORD}
47
+ volumes:
48
+ - ./db:/var/lib/mysql
49
+
50
+ # cron_{{name}}_back:
51
+ # container_name: cron_{{name}}_back
52
+ # build: dockerfile/cron
53
+ # depends_on:
54
+ # - php_{{name}}_back
55
+ # volumes:
56
+ # - ../:/var/www/html/:cached
57
+ # - /var/www/html/var
58
+ # - ../vendor:/var/www/html/vendor
59
+ # networks:
60
+ # - demo
61
+ # restart: on-failure
62
+
63
+ # message_consumer_{{name}}_back:
64
+ # container_name: message_consumer_{{name}}_back
65
+ # build: dockerfile/php
66
+ # depends_on:
67
+ # - php_{{name}}_back
68
+ # volumes:
69
+ # - ../:/var/www/html/
70
+ # - ../vendor:/var/www/html/vendor
71
+ # - /var/www/html/var
72
+ # restart: unless-stopped
73
+ # command: [ "php", "bin/console", "messenger:consume", "async", "-vv", "--memory-limit=128M", "--limit=30", "--queues=messages_tusur"]
74
+ # networks:
75
+ # - demo
76
+
77
+ networks:
78
+ demo:
79
+ external: true
@@ -0,0 +1,36 @@
1
+ FROM php:8.2-fpm
2
+
3
+ RUN apt-get update && apt-get install -y \
4
+ zlib1g-dev libicu-dev librabbitmq-dev libzip-dev libonig-dev librabbitmq-dev g++ \
5
+ git \
6
+ mariadb-client \
7
+ vim \
8
+ curl \
9
+ zip \
10
+ cron \
11
+ && docker-php-ext-configure zip \
12
+ && docker-php-ext-install zip \
13
+ && docker-php-ext-install sysvsem \
14
+ && docker-php-ext-install -j$(nproc) mbstring \
15
+ && docker-php-ext-install -j$(nproc) pdo \
16
+ && docker-php-ext-configure intl \
17
+ && docker-php-ext-install -j$(nproc) intl \
18
+ && docker-php-ext-install -j$(nproc) pdo_mysql \
19
+ && docker-php-ext-install -j$(nproc) mysqli \
20
+ && docker-php-ext-configure opcache --enable-opcache \
21
+ && docker-php-ext-install opcache \
22
+ && pecl install amqp \
23
+ && docker-php-ext-enable amqp
24
+
25
+ RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
26
+
27
+ COPY ./entrypoint.sh /usr/sbin/start-cron
28
+ COPY ./scheduler /etc/cron.d/scheduler
29
+
30
+ RUN chmod 0644 /etc/cron.d/scheduler \
31
+ && crontab /etc/cron.d/scheduler
32
+
33
+ RUN chmod 0755 /usr/sbin/start-cron \
34
+ && mkfifo --mode 0666 /var/log/cron.log
35
+
36
+ ENTRYPOINT ["sh", "/usr/sbin/start-cron"]
@@ -0,0 +1,12 @@
1
+ service cron start
2
+
3
+ # trap SIGINT and SIGTERM signals and gracefully exit
4
+ trap "service cron stop; kill \$!; exit" INT TERM
5
+
6
+ # start "daemon"
7
+ while true
8
+ do
9
+ # watch /var/log/cron.log restarting if necessary
10
+ cat /var/log/cron.log & wait $!
11
+ done
12
+ #while true; do sleep 1000; done
@@ -0,0 +1 @@
1
+ * * * * * /usr/local/bin/php /var/www/html/bin/console app:test >> /var/log/cron.log 2>&1
@@ -0,0 +1,27 @@
1
+ FROM php:8.2-fpm
2
+
3
+ RUN apt-get update && apt-get install -y \
4
+ zlib1g-dev libicu-dev libzip-dev libonig-dev librabbitmq-dev g++ \
5
+ git \
6
+ mariadb-client \
7
+ vim \
8
+ curl \
9
+ openssl \
10
+ zip \
11
+ && docker-php-ext-configure zip \
12
+ && docker-php-ext-install zip \
13
+ && docker-php-ext-install sysvsem \
14
+ && docker-php-ext-install -j$(nproc) mbstring \
15
+ && docker-php-ext-install -j$(nproc) pdo \
16
+ && docker-php-ext-configure intl \
17
+ && docker-php-ext-install -j$(nproc) intl \
18
+ && docker-php-ext-install -j$(nproc) pdo pdo_mysql \
19
+ && docker-php-ext-install -j$(nproc) mysqli \
20
+ && docker-php-ext-configure opcache --enable-opcache \
21
+ && docker-php-ext-install opcache \
22
+ && pecl install amqp \
23
+ && docker-php-ext-enable amqp
24
+
25
+ RUN usermod -u 1000 www-data
26
+
27
+ RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
@@ -0,0 +1,30 @@
1
+ FROM php:8.2-fpm
2
+
3
+ RUN apt-get update && apt-get install -y \
4
+ zlib1g-dev libicu-dev libzip-dev libonig-dev librabbitmq-dev g++ \
5
+ git \
6
+ mariadb-client \
7
+ vim \
8
+ curl \
9
+ openssl \
10
+ zip \
11
+ && docker-php-ext-configure zip \
12
+ && docker-php-ext-install zip \
13
+ && docker-php-ext-install sysvsem \
14
+ && docker-php-ext-install -j$(nproc) mbstring \
15
+ && docker-php-ext-install -j$(nproc) pdo \
16
+ && docker-php-ext-configure intl \
17
+ && docker-php-ext-install -j$(nproc) intl \
18
+ && docker-php-ext-install -j$(nproc) pdo pdo_mysql \
19
+ && docker-php-ext-install -j$(nproc) mysqli \
20
+ && docker-php-ext-configure opcache --enable-opcache \
21
+ && docker-php-ext-install opcache \
22
+ && pecl install amqp \
23
+ && docker-php-ext-enable amqp
24
+
25
+ RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
26
+
27
+ WORKDIR /var/www
28
+
29
+ CMD composer create-project symfony/skeleton:"7.0.*" project
30
+
@@ -0,0 +1,13 @@
1
+ ENV ?= dev
2
+ include ./docker/.env.${ENV}
3
+ -include ./.env
4
+
5
+ up:
6
+ cp docker/.env.${ENV} .env
7
+ cd docker && docker-compose -f docker-compose.${APP_MODE}.yml up -d --build
8
+
9
+ down:
10
+ cd docker && docker-compose -f docker-compose.${APP_MODE}.yml down
11
+
12
+ ps:
13
+ cd docker && docker-compose -f docker-compose.${APP_MODE}.yml ps
@@ -0,0 +1,18 @@
1
+ # {{name}} - это клиентское приложение, созданное на основе шаблона YourTar ([yourtar.ru](https://yourtar.ru))
2
+
3
+ Для запуска проекта необходимо использовать следующую команду:
4
+ ```
5
+ make up
6
+ ```
7
+ Для запуска проекта в режиме тестового сервера или продакшн необходимо при первом запуске добавить переменную ENV со значениями stage и prod соответственно:
8
+ ```
9
+ # test mode on server
10
+ make up ENV=stage
11
+ # production mode on server
12
+ make up ENV=prod
13
+ ```
14
+
15
+ Чтобы остановить работу проекта, используйте команду:
16
+ ```
17
+ make down
18
+ ```
@@ -0,0 +1,5 @@
1
+ APP_MODE=dev
2
+ ENV=dev
3
+
4
+ REACT_APP_SERVER_URL='https://back.yourtar.ru'
5
+ REACT_APP_FRONT_URL='http://localhost:3000/'
@@ -0,0 +1,5 @@
1
+ APP_MODE=prod
2
+ ENV=prod
3
+
4
+ REACT_APP_SERVER_URL='https://back.domain.ru'
5
+ REACT_APP_FRONT_URL='https://domain.ru/'
@@ -0,0 +1,5 @@
1
+ APP_MODE=stage
2
+ ENV=stage
3
+
4
+ REACT_APP_SERVER_URL='https://back.yourtar.ru'
5
+ REACT_APP_FRONT_URL='https://проект.демо-стенд.рф/'
@@ -0,0 +1,33 @@
1
+ server {
2
+ server_name ~.*;
3
+
4
+ root /var/www/app/build;
5
+ index index.html;
6
+
7
+ location ~* ^.+\.(?:css|cur|js|jpe?g|gif|htc|ico|png|html|xml|otf|ttf|eot|woff|woff2|svg)$ {
8
+ access_log off;
9
+ expires 30d;
10
+ add_header Cache-Control public;
11
+
12
+ ## No need to bleed constant updates. Send the all shebang in one
13
+ ## fell swoop.
14
+ tcp_nodelay off;
15
+
16
+ ## Set the OS file cache.
17
+ open_file_cache max=3000 inactive=120s;
18
+ open_file_cache_valid 45s;
19
+ open_file_cache_min_uses 2;
20
+ open_file_cache_errors off;
21
+ }
22
+
23
+ location ~ /.well-known {
24
+ default_type text/html;
25
+ }
26
+
27
+ location / {
28
+ try_files $uri $uri/ /index.html;
29
+ }
30
+
31
+ error_log /dev/stderr debug;
32
+ access_log /dev/stdout;
33
+ }
@@ -0,0 +1,18 @@
1
+ version: '3.7'
2
+
3
+ services:
4
+ web:
5
+ platform: linux/x86_64
6
+ container_name: web
7
+ build:
8
+ dockerfile: ./docker/dockerfile/node/Dockerfile
9
+ context: ../
10
+ restart: on-failure
11
+ env_file:
12
+ - ../.env
13
+ ports:
14
+ - "3000:3000"
15
+ volumes:
16
+ - ../:/var/www/app/
17
+ - /var/www/app/node_modules
18
+ - ../package.json:/var/www/app/package.json
@@ -0,0 +1,40 @@
1
+ version: '3.7'
2
+
3
+ services:
4
+ node_{{name}}_front:
5
+ container_name: node_{{name}}_front
6
+ build:
7
+ dockerfile: ./docker/dockerfile/node/Dockerfile.prod
8
+ context: ../
9
+ restart: on-failure
10
+ env_file:
11
+ - ../.env
12
+ networks:
13
+ - yourtar
14
+ - {{name}}
15
+ volumes:
16
+ - ../:/var/www/app/
17
+ - /var/www/app/node_modules
18
+
19
+ nginx_{{name}}_front:
20
+ container_name: nginx_{{name}}_front
21
+ image: nginx:latest
22
+ restart: on-failure
23
+ networks:
24
+ - yourtar
25
+ - {{name}}
26
+ expose:
27
+ - "80"
28
+ volumes:
29
+ - ../:/var/www/app/
30
+ - /var/www/app/node_modules
31
+ - ./logs/nginx:/var/log/nginx
32
+ - ./config/nginx:/etc/nginx/conf.d
33
+
34
+ networks:
35
+ yourtar:
36
+ external:
37
+ name: yourtar
38
+ {{name}}:
39
+ external:
40
+ name: {{name}}
@@ -0,0 +1,34 @@
1
+ version: '3.7'
2
+
3
+ services:
4
+ node_{{name}}_front:
5
+ container_name: node_{{name}}_front
6
+ build:
7
+ dockerfile: ./docker/dockerfile/node/Dockerfile.prod
8
+ context: ../
9
+ restart: on-failure
10
+ env_file:
11
+ - ../.env
12
+ networks:
13
+ - demo
14
+ volumes:
15
+ - ../:/var/www/app/
16
+ - /var/www/app/node_modules
17
+
18
+ nginx_{{name}}_front:
19
+ container_name: nginx_{{name}}_front
20
+ image: nginx:latest
21
+ restart: on-failure
22
+ networks:
23
+ - demo
24
+ expose:
25
+ - "80"
26
+ volumes:
27
+ - ../:/var/www/app/
28
+ - /var/www/app/node_modules
29
+ - ./logs/nginx:/var/log/nginx
30
+ - ./config/nginx:/etc/nginx/conf.d
31
+
32
+ networks:
33
+ demo:
34
+ external: true
@@ -0,0 +1,12 @@
1
+ FROM node:20-alpine
2
+ RUN apk add g++ make py3-pip
3
+
4
+ WORKDIR /var/www/app
5
+
6
+ COPY package*.json ./
7
+ RUN npm install
8
+
9
+ COPY . .
10
+ EXPOSE 3000
11
+
12
+ CMD ["npm", "start"]
@@ -0,0 +1,15 @@
1
+ FROM node:20-alpine
2
+ RUN apk add g++ make py3-pip
3
+
4
+ WORKDIR /var/www/app
5
+
6
+ COPY package*.json ./
7
+
8
+ RUN npm install
9
+ RUN npm ci --only=production
10
+ RUN mkdir /var/www/app/node_modules/.cache && chmod -R 777 /var/www/app/node_modules/.cache
11
+ COPY . .
12
+
13
+ EXPOSE 3000
14
+
15
+ CMD ["npm", "run", "build"]
package/bin/index.js ADDED
@@ -0,0 +1,83 @@
1
+ #! /usr/bin/env node
2
+
3
+ const pjson = require('../package.json');
4
+ const {Command} = require('commander');
5
+ const programm = new Command();
6
+ const inquirer = require('inquirer');
7
+ const util = require('util');
8
+ const exec = util.promisify(require('child_process').exec);
9
+ const { dirname } = require('path');
10
+ const fs = require('fs');
11
+ const {copyTemplate} = require("./scripts/fileManager");
12
+
13
+ programm
14
+ .version(pjson.version)
15
+ .description(pjson.description);
16
+
17
+ programm.command('create')
18
+ .alias('c')
19
+ .action(() => {
20
+ inquirer.prompt([
21
+ {
22
+ name: 'name',
23
+ type: 'input',
24
+ message: 'Project name:'
25
+ },
26
+ {
27
+ type: 'list',
28
+ name: 'platform',
29
+ message: 'Which platform?',
30
+ choices: [
31
+ {name: 'Web (ReactJS)', value: 'web',},
32
+ {name: 'Back (Symfony)', value: 'back',},
33
+ ],
34
+ },
35
+ ]).then(async answers => {
36
+ console.log('Creating ...');
37
+ console.log('');
38
+
39
+ let projectFolder = answers.name, templateFolder = null;
40
+
41
+ switch(answers.platform) {
42
+ case 'web':
43
+ projectFolder += '-front';
44
+ templateFolder = dirname(require.main.filename) + '/frontTemplate';
45
+ await exec('npx create-react-app ' + projectFolder);
46
+ break;
47
+ case 'back':
48
+ projectFolder += '-back';
49
+ templateFolder = dirname(require.main.filename) + '/backTemplate';
50
+ await exec('docker build -f ' + dirname(require.main.filename) + '/dockerfile/Dockerfile -t symfony-builder .');
51
+ await exec('docker run --volume ./' + projectFolder + ':/var/www/project symfony-builder');
52
+ break;
53
+ default:
54
+ console.error("ERROR!!! We don't know about this type: " + answers.platform);
55
+ }
56
+
57
+ await copyTemplate(templateFolder, './' + projectFolder, answers.name);
58
+
59
+ switch(answers.platform) {
60
+ case 'web':
61
+ break;
62
+ case 'back':
63
+ //install packages
64
+ await fs.copyFileSync('./' + projectFolder + '/.env.dev-example', './' + projectFolder + '/.env-main');
65
+ await fs.renameSync('./' + projectFolder + '/.env-main', './' + projectFolder + '/.env');
66
+ await fs.copyFileSync('./' + projectFolder + '/.env', './' + projectFolder + '/docker/.env');
67
+ await exec('docker-compose -f ./' + projectFolder + '/docker/docker-compose.dev.yml up -d --build');
68
+ await exec('cd ' + projectFolder + '/docker && docker-compose -f docker-compose.dev.yml exec php_' + answers.name + '_back composer require serializer security cors orm');
69
+ await exec('cd ' + projectFolder + '/docker && docker-compose -f docker-compose.dev.yml exec php_' + answers.name + '_back composer require --dev symfony/maker-bundle');
70
+ await exec('docker-compose -f ./' + projectFolder + '/docker/docker-compose.dev.yml down');
71
+ break;
72
+ default:
73
+ console.error("ERROR!!! We don't know about this type: " + answers.platform);
74
+ }
75
+
76
+ console.log('');
77
+ console.log('SUCCESS!');
78
+ });
79
+ });
80
+
81
+
82
+
83
+ programm.parse();
@@ -0,0 +1,31 @@
1
+ const fs = require('fs');
2
+
3
+ const copyTemplate = async (templateFolder, projectFolder, name, depth = 0) => {
4
+ let prefix = '';
5
+ if (depth > 0) for(let i = 0; i < depth; i++) {
6
+ prefix += '-';
7
+ }
8
+ prefix += '>';
9
+
10
+ await fs.readdirSync(templateFolder).forEach(item => {
11
+ if (fs.lstatSync(templateFolder + '/' + item).isDirectory()) {
12
+ console.log(prefix, item);
13
+ if (!fs.existsSync(projectFolder + '/' + item)) fs.mkdirSync(projectFolder + '/' + item, (err) => {
14
+ if (err) console.log(err);
15
+ });
16
+ copyTemplate(templateFolder + '/' + item, projectFolder + '/' + item, name, depth + 1);
17
+ }
18
+ else if (fs.lstatSync(templateFolder + '/' + item).isFile()) {
19
+ console.log(prefix, item);
20
+ if (!fs.existsSync(projectFolder + '/' + item)) fs.copyFileSync(templateFolder + '/' + item, projectFolder + '/' + item);
21
+ else fs.renameSync(templateFolder + '/' + item, projectFolder + '/' + item);
22
+
23
+ let content = fs.readFileSync(projectFolder + '/' + item, {encoding: 'utf8'});
24
+ content = content.replace(/{{name}}/g, name);
25
+ fs.writeFileSync(projectFolder + '/' + item, content, {encoding: 'utf8'});
26
+ }
27
+ else console.log(prefix + ' ' + file + ' - unknown type');
28
+ });
29
+ }
30
+
31
+ module.exports.copyTemplate = copyTemplate;
package/package.json ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "yourtar-cli",
3
+ "version": "1.0.0",
4
+ "description": "This CLI for YourTar developers and our clients ;-)",
5
+ "main": "bin/index.js",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1"
8
+ },
9
+ "bin": {
10
+ "yt": "./bin/index.js"
11
+ },
12
+ "author": "MV Vladimirov",
13
+ "license": "ISC",
14
+ "dependencies": {
15
+ "commander": "^12.0.0",
16
+ "inquirer": "^8.2.6"
17
+ }
18
+ }