Образ web сервера linux

Локальный веб-сервер под Linux, с автоматическим поднятием хостов и переключением версий PHP

Скорее всего какие-то части этой статьи уже знакомы многим хаброжителям, но в связи с покупкой нового рабочего ноутбука я решил собрать все крупинки воедино и организовать удобное средство для разработки. Мне часто приходится работать со множеством маленьких проектов, с разными версиями PHP, часто переводить старые проекты на новые версии. В далёком прошлом, когда я был пользователем Windows то использовал OpenServer. Но с переходом на Linux мне нехватало той простоты создания хостов и переключений версий которые были в нём. Поэтому пришлось сделать еще более удобное решение на Linux =)

будет запущен тот же файл но уже с версией PHP 7.2.7

Другие версии доставляются аналогичным описанным ниже способом.

Для создания еще одного сайта просто создаем в /var/www/ папку имеющую окончание .loc, внутри которой должна быть папка public_html являющаяся корнем сайта

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

Всё это я проверну на LinuxMint19, он на базе Ubuntu18.04, так что с ним все будет аналогично.

Для начала поставим необходимые пакеты

Postfix ставим в качестве плюшки, как простое решение(в мастере установки, всё по умолчанию выбираем) для отправки почты с локальной машины.

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

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

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

Также нам понадобится папки для CGI скриптов

И runtime папка для этих же скриптов, с правами

И так как каталог у нас находится в оперативной памяти, добавим его создание при старте системы, для этого добавим в /etc/tmpfiles.d/fcgid.conf

У меня dnsmasq-base идет с коробки, если нет то его всегда можно доставить.

Добавим правило в его конфигурацию. Найти файл конфигурации dnsmasq.conf можно так

Либо если он как и у меня является частью NetworkManager то создать новый файл конфигурации в /etc/NetworkManager/dnsmasq.d/local.conf
Добавим в него строчку для перенаправление нашего локального домена на локальную машину.

Также нужно включить необходимые модули апача

Предварительная подготовка завершена, приступаем к сборке различных локальных версий PHP. Для каждой версии PHP проделываем следующие 4 шага. На примере 5.6.36

1. Скачиваем исходники нужной версии и распаковываем их

2. Cобираем из исходников нужную версию PHP, и помещаем ее в /opt/php-5.6.36

3. Создаем CGI для обработки этой версии в /var/www/cgi-bin/php-5.6.36.fcgi

4. Делаем файл исполняемым

5. Добавляем экшен для обработки каждой версии в /etc/apache2/mods-available/fcgid.conf

6. Добавляем правило для обработки каждой версии в /etc/apache2/sites-available/000-default.conf

Ну вот и всё. Осталось только перезапустить apache и dnsmasq и пользоваться

Источник

Подготовка сервера

1. Обновить пакеты сервера

sudo apt-get update
sudo apt-get upgrade

2. Устанавливаем пакет компонентов Apache, MySQL, PHP (LAMP)

Символ ^ в конце обязателен — это часть команды

Во время установки MySQL будет выведен запрос на создание пароля root (это отдельный пароль администратора именно для SQL сервера, а не для основного администратора сервера).

Проверяем установку web-сервера http://[ip адрес сервера ubuntu] — должна отобразиться тестовая страница apache.

Читайте также:  Refind install mac os

3. Устанавливаем phpMyAdmin

sudo apt-get install phpmyadmin
sudo service apache2 restart

Необходимо выполнить следующие команды:

sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
sudo a2enconf phpmyadmin
sudo /etc/init.d/apache2 reload

sudo apt-get install php-mbstring php-gettext
sudo phpenmod mcrypt
sudo phpenmod mbstring
sudo systemctl restart apache2

Проверяем доступность интерфейса http://[ip адрес сервера ubuntu]/phpmyadmin

4. Устанавливаем FTP (для удобства работы с файлами)

Во время установки будет предложено выбрать один из двух различных вариантов установки:

From inetd — демон ProFTPd будет работать из-под службы inetd.
Standalone — ProFTPd будет установлен как самостоятельный демон.

Рекомендую выбрать вариант Standalone, т.к. гораздо удобней работать с ProFTPd, как с отдельной службой.

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

