7 changed files with 324 additions and 207 deletions
-
233create-stack-project.sh
-
89stack-project/_create-stack-www-project.sh
-
74stack-project/project/_create-configs.sh
-
24stack-project/project/_create-misc-dirs.sh
-
20stack-project/project/_create-ssh-dir.sh
-
41stack-project/stack/_make-safile-service.sh
-
50stack-project/stack/_modify-pma-hosts.sh
@ -1,223 +1,42 @@ |
|||||
#!/bin/bash |
#!/bin/bash |
||||
set -e |
set -e |
||||
|
|
||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" |
||||
|
cd $SCRIPT_DIR |
||||
|
|
||||
|
# Список обязательных программ |
||||
|
required_programs=( |
||||
|
"pwgen" |
||||
|
) |
||||
|
|
||||
|
# Проверка каждой программы |
||||
|
for program in "${required_programs[@]}"; do |
||||
|
if ! command -v "$program" &>/dev/null; then |
||||
|
echo "❌ Ошибка: программа '$program' не установлена!" |
||||
|
exit 1 |
||||
|
fi |
||||
|
done |
||||
|
|
||||
PROJECT=$1 |
PROJECT=$1 |
||||
if [[ -z "${PROJECT}" ]]; then |
if [[ -z "${PROJECT}" ]]; then |
||||
echo 'Usage: ./create-stack-project PROJECT [SEAFILE_DUMPS_LIB_UUID]'; |
echo 'Usage: ./create-stack-project PROJECT [SEAFILE_DUMPS_LIB_UUID]'; |
||||
exit 1; |
exit 1; |
||||
fi |
fi |
||||
|
|
||||
test -f .env || { |
|
||||
echo 'No env'; |
|
||||
exit 1; |
|
||||
|
source .env || { |
||||
|
echo "❌ Ошибка: не удалось загрузить .env (файл не существует или содержит ошибки)" >&2; |
||||
|
exit 1; |
||||
} |
} |
||||
|
export $(grep -v '^#' .env | cut -d= -f1) |
||||
|
|
||||
echo |
echo |
||||
|
|
||||
source .env |
|
||||
|
|
||||
P_UID=1000 |
|
||||
P_GID=1000 |
|
||||
|
|
||||
PROJECT_DIR=/opt/projects/${PROJECT} |
|
||||
CONFIG_DIR=${PROJECT_DIR}/config |
|
||||
HOSTFILES_DIR=${PROJECT_DIR}/hostfiles |
|
||||
LOGS_DIR=${PROJECT_DIR}/logs |
|
||||
MARIADB_DIR=${PROJECT_DIR}/mariadb |
|
||||
PROFILER_DIR=${PROJECT_DIR}/profiler |
|
||||
SSH_DIR=${PROJECT_DIR}/ssh |
|
||||
WWW_DIR=${PROJECT_DIR}/www |
|
||||
|
|
||||
|
|
||||
mkdir /opt/stacks/${PROJECT} |
|
||||
|
|
||||
cat << EOF > /opt/stacks/${PROJECT}/compose.yaml |
|
||||
services: |
|
||||
nginx: |
|
||||
extends: |
|
||||
file: ./../structure/compose.base.yaml |
|
||||
service: nginx |
|
||||
php: |
|
||||
extends: |
|
||||
file: ./../structure/compose.base.yaml |
|
||||
service: php |
|
||||
workspace: |
|
||||
extends: |
|
||||
file: ./../structure/compose.base.yaml |
|
||||
service: workspace |
|
||||
build: |
|
||||
args: |
|
||||
- INSTALL_NODE=false |
|
||||
working_dir: /var/www/\${PROJECT} |
|
||||
volumes: |
|
||||
- ConfigJetBrains:/home/laradock/.config/JetBrains |
|
||||
- BashHistoryLog:/home/laradock/.bash_history |
|
||||
- VSCodeServerInsiders:/home/laradock/.vscode-server-insiders |
|
||||
secrets: |
|
||||
- composer_auth |
|
||||
networks: |
|
||||
apihole_net: |
|
||||
aliases: |
|
||||
- workspace.${PROJECT}.saturn |
|
||||
mariadb: |
|
||||
extends: |
|
||||
file: ./../structure/compose.base.yaml |
|
||||
service: mariadb |
|
||||
redis: |
|
||||
extends: |
|
||||
file: ./../structure/compose.base.yaml |
|
||||
service: redis |
|
||||
secrets: |
|
||||
user_authorized_keys: |
|
||||
file: /opt/projects/\${PROJECT}/ssh/authorized_keys |
|
||||
user_ssh_key: |
|
||||
file: /opt/projects/\${PROJECT}/ssh/id_ed25519 |
|
||||
user_ssh_key_pub: |
|
||||
file: /opt/projects/\${PROJECT}/ssh/id_ed25519.pub |
|
||||
composer_auth: |
|
||||
file: /opt/projects/\${PROJECT}/config/composer/auth.json |
|
||||
networks: |
|
||||
dockge_default: |
|
||||
external: true |
|
||||
pma_default: |
|
||||
external: true |
|
||||
apihole_net: |
|
||||
external: true |
|
||||
volumes: |
|
||||
ConfigJetBrains: |
|
||||
BashHistoryLog: |
|
||||
VSCodeServerInsiders: |
|
||||
EOF |
|
||||
|
|
||||
# Possible PHP_VERSION is 7.4, 8.1, 8.2 & 8.3 |
|
||||
cat << EOF > /opt/stacks/${PROJECT}/.env |
|
||||
PROJECT=${PROJECT} |
|
||||
PHP_VERSION=8.3 |
|
||||
EOF |
|
||||
|
|
||||
SEAFILE_USER="${MACHINE}-${PROJECT}-workspace@dimti.ru" |
|
||||
SEAFILE_PASS=$(pwgen -s 20 1) |
|
||||
SEAFILE_LIB=$2 |
|
||||
|
|
||||
echo "Seafile credentionals for create new account:" |
|
||||
echo "SEAFILE_USER: ${SEAFILE_USER}" |
|
||||
echo "SEAFILE_PASS: ${SEAFILE_PASS}" |
|
||||
|
|
||||
PROJECT_UPPERCASE=$(echo ${PROJECT} | tr '[:lower:]' '[:upper:]') |
|
||||
|
|
||||
cat << EOF >> /opt/stacks/seafile/.env |
|
||||
|
|
||||
${PROJECT_UPPERCASE}_USER=${SEAFILE_USER} |
|
||||
${PROJECT_UPPERCASE}_PASS=${SEAFILE_PASS} |
|
||||
${PROJECT_UPPERCASE}_LIB=${SEAFILE_LIB} |
|
||||
EOF |
|
||||
|
|
||||
sed -e "s/volumes:/volumes:\n\s\sseafile-$PROJECT:/g" /opt/stacks/seafile/compose.yaml |
|
||||
|
|
||||
cat << EOF >> /opt/stacks/seafile/compose.yaml |
|
||||
${PROJECT}: |
|
||||
extends: |
|
||||
file: ./compose.base.yaml |
|
||||
service: seafile |
|
||||
volumes: |
|
||||
- /opt/projects/${PROJECT}/hostfiles:/library |
|
||||
- seafile-${PROJECT}:/seafile |
|
||||
environment: |
|
||||
SEAF_USERNAME: "\${${PROJECT_UPPERCASE}_USER}" |
|
||||
SEAF_PASSWORD: "\${${PROJECT_UPPERCASE}_PASS}" |
|
||||
SEAF_LIBRARY: "\${${PROJECT_UPPERCASE}_LIB}" |
|
||||
EOF |
|
||||
|
|
||||
chown -R $_PUID:$P_GID /opt/stacks/${PROJECT} |
|
||||
|
|
||||
mkdir -p ${CONFIG_DIR}/composer |
|
||||
mkdir -p ${CONFIG_DIR}/mariadb |
|
||||
mkdir -p ${CONFIG_DIR}/nginx/conf.d |
|
||||
mkdir -p ${CONFIG_DIR}/nginx/includes.d |
|
||||
mkdir -p ${CONFIG_DIR}/nginx/ssl.d |
|
||||
mkdir -p ${CONFIG_DIR}/redis |
|
||||
|
|
||||
cat << EOF > ${CONFIG_DIR}/composer/auth.json |
|
||||
{ |
|
||||
"github-oauth": { |
|
||||
"github.com": "" |
|
||||
} |
|
||||
} |
|
||||
EOF |
|
||||
|
|
||||
cat << EOF > ${CONFIG_DIR}/mariadb/90-mysqld.cnf |
|
||||
[mysqld] |
|
||||
general_log=OFF |
|
||||
general_log_file=/var/log/mariadb/mariadb.log |
|
||||
EOF |
|
||||
|
|
||||
cat << EOF > ${CONFIG_DIR}/nginx/conf.d/vhosts.conf |
|
||||
upstream php { |
|
||||
server php:9000; |
|
||||
} |
|
||||
map \$http_host \$root { |
|
||||
${PROJECT}.${DOMAIN_PLACEHOLDER} /var/www/${PROJECT}; |
|
||||
} |
|
||||
server { |
|
||||
listen 80 default; |
|
||||
root \$root; |
|
||||
include includes.d/octobercms.conf; |
|
||||
include includes.d/staticfiles.conf; |
|
||||
client_max_body_size 300M; |
|
||||
large_client_header_buffers 4 32k; |
|
||||
location ~ ^/index.php { |
|
||||
fastcgi_pass php; |
|
||||
include fastcgi_params; |
|
||||
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; |
|
||||
fastcgi_param SERVER_NAME \$host; |
|
||||
} |
|
||||
} |
|
||||
EOF |
|
||||
|
|
||||
cp /opt/stacks/structure/config/nginx/includes.d/octobercms.conf ${CONFIG_DIR}/nginx/includes.d/ |
|
||||
cp /opt/stacks/structure/config/nginx/includes.d/staticfiles.conf ${CONFIG_DIR}/nginx/includes.d/ |
|
||||
|
|
||||
cat << EOF > ${CONFIG_DIR}/redis/redis-local.conf |
|
||||
port 6379 |
|
||||
tcp-backlog 128 |
|
||||
protected-mode no |
|
||||
stop-writes-on-bgsave-error no |
|
||||
databases 4 |
|
||||
always-show-logo no |
|
||||
syslog-enabled yes |
|
||||
pidfile /var/run/redis_6379.pid |
|
||||
loglevel notice |
|
||||
logfile "" |
|
||||
EOF |
|
||||
|
|
||||
chown $P_UID:$P_GID -R ${CONFIG_DIR} |
|
||||
|
|
||||
mkdir ${HOSTFILES_DIR} |
|
||||
chown $P_UID:$P_GID ${HOSTFILES_DIR} |
|
||||
|
|
||||
mkdir -p ${LOGS_DIR}/mariadb |
|
||||
mkdir -p ${LOGS_DIR}/nginx |
|
||||
mkdir -p ${LOGS_DIR}/php-fpm |
|
||||
|
|
||||
mkdir ${MARIADB_DIR} |
|
||||
mkdir ${PROFILER_DIR} |
|
||||
|
|
||||
mkdir ${SSH_DIR} |
|
||||
touch ${SSH_DIR}/authorized_keys |
|
||||
ssh-keygen -N "" -t ed25519 -f ${SSH_DIR}/id_ed25519 -C workspace-${PROJECT}@${MACHINE} 2>&1 > /dev/null |
|
||||
|
|
||||
echo "SSH Key:" |
|
||||
cat ${SSH_DIR}/id_ed25519.pub |
|
||||
echo |
|
||||
|
|
||||
ssh-keyscan -H github.com > ${SSH_DIR}/known_hosts 2>/dev/null |
|
||||
chown $P_UID:$P_GID -R ${SSH_DIR} |
|
||||
|
export PROJECT_DIR=${PROJECTS_DIR}/${PROJECT} |
||||
|
|
||||
mkdir -p ${WWW_DIR}/${PROJECT} |
|
||||
|
. ./stack-project/stack/_make-seafile-service.sh |
||||
|
|
||||
cat << EOF > ${WWW_DIR}/${PROJECT}/index.php |
|
||||
<?php |
|
||||
|
. ./stack-project/project/_create-configs.sh |
||||
|
|
||||
phpinfo(); |
|
||||
EOF |
|
||||
|
. ./stack-project/project/_create-misc-dirs.sh |
||||
|
|
||||
chown -R $P_UID:$P_GID ${WWW_DIR} |
|
||||
|
. ./stack-project/_create-stack-www-project.sh |
@ -0,0 +1,89 @@ |
|||||
|
#!/bin/bash |
||||
|
set -e |
||||
|
|
||||
|
# Проект должен быть указан родительским скриптом |
||||
|
if [ ! -n "$PROJECT" ]; then |
||||
|
echo "❌ Проект не указан!" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
mkdir ${STACKS_DIR}/${PROJECT} |
||||
|
|
||||
|
cat << EOF > ${STACKS_DIR}/${PROJECT}/compose.yaml |
||||
|
services: |
||||
|
nginx: |
||||
|
extends: |
||||
|
file: ./../structure/compose.base.yaml |
||||
|
service: nginx |
||||
|
php: |
||||
|
extends: |
||||
|
file: ./../structure/compose.base.yaml |
||||
|
service: php |
||||
|
workspace: |
||||
|
extends: |
||||
|
file: ./../structure/compose.base.yaml |
||||
|
service: workspace |
||||
|
build: |
||||
|
args: |
||||
|
- INSTALL_NODE=false |
||||
|
working_dir: /var/www/\${PROJECT} |
||||
|
volumes: |
||||
|
- ConfigJetBrains:/home/laradock/.config/JetBrains |
||||
|
- BashHistoryLog:/home/laradock/.bash_history |
||||
|
- VSCodeServerInsiders:/home/laradock/.vscode-server-insiders |
||||
|
secrets: |
||||
|
- composer_auth |
||||
|
networks: |
||||
|
apihole_net: |
||||
|
aliases: |
||||
|
- workspace.${PROJECT}.saturn |
||||
|
mariadb: |
||||
|
extends: |
||||
|
file: ./../structure/compose.base.yaml |
||||
|
service: mariadb |
||||
|
redis: |
||||
|
extends: |
||||
|
file: ./../structure/compose.base.yaml |
||||
|
service: redis |
||||
|
secrets: |
||||
|
user_authorized_keys: |
||||
|
file: /opt/projects/\${PROJECT}/ssh/authorized_keys |
||||
|
user_ssh_key: |
||||
|
file: /opt/projects/\${PROJECT}/ssh/id_ed25519 |
||||
|
user_ssh_key_pub: |
||||
|
file: /opt/projects/\${PROJECT}/ssh/id_ed25519.pub |
||||
|
composer_auth: |
||||
|
file: /opt/projects/\${PROJECT}/config/composer/auth.json |
||||
|
networks: |
||||
|
dockge_default: |
||||
|
external: true |
||||
|
pma_default: |
||||
|
external: true |
||||
|
apihole_net: |
||||
|
external: true |
||||
|
volumes: |
||||
|
ConfigJetBrains: |
||||
|
BashHistoryLog: |
||||
|
VSCodeServerInsiders: |
||||
|
EOF |
||||
|
|
||||
|
# Possible PHP_VERSION is 7.4, 8.1, 8.2 & 8.3 |
||||
|
cat << EOF > ${STACKS_DIR}/${PROJECT}/.env |
||||
|
PROJECT=${PROJECT} |
||||
|
PHP_VERSION=8.3 |
||||
|
EOF |
||||
|
|
||||
|
chown -R $_PUID:$P_GID /opt/stacks/${PROJECT} |
||||
|
|
||||
|
|
||||
|
WWW_DIR=${PROJECT_DIR}/www |
||||
|
|
||||
|
mkdir -p ${WWW_DIR}/${PROJECT} |
||||
|
|
||||
|
cat << EOF > ${WWW_DIR}/${PROJECT}/index.php |
||||
|
<?php |
||||
|
|
||||
|
phpinfo(); |
||||
|
EOF |
||||
|
|
||||
|
chown -R $P_UID:$P_GID ${WWW_DIR} |
@ -0,0 +1,74 @@ |
|||||
|
#!/bin/bash |
||||
|
set -e |
||||
|
|
||||
|
# Проект должен быть указан родительским скриптом |
||||
|
if [ ! -n "$PROJECT" ]; then |
||||
|
echo "❌ Проект не указан!" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
CONFIG_DIR=${PROJECT_DIR}/config |
||||
|
|
||||
|
mkdir ${CONFIG_DIR} |
||||
|
mkdir ${CONFIG_DIR}/composer |
||||
|
mkdir ${CONFIG_DIR}/mariadb |
||||
|
mkdir ${CONFIG_DIR}/nginx |
||||
|
mkdir ${CONFIG_DIR}/nginx/conf.d |
||||
|
mkdir ${CONFIG_DIR}/nginx/includes.d |
||||
|
mkdir ${CONFIG_DIR}/nginx/ssl.d |
||||
|
mkdir ${CONFIG_DIR}/redis |
||||
|
|
||||
|
cat << EOF > ${CONFIG_DIR}/composer/auth.json |
||||
|
{ |
||||
|
"github-oauth": { |
||||
|
"github.com": "" |
||||
|
} |
||||
|
} |
||||
|
EOF |
||||
|
|
||||
|
cat << EOF > ${CONFIG_DIR}/mariadb/90-mysqld.cnf |
||||
|
[mysqld] |
||||
|
general_log=OFF |
||||
|
general_log_file=/var/log/mariadb/mariadb.log |
||||
|
EOF |
||||
|
|
||||
|
cat << EOF > ${CONFIG_DIR}/nginx/conf.d/vhosts.conf |
||||
|
upstream php { |
||||
|
server php:9000; |
||||
|
} |
||||
|
map \$http_host \$root { |
||||
|
${PROJECT}.${DOMAIN_PLACEHOLDER} /var/www/${PROJECT}; |
||||
|
} |
||||
|
server { |
||||
|
listen 80 default; |
||||
|
root \$root; |
||||
|
include includes.d/octobercms.conf; |
||||
|
include includes.d/staticfiles.conf; |
||||
|
client_max_body_size 300M; |
||||
|
large_client_header_buffers 4 32k; |
||||
|
location ~ ^/index.php { |
||||
|
fastcgi_pass php; |
||||
|
include fastcgi_params; |
||||
|
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; |
||||
|
fastcgi_param SERVER_NAME \$host; |
||||
|
} |
||||
|
} |
||||
|
EOF |
||||
|
|
||||
|
cp /opt/stacks/structure/config/nginx/includes.d/octobercms.conf ${CONFIG_DIR}/nginx/includes.d/ |
||||
|
cp /opt/stacks/structure/config/nginx/includes.d/staticfiles.conf ${CONFIG_DIR}/nginx/includes.d/ |
||||
|
|
||||
|
cat << EOF > ${CONFIG_DIR}/redis/redis-local.conf |
||||
|
port 6379 |
||||
|
tcp-backlog 128 |
||||
|
protected-mode no |
||||
|
stop-writes-on-bgsave-error no |
||||
|
databases 4 |
||||
|
always-show-logo no |
||||
|
syslog-enabled yes |
||||
|
pidfile /var/run/redis_6379.pid |
||||
|
loglevel notice |
||||
|
logfile "" |
||||
|
EOF |
||||
|
|
||||
|
chown $P_UID:$P_GID -R ${CONFIG_DIR} |
@ -0,0 +1,24 @@ |
|||||
|
#!/bin/bash |
||||
|
set -e |
||||
|
|
||||
|
# Проект должен быть указан родительским скриптом |
||||
|
if [ ! -n "$PROJECT" ]; then |
||||
|
echo "❌ Проект не указан!" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
HOSTFILES_DIR=${PROJECT_DIR}/hostfiles |
||||
|
mkdir ${HOSTFILES_DIR} |
||||
|
chown $P_UID:$P_GID ${HOSTFILES_DIR} |
||||
|
|
||||
|
LOGS_DIR=${PROJECT_DIR}/logs |
||||
|
mkdir ${LOGS_DIR} |
||||
|
mkdir ${LOGS_DIR}/mariadb |
||||
|
mkdir ${LOGS_DIR}/nginx |
||||
|
mkdir ${LOGS_DIR}/php-fpm |
||||
|
|
||||
|
MARIADB_DIR=${PROJECT_DIR}/mariadb |
||||
|
mkdir ${MARIADB_DIR} |
||||
|
|
||||
|
PROFILER_DIR=${PROJECT_DIR}/profiler |
||||
|
mkdir ${PROFILER_DIR} |
@ -0,0 +1,20 @@ |
|||||
|
#!/bin/bash |
||||
|
set -e |
||||
|
|
||||
|
# Проект должен быть указан родительским скриптом |
||||
|
if [ ! -n "$PROJECT" ]; then |
||||
|
echo "❌ Проект не указан!" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
SSH_DIR=${PROJECT_DIR}/ssh |
||||
|
mkdir ${SSH_DIR} |
||||
|
touch ${SSH_DIR}/authorized_keys |
||||
|
ssh-keygen -N "" -t ed25519 -f ${SSH_DIR}/id_ed25519 -C workspace-${PROJECT}@${MACHINE} 2>&1 > /dev/null |
||||
|
|
||||
|
echo "SSH Key:" |
||||
|
cat ${SSH_DIR}/id_ed25519.pub |
||||
|
echo |
||||
|
|
||||
|
ssh-keyscan -H github.com > ${SSH_DIR}/known_hosts 2>/dev/null |
||||
|
chown $P_UID:$P_GID -R ${SSH_DIR} |
@ -0,0 +1,41 @@ |
|||||
|
#!/bin/bash |
||||
|
set -e |
||||
|
|
||||
|
# Проект должен быть указан родительским скриптом |
||||
|
if [ ! -n "$PROJECT" ]; then |
||||
|
echo "❌ Проект не указан!" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
SEAFILE_USER="${MACHINE}-${PROJECT}-workspace@dimti.ru" |
||||
|
SEAFILE_PASS=$(pwgen -s 20 1) |
||||
|
SEAFILE_LIB=$2 |
||||
|
|
||||
|
echo "Seafile credentionals for create new account:" |
||||
|
echo "SEAFILE_USER: ${SEAFILE_USER}" |
||||
|
echo "SEAFILE_PASS: ${SEAFILE_PASS}" |
||||
|
|
||||
|
PROJECT_UPPERCASE=$(echo ${PROJECT} | tr '[:lower:]' '[:upper:]') |
||||
|
|
||||
|
cat << EOF >> ${STACKS_DIR}/seafile/.env |
||||
|
|
||||
|
${PROJECT_UPPERCASE}_USER=${SEAFILE_USER} |
||||
|
${PROJECT_UPPERCASE}_PASS=${SEAFILE_PASS} |
||||
|
${PROJECT_UPPERCASE}_LIB=${SEAFILE_LIB} |
||||
|
EOF |
||||
|
|
||||
|
sed -e "s/volumes:/volumes:\n\s\sseafile-$PROJECT:/g" /opt/stacks/seafile/compose.yaml |
||||
|
|
||||
|
cat << EOF >> /opt/stacks/seafile/compose.yaml |
||||
|
${PROJECT}: |
||||
|
extends: |
||||
|
file: ./compose.base.yaml |
||||
|
service: seafile |
||||
|
volumes: |
||||
|
- /opt/projects/${PROJECT}/hostfiles:/library |
||||
|
- seafile-${PROJECT}:/seafile |
||||
|
environment: |
||||
|
SEAF_USERNAME: "\${${PROJECT_UPPERCASE}_USER}" |
||||
|
SEAF_PASSWORD: "\${${PROJECT_UPPERCASE}_PASS}" |
||||
|
SEAF_LIBRARY: "\${${PROJECT_UPPERCASE}_LIB}" |
||||
|
EOF |
@ -0,0 +1,50 @@ |
|||||
|
#!/bin/bash |
||||
|
set -e |
||||
|
|
||||
|
# Проект должен быть указан родительским скриптом |
||||
|
if [ ! -n "$PROJECT" ]; then |
||||
|
echo "❌ Проект не указан!" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
PMA_ENV_FILE="${STACKS_DIR}/pma/.env" |
||||
|
|
||||
|
# Проверяем, существует ли файл .env |
||||
|
if [ ! -f "$PMA_ENV_FILE" ]; then |
||||
|
echo "❌ Файл $PMA_ENV_FILE не найден!" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
# Временный файл для изменений |
||||
|
TMP_FILE=$(mktemp) |
||||
|
|
||||
|
# Обрабатываем каждую строку |
||||
|
while IFS= read -r line; do |
||||
|
case "$line" in |
||||
|
HOSTS=*) |
||||
|
current_hosts=${line#HOSTS=} |
||||
|
if [[ ! "$current_hosts" =~ "$PROJECT-mariadb-1" ]]; then |
||||
|
echo "HOSTS=$current_hosts,$PROJECT-mariadb-1" >> "$TMP_FILE" |
||||
|
else |
||||
|
echo "$line" >> "$TMP_FILE" |
||||
|
fi |
||||
|
;; |
||||
|
VERBOSES=*) |
||||
|
current_verboses=${line#VERBOSES=} |
||||
|
if [[ ! "$current_verboses" =~ "$PROJECT" ]]; then |
||||
|
echo "VERBOSES=$current_verboses,$PROJECT" >> "$TMP_FILE" |
||||
|
else |
||||
|
echo "$line" >> "$TMP_FILE" |
||||
|
fi |
||||
|
;; |
||||
|
*) |
||||
|
echo "$line" >> "$TMP_FILE" |
||||
|
;; |
||||
|
esac |
||||
|
done < "$PMA_ENV_FILE" |
||||
|
|
||||
|
# Перемещаем временный файл на место оригинального |
||||
|
mv "$TMP_FILE" "$PMA_ENV_FILE" |
||||
|
|
||||
|
echo "✅ Файл $PMA_ENV_FILE обновлён:" |
||||
|
cat "$PMA_ENV_FILE" |
Write
Preview
Loading…
Cancel
Save
Reference in new issue