#!/usr/bin/env python3
"""
Автоматическая установка WordPress на Nginx + PHP-FPM + wp-cli
(LEMP-стек) — Ubuntu 22.04 / 24.04 / 25.xx
"""
import subprocess
import getpass
import re
def run(cmd, capture=False):
"""Запуск команды"""
res = subprocess.run(cmd, shell=True, check=True, text=True,
capture_output=capture)
if capture:
return res.stdout.strip()
return res
print("=== Автоустановка WordPress на Nginx + PHP-FPM ===\n")
# ────────────────────────────────────────────────
# Ввод основных параметров
# ────────────────────────────────────────────────
DOMAIN = input("Домен или IP (например: example.com или 192.168.1.55): ").strip()
if not DOMAIN:
DOMAIN = run("hostname -I | awk '{print $1}'", capture=True)
print(f"Автоопределён IP: {DOMAIN}")
ADMIN_USER = input("Логин администратора WP [admin]: ").strip() or "admin"
ADMIN_EMAIL = input("Email администратора: ").strip()
ADMIN_PASS = getpass.getpass("Пароль администратора WP: ")
DB_NAME = "wp_db"
DB_USER = "wp_user"
DB_PASS = getpass.getpass("Пароль для MySQL-пользователя wp_user: ") or "AutoGenPass123!"
INSTALL_DIR = "/var/www/html" # можно изменить, например /var/www/example.com
# ────────────────────────────────────────────────
# 1. Обновление системы
print("\n→ Обновление пакетов...")
run("apt update -y && apt upgrade -y")
# 2. Установка Nginx + MariaDB + PHP-FPM + нужные модули
print("\n→ Установка LEMP-стека...")
run("""
apt install -y nginx \
mariadb-server \
php-fpm php-mysql php-curl php-gd php-mbstring \
php-xml php-xmlrpc php-soap php-intl php-zip \
php-imagick unzip curl wget
""")
# Определяем версию PHP (обычно 8.1, 8.2, 8.3 или 8.4 в 2025–2026)
PHP_VER = run("php -v | head -n1 | grep -oP '\\d+\\.\\d+'", capture=True)
print(f"Обнаружена версия PHP: {PHP_VER}")
# 3. Базовая защита MariaDB + создание базы
print("\n→ Настройка MariaDB...")
# run("mysql_secure_installation --use-default", check=False) # может не сработать в скрипте — лучше вручную один раз
run(f"mysql -e \"CREATE DATABASE {DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\"")
run(f"mysql -e \"CREATE USER '{DB_USER}'@'localhost' IDENTIFIED BY '{DB_PASS}';\"")
run(f"mysql -e \"GRANT ALL PRIVILEGES ON {DB_NAME}.* TO '{DB_USER}'@'localhost';\"")
run("mysql -e \"FLUSH PRIVILEGES;\"")
# 4. Установка wp-cli
print("\n→ Установка wp-cli...")
run("curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar")
run("chmod +x wp-cli.phar")
run("mv wp-cli.phar /usr/local/bin/wp")
run("wp --info") # проверка
# 5. Скачивание и установка WordPress
print("\n→ Установка WordPress...")
run(f"mkdir -p {INSTALL_DIR}")
run(f"chown www-data:www-data {INSTALL_DIR}")
run(f"cd {INSTALL_DIR} && wp core download --locale=ru_RU --force --allow-root")
# 6. Создание конфига
run(f"cd {INSTALL_DIR} && wp config create "
f"--dbname={DB_NAME} "
f"--dbuser={DB_USER} "
f"--dbpass={DB_PASS} "
f"--dbhost=localhost "
f"--locale=ru_RU "
f"--extra-php=\"define('FS_METHOD', 'direct');\" "
f"--allow-root")
# 7. Установка WordPress без почты
print("\n→ Установка сайта...")
run(f"cd {INSTALL_DIR} && wp core install "
f"--url=http://{DOMAIN} "
f"--title='Мой новый сайт' "
f"--admin_user={ADMIN_USER} "
f"--admin_password={ADMIN_PASS} "
f"--admin_email={ADMIN_EMAIL} "
f"--skip-email "
f"--locale=ru_RU "
f"--allow-root")
# 8. Права
run(f"chown -R www-data:www-data {INSTALL_DIR}")
run(f"chmod -R 755 {INSTALL_DIR}")
# 9. Настройка Nginx
print("\n→ Настройка Nginx...")
NGINX_CONF = f"/etc/nginx/sites-available/wordpress"
with open("/etc/nginx/sites-available/default", "r") as f:
default_content = f.read()
# Простая замена на минимальный рабочий конфиг
nginx_config = f"""server {{
listen 80;
server_name {DOMAIN} www.{DOMAIN};
root {INSTALL_DIR};
index index.php index.html index.htm;
location / {{
try_files $uri $uri/ /index.php?$args;
}}
location ~ \\.php$ {{
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php{PHP_VER}-fpm.sock;
}}
location ~* \\.(jpg|jpeg|png|gif|ico|css|js|woff2?|svg|ttf|eot)$ {{
expires 365d;
access_log off;
}}
location ~ /\\.ht {{
deny all;
}}
}}
"""
with open(NGINX_CONF, "w") as f:
f.write(nginx_config)
run(f"ln -sf {NGINX_CONF} /etc/nginx/sites-enabled/")
run("rm -f /etc/nginx/sites-enabled/default") # убираем дефолтный конфиг
run("nginx -t && systemctl reload nginx")
# 10. Перезапуск сервисов
run("systemctl restart php*-fpm nginx mariadb")
print("\n" + "═"*65)
print("Готово!")
print(f"Сайт: http://{DOMAIN}")
print(f"Админка: http://{DOMAIN}/wp-admin/")
print(f"Логин: {ADMIN_USER}")
print(f"Пароль: {ADMIN_PASS}")
print("\nРекомендуется сразу:")
print(" • Установить SSL (certbot --nginx)")
print(" • Настроить permalink'и в админке")
print(" • Сменить пароль и соль в wp-config.php")
print("═"*65)