Локальный хостинг или запускаем сайт на домашнем компьютере

Локальный хостинг или запускаем сайт на домашнем компьютере

Те, кто начинает заниматься сайтами, хоть раз задумывались о запуске сайта на домашнем компьютере. Когда-то и я задумывался над этим, но тогда я наткнулся на форум, где все говорили что этого сделать невозможно в ряду объективных причин. На сегодняшний день таких вопросов у меня не возникает, поскольку хостить сайт на домашнем компьютере не самое лучшее решение, особенно если на этом компьютере мы работаем или играем, слушаем музыку. Для таких вещей необходим полноценный сервер, если мы говорим о каком-то серьезном проекте, но для запуска личного блога или сайта какой-либо организации, вполне хватит простого компьютера с серверной ОСью.

Как кто-то грамотно подметил, кому это надо, они не умеют, а тем, кто умеет, не надо. Вот и мне это было не надо когда я мог спокойно поднять веб-сервер дома и дать к нему доступ из вне, но совсем недавно все немного изменилось, мне в работе понадобился веб-ресурс для анализа состояния проектов. Сначала я обходился простым файликом, который запускал из терминала, но в какой-то момент начал расти его функционал и потребовалось сохранять полученные результаты. Я принял решение что мне нужен локальный веб-сервер, на котором можно будет реализовать веб-приложение с необходимым функционалом.

Содержание

Установка необходимого ПО

Настраивать веб-сервер мы будем на Ubuntu Server 16.04. В рамках этой статьи я не буду рассказывать об установке данной системы, подразумевается что у вас уже есть сервер с установленной операционной системой Ubuntu Server. В моем случае это убитый ноутбук с установленной Ubuntu Server.

Первым делом нам потребуется установить немного приложений, которые потребуются нам для работы веб-сервера и его администрирования. Выполним следующую команду:

sudo apt install nginx phpmyadmin mysql-server php-fpm php-mysql

В какой-то момент нам потребуется указать пароль root для MySQL:

Запрос пароля для mysql

Затем снова повторим ввод пароля:

Повторный запрос пароля для mysql

Тут мы ничего не отмечаем, просто жмем Enter.

Выбираем сервер для phpmyadmin

После мы увидим приглашение к настройке базы данных для PhpMyAdmin, жмем Enter.

Сообщение о настройке phpmyadmin

Тут вводим пароль и жмем Enter.

Запрос пароля для phpmyadmin

Повторяем пароль и жмем Enter.

Повторный запрос для phpmyadmin

