WordPress с Docker за 15 минути: Пълна настройка с SSL и Cloudflare Tunnel

WordPress с Docker за 15 минути: Пълна настройка с SSL и Cloudflare Tunnel

Стартирайте професионален WordPress сайт на Ubuntu за 15 минути с Docker, автоматичен SSL и безплатен Cloudflare Tunnel. Включва готов docker-compose.yml файл и стъпка по стъпка инструкции – без нужда от порт forwarding или статичен IP адрес! 🎯


Искали ли сте някога да стартирате WordPress сайт от вкъщи, но сте се отказвали заради сложната настройка на портове и SSL сертификати? 🤔 Тази статия ще ви покаже как да направите това за 15 минути с помощта на Docker и Cloudflare Tunnel – напълно безплатно!

Съдържание

🎯 Какво ще постигнем

✅ Работещ WordPress сайт с MySQL база данни
✅ Автоматичен SSL сертификат
✅ Достъп от интернет без порт forwarding
✅ Професионален домейн (безплатен от Cloudflare)
✅ Автоматични backup-и
✅ Лесно мащабиране и поддръжка

🛠️ Необходими неща

  • Ubuntu 20.04+ сървър или desktop
  • Домейн (може да бъде безплатен от Freenom)
  • Cloudflare акаунт (безплатен)
  • 10-15 минути свободно време

📋 Стъпка 1: Подготовка на системата

🔄 Обновяване на Ubuntu

bashsudo apt update && sudo apt upgrade -y
sudo apt install curl wget git nano -y

📁 Създаване на работна директория

bashmkdir ~/wordpress-docker
cd ~/wordpress-docker

🐳 Стъпка 2: Инсталиране на Docker

📥 Автоматична инсталация

bash# Свалете официалния Docker скрипт
curl -fsSL https://get.docker.com -o get-docker.sh

# Инсталирайте Docker
sudo sh get-docker.sh

# Добавете потребителя си към docker групата
sudo usermod -aG docker $USER

# Излезте и влезте отново в терминала или изпълнете:
newgrp docker

# Проверете инсталацията
docker --version
docker-compose --version

✅ Тест на Docker

bashdocker run hello-world

Ако видите "Hello from Docker!", всичко е наред! 🎉

🗄️ Стъпка 3: Създаване на Docker Compose файл

Създайте файл docker-compose.yml:

yamlversion: '3.8'

services:
  # 🗄️ MySQL база данни
  mysql:
    image: mysql:8.0
    container_name: wordpress_mysql
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: secure_password_123
      MYSQL_ROOT_PASSWORD: root_password_456
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - wordpress_network

  # 🌐 WordPress
  wordpress:
    image: wordpress:latest
    container_name: wordpress_site
    restart: unless-stopped
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: secure_password_123
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress_data:/var/www/html
    depends_on:
      - mysql
    networks:
      - wordpress_network

  # 🔧 phpMyAdmin (опционално)
  phpmyadmin:
    image: phpmyadmin:latest
    container_name: wordpress_phpmyadmin
    restart: unless-stopped
    ports:
      - "8081:80"
    environment:
      PMA_HOST: mysql
      MYSQL_ROOT_PASSWORD: root_password_456
    depends_on:
      - mysql
    networks:
      - wordpress_network

volumes:
  mysql_data:
  wordpress_data:

networks:
  wordpress_network:
    driver: bridge

🚀 Стъпка 4: Стартиране на WordPress

▶️ Стартиране на контейнерите

bash# Стартирайте всички услуги
docker-compose up -d

# Проверете статуса
docker-compose ps

🌐 Първоначална настройка

  1. Отворете браузър и идете на http://localhost:8080
  2. Изберете език и попълнете данните:
    • Заглавие на сайта: Моя WordPress сайт
    • Потребителско име: admin
    • Парола: (използвайте силна парола)
    • Email: your-email@example.com

☁️ Стъпка 5: Настройка на Cloudflare Tunnel

🔐 Създаване на Cloudflare акаунт

  1. Идете на cloudflare.com и създайте безплатен акаунт
  2. Добавете вашия домейн
  3. Променете nameserver-ите към Cloudflare

📥 Инсталиране на cloudflared

bash# Свалете cloudflared
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb

# Инсталирайте го
sudo dpkg -i cloudflared-linux-amd64.deb

# Влезте в Cloudflare акаунта си
cloudflared tunnel login

🛤️ Създаване на tunnel

bash# Създайте tunnel
cloudflared tunnel create wordpress-tunnel

