init.sh
· 1.6 KiB · Bash
Неформатований
#!/bin/bash
# shell скрипт за изпълнение на командите и създаване на файлове
# Създаване на директории
mkdir -p {wp1,wp2,wp3,wp4,php-inis,envs,mysql-init}
# Генериране на init.sql
cat > mysql-init/init.sql <<'SQL'
CREATE DATABASE IF NOT EXISTS wordpress1;
CREATE DATABASE IF NOT EXISTS wordpress2;
CREATE DATABASE IF NOT EXISTS wordpress3;
CREATE DATABASE IF NOT EXISTS wordpress4;
CREATE USER IF NOT EXISTS 'wpuser'@'%' IDENTIFIED BY 'wppassword';
GRANT ALL PRIVILEGES ON wordpress1.* TO 'wpuser'@'%';
GRANT ALL PRIVILEGES ON wordpress2.* TO 'wpuser'@'%';
GRANT ALL PRIVILEGES ON wordpress3.* TO 'wpuser'@'%';
GRANT ALL PRIVILEGES ON wordpress4.* TO 'wpuser'@'%';
FLUSH PRIVILEGES;
SQL
# Генериране на docker-compose.yml
cat > docker-compose.yml <<'YAML'
version: '3.8'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
- ./mysql-init:/docker-entrypoint-initdb.d
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppassword
networks:
wp_network:
wordpress1:
image: wordpress:php8.1-apache
ports: ["8090:80"]
volumes:
- ./wp1:/var/www/html
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppassword
WORDPRESS_DB_NAME: wordpress1
networks:
wp_network:
depends_on:
- db
networks:
wp_network:
volumes:
db_data:
YAML
echo "Конфигурацията е готова! Стартирайте с: docker-compose up -d"
| 1 | #!/bin/bash |
| 2 | |
| 3 | # shell скрипт за изпълнение на командите и създаване на файлове |
| 4 | |
| 5 | # Създаване на директории |
| 6 | mkdir -p {wp1,wp2,wp3,wp4,php-inis,envs,mysql-init} |
| 7 | |
| 8 | # Генериране на init.sql |
| 9 | cat > mysql-init/init.sql <<'SQL' |
| 10 | CREATE DATABASE IF NOT EXISTS wordpress1; |
| 11 | CREATE DATABASE IF NOT EXISTS wordpress2; |
| 12 | CREATE DATABASE IF NOT EXISTS wordpress3; |
| 13 | CREATE DATABASE IF NOT EXISTS wordpress4; |
| 14 | |
| 15 | CREATE USER IF NOT EXISTS 'wpuser'@'%' IDENTIFIED BY 'wppassword'; |
| 16 | GRANT ALL PRIVILEGES ON wordpress1.* TO 'wpuser'@'%'; |
| 17 | GRANT ALL PRIVILEGES ON wordpress2.* TO 'wpuser'@'%'; |
| 18 | GRANT ALL PRIVILEGES ON wordpress3.* TO 'wpuser'@'%'; |
| 19 | GRANT ALL PRIVILEGES ON wordpress4.* TO 'wpuser'@'%'; |
| 20 | FLUSH PRIVILEGES; |
| 21 | SQL |
| 22 | |
| 23 | # Генериране на docker-compose.yml |
| 24 | cat > docker-compose.yml <<'YAML' |
| 25 | version: '3.8' |
| 26 | |
| 27 | services: |
| 28 | db: |
| 29 | image: mysql:5.7 |
| 30 | volumes: |
| 31 | - db_data:/var/lib/mysql |
| 32 | - ./mysql-init:/docker-entrypoint-initdb.d |
| 33 | environment: |
| 34 | MYSQL_ROOT_PASSWORD: rootpassword |
| 35 | MYSQL_USER: wpuser |
| 36 | MYSQL_PASSWORD: wppassword |
| 37 | networks: |
| 38 | wp_network: |
| 39 | |
| 40 | wordpress1: |
| 41 | image: wordpress:php8.1-apache |
| 42 | ports: ["8090:80"] |
| 43 | volumes: |
| 44 | - ./wp1:/var/www/html |
| 45 | environment: |
| 46 | WORDPRESS_DB_HOST: db |
| 47 | WORDPRESS_DB_USER: wpuser |
| 48 | WORDPRESS_DB_PASSWORD: wppassword |
| 49 | WORDPRESS_DB_NAME: wordpress1 |
| 50 | networks: |
| 51 | wp_network: |
| 52 | depends_on: |
| 53 | - db |
| 54 | |
| 55 | networks: |
| 56 | wp_network: |
| 57 | |
| 58 | volumes: |
| 59 | db_data: |
| 60 | YAML |
| 61 | |
| 62 | echo "Конфигурацията е готова! Стартирайте с: docker-compose up -d" |
setup-4wp.sh
· 4.4 KiB · Bash
Неформатований
#!/bin/bash
# Създаване на директории
mkdir -p {wp1,wp2,wp3,wp4,php-inis,envs,mysql-init}
# SQL за инициализация на базите
cat > mysql-init/init.sql <<EOF
CREATE DATABASE IF NOT EXISTS wordpress1;
CREATE DATABASE IF NOT EXISTS wordpress2;
CREATE DATABASE IF NOT EXISTS wordpress3;
CREATE DATABASE IF NOT EXISTS wordpress4;
CREATE USER IF NOT EXISTS 'wpuser'@'%' IDENTIFIED BY 'wppassword';
GRANT ALL PRIVILEGES ON wordpress1.* TO 'wpuser'@'%';
GRANT ALL PRIVILEGES ON wordpress2.* TO 'wpuser'@'%';
GRANT ALL PRIVILEGES ON wordpress3.* TO 'wpuser'@'%';
GRANT ALL PRIVILEGES ON wordpress4.* TO 'wpuser'@'%';
FLUSH PRIVILEGES;
EOF
# php.ini файлове с актуални настройки
for i in {1..4}; do
cat > "php-inis/php${i}.ini" <<EOF
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
EOF
done
# Правилна конфигурация за WordPress (wp-config.php)
for i in {1..4}; do
cat > "envs/wp${i}.env" <<EOF
# Environment variables for WordPress ${i}
DB_NAME=wordpress${i}
DB_USER=wpuser
DB_PASSWORD=wppassword
DB_HOST=db
WP_DEBUG=false
WP_ENVIRONMENT_TYPE=production
EOF
# Генериране на wp-config.php с поддръжка на .env
cat > "wp${i}/wp-config.php" <<'WPCONFIG'
<?php
// Load .env file if exists
if (file_exists(__DIR__.'/.env')) {
$env = parse_ini_file(__DIR__.'/.env');
foreach ($env as $key => $value) {
putenv("$key=$value");
}
}
// Database settings
define('DB_NAME', getenv('DB_NAME'));
define('DB_USER', getenv('DB_USER'));
define('DB_PASSWORD', getenv('DB_PASSWORD'));
define('DB_HOST', getenv('DB_HOST'));
// Security keys
define('AUTH_KEY', ',V~U;_JxY)0?e}@)/r+!i)L-2x][&9GD!)0-e6f+=^R9wIAO%1HGA`Sf@fbC{{d-');
define('SECURE_AUTH_KEY', 'zoNHd%qu+H2FkWeRQXvZ[M<Ipsd2qHG/KnTy]S]MumWjxN_^M_r{p:mqYG+ZJL9>');
define('LOGGED_IN_KEY', 'yx+HS[<(j+|Hg{(e3j~}GB>8m2%qu:W;V*+@&w|-;-~FA7+#T4rLfoC.:#}OJ+:o');
define('NONCE_KEY', ':J$p)Q4@+-,t5WTyP|Wxx|:J-5ZJXx84{$!JxgM|4U]fTkvia-9:LHTaGRRa/VX;');
define('AUTH_SALT', '}M>0+l?TUo#r[AUV^! *#@n8]tP1+UiB4uTf bNJ/ife~jP%-ixn; UY<FmRp%O:');
define('SECURE_AUTH_SALT', 'b-j!{nf96#AL.[^2K<F~A49/h^r.M&^|&?U/^G6_sBMk4n5^::/Ed,jo4fn mdPU');
define('LOGGED_IN_SALT', '~h;zO| hO.GL$DJ<ZkAK?rm{+Y:-A@LY|_,hmI6)yHBl(q|WW:+cwL+Sn:|+{$sl');
define('NONCE_SALT', '|YkAjobA~YA6h$6;gspFz<)]-J!@ODo9^Y+2|4Q|.b,5.nGr;ghc#X>P+R=2cS:%');
// WordPress settings
define('WP_DEBUG', filter_var(getenv('WP_DEBUG'), FILTER_VALIDATE_BOOLEAN));
define('WP_ENVIRONMENT_TYPE', getenv('WP_ENVIRONMENT_TYPE') ?: 'production');
\$table_prefix = 'wp_';
// Absolute path to the WordPress directory
if (!defined('ABSPATH')) {
define('ABSPATH', __DIR__ . '/');
}
require_once ABSPATH . 'wp-settings.php';
WPCONFIG
done
# docker-compose.yml с актуален PHP 8.1
cat > docker-compose.yml <<EOF
version: '3.8'
services:
db:
image: mysql:5.7
container_name: wp_mysql
networks:
wp_network:
ipv4_address: 10.110.112.5
volumes:
- db_data:/var/lib/mysql
- ./mysql-init:/docker-entrypoint-initdb.d
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppassword
restart: unless-stopped
$(for i in {1..4}; do
port=$((8090 + i - 1))
ip=$((10 + i - 1))
cat <<WPEOF
wordpress${i}:
image: wordpress:php8.1-apache
container_name: wp_site${i}
networks:
wp_network:
ipv4_address: 10.110.112.${ip}
ports:
- "${port}:80"
volumes:
- ./wp${i}:/var/www/html
- ./php-inis/php${i}.ini:/usr/local/etc/php/conf.d/custom-php.ini
- ./envs/wp${i}.env:/var/www/html/.env
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppassword
WORDPRESS_DB_NAME: wordpress${i}
depends_on:
- db
restart: unless-stopped
WPEOF
done)
networks:
wp_network:
driver: bridge
ipam:
config:
- subnet: 10.110.112.0/24
volumes:
db_data:
EOF
echo "Скриптът завърши успешно!"
echo "Стартирайте с: docker compose up -d"
echo "Сайтовете ще са достъпни на:"
echo "http://<ваш-ip>:8090 до http://<ваш-ip>:8093"
echo "Може да ви е интересно да видите още скриптове на:"
echo "https://urocibg.eu/category/scripts/"
| 1 | #!/bin/bash |
| 2 | |
| 3 | # Създаване на директории |
| 4 | mkdir -p {wp1,wp2,wp3,wp4,php-inis,envs,mysql-init} |
| 5 | |
| 6 | # SQL за инициализация на базите |
| 7 | cat > mysql-init/init.sql <<EOF |
| 8 | CREATE DATABASE IF NOT EXISTS wordpress1; |
| 9 | CREATE DATABASE IF NOT EXISTS wordpress2; |
| 10 | CREATE DATABASE IF NOT EXISTS wordpress3; |
| 11 | CREATE DATABASE IF NOT EXISTS wordpress4; |
| 12 | |
| 13 | CREATE USER IF NOT EXISTS 'wpuser'@'%' IDENTIFIED BY 'wppassword'; |
| 14 | GRANT ALL PRIVILEGES ON wordpress1.* TO 'wpuser'@'%'; |
| 15 | GRANT ALL PRIVILEGES ON wordpress2.* TO 'wpuser'@'%'; |
| 16 | GRANT ALL PRIVILEGES ON wordpress3.* TO 'wpuser'@'%'; |
| 17 | GRANT ALL PRIVILEGES ON wordpress4.* TO 'wpuser'@'%'; |
| 18 | FLUSH PRIVILEGES; |
| 19 | EOF |
| 20 | |
| 21 | # php.ini файлове с актуални настройки |
| 22 | for i in {1..4}; do |
| 23 | cat > "php-inis/php${i}.ini" <<EOF |
| 24 | memory_limit = 256M |
| 25 | upload_max_filesize = 64M |
| 26 | post_max_size = 64M |
| 27 | max_execution_time = 300 |
| 28 | opcache.enable=1 |
| 29 | opcache.memory_consumption=128 |
| 30 | opcache.max_accelerated_files=4000 |
| 31 | EOF |
| 32 | done |
| 33 | |
| 34 | # Правилна конфигурация за WordPress (wp-config.php) |
| 35 | for i in {1..4}; do |
| 36 | cat > "envs/wp${i}.env" <<EOF |
| 37 | # Environment variables for WordPress ${i} |
| 38 | DB_NAME=wordpress${i} |
| 39 | DB_USER=wpuser |
| 40 | DB_PASSWORD=wppassword |
| 41 | DB_HOST=db |
| 42 | |
| 43 | WP_DEBUG=false |
| 44 | WP_ENVIRONMENT_TYPE=production |
| 45 | EOF |
| 46 | |
| 47 | # Генериране на wp-config.php с поддръжка на .env |
| 48 | cat > "wp${i}/wp-config.php" <<'WPCONFIG' |
| 49 | <?php |
| 50 | // Load .env file if exists |
| 51 | if (file_exists(__DIR__.'/.env')) { |
| 52 | $env = parse_ini_file(__DIR__.'/.env'); |
| 53 | foreach ($env as $key => $value) { |
| 54 | putenv("$key=$value"); |
| 55 | } |
| 56 | } |
| 57 | |
| 58 | // Database settings |
| 59 | define('DB_NAME', getenv('DB_NAME')); |
| 60 | define('DB_USER', getenv('DB_USER')); |
| 61 | define('DB_PASSWORD', getenv('DB_PASSWORD')); |
| 62 | define('DB_HOST', getenv('DB_HOST')); |
| 63 | |
| 64 | // Security keys |
| 65 | define('AUTH_KEY', ',V~U;_JxY)0?e}@)/r+!i)L-2x][&9GD!)0-e6f+=^R9wIAO%1HGA`Sf@fbC{{d-'); |
| 66 | define('SECURE_AUTH_KEY', 'zoNHd%qu+H2FkWeRQXvZ[M<Ipsd2qHG/KnTy]S]MumWjxN_^M_r{p:mqYG+ZJL9>'); |
| 67 | define('LOGGED_IN_KEY', 'yx+HS[<(j+|Hg{(e3j~}GB>8m2%qu:W;V*+@&w|-;-~FA7+#T4rLfoC.:#}OJ+:o'); |
| 68 | define('NONCE_KEY', ':J$p)Q4@+-,t5WTyP|Wxx|:J-5ZJXx84{$!JxgM|4U]fTkvia-9:LHTaGRRa/VX;'); |
| 69 | define('AUTH_SALT', '}M>0+l?TUo#r[AUV^! *#@n8]tP1+UiB4uTf bNJ/ife~jP%-ixn; UY<FmRp%O:'); |
| 70 | define('SECURE_AUTH_SALT', 'b-j!{nf96#AL.[^2K<F~A49/h^r.M&^|&?U/^G6_sBMk4n5^::/Ed,jo4fn mdPU'); |
| 71 | define('LOGGED_IN_SALT', '~h;zO| hO.GL$DJ<ZkAK?rm{+Y:-A@LY|_,hmI6)yHBl(q|WW:+cwL+Sn:|+{$sl'); |
| 72 | define('NONCE_SALT', '|YkAjobA~YA6h$6;gspFz<)]-J!@ODo9^Y+2|4Q|.b,5.nGr;ghc#X>P+R=2cS:%'); |
| 73 | |
| 74 | // WordPress settings |
| 75 | define('WP_DEBUG', filter_var(getenv('WP_DEBUG'), FILTER_VALIDATE_BOOLEAN)); |
| 76 | define('WP_ENVIRONMENT_TYPE', getenv('WP_ENVIRONMENT_TYPE') ?: 'production'); |
| 77 | |
| 78 | \$table_prefix = 'wp_'; |
| 79 | |
| 80 | // Absolute path to the WordPress directory |
| 81 | if (!defined('ABSPATH')) { |
| 82 | define('ABSPATH', __DIR__ . '/'); |
| 83 | } |
| 84 | |
| 85 | require_once ABSPATH . 'wp-settings.php'; |
| 86 | WPCONFIG |
| 87 | done |
| 88 | |
| 89 | # docker-compose.yml с актуален PHP 8.1 |
| 90 | cat > docker-compose.yml <<EOF |
| 91 | version: '3.8' |
| 92 | |
| 93 | services: |
| 94 | db: |
| 95 | image: mysql:5.7 |
| 96 | container_name: wp_mysql |
| 97 | networks: |
| 98 | wp_network: |
| 99 | ipv4_address: 10.110.112.5 |
| 100 | volumes: |
| 101 | - db_data:/var/lib/mysql |
| 102 | - ./mysql-init:/docker-entrypoint-initdb.d |
| 103 | environment: |
| 104 | MYSQL_ROOT_PASSWORD: rootpassword |
| 105 | MYSQL_USER: wpuser |
| 106 | MYSQL_PASSWORD: wppassword |
| 107 | restart: unless-stopped |
| 108 | |
| 109 | $(for i in {1..4}; do |
| 110 | port=$((8090 + i - 1)) |
| 111 | ip=$((10 + i - 1)) |
| 112 | cat <<WPEOF |
| 113 | wordpress${i}: |
| 114 | image: wordpress:php8.1-apache |
| 115 | container_name: wp_site${i} |
| 116 | networks: |
| 117 | wp_network: |
| 118 | ipv4_address: 10.110.112.${ip} |
| 119 | ports: |
| 120 | - "${port}:80" |
| 121 | volumes: |
| 122 | - ./wp${i}:/var/www/html |
| 123 | - ./php-inis/php${i}.ini:/usr/local/etc/php/conf.d/custom-php.ini |
| 124 | - ./envs/wp${i}.env:/var/www/html/.env |
| 125 | environment: |
| 126 | WORDPRESS_DB_HOST: db |
| 127 | WORDPRESS_DB_USER: wpuser |
| 128 | WORDPRESS_DB_PASSWORD: wppassword |
| 129 | WORDPRESS_DB_NAME: wordpress${i} |
| 130 | depends_on: |
| 131 | - db |
| 132 | restart: unless-stopped |
| 133 | |
| 134 | WPEOF |
| 135 | done) |
| 136 | |
| 137 | networks: |
| 138 | wp_network: |
| 139 | driver: bridge |
| 140 | ipam: |
| 141 | config: |
| 142 | - subnet: 10.110.112.0/24 |
| 143 | |
| 144 | volumes: |
| 145 | db_data: |
| 146 | EOF |
| 147 | |
| 148 | echo "Скриптът завърши успешно!" |
| 149 | echo "Стартирайте с: docker compose up -d" |
| 150 | echo "Сайтовете ще са достъпни на:" |
| 151 | echo "http://<ваш-ip>:8090 до http://<ваш-ip>:8093" |
| 152 | echo "Може да ви е интересно да видите още скриптове на:" |
| 153 | echo "https://urocibg.eu/category/scripts/" |