Production / Deploy на хостинг

Теперь, когда у нас сайт более-менее защищен, рассмотрим процесс выкладки его на хостинг.

Я покажу как это сделать на примере хостинга jino потому что это самый бюджетный вариант с вполне приличным функционалом.

Идем на сайт https://jino.ru/ и кликаем создать аккаунт. У них кстати можно привязать акк к вк, гуглу, фб и не тратить лишнее время на придумывание паролей.

Я подключусь с гугла, потому что мой вк аккаунт уже привязан, в общем для чистоты эксперимента:

откроется стандартное окно для OAuth авторизации, в котором просто надо будет войти в свою учетную запись. После успешного входа увидите что-то в этом роде

тыкаем Войти как новый пользователь и нас переносит на панель управления

на ней тыкаем кнопку Хостинг

В принципе уже можно работать. У нас 10 дней тестового периода. Для поиграться нам хватит.

Если же вы захотите сохранить сайт на этом хостинге, то надо будет внести деньги на счет и отключить лишние услуги как на картинке (чтобы перейти на эту страницу надо нажать на кнопку услуги), то есть обведенные зеленым оставляется, обведенные красным выключаете

без пополненного счета он не даст это сделать

Разбираемся с техническим доменом

Тыкаем на кнопку файловый менеджер:

тут мы попадаем в папку на сервере куда будем загружать файлы нашего сайта. Заходим в папку domains

там будет еще одна папка, заходим и в нее, там лежит одинокий index.html файл

Джино по умолчанию создает для нас так называемы технический домен к которому можно привязать один сайт без необходимости покупать собственно настоящий домен.

Чтобы узнать адрес этого технического домена надо зайти сюда:

и увидеть его адрес

если зайти по этому адресу, то увидим следующий текст

на самом деле это просто содержимое файлика index.html который мы только что смотрели.

Возвращаемся обратно в файловый менеджер

кликаем на файл

и меняем содержимое body

теперь возвращаемся к ссылке на технический домен и тыкаем там кнопку продолжить. Это надо, чтобы предупреждение больше не выскакивало

и видим тот самый текст что мы только что загнали в файлик

можно сразу проверить работает ли у нас php, кликаем на файлик правой кнопкой мыши и выбираем переименовать

и меняем имя на index.php

и давайте во внутрь загоним что-то такое:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>Сайт в разработке</title>
    </head>
    <body>
        <pre>
        <?php print_r($_SERVER); ?>
        </pre>
    </body>
</html>

теперь открываем страницу технического домена и смотрим

Ура! Все работает! =)

Загружаем сайт на сервер

Вообще сайт на сервер можно загрузить через прямо через сайт. Можно первый раз прямо так и сделать.

Заливаем проект на сервер

И так, первое что надо сделать это упаковать папку с приложением в zip-архив. Паковать можно чем угодно, я, например, через 7z:

перетягиваем архив

распаковываем

причем папку указываем внутри папки domains

теперь в папке domains появится новая подпапка

Надо настроить ей и всем вложенным папкам права. Нажмите на нее правой кнопкой и выбирете

далее укажите такие значения

и нажмите сохранить.

Теперь можно зайти в папку. Собственно, теперь нам надо настроить технический домен чтобы он раздавал папку public из нашего проекта.

Идем в настройки вебсервера и тыкаем сюда

и выбираем путь к папке public

теперь надо пойти в папку public создать файлик .htaccess

и написать в него

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA]

и последнее чтобы видеть ошибки которые происходят с сервером, в начало index.php добавьте

error_reporting(E_ALL);
ini_set('display_errors', '1');

Разбираемся с autoload

открываем теперь и видим такую ошибку

тут написано, что не найден класс TwigBaseController, этот класс у нас должен подгружаться автоматически через autoload, давайте возьмем и прямо на сервере поправим файл framework/autoload.php

перезапускаем и смотрим:

дело в том, что почти все сервера крутятся на линуксах, то там есть одно важное отличие. В windows в пути в качестве разделителя используется обратный слеш \, а в линуксах и прочих юникс-подобных системах – прямой /

мы в нашем коде явно прописываем обратный слеш, и так как мы работаем на винде у нас проблем не возникает:

но как быть, есть ли какое-то универсальное решение?

К счастью да, в PHP встроена специальная предопределенная константа DIRECTORY_SEPARATOR , просто подставим ее вместо \\

и в проекта в visual studio code тоже не забудьте.

Настраиваем подключение к БД

Перегружаем и видим новую ошибку

тут, уже идет жалоба на то что PDO не может подключится к базе данных. Сначала надо понять почему собственно это происходит.

Дело в том, что у вас на своем компе установлен mysql/mariadb с дефолтными настройками, например мы пароль вообще не указывали.

На сервер джино установлен их собственный mysql и естественно, чтобы в него не мог зайти абы кто, там стоят нормальные пароли, да и юзер используется не дефолтный, а созданный специально для вашего аккаунта.

Давайте посмотрим эти настройки. Тыкаем вот сюда

и попадаем в управление базами данных, тыкаем создать базу данных

я назову ее spaceobjects

но на самом деле полное имя БД будет с префиксом вашего юзера, т.е. у меня имя будет j6600410_spaceobjects

давайте теперь зайдем в управление базами

и увидим уже знакомый нам phpMyAdmin

Как мы видим тут пустая база. Мы ее заполним чуть позже. А пока давайте попробуем настроить наш сайт, чтобы он подключался к правильной БД.

Сначала надо задать пароль юзеру. Тыкаем сюда

и тыкая на ключи справа создаем пароль

его надо сразу куда-нибудь сохранить.

Вообще по идее его можно загнать в index.php. Это конечно не совсем правильный подход, но давайте пока сделаем так. Идем в файловый менеджер, находим там файлик index.php

и прописываем там настройки подключения

заходим на страничку нашего сайта, и видим очередную ошибку

о том, что необходимая таблица в базе не найдена.

Создаем бэкап и загружаем его на сервер

Ну в принципе логично, у нас ведь БД пустая. Надо ее теперь как-нибудь заполнить. Можно конечно руками перетащить, записей то не много. Но сразу понятно, что это не вариант.

Специально для этих целей во все СУБД встроен механизм создания бэкапа базы, который позволяет сохранить состояние данных в файл, а потом этот файл развернуть на другой машине.

И так заходим в phpMyAdmin который подключен к базе на нашем компе http://localhost/phpMyAdmin/ и идем в экспорт

и скачивается файлик

если открыть файлик, то увидим SQL-скрипт, в котором есть команды для создания таблиц, а есть команды для заполнения данных

в общем теперь наша задача, зайти в phpMyAdmin на сайте jino и загнать туда этот скрипт.

Снова идем в управление MySQL

снова заходим в управление базами

тыкаем нашу базу, тыкаем Импорт и выбираем файл со скриптом

ну и скроллим вниз, затем тыкаем Вперед

увидим что-то такое:

теперь открываем сайт:

Ура! =) Только забыли убрать вывод в framework/autoload.php

вот теперь красота:

2

Выложить сайт на хостинг