# Запишете Tunnel ID-то (ще го видите в изхода)
# Пример: Created tunnel wordpress-tunnel with id: 12345678-1234-1234-1234-123456789012

⚙️ Конфигуриране на tunnel

Създайте файл ~/.cloudflared/config.yml:

yamltunnel: wordpress-tunnel
credentials-file: /home/YOUR_USERNAME/.cloudflared/12345678-1234-1234-1234-123456789012.json

ingress:
  - hostname: yourdomain.com
    service: http://localhost:8080
  - hostname: admin.yourdomain.com
    service: http://localhost:8081
  - service: http_status:404

⚠️ Не забравяйте да замените:

  • YOUR_USERNAME с вашето потребителско име
  • 12345678-1234-1234-1234-123456789012 с вашето Tunnel ID
  • yourdomain.com с вашия домейн

🌐 DNS настройки

bash# Добавете DNS записи
cloudflared tunnel route dns wordpress-tunnel yourdomain.com
cloudflared tunnel route dns wordpress-tunnel admin.yourdomain.com

▶️ Стартиране на tunnel

bash# Стартирайте tunnel-а
cloudflared tunnel run wordpress-tunnel

# За да работи постоянно, създайте systemd service
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared

🔒 Стъпка 6: SSL и сигурност

🛡️ Cloudflare SSL настройки

  1. В Cloudflare Dashboard → SSL/TLS
  2. Изберете "Full (strict)" режим
  3. Активирайте "Always Use HTTPS"
  4. Активирайте "HTTP Strict Transport Security (HSTS)"

🔧 WordPress SSL настройки

Добавете в wp-config.php файла:

bash# Влезте в WordPress контейнера
docker exec -it wordpress_site bash

# Редактирайте wp-config.php
nano wp-config.php

Добавете тези редове преди /* That's all, stop editing! */:

php// 🔒 SSL настройки за Cloudflare
if (isset($_SERVER['HTTP_CF_VISITOR']) && 
    strpos($_SERVER['HTTP_CF_VISITOR'], 'https')) {
    $_SERVER['HTTPS'] = 'on';
}

define('FORCE_SSL_ADMIN', true);
define('WP_HOME','https://yourdomain.com');
define('WP_SITEURL','https://yourdomain.com');

📊 Стъпка 7: Полезни Docker команди

🔍 Мониторинг

bash# Преглед на логовете
docker-compose logs -f wordpress
docker-compose logs -f mysql

# Статус на контейнерите
docker-compose ps

# Използвани ресурси
docker stats

🛠️ Поддръжка

bash# Спиране на услугите
docker-compose stop

# Стартиране на услугите
docker-compose start

# Рестартиране
docker-compose restart

# Обновяване на images
docker-compose pull
docker-compose up -d

🗑️ Почистване

bash# Премахване на контейнерите (БЕЗ данните)
docker-compose down

# Премахване на контейнерите И данните
docker-compose down -v

💾 Стъпка 8: Автоматично backup

Създайте скрипт backup.sh:

bash#!/bin/bash

# 📁 Backup директория
BACKUP_DIR="/home/$USER/backups"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_PATH="$BACKUP_DIR/wordpress_backup_$DATE"

# Създайте backup директория
mkdir -p $BACKUP_PATH

echo "🚀 Започвам backup на WordPress..."

# 🗄️ Backup на MySQL
echo "📊 Backup на базата данни..."
docker exec wordpress_mysql mysqldump -u root -proot_password_456 wordpress > $BACKUP_PATH/database.sql

# 📁 Backup на WordPress файлове
echo "📂 Backup на WordPress файлове..."
docker cp wordpress_site:/var/www/html $BACKUP_PATH/wordpress_files

# 🗜️ Компресиране
echo "🗜️ Компресиране на backup..."
cd $BACKUP_DIR
tar -czf "wordpress_backup_$DATE.tar.gz" "wordpress_backup_$DATE"
rm -rf "wordpress_backup_$DATE"

# 🧹 Почистване на стари backup-и (пази последните 7)
find $BACKUP_DIR -name "wordpress_backup_*.tar.gz" -mtime +7 -delete

echo "✅ Backup завършен: wordpress_backup_$DATE.tar.gz"

Направете го изпълним и добавете в crontab:

bashchmod +x backup.sh

# Ежедневен backup в 2:00 сутринта
echo "0 2 * * * /home/$USER/wordpress-docker/backup.sh" | crontab -

🚀 Стъпка 9: Оптимизация за производителност

