Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Стартирайте професионален WordPress сайт на Ubuntu за 15 минути с Docker, автоматичен SSL и безплатен Cloudflare Tunnel. Включва готов docker-compose.yml файл и стъпка по стъпка инструкции – без нужда от порт forwarding или статичен IP адрес! 🎯
Искали ли сте някога да стартирате WordPress сайт от вкъщи, но сте се отказвали заради сложната настройка на портове и SSL сертификати? 🤔 Тази статия ще ви покаже как да направите това за 15 минути с помощта на Docker и Cloudflare Tunnel – напълно безплатно!
✅ Работещ WordPress сайт с MySQL база данни
✅ Автоматичен SSL сертификат
✅ Достъп от интернет без порт forwarding
✅ Професионален домейн (безплатен от Cloudflare)
✅ Автоматични backup-и
✅ Лесно мащабиране и поддръжка
bashsudo apt update && sudo apt upgrade -y
sudo apt install curl wget git nano -y
bashmkdir ~/wordpress-docker
cd ~/wordpress-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
bashdocker run hello-world
Ако видите "Hello from Docker!", всичко е наред! 🎉
Създайте файл 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
bash# Стартирайте всички услуги
docker-compose up -d
# Проверете статуса
docker-compose ps
http://localhost:8080
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
bash# Създайте tunnel
cloudflared tunnel create wordpress-tunnel
# Запишете Tunnel ID-то (ще го видите в изхода)
# Пример: Created tunnel wordpress-tunnel with id: 12345678-1234-1234-1234-123456789012
Създайте файл ~/.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 IDyourdomain.com
с вашия домейнbash# Добавете DNS записи
cloudflared tunnel route dns wordpress-tunnel yourdomain.com
cloudflared tunnel route dns wordpress-tunnel admin.yourdomain.com
bash# Стартирайте tunnel-а
cloudflared tunnel run wordpress-tunnel
# За да работи постоянно, създайте systemd service
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
Добавете в 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');
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
Създайте скрипт 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 -
Добавете Redis в docker-compose.yml
:
yaml # ⚡ Redis кеш
redis:
image: redis:alpine
container_name: wordpress_redis
restart: unless-stopped
networks:
- wordpress_network
Инсталирайте тези плъгини:
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
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
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;
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 "🏁 Проверката завърши"
Поздравления! 🎉 Вече имате напълно функционален WordPress сайт с:
✅ Професионален домейн с SSL сертификат
✅ Cloudflare защита и ускорение
✅ Автоматични backup-и
✅ Лесна поддръжка с Docker
✅ Мащабируемост при нужda
docker stats
🎯 Успех! Вашият WordPress сайт е готов за света! Споделете в коментарите какво ще градите с тази настройка! 💪
Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу:
Donate ☕️ Дарете с PayPalDonate 💳 Дарете с Revolut