Эта статья — подробное руководство по превращению обычного домашнего ноутбука с Ubuntu 22.04 в веб-сервер для Laravel-проекта с возможностью доступа по домену. В статье подробно объясняется, зачем выполняется каждый шаг, как это работает и на что обратить внимание.
💡 Введение
Я давно работаю с Laravel, хорошо знаю экосистему и инструменты, и настал момент, когда мне понадобилось создать веб-приложение для отладки конкретной бизнес-идеи. Раскрывать суть этой идеи я не хочу, но было важно, чтобы среда для разработки и тестирования была максимально приближена к боевой. Облачные серверы с подходящими характеристиками стоили бы неоправданно дорого, особенно на старте. Поэтому я решил поднять собственный сервер на домашнем ноутбуке с Ubuntu — быстро, гибко и бесплатно.
🧾 Что у нас есть:
- Ubuntu 22.04 на ноутбуке
- Интернет по Wi-Fi через Keeneti, подключённому к GPON-модему Huawei с белым IP от провайдера
- Laravel-проект с использованием Laradock (Docker)
- Доменное имя и доступ к DNS-записям
Цель: развернуть Laravel-проект на этом ноутбуке, настроить домен и безопасный удалённый доступ к нему через интернет.
📡 Шаг 1. Настройка модема Huawei HG8245H в режим моста (bridge)
Зачем? Если у вас два устройства — модем Huawei и роутер Keenetic — и вы хотите, чтобы именно Keenetic получал внешний белый IP и сам управлял NAT, пробросом портов и соединением PPPoE, модем нужно перевести в режим моста (bridge).
Что нужно сделать:
Шаг 1. Перевести Huawei HG8245H в режим "Bridge".
Два способа:
- Простой:
Позвонить в техподдержку провайдера и попросить перевести модем в режим моста (Bridge).
- Вручную:
1. Перейдите в браузере по адресу http://192.168.100.1
2. Введите логин/пароль: telecomadmin / admintelecom
3. Зайдите в раздел WAN
4. Найдите строку подключения 4_INTERNET_R_VID_10 или похожую
5. В поле WAN Mode смените значение Route WAN на Bridge WAN
6. Нажмите Apply
- Шаг 2. Соедините модем и роутер.
- Вставьте сетевой кабель в порт 1 на Huawei и в порт «Интернет» (WAN) на Keenetic
Шаг 3. Настройка PPPoE на Keenetic
- На Keenetic создайте новое подключение PPPoE через интерфейс, нужно будет ввести логи и пароль на интернет от провайдера.
После этого ваш Keenetic будет получать внешний белый IP и управлять всей маршрутизацией — как полноценный интернет-шлюз.
---
✅ Шаг 2. Настройка SSH-доступа
Зачем? Чтобы управлять сервером удалённо из любого места, безопасно и без графического интерфейса.
Установка SSH-сервера:
выполняем команды на ноутбуке - сервере:
sudo apt update
sudo apt install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh
Проверка статуса:
sudo systemctl status ssh
Настройка фаервола:
sudo ufw allow 22/tcp
Увеличиваем безопасность — меняем порт и отключаем парольный вход:
sudo nano /etc/ssh/sshd_config
так мы откроем волшебный редактор файла nano
Добавляем порт, например 2025:
Port 2025
обязательно жмем ctrl+o(сохраним), затем enter(подтвердим), ctrl+x(выйдем)
далее открываем порт:
sudo ufw allow 2025/tcp
sudo systemctl restart ssh
Теперь SSH-доступ открыт по нестандартному порту, и никто не сможет подключиться без ключа.
🌐 Шаг 3. Проброс портов на Keenetic
📌 Закрепляем IP для Ubuntu-сервера в Keenetic
Зачем? Чтобы внутренний IP-адрес Ubuntu-ноутбука всегда оставался одинаковым (например, 192.168.1.70), иначе при перезагрузке роутера может измениться IP и проброс портов перестанет работать.
Как это сделать:
- Перейдите в веб-интерфейс Keenetic: http://192.168.1.1 или my.keenetic.net
- Войдите в панель управления
- Перейдите в раздел Список устройств
- Найдите ваш ноутбук (по имени или MAC-адресу)
- Нажмите "Ещё" → Закрепить IP-адрес
- Установите, например, 192.168.1.70
Теперь этот адрес всегда будет назначаться именно этому ноутбуку
📌 Проброс портов в Keenetic на наш сервер
Зачем? Чтобы можно было подключаться к серверу из интернета — ведь по умолчанию роутер блокирует входящие подключения.
| Назначение | Внешний порт | Внутренний порт | IP Ubuntu |
|-------------------|--------------|------------------|---------------------|
| SSH | 2025 | 2025 | 192.168.1.70 |
| HTTP | 80 | 80 | 192.168.1.70 |
| HTTPS | 443 | 443 | 192.168.1.70 |
В Keenetic: "Интернет" → "Переадресация портов" → добавить правило для каждого нужного порта.
🔐 Шаг 3. Подключение по SSH через ключ
Зачем? Ключи надёжнее паролей и не уязвимы к брутфорсу. Обязательно для прод-серверов.
На своем компьютере, откуда планируется управление сервером создадим RSA ключ
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 2025 имя_пользователя@белый_внешний_IP
Теперь можно подключаться без пароля:
ssh -p 2025 имя_пользователя@белый_внешний_IP
---
🐳 Шаг 4. Развёртывание проекта через Laradock
Зачем? Laradock создаёт изолированные контейнеры для PHP, Nginx, MySQL и других сервисов, упрощая деплой.
Здесь показана примерная команда для создания и потроения контейнеров, в частности, в docker-compose.custom.yml у меня прописано настройки для создания и построении контенеров. Как настроить laradock посмотрите в документации. Если нужна инструкция, пишите комментарии, я сделаю понятную инструкцию.
sudo docker-compose -f docker-compose.custom.yml up -d
🌍 Шаг 5. Настройка Nginx для доступа по домену
Зачем? Nginx обрабатывает входящие HTTP-запросы и передаёт их Laravel.
например у вас есть поддомен example.autoinostranec.ru:
- Настрой A-запись у регистратора на IP сервера
- Добавь такой блок конфиге laradock (laradock/nginx/sites/):
server {
listen 80;
server_name example.autoinostranec.ru;
root /var/www/путь_до проекта_в папке_laradock/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass php-upstream;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Перезапуск nginx после настройки:
sudo docker-compose -f docker-compose.custom.yml restart nginx
🔒 Шаг 6. Права доступа Laravel (на проде)
Зачем? Laravel должен иметь доступ к `storage/` и `bootstrap/cache`, но без избыточных прав.
для этого нужно провалиться в контенр worspace (основной контейнер laradock)
sudo docker ps
далее откроется список созданных контейнеров, ищем глазами worspace и копируем его ID
далее:
sudo docker exec -it ID_контейнера bash
мы провалимся в контейнер worspace, передем в наш проект
cd путь_к нашему_проекту
Настроим права:
chown -R www-data:www-data .
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod -R ug+rwx storage bootstrap/cache
chmod -R o-rwx storage bootstrap/cache
📦 Шаг 7. Развернем Laravel на сервер
Зачем? Чтобы применить миграции и подготовить кэш.
php artisan migrate --force
php artisan config:cache
php artisan route:cache
🚨 Важные замечания по безопасности
- ❌ Не делай chmod -R guo+w storage — это открывает доступ для всех, включая злоумышленников
- 🔒 Убедись, что только нужные порты проброшены наружу, и что твой SSH закрыт для входа по паролю
Эта инструкция поможет тебе быстро и безопасно развернуть Laravel на домашнем Ubuntu-сервере и использовать его так же, как полноценный прод. Подходит для всех случаев, где есть белый IP и желание делать красиво 😎. Оставлись вопросы? Что-то не получилось? Задай вопрос в комментарии.