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.
- package/bin/backTemplate/.env.dev-example +55 -0
- package/bin/backTemplate/.env.prod-example +54 -0
- package/bin/backTemplate/.env.stage-example +55 -0
- package/bin/backTemplate/Makefile +29 -0
- package/bin/backTemplate/Readme.md +32 -0
- package/bin/backTemplate/config/packages/nelmio_cors.yaml +24 -0
- package/bin/backTemplate/docker/config/nginx/default.conf +22 -0
- package/bin/backTemplate/docker/config/php/php-ini-overrides.ini +0 -0
- package/bin/backTemplate/docker/docker-compose.dev.yml +68 -0
- package/bin/backTemplate/docker/docker-compose.prod.yml +86 -0
- package/bin/backTemplate/docker/docker-compose.stage.yml +79 -0
- package/bin/backTemplate/docker/dockerfile/cron/Dockerfile +36 -0
- package/bin/backTemplate/docker/dockerfile/cron/entrypoint.sh +12 -0
- package/bin/backTemplate/docker/dockerfile/cron/scheduler +1 -0
- package/bin/backTemplate/docker/dockerfile/php/Dockerfile +27 -0
- package/bin/dockerfile/Dockerfile +30 -0
- package/bin/frontTemplate/Makefile +13 -0
- package/bin/frontTemplate/README.md +18 -0
- package/bin/frontTemplate/docker/.env.dev +5 -0
- package/bin/frontTemplate/docker/.env.prod +5 -0
- package/bin/frontTemplate/docker/.env.stage +5 -0
- package/bin/frontTemplate/docker/config/nginx/default.conf +33 -0
- package/bin/frontTemplate/docker/docker-compose.dev.yml +18 -0
- package/bin/frontTemplate/docker/docker-compose.prod.yml +40 -0
- package/bin/frontTemplate/docker/docker-compose.stage.yml +34 -0
- package/bin/frontTemplate/docker/dockerfile/node/Dockerfile +12 -0
- package/bin/frontTemplate/docker/dockerfile/node/Dockerfile.prod +15 -0
- package/bin/index.js +83 -0
- package/bin/scripts/fileManager.js +31 -0
- 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
|
+
}
|
|
File without changes
|
|
@@ -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,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,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
|
+
}
|