Naposledy aktivní 1752999136

Скрипт за автоматично инсталиране на 4 WordPress сайта с Docker Compose.

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