⚡ Redis кеширане

Добавете Redis в docker-compose.yml:

yaml  # ⚡ Redis кеш
  redis:
    image: redis:alpine
    container_name: wordpress_redis
    restart: unless-stopped
    networks:
      - wordpress_network

🔧 WordPress оптимизации

Инсталирайте тези плъгини:

  • W3 Total Cache – за кеширане
  • WP Rocket – премиум кеширане (препоръчително)
  • Smush – оптимизация на изображения
  • Cloudflare – интеграция с Cloudflare

🛡️ Стъпка 10: Сигурност и мониторинг

🔒 Допълнителна сигурност

yaml# Добавете в docker-compose.yml
  # 🛡️ Fail2Ban
  fail2ban:
    image: crazymax/fail2ban:latest
    container_name: wordpress_fail2ban
    restart: unless-stopped
    network_mode: "host"
    cap_add:
      - NET_ADMIN
      - NET_RAW
    volumes:
      - ./fail2ban:/data
      - /var/log:/var/log:ro

📊 Мониторинг с Uptime Kuma

yaml  # 📊 Uptime мониторинг
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: wordpress_monitoring
    restart: unless-stopped
    ports:
      - "3001:3001"
    volumes:
      - uptime-kuma:/app/data
    networks:
      - wordpress_network

🔧 Стъпка 11: Troubleshooting

❌ Общи проблеми

WordPress не се зарежда:

bash# Проверете логовете
docker-compose logs wordpress

# Проверете портовете
netstat -tlnp | grep 8080

Cloudflare Tunnel не работи:

bash# Проверете статуса
sudo systemctl status cloudflared

# Проверете логовете
sudo journalctl -u cloudflared -f

MySQL грешки:

bash# Влезте в MySQL контейнера
docker exec -it wordpress_mysql mysql -u root -p

# Проверете базите данни
SHOW DATABASES;
USE wordpress;
SHOW TABLES;

🩺 Health check скрипт

bash#!/bin/bash

echo "🔍 WordPress Health Check..."

# Проверка на контейнерите
if docker-compose ps | grep -q "Up"; then
    echo "✅ Docker контейнерите работят"
else
    echo "❌ Проблем с Docker контейнерите"
fi

# Проверка на WordPress
if curl -s http://localhost:8080 | grep -q "WordPress"; then
    echo "✅ WordPress е достъпен"
else
    echo "❌ WordPress не отговаря"
fi

# Проверка на Cloudflare Tunnel
if systemctl is-active --quiet cloudflared; then
    echo "✅ Cloudflare Tunnel работи"
else
    echo "❌ Cloudflare Tunnel не работи"
fi

echo "🏁 Проверката завърши"

📋 Checklist за успешна инсталация

  • Ubuntu е обновен
  • Docker е инсталиран и работи
  • docker-compose.yml файлът е създаден
  • WordPress контейнерите са стартирани
  • WordPress е достъпен на localhost:8080
  • Cloudflare акаунт е създаден
  • Домейнът е добавен в Cloudflare
  • cloudflared е инсталиран
  • Tunnel е създаден и конфигуриран
  • DNS записите са добавени
  • SSL е активиран (Full strict)
  • WordPress е достъпен през домейна
  • Backup скриптът е създаден
  • Health check скриптът работи

🎯 Заключение

Поздравления! 🎉 Вече имате напълно функционален WordPress сайт с:

Професионален домейн с SSL сертификат
Cloudflare защита и ускорение
Автоматични backup-и
Лесна поддръжка с Docker
Мащабируемост при нужda

🚀 Следващи стъпки

  1. Изберете тема за вашия сайт
  2. Инсталирайте нужните плъгини
  3. Настройте SEO с Yoast или RankMath
  4. Добавете Google Analytics
  5. Създайте първите си страници/публикации

📚 Полезни ресурси

💡 Съвети за поддръжка

  • Редовно обновявайте Docker images
  • Мониторирайте ресурсите с docker stats
  • Проверявайте backup-ите ежемесечно
  • Следете Cloudflare алертите
  • Използвайте staging среда за тестове

🎯 Успех! Вашият WordPress сайт е готов за света! Споделете в коментарите какво ще градите с тази настройка! 💪

Федя Серафиев

Федя Серафиев

Федя Серафиев e собственик на уебсайта urocibg.eu. Той намира удовлетворение в това да помага на хората да решават и най-сложните технически проблеми. Сегашната му цел е да пише лесни за следване статии, така че подобни проблеми изобщо да не възникват.

Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу: