О насБлогКонтакты
DevOps и инфраструктура28 марта 2015 г. 4 мин 121Обновлено: 22 июня 2026 г.

Как запустить Laravel 5 на виртуальном хостинге в Кыргызстане (2015)

AunimedaAunimeda
📋 Содержание

Коротко: Для Laravel 5 нужен PHP 5.5.9+. На shared хостинге без SSH - положите все файлы Laravel в подпапку laravel/, а в корне сайта разместите .htaccess и index.php которые перенаправляют запросы в laravel/public/. Переменные окружения читайте из .env файла (не из переменных сервера).


Проблема: Структура директорий на shared хостинге

На большинстве хостингов в КР в 2015 году (INFOCOM, Aknet hosting, Elcat):

  • Корень сайта: /public_html/ или /www/
  • PHP 5.3 по умолчанию, 5.5 доступен через .htaccess
  • SSH часто отсутствует
  • Composer запустить нельзя - устанавливаем локально, загружаем vendor/ через FTP

Структура файлов

/public_html/         ← Корень вашего домена
├── .htaccess         ← Перенаправляет в laravel/public/
├── index.php         ← Перенаправляет в laravel/public/
└── laravel/          ← Весь Laravel здесь
    ├── app/
    ├── bootstrap/
    ├── config/
    ├── database/
    ├── public/       ← Публичные файлы (assets, index.php)
    ├── resources/
    ├── routes/ (в L5: app/Http/routes.php)
    ├── storage/
    ├── vendor/
    └── .env

/public_html/.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    
    # Указать PHP версию 5.5 (синтаксис зависит от хостинга)
    AddHandler application/x-httpd-php55 .php
    
    # Все запросы → laravel/public/
    RewriteCond %{REQUEST_URI} !^/laravel/public/
    RewriteRule ^(.*)$ laravel/public/$1 [L]
</IfModule>

/public_html/index.php

<?php
// Резервный вариант если mod_rewrite не работает
// (некоторые shared хостинги отключают AllowOverride)

define('LARAVEL_START', microtime(true));

// Перенаправить все запросы в laravel/public/index.php
require __DIR__ . '/laravel/public/index.php';

/public_html/laravel/public/.htaccess (модифицированный)

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Указать PHP 5.5
    AddHandler application/x-httpd-php55 .php

    # Обрабатывать авторизационные заголовки
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Редирект trailing slash
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Front controller
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

.env файл для производства

# /public_html/laravel/.env
# НЕ загружать в git!

APP_ENV=production
APP_DEBUG=false
APP_KEY=base64:your-random-32-char-key-here
APP_URL=https://mysite.kg

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=mysite_db
DB_USERNAME=mysite_user
DB_PASSWORD=strong_password

CACHE_DRIVER=file
# На shared хостинге Redis недоступен - используем файловый кэш
# Убедитесь что storage/framework/cache/ доступна для записи

SESSION_DRIVER=file
# Аналогично: файловые сессии на shared хостинге

MAIL_DRIVER=smtp
MAIL_HOST=mail.aknet.kg
MAIL_PORT=587
MAIL_USERNAME=noreply@mysite.kg
MAIL_PASSWORD=mail_password
MAIL_FROM_ADDRESS=noreply@mysite.kg
MAIL_FROM_NAME="Мой Сайт"

Загрузка через FTP (без SSH)

# Локально: установить зависимости
composer install --no-dev --optimize-autoloader

# Генерировать ключ приложения локально
php artisan key:generate

# Оптимизировать для производства
php artisan config:cache  # Кэширует config/*.php в один файл
php artisan route:cache   # Кэширует routes
# НЕ делайте view:cache на shared хостинге - пути могут отличаться

# Загрузить по FTP:
# ✓ app/
# ✓ bootstrap/
# ✓ config/
# ✓ database/
# ✓ public/
# ✓ resources/
# ✓ routes/ (app/Http/routes.php для L5.0)
# ✓ vendor/   ← самая большая папка, ~20-30 МБ
# ✗ НЕ загружать: .git/, tests/, node_modules/

Права доступа к storage/

# На shared хостинге через файловый менеджер хостинга:
# storage/ → 755 (папки) и 644 (файлы)
# bootstrap/cache/ → 755

# Или через PHP (если есть выполнение скриптов):
<?php
$dirs = [
    __DIR__ . '/../storage/app',
    __DIR__ . '/../storage/app/public',
    __DIR__ . '/../storage/framework/cache',
    __DIR__ . '/../storage/framework/sessions',
    __DIR__ . '/../storage/framework/views',
    __DIR__ . '/../storage/logs',
    __DIR__ . '/../bootstrap/cache',
];

foreach ($dirs as $dir) {
    if (!is_dir($dir)) mkdir($dir, 0755, true);
    chmod($dir, 0755);
}
echo "Права установлены\n";

Типичные ошибки при деплое на shared хостинг

Ошибка: "No application encryption key has been specified"

# .env файл не загружен или APP_KEY пустой
# Решение: php artisan key:generate локально, скопировать результат в .env
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=

Ошибка: PHP Fatal error - требуется PHP >= 5.5.9

# .htaccess - синтаксис для разных хостингов:
# Вариант 1 (cPanel):
AddHandler application/x-httpd-php55 .php

# Вариант 2 (альтернативный):
php_flag short_open_tag off

# Вариант 3 - через php.ini в корне:
# Создать файл php.ini с содержимым:
# php_value[date.timezone] = Asia/Bishkek

Ошибка: Страница медленно загружается (3+ секунды)

// На shared хостинге php artisan config:cache критичен
// Без него Laravel читает все config/*.php на каждый запрос

// bootstrap/app.php - добавить если кэш не работает:
$app->singleton(
    Illuminate\Contracts\Http\Kernel::class,
    App\Http\Kernel::class
);

С описанной настройкой Laravel 5 работал на shared хостинге. Производительность была скромной - ~200ms на страницу без кэша - но для малого бизнеса в Бишкеке этого хватало.

Читайте также

Хостинг для сайта в Кыргызстане: VPS, shared или облако - что выбрать в 2026aunimeda
DevOps и инфраструктура

Хостинг для сайта в Кыргызстане: VPS, shared или облако - что выбрать в 2026

Разбираем типы хостинга для сайтов в Кыргызстане: shared, VPS, облачный и выделенный сервер. Реальные цены в сомах, рейтинг провайдеров и когда стоит апгрейдиться.

DevOps для малого бизнеса в Бишкеке: зачем нужен и как внедрить в 2026 годуaunimeda
DevOps и инфраструктура

DevOps для малого бизнеса в Бишкеке: зачем нужен и как внедрить в 2026 году

DevOps - не только для корпораций. Разбираем, как CI/CD, контейнеризация и мониторинг помогают малому бизнесу в Бишкеке выпускать продукты быстрее и с меньшими рисками.

Как настроить Docker для PHP-разработки в команде: опыт Бишкека (2016)aunimeda
DevOps и инфраструктура

Как настроить Docker для PHP-разработки в команде: опыт Бишкека (2016)

В нашей команде в Бишкеке в 2016 году был постоянный хаос: у одного PHP 5.6, у другого 7.0, у третьего XAMPP с настройками 2014 года. Docker решил проблему: единое окружение у всех. Точный docker-compose.yml для PHP 7.0 + nginx + MySQL + Redis с учётом реалий слабого интернета.

Нужна IT-разработка для вашего бизнеса?

Разрабатываем сайты, мобильные приложения и AI-решения для бизнеса в Кыргызстане. Бесплатная консультация.

DevOps и инфраструктура

Получить консультацию Все статьи