На этом установка необходимого ПО завершена. Введя в адресной строке IP-адрес нашего сервера или его имя (у меня это http://192.168.0.37 или http://server) увидим заветное nginxовское:

Приглашение сервера nginx

Настраиваем веб-сервер

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

Настройка доступа к сайту из вне

Для доступа к сайту из вне потребуется домен второго (site.ru) или третьего (subd.site.ru) уровня и dns-хостинг. Домен можно зарегистрировать платно или бесплатно в зоне .tk, .ml и т.д. Но прежде необходимо определиться с тем, хотите ли вы подключать выделенный IP. К примеру у меня нет возможности получить доступ к роутеру пока не будет подключен выделенный IP. Но когда у меня был интернет от Ростелеком, то там можно было настроить доступ из вне даже с динамичным IP.

В случае с динамичным IP у вас нет выбора с DNS-хостингом, дорога вам только на https://freedns.afraid.org, а если и домен хочется на халяву, то вам на https://my.freenom.com, там будет куча халявных доменных зон на выбор. Не спешите радоваться, халявный домен дается всего на год, потом придется заплатить за то, чтобы продолжить им пользоваться.

Для тех, кто обладает выделенным IP выбор будет пошире. Можно воспользоваться приведенным выше, а можно воспользоваться сервисом Яндекса или Mail.ru. Как бонус получите почту типа login@vash-domen.ru. Там же сможете в записи A указать свой IP. Через некоторое время домен начнет указывать на ваш роутер, останется только настроить сам роутер.

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

Настройка MySQL

Первым делом включаем модуль PHP для работы phpMyAdmin.

sudo phpenmod mcrypt

Теперь нам потребуется настроить MySQL, для этого выполним вот такую команду:

sudo mysql_secure_installation

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

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Для включения указываем y или любую другую букву для отключения.

Для:

Using existing password for root.
Change the password for root ?

ставим «n». Не будем менять пароль. На все остальные вопросы ставим «y».

Настройка обработчика PHP

Теперь приступим к настройке PHP, для этого откроем файл php.inmi простой командой, но прежде сделаем копию конфига:

sudo cp /etc/php/7.0/fpm/php.ini /etc/php/7.0/fpm/php.ini.back

После чего откроем файл:

sudo nano /etc/php/7.0/fpm/php.ini

Найдем строку «;cgi.fix_pathinfo=1». Сотрем «;» и вместо значения 1 поставим значение 0.  Этим самым, по сути, мы устраним уязвимость связанную с выполнением первого попавшегося файла PHP если запрашиваемый файл не был найден.

Поскольку я люблю порядок и простоту, то файлы сайта люблю хранить в домашнем каталоге пользователя. Но поскольку веб-сервер работает от пользователя www-data, то у нас могут возникнуть проблемы в работе сайта, да к тому же это не совсем безопасно. Для этих целей можно даже создать отдельного пользователя и использовать его каталог как корневую папку сайта.

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

sudo cp /etc/php/7.0/fpm/pool.d/www.conf /etc/php/7.0/fpm/pool.d/server.conf

Вместо «server» подставляем свое название. Затем открываем скопированный файл:

sudo nano /etc/php/7.0/fpm/pool.d/server.conf

И редактируем под себя. У меня получился вот такой конфиг:

[server]

user = dendi
group = dendi

listen = /run/php/php7.0-dendi.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

chdir = /home/dendi/www

pm = dynamic

pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 3
pm.max_spare_servers = 6

php_admin_value[session.save_path] = /tmp
php_admin_value[open_basedir] = «/home/dendi/www/»
php_admin_value[post_max_size] = 100M
php_admin_value[cgi.fix_pathinfo] = 0

Для быстрого удаления ненужных строк в редакторе nano есть сочетание клавиш Ctrl+K, с его помощью можно быстро удалять ненужную информацию целыми строками.

Вместо [server] естественно подставляем свое имя сервера, вместо dendi свое имя пользователя. Обратите внимание что необходимо изменить и значение параметра listen, поскольку это значение определяет имя файла сокета, которое должно быть уникальным. У параметра chdir также необходимо изменить значение на свое, в качестве значения указан путь до папки с файлам сайта.

Перезапускаем обработчик PHP выполнив команду:

sudo systemctl restart php7.0-fpm

Настраиваем Nginx

Теперь можно приступить к настройке Nginx. Давайте для начала настроим доступ к phpMyAdmin. Я выбираю не самый простой способ, но он почему-то нравится мне больше чем простое создание симлинка. Откроем конфиг дефолтного хоста и хорошенько над ним поработаем, для этого выполним команду:

sudo nano /etc/nginx/sites-available/default

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

location ^~ /phpmyadmin/ {
root /usr/share;
index index.php;
location ~ /phpmyadmin(/.*\.php) {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/share$fastcgi_script_name;
}
}

В итоге мы получим вот такой конфиг:

server {
listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;

index index.html index.htm index.nginx-debian.html;

server_name _;

location / {
try_files $uri $uri/ =404;
}
location ^~ /phpmyadmin/ {
root /usr/share;
index index.php;
location ~ /phpmyadmin(/.*\.php) {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/share$fastcgi_script_name;
}
}
}

Сохраняем и перезапускаем сервер командой :

sudo /etc/init.d/nginx restart

Пробуем открыть phpMyAdmin, у меня, к примеру, адрес получился такой http://server/phpmyadmin. В итоге увидим форму авторизации:

Форма авторизации в phpmyadmin

И мы даже можем авторизоваться, ведь у нас есть учетная запись root, но я никогда не работал под root’ом в phpMyAdmin, поэтому не пользуюсь этой учеткой.

По сути нам осталось создать хост для нашего сайта и базу данных. Если с созданием базы данных особых проблем нет, там все стандартно, то создание хоста на nginx сугубо индивидуальный момент. Тут настройки зависят от того, что планируется запускать на этом хосте. Поскольку у меня проект создается с нуля, то и конфиг хоста у меня пока простенький. Конечно же он не подойдет для запуска какой-либо CMS, для этого вам потребуется найти в сети настройки nginx именно под требуемую CMS.

Создаем сайт

Создаем для сайта папку:

mkdir www

Затем создаем файл index.php

nano www/index.php

и добавляем туда вот такой код:

<?php
phpinfo();

Сохраняем.

Первый файл нашего сайта готов, теперь надо создать файл хоста.

Откроем файл, выполнив следующую команду:

sudo nano /etc/nginx/sites-available/example

Вместо example указываем свое название. Вставляем в файл следующий код:

server {
listen 80;
listen [::]:80;
root /home/dendi/web/www;
index index.php index.html index.htm;
server_name site.local;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location = /favicon.ico { log_not_found off; access_log off; }
location = /robots.txt { log_not_found off; access_log off; allow all; }
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-dendi.sock;
}
}

Обратите внимание на значение параметра fastcgi_pass, там мы указываем файл сокета, который создавали в настройках обработчика PHP. Само собой это значение надо поменять на свое. Так же необходимо заменить значение параметра server_name на свое, тут мы указываем адрес нашего сайта(домена). Все сделали? Сохраняем и закрываем.

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

sudo ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/

Перезапускаем Nginx^

sudo /etc/init.d/nginx restart

Теперь попробуем открыть наш сайт, в моем случае он находится по адресу http://index.local, мы должны увидеть вот такую страницу:

Результат вывода функции phpinfo

Если вместо этого вы увидели что-то другое, значит где-то закралась какая-то ошибка.

Обратите внимание на то, что предварительно вам необходимо направить домен на наш сервер. Для этого необходимо прописать его в файле hosts операционной системы, либо в специальном разделе роутера. Я, например, создал на роутере правило чтобы все домены .local направлялись на мой сервер. Для этого надо в качестве домена указать *.local

Настройка роутера

Вот и все, дальше наши пути расходятся идальнейшие настройки зависят сугубо от поставленных перед нами задач. Удачи!

На сайте отсутствует реклама

Автор не получает прямой выгоды. Если считаете что материал полезен, поддержите проект

Номер карты

Заранее спасибо!

Бидюков Денис

Эксперт по сайтам

Занимаюсь продвижением личного бренда с помощью сайта и SEO. Если Вы хотите из обычного сантехника, электрика, врача или фотографа стать востребованным и высокооплачиваемым  специалистом, то я с легкостью Вам помогу.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *