Установка сервера Linux + (Nginx + Apache) + PostgreSQL + PHP на VirtualBox (Ubuntu Server 16.04.3 LTS)
На просторах интернета не нашел единого рецепта по установке и настройке такого, довольно нестандартного сервера. Решил написать свой рецепт.
Принцип работы следующий:
Статические данные (файлы) отдает Nginx, а динамикой занимается Apache.
Начнем.
Установим VirtualBox
-
Запустим установщик VirtualBox.
Подготовим VirtualBox к установке Ubuntu Server 16.04.3 LTS
- Загрузим образ ubuntu-16.04.3-server-amd64.iso
- Создадим виртуальную машину.
Размер жесткого диска: 15 ГБ
Другие параметры оставим по умолчанию.
Сменим тип подключения с NAT на Сетевой мост.
Установка Ubuntu Server 16.04.3 LTS
-
Выберем загрузочный диск с образом Ubuntu Server 16.04.3 LTS.
Нам нужно изъять диск из привода.
Устройства -> Оптические диски -> Изъять диск из привода
Продолжаем.
Выбираем полное клонирование.
Установим PuTTY, для доступа через SSH
-
Запустим установочный файл.
Подключение через SSH к серверу
-
Запустим клон нашей машины, что бы узнать ее ip адрес.
Напишем команду:
ifconfig
Мы должны наблюдать следующее:
Установка и настройка (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 доступ к сайту
- listen=YES
- listen_ipv6=NO
- local_enable=YES
- write_enable=YES
- chroot_local_user=YES
- pam_service_name=ftp
Все хорошо, попробуем создать каталог.
Работает.
Настроим защищенное 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
Тут вводим все, что вшей душе угодно
Installing PostgreSQL on Ubuntu VirtualBox
When you first start diving into a new database it’s always difficult to know what environment parameters and resources to use to just get started. I will walk you through setting up VirtualBox, Ubuntu, and PostgreSQL to get you started.
Downloads
Second is the ISO file for Ubuntu 18.04 (or whatever version you want) make sure it is 64bit: https://www.ubuntu.com/download/server
Third is Putty an SSH utility that makes accessing your server much easier:
https://www.chiark.greenend.org.uk/
Configuring VirtualBox
The install for VirtualBox is pretty simple, a bunch of next until it’s installed. Once you have it install run the exe and you’ll come to this window, click the new button in the top left corner.
On the next window you will want to enter the name of the instance, whatever you like. Then select Linux from the type dropdown and Ubuntu 64-bit from the Version dropdown, click Next.
Allocate memory, you don’t need much if you’re working with sample data. 1024 is sufficient but I usually go with 4GB just to have room to work. This would also depend on the current memory you have on your system, don’t use so much that you tax your host operating system, click Next.
Create a new virtual hard disk.
Select the default VDI.
Select dynamically allocated. This makes sure that the full disk space won’t be used until you actually use it in your virtual machine. If you assign 8GB in your next step then that 8GB won’t be reserved, it will be used as needed.
Select the amount of space you’ll need. If you’re importing large amounts of data you will need more disk space, if you’re just testing then you probably won’t need much, click create.
You should now be back to the main window for VirtualBox. Next we need to mount the Ubuntu ISO disc so it’s ready for installation when we start our virtual machine. Click settings at the top.
Here you can remove the empty disk and click remove.
Click Controller: IDE and then click the Add Optical Drive Icon.
Click Choose Disk.
Browse to where you saved the Ubuntu file you downloaded earlier in the Downloads portion of this guide. The name should be similar to the one below, ending in iso and click Open and then click Ok.
You can now click Start to boot up your virtual machine.
Select the language you want to use, press enter.
If you are using a different keyboard layout than the standard select it here, otherwise just hit enter again.
Press enter again.
You can press enter to go through this screen however your IP may differ show on the adapter. If you’re on wireless like I am you may have to take an additional step in order to connect to your server. I will show this in a later step.
If you have a proxy you need to use, enter it here and press enter.
Use the default mirror and press enter.
Select use an entire disk and press return.
Select the disk, it should be the same amount you allocated earlier in the VirtualBox settings.
Partition 1 and 2 should equal the total disk space available, 8GB in this case. Select Done and press enter.
Fill in the desire information how you want to and also choose a password, remember this password you will need it to login to your server, select Done and press enter.
Select postgresql10 and press space bar to mark it, then scroll down to done and press enter.
Select Reboot Now and press enter.
If you see the message about failing to unmount a disk, go to the top of your VM and click Devices, then Optical Drives. Click the .iso so there is a checkmark to the left of it, then click ‘Remove disk from virtual drive’. Then click back into your VM and press Enter. You should see the server load and a username prompt.
At this point we’re going to switch to Putty to finish installing PostgreSQL and also test that we can get a connection to the server from your host machine.
Once logged in with your username and password you assigned earlier, use this command:
Note the ‘inet’ address, 192.168.1.18 in this case.
Open Putty and enter the IP address, leave the port as 22, you can save the information by putting a name for the connection in the ‘Saved Sessions’ box and clicking Save on the right. Then click Open. You should connect and receive a prompt to login. If you receive a window before asking if you want to connect to an insecure server, click Yes.
If you’re unable to connect to the server, you may have to bridge your connection in VirtualBox.
Go back to VirtualBox Manager and click Settings at the top for your VM, click Network on the left and make sure it looks like the example below. Click Ok, then reset your server by Right Clicking it in the window and clicking Reset. Then try your Putty connection again and it should work.
Once logged into your server inside Putty run the command: sudo apt-get update
Next, we’ll be updating the repositories for PostgreSQL before we install. Run the three commands below, your results should be similar to the example shown.
- wget -q https://www.postgresql.org/wp-content/uploads/keys/ACCC4CF8.asc -O- | sudo apt-key add —
- echo «deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main» | sudo tee /etc/apt/sources.list.d/postgresql.list
- sudo apt update
We can now install PostgreSQL:
- sudo apt install -y postgresql-10
In order to start PostgreSQL you have to be using the postgres user. You can’t use the user you created before. Switch to the postgres user:
sudo su postgres
You can then start PostgreSQL console:
You’re now all set to start using PostgreSQL. I recommend installing PGAdmin and using the same credentials that you did for Putty to connect to your server. This should give you everything you need to start inserting data and testing configurations for your environment.
Submit a Comment Cancel reply
This site uses Akismet to reduce spam. Learn how your comment data is processed.
Простая настройка VirtualBox, установка и настройка PostgreSQL
Скачиваем, например, Ubuntu (не принципиально какую, но я ставил 20.04, это последняя с длительным сроком поддержки): https://ubuntu.ru/get.
Есть смысл качать серверную версию: в ней нет графического интерфейса, зато ей не нужно выделять много ресурсов виртуальной машины (а установка не сложна).
- CPU: 1 GHz+ (вполне хватит 1 GHz)
- RAM: 1 Gb+ (вполне хватит 1 Gb)
- Disk: 2.5Gb+ (больше 10 Gb не имеет смысла под данную задачу)
- Создаём в VBox виртуальную машину,
- монтируем в виртуальный IDE контроллер образ диска убунты,
- запускаем виртуальную машину,
- идём по установке (что с графическим интерфейсом, что без — не сложная установка, не особенно принципиально как вы будете ставить, можно всё оставить по умолчанию, как есть даже)
- В процессе установки попросит создать пользователя и пароль — запомнить что ввели (Внимание! Я плохо помню, как там в серверной версии, но при вводе пароля, может такое быть, что будет казаться, что он не вводится: курсор будет стоять на месте. Однако, это не так, всё в порядке, пароль вводится, так и задумано).
- Не забудьте потом размонтировать образ диска, чтобы после установки убунта грузилась с виртуального винта, а не снова с установочного диска
pgAdmin (для работы с БД) качать тут: https://www.pgadmin.org/download/
Настройка сети в VirtualBox
Вся настройка виртуальной машины выходит за рамки этой статьи, но нужно описать настройку сети
В настройках созданной машины открываем раздел «Сеть»
Во вкладке «Адаптер 1» тыкаем галочку «включить сетевой адаптер», если она ещё не поставлена. Там ставим NAT.
Во вкладке «Адаптер 2» тыкаем галочку «включить сетевой адаптер»
В типе подключения выбираем VirtualBox Host-Only Ethernet Adapter. Тыкаем в Дополнительно, там выбираем Тип адаптера Intel PRO/1000 MT Server (какие-то-цифры). (Насчёт этого не уверен, но в интернетах пишут, что с дефолтным не будет работать)
Если нет в списке VirtualBox Host-Only Ethernet Adapter
Если нет в списке VirtualBox Host-Only Ethernet Adapter, то в окне программы тыкаем: Файл — Менеджер сетей хоста — Создать
Ещё советую программу обновить (да, даже сразу после установки — всякое бывает)
Почему именно такие настройки?
Далеко не копал, но судя по всему, виртуальная машина (или именно сама убунта на виртуалке) не умеет одновременно общаться с одного физического адреса (mac-адреса) и с системой-хостом и с внешней сетью, поэтому нужно два адаптера — один у нас даёт интернет для гостевой системы, а второй — связь с хостовой системой
Установка PostgreSQL
После установки убунты открываем эмулятор терминала (CTRL+ALT+T или на рабочем столе правой кнопкой — открыть терминал)
sudo apt install postgresql postgresql-contrib
Если до этого ещё никогда не работали с unix системами, то надо отметить два момента:
- sudo в начале означает запрос прав суперпользователя на доступ к операциям, файлам, записи в системные папки, установку, удаление итд
- когда вводите пароль — курсор стоит на месте, но это не значит, что ничего не вводится.
Всё ок, вводите, так сделано специально 🙂
Установка net-tools (не обязательно, но понадобится для проверки):
sudo apt install net-tools
(пошуршит, спросит — ввести «y», нажать Enter)
Настройка PostgreSQL:
Снова в терминале:
sudo gedit /etc/postgresql/12/main/postgresql.conf
Про sudo не забываем, т.к. это запрос прав суперпользователя на выполнение записи в файл. Без этого файл откроется, но сохранить его будет нельзя.
Помним также о том, что 12 в адресе файла — это версия PostgreSQL, она может быть другой, но на момент написания она такая
Если поставили серверную версию, то вместо gedit пишите edit или nano, но с ними надо будет заранее посмотреть, как сохранить и как выйти (в nano сохранить — Ctrl+O — Enter, выход — Ctrl+X)
Попросит пароль (тот, что указывали при установке)
Открывается блокнот (на самом деле gedit/nano/edit), ищем там раздел connection and authentical
listen address = ‘127.0.0.1’
чтобы сервер слушал не только локалхост (это вариант только для учебных целей, в продакшене, я думаю, так не стоит делать :)).
ПРОВЕРИТЬ, ЧТОБЫ СТРОКА НЕ БЫЛА ЗАКОММЕНТИРОВАНА! (т.е. в начале этой строки не должно быть #)
Раздел resource usage:
это кэш, меняем на четверть ОЗУ
в окне эмулятора терминала пишем:
Если нет ifconfig (хотя, он должен быть установиться вместе с net-tools):
- поставить ifconfig
- пользоваться утилитой ip
sudo apt install net-tools
покажет что-то такое:
нас интересует интерфейс enp0s8, он должен был получить адрес типа 192.168.56.101 (или типа того, если у вас только один виртуальный адаптер сети VirtualBox и это первый. Если второй — то 102, итд.)
ip addr show enp0s8
Всё верно: inet 192.168.56.101
нас интересует интерфейс enp0s8:
там скорее всего будет адрес, типа: 192.168.56.101 (после 56 что-то своё может быть). Запоминаем этот адрес — по нему будем подключаться через pgAdmin (если его использовать будете), а конкретно — он вводится в Host name
Значит, 192.168.56.1 — это адрес хоста (т.е. венды, в нашем случае).
Открываем другой конфиг, тоже через терминал:
sudo gedit /etc/postgresql/12/main/pg_hba.conf
Добавляем в самый низ строку:
Рестарт сервера (всё ещё в окне эмулятора терминала):
sudo systemctl restart postgresql
netstat -nl | grep 5432
Должен вывести что-то такое:
netstat -nl | grep 5432
если вывел такое:
То значит забыли в конфигах изменить listen address = ‘127.0.0.1’ на ‘*’ или не проверили, что строка закомментирована (напоминаю: в начале строки не должно быть символа #)
Создание пароля
sudo -u postgres psql
(от имени пользователя postgres запуск psql с правами суперпользователя)
ALTER USER postgres PASSWORD ‘password’;
Разумеется, пароль ввести можете какой угодно, на реальном проекте лучше что-то посложнее.
Эту пару пользователь-пароль нужно будет вводить при подключении к этой БД (в pgAdmin, например). В этом примере пользователь — postgres, пароль — password
PostgreSQL
PostgreSQL — объектно-реляционная система управления базами данных, доступная для работы на различных операционных системах. В данной инструкции мы установим PostgreSQL-сервер на виртуальную машину с ОС семейства Unix.
CentOS/Fedora/RedHat
- Находим ссылку на RPM-файл нужной версии PostgreSQL для ОС на официальном сайте
- Подключаем репозиторий:
- Устанавливаем PostgreSQL-пакеты вместе с phpPgAdmin:
- Инициализируем базы данных кластера:
- Запускаем сервер базы данных:
Ubuntu/Debian
- Выполняем установку пакетов для PostgreSQL:
- Перезапускаем сервис базы данных:
Однако в PPA разработчиков PostgreSQL можно найти актуальную версию. Для этого добавьте репозиторий PostgreSQL в системный список источников и добавьте для него ключ:
Это позволит при обновлении пакетов получать наиболее актуальные версии.
Установка из исходного кода
Также имеется возможность установить PostegreSQL нужной версии из исходного кода. Для этого достаточно воспользоваться инструкцией, выгрузив перед этим требуемую версию с официального сайта.
Установка phpPgAdmin
Debian/Ubuntu
- Устанавливаем пакет:
- Разрешаем внешний доступ в файле /etc/apache2/conf-available/phppgadmin.conf , снимая комментирования со строки #Require all granted
- Чтобы указать конкретный IP-адрес, нужно использовать:
Require ip X.X.X.X.
где X.X.X.X. — ваш IP-адрес
- Можно отключить дополнительную защиту при авторизации в файле /etc/phppgadmin/config.inc.php
- Для применения изменений перезагружаем веб-сервер:
CentOS
- Устанавливаем репозиторий EPEL:
- Обновляем менеджер пакетов:
- Устанавливаем phpPgAdmin:
- Разрешаем внешний доступ в файле /etc/httpd/conf.d/phpPgAdmin.conf , снимая комментирования со строки #Require all granted
- Чтобы указать конкретный IP-адрес, нужно использовать Require ip X.X.X.X.
где X.X.X.X. — ваш IP-адрес
- Можно отключить дополнительную защиту при авторизации в файле /etc/phppgadmin/config.inc.php
- Перезагружаем веб-сервер:
Vesta
Помимо установки согласно инструкции для ОС, нужно выполнить дополнительные действия для интеграции с панелью.
- Включаем поддержку баз данных PgSQL в Vesta:
- Регистрируем экземпляр pg в панели управления:
- Выгружаем phpPgAdmin нужной конфигурации:
- CentOS
- Debian
- Устанавливаем пользовательский пароль:
Изменение версии
Перед работами обязательно сохранить бекап, так как параметры версий могут быть несовместимы.
ISPManager
- Для изменения основной версии PostgreSQL необходимо воспользоваться инструкцией
На операционных системах без установленной панели управления
- Вначале необходимо установить новую версию PostgreSQL, руководствуясь инструкцией из пункта «Установка PostgreSQL»
- Если установка происходит из исходного кода, то необходимо производить её в другой каталог, изменив стандартный порт (его значение 5432) с помощью дополнительных ключей —with-pgport=НОМЕР и —prefix=ПРЕФИКС
- Запустив параллельно оба сервера, старый и новый, с разными портами, можно будет перенести данные с помощью следующей команды
Сброс пароля суперпользователя
- Первым делом необходимо найти файл pg_hba.conf любой доступной утилитой.
- Создаем резервную копию данного файла:
- Указываем в файле pg_hba.conf следующую строку:
- Перезагружаем PostgreSQL:
Если у сервер не перезагружается, выдавая следующую ошибку: local connections are not supported by this build , то необходимо заменить строчку, начинающуюся с local на