- Установка сервера Linux + (Nginx + Apache) + PostgreSQL + PHP на VirtualBox (Ubuntu Server 16.04.3 LTS)
- Установим VirtualBox
- Подготовим VirtualBox к установке Ubuntu Server 16.04.3 LTS
- Установка Ubuntu Server 16.04.3 LTS
- Установим PuTTY, для доступа через SSH
- Подключение через SSH к серверу
- Установка и настройка (Nginx + Apache) + PostgreSQL + PHP
- Настроим FTP доступ к сайту
Установка сервера Linux + (Nginx + Apache) + PostgreSQL + PHP на VirtualBox (Ubuntu Server 16.04.3 LTS)
На просторах интернета не нашел единого рецепта по установке и настройке такого, довольно нестандартного сервера. Решил написать свой рецепт.
Принцип работы следующий:
Статические данные (файлы) отдает Nginx, а динамикой занимается Apache.
Начнем.
Установим VirtualBox
- Запустим установщик VirtualBox.
Настройки оставим по умолчанию.
Установщик временно отключит нас от сети. Жмем «Yes».
Подготовим VirtualBox к установке Ubuntu Server 16.04.3 LTS
- Загрузим образ ubuntu-16.04.3-server-amd64.iso
- Создадим виртуальную машину.
Имя: 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
Установить/заменить/переключить следующие параметры:
- listen=YES
- listen_ipv6=NO
- local_enable=YES
- write_enable=YES
- chroot_local_user=YES
- 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
Установим/добавим следующие параметры:
- ssl_enable=YES
- ssl_tlsv1=YES
- ssl_sslv2=NO
- ssl_sslv3=NO
- rsa_cert_file=/etc/ssl/private/vsftpd.pem
- rsa_private_key_file=/etc/ssl/private/vsftpd.key
- allow_anon_ssl=NO
- force_local_data_ssl=YES
- force_local_logins_ssl=YES
- ssl_ciphers=HIGH
Сохраним и запустим vsftpd
service vsftpd start
Давайте испытаем
Ура, все работает, можно приступать к разработке веб приложения.
Источник