Перейти к содержимому

Скрипт автоматической установки wordpress на lemp(nginx+php*-fpm)

  • автор:
#!/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)

Добавить комментарий