Однако, желательно его дополнительно настроить:

sudo nano /etc/proftpd/proftpd.conf

Раскомментировать значение RequireValidShell off и DefaultRoot

После настройки FTP нужно перезапустить:

5. Установка apache2-mpm-itk

Этот модуль нужен, чтобы сервер Apache мог рабтать с файлами сайта от имени владельца папки.

По умолчанию на директорию с файлами сайта распространяются права 755 и права 644 на все файлы. Это даёт права на запись файлов и папок только их владельцем. По этой причине при работе с файлами через FTP и Apache (например через интерфейс CMS) файлы будут сзданы от имени разных пользователей и возникают проблемы с их изменением или удалением. В решении именно этой проблемы и помогает данный модуль. Он указывает в настройках хоста каждого сайта от имени какого пользователя и группы будет работать Apache в указанной директории.

sudo apt-get install libapache2-mpm-itk
sudo a2enmod mpm_prefork
sudo a2enmod mpm_itk
sudo systemctl restart apache2

6. Включение mod_rewrite (для возможности работы ЧПУ)

sudo a2enmod rewrite
sudo service apache2 restart

Начало создания сайта

7. Создаём пользователя и каталога для работы с сайтами

sudo useradd -m -s /bin/false имя_пользователя
sudo passwd имя_пользователя

( имя_пользователя — новый пользователь, от имени которого будут выполняться работы с сайтом. Это поможет разграничить права при работе с несколькими сайтами на одном сервере)

На предложение системы вводим пароль нового пользователя (дважды)

После создания пользователя размещаем отдельный каталог для сайта (например www), зайдя новым пользователем по FTP в домашний каталог, либо следующей командой:

sudo mkdir /home/имя_пользователя/www
sudo chown -R имя_пользователя : группа_пользователя /home/имя_пользователя/www/

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

8. Создаём виртуальный хост для сайта

Создаём файл конфигурации виртуального хоста из варианта по-умолчанию

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/новый_сайт.conf

sudo nano /etc/apache2/sites-available/новый_сайт.conf

Изменяем и дополняем следующие значения:

Включаем созданный виртуальный хоста и перезапускаем apache

sudo a2ensite новый_сайт

9. Создаём базу данных MySQL

Необходимо зайти в кансоль управления mysql

При этом система запросит пароль root от mysql (именно от mysql, который задавался при установке LAMP). При удачном входе в кансоль mysql значение перед курсором сменится на mysql>. После этого создание новой базы sql и пользователя для управления ею можно выполнить одной командой:

create database имя_базы; GRANT ALL ON имя_базы.* TO ‘пользователь_базы‘@’localhost’IDENTIFIED BY ‘пароль_пользователя_базя_sql‘;

Для выхода из кансоли mysql нужно ввести команду

На этом можно закончить. Полноценный хостинг для сайта готов.

Дополнительно для удобства управления и контроля за сервером через WEB-интерфейс можно установить панель управления Webmin

Также дополнительно можно настроить параметры работы PHP («по вкусу» — например размер загружаемых фалов в параметре upload_max_filesize = 2M )

Источник

Установка сервера Linux + (Nginx + Apache) + PostgreSQL + PHP на VirtualBox (Ubuntu Server 16.04.3 LTS)

На просторах интернета не нашел единого рецепта по установке и настройке такого, довольно нестандартного сервера. Решил написать свой рецепт.

Принцип работы следующий:


Статические данные (файлы) отдает Nginx, а динамикой занимается Apache.
Начнем.

Установим VirtualBox

    Запустим установщик VirtualBox.


Настройки оставим по умолчанию.


Установщик временно отключит нас от сети. Жмем «Yes».

  • Начинаем установку.
  • Финиш.

    Подготовим VirtualBox к установке Ubuntu Server 16.04.3 LTS

    1. Загрузим образ ubuntu-16.04.3-server-amd64.iso
    2. Создадим виртуальную машину.


    Имя: default_server
    Тип: Linux
    Версия: Ubuntu (64-bit)
    Объем оперативной памяти: 2048 МБ

    Важно: У меня 8 ГБ оперативной памяти, и в моем случае, двух гигабайт будет достаточно. У вас может быть иначе.


    Размер жесткого диска: 15 ГБ
    Другие параметры оставим по умолчанию.


    Жмем «Создать».

    Сразу настроим сеть.


    Сменим тип подключения с NAT на Сетевой мост.


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

    Установка Ubuntu Server 16.04.3 LTS

      Выберем загрузочный диск с образом Ubuntu Server 16.04.3 LTS.


    Выбираем удобный язык, у меня это русский.


    Жмем «Enter».
    Выбираем «Установить Ubuntu Server».


    Выбираем страну.

    Важно: Читайте подсказку внизу экрана.

    Я не буду определять раскладку клавиатуры, мне это не нужно.


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


    Выбираем регион раскладки.


    Выбираем комбинацию клавиш, для переключения языка. Мне удобно через CTRL+
    SHIFT.


    Введем имя компьютера, под которым он будут известен в сети.


    Вводим имя админа.


    Вводим имя учетной записи админа (Будет использоваться как логин для входа в систему).


    Вводим пароль от учетной записи админа.


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


    Почему бы и нет.


    Выбираем часовой пояс.


    Пусть система автоматически использует весь диск.


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


    Записываем изменения на диск.


    У нас нету прокси, оставляем поле пустым и продолжаем.


    Пусть система сама устанавливает обновления безопасности.


    Выбираем набор программ, которые будут установлены вместе с системой.
    Нам будет достаточно стандартного набора и OpenSSH Server.


    Установим GRUB главным.


    Отлично, почти готово.


    Нам нужно изъять диск из привода.
    Устройства -> Оптические диски -> Изъять диск из привода


    Теперь жмем продолжить.
    Прекрасно, Ubuntu Server установлена.


    Вводим логин, следом пароль, попадаем в систему, все окей.
    Выключим нашу машину:
    poweroff
    Конкретно эту машину мы оставим в покое, и будем использовать только для клонирования.
    Клонируем нашу машину:
    Вводим имя.


    Продолжаем.
    Выбираем полное клонирование.


    Жмем клонировать. У меня клонирование длилось две минуты.

    Установим PuTTY, для доступа через SSH

      Запустим установочный файл.


    Настройки оставим по умолчанию.


    Жмем «Install».
    Финиш.

    Подключение через SSH к серверу

      Запустим клон нашей машины, что бы узнать ее ip адрес.
      Напишем команду:
      ifconfig


    На скриншоте я отметил место, где будет написан ваш ip адрес. У меня это: 192.168.0.103 (может смениться, пока писал статью, у меня сменился на 192.168.0.101).
    Теперь можно выйти из учетной записи, написав:
    exit

    Переходим в PuTTY, вводим ip адрес, и имя для сохраняемой сессии.


    Жмем «Save».

    Теперь, при двойном клике по имени сохраненной сессии.


    Мы должны наблюдать следующее:


    Вводим логин, после пароль.
    SSH соединение успешно настроено, теперь можно приступать к настройке (Nginx + Apache) + PostgreSQL + PHP.

    Установка и настройка (Nginx + Apache) + PostgreSQL + PHP

    Перейдем в режим суперпользователя
    sudo su
    Перейдем в корневой каталог
    cd /
    Добавим репозиторий PostgreSQL
    wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O — | sudo apt-key add —

    sh -c ‘echo «deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main» >> /etc/apt/sources.list.d/pgdg.list’
    Добавим репозиторий PHP
    add-apt-repository ppa:ondrej/php
    Сделаем update
    apt-get update
    Сделаем upgrade
    apt-get upgrade
    У меня upgrade длился пять минут.
    У становим python, он нам позже понадобится
    apt-get install python
    Приступим к установке Apache, PHP и PostgreSQL
    apt-get install apache2 php7.2 php7.2-cli php7.2-curl php7.2-fpm php7.2-pgsql postgresql postgresql-contrib postgresql-server-dev-10 libapache2-mod-rpaf build-essential apache2-dev
    По умолчанию, в PostgreSQL нету однобайтовых и беззнаковых чисел, поэтому мы их установим.
    Есть расширение для PostgreSQL, pguint — github.com/petere/pguint
    git clone https://github.com/petere/pguint.git /pguint
    Перейдем в созданный каталог
    cd /pguint
    Теперь нам нужно скомпилировать это расширение (тут понадобится python, который мы установили ранее).
    make

    make install
    Теперь, на сервер PostgreSQL, в нужную базу данных, где хотим использовать беззнаковые и однобайтовые числа, отправим:

    Вернемся в корневой каталог
    cd /
    Установим Nginx, но перед этим остановим Apache, дабы он не занимал порт 80, иначе Nginx не установится.
    service apache2 stop
    Установка Nginx
    apt-get install nginx
    Отлично, теперь остановим и Nginx
    service nginx stop
    Настройка Apache
    a2dismod mpm_event

    a2enconf php7.2-fpm
    Сменим порт Apache
    nano /etc/apache2/ports.conf
    Заменить

    127.0.0.1 — означает то, что к Apache можно обратиться только по локальному адресу.
    8080 — можете поставить любой свободный порт.
    Перейдем в папку с доступными сайтами
    cd /etc/apache2/sites-available
    Создадим конфигурационный файл нашего сайда
    nano domain-name.local.conf
    И привести его к такому виду:

    Посмотрим, что у нас лежит в /var/www
    cd /var/www/

    ls -F
    Папка html, нам более не нужна, удалим ее вместе с содержимым
    rm -R html
    Создадим свою папку, со своим сайтом
    mkdir domain-name.local/
    Перейдем в папку с нашим сайтом
    cd domain-name.local/
    Создадим документ index.pnp
    nano index.php
    В него запишем:

    С этим пока закончили.
    Вернемся в корневой каталог
    cd /
    В apache стоит rpaf 0.6 и он не передаёт/принимает порт от nginx и не работает правильно, как надо. Поэтому его надо обязательно обновить.
    wget -O rpaf_v0.8.4.tar.gz https://github.com/gnif/mod_rpaf/archive/v0.8.4.tar.gz

    tar xvf rpaf_v0.8.4.tar

    cd mod_rpaf-0.8.4/
    Теперь скомпилируем
    make

    make install
    Выходим в корневой каталог
    cd /
    Хорошо, продолжим настройку Apache.
    nano /etc/apache2/apache2.conf
    Заменить

    Приведем в порядок rpaf.conf
    nano /etc/apache2/mods-available/rpaf.conf
    Приведем его к такому виду:

    Включим наш сайт в Apache.
    a2ensite domain-name.local.conf
    И запустим наш Apache.
    service apache2 start
    C Apache закончили.
    Настроим Nginx
    nano /etc/nginx/sites-available/domain-name.local
    Привести к такому виду:

    Теперь создадим символьную ссылку на этот файл
    ln -s /etc/nginx/sites-available/domain-name.local /etc/nginx/sites-enabled/domain-name.local
    Отредактируем /etc/nginx/sites-available/default
    nano /etc/nginx/sites-available/default
    Уберем default_server.
    И вставим перенаправление с www. и ip

    Запускаем Nginx.
    service nginx start
    Отлично, можем проверить как оно работает.
    Но перед этим отредактируем файл хоста C:\Windows\System32\drivers\etc
    Открыть файл hosts через текстовый редактор, и в самый низ вставить:
    192.168.0.101 domain-name.local
    192.168.0.101 www.domain-name.local
    Заменив ip и домен на свои.
    В браузере перейдем по domain-name.local, и если вы делали все по этому рецепту, мы должны увидеть страницу с phpinfo.
    Отлично, дело осталось за малым.
    Настроим PostgreSQL.
    Создадим нового пользователя PostgreSQL
    sudo -u postgres createuser —superuser test-user
    Войдем в СУБД
    sudo -u postgres psql
    И сменим новому пользователю пароль
    \password test-user
    Теперь новому пользователю нужно сменить тип подключения, для этого нам нужно найти pg_hba.conf файл.
    Пишем


    Покидаем СУБД
    \q
    И начинаем редактировать /etc/postgresql/10/main/pg_hba.conf
    nano /etc/postgresql/10/main/pg_hba.conf
    Ищем
    # Database administrative login by Unix domain socket
    Находим следующее:
    # Database administrative login by Unix domain socket
    local all postgres peer
    Приводим к таком виду:
    # Database administrative login by Unix domain socket
    local all postgres peer
    local all test-user md5
    Перезагрузим PostgreSQL
    service postgresql restart
    Теперь войдем в СУБД через нового пользователя
    psql test-user -h 127.0.0.1 -d postgres
    Вводим пароль, и попадаем в СУБД.
    Создадим тестовую базу данных

    И сразу перейдем в нее
    \c test_db
    Подключим расширение pguint

    И создадим тестовую таблицу

    Заполним таблицу тестовыми данными

    Посмотрим содержимое таблицы test_tb

    Теперь попробуем вывести эти данные из php.
    Закрываем соединение с СУБД
    \q
    Откроем /var/www/domain-name.local/index.php
    nano /var/www/domain-name.local/index.php
    И приведем к следующему виду:
    «; ?>

    Теперь проверим, и убедимся, что это работает


    Отлично, мы настроили (Nginx + Apache) + PostgreSQL + PHP и он исправно работает.

    Настроим FTP доступ к сайту

    Установим FTP сервер
    apt-get install vsftpd
    Остановим vsftpd перед настройкой
    service vsftpd stop
    Откроем etc/vsftpd.conf
    nano etc/vsftpd.conf
    Установить/заменить/переключить следующие параметры:

    1. listen=YES
    2. listen_ipv6=NO
    3. local_enable=YES
    4. write_enable=YES
    5. chroot_local_user=YES
    6. pam_service_name=ftp

    Создадим нового пользователя для доступа через FTP
    useradd -d /home/domain-name -s /sbin/nologin domain-name
    Установим для него пароль
    passwd domain-name
    Создадим домашнюю директорию пользователя
    mkdir -p /home/domain-name
    Установим для нее права
    chmod a-w /home/domain-name
    Создадим группу для пользователя
    groupadd ftps
    Добавим пользователя в группу
    usermod -G ftps domain-name
    Поменяем владельца каталога
    chown -R domain-name:ftps /home/domain-name
    Создадим папку нашего сайта
    mkdir /home/domain-name/domain-name.local
    Сменим у нее владельца
    chown -R domain-name:ftps /home/domain-name/domain-name.local
    Смонтируем наши каталоги, откроем файл /etc/fstab
    nano /etc/fstab
    В самый низ вставим
    /var/www/domain-name.local /home/domain-name/domain-name.local none bind 0 0
    Добавим владельца /var/www/domain-name.local
    chown www-data:domain-name /var/www/domain-name.local/ -R
    Назначим права
    find /var/www/domain-name.local -type d -exec chmod 775 <> \;
    find /var/www/domain-name.local -type f -exec chmod 664 <> \;
    И запустим vsftpd
    service vsftpd start
    Проверим, я буду использовать FileZilla.


    Все хорошо, попробуем создать каталог.


    Работает.
    Настроим защищенное FTP соединение.
    Остановим vsftpd
    service vsftpd stop
    Сгенерируем сертификат
    openssl req -x509 -nodes -days 720 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.key -out /etc/ssl/private/vsftpd.pem
    Тут вводим все, что вшей душе угодно

    Country Name (2 letter code) [AU]:
    State or Province Name (full name) [Some-State]:
    Locality Name (eg, city) []:
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:
    Organizational Unit Name (eg, section) []:
    Common Name (e.g. server FQDN or YOUR name) []:
    Email Address []:

    Откроем etc/vsftpd.conf
    nano etc/vsftpd.conf
    Установим/добавим следующие параметры:

    1. ssl_enable=YES
    2. ssl_tlsv1=YES
    3. ssl_sslv2=NO
    4. ssl_sslv3=NO
    5. rsa_cert_file=/etc/ssl/private/vsftpd.pem
    6. rsa_private_key_file=/etc/ssl/private/vsftpd.key
    7. allow_anon_ssl=NO
    8. force_local_data_ssl=YES
    9. force_local_logins_ssl=YES
    10. ssl_ciphers=HIGH

    Сохраним и запустим vsftpd
    service vsftpd start
    Давайте испытаем

    Ура, все работает, можно приступать к разработке веб приложения.

    Источник

    Читайте также:  Uapi linux version h
  • Оцените статью