Как сделать сервер на убунту
Домашний linux сервер своими руками
Хочется поделиться с хабросооществом информацией о том как я собирал домашний сервер.
Аппаратная часть
Первый вариант был сразу же отброшен из-за шума, пыли и энергопотребления. Второй был заказан, пока шли комплектующие, я успел передумать (захотелось шум и энергопотребление свести до минимума). В итоге, на Ebay были куплены тонкие клиенты HP t5000 и Neoware CA2. Месяц спустя пришли тонкие клиенты и из двух, после долгих размышлений, был выбран Neoware CA2. В него идеально поместился 2.5′ HDD и вторая сетевая карта.
После допиливания, в буквальном смысле, Neoware CA2 я принялся ставить на него Ubuntu 9.10 с офисного TFTP сервера. Установку производил самую минимальную. Если бы не было набора для сетевой установки, ставил бы Debian с USB CD-ROM и netinstall диска. Сам я ярый фанат RHEL/CentOS, но на домашний сервер решил ставить что-то из debian семейства, для расширения кругозора.
Torrent клиент и вебморда
Теперь перейдем к установке torrent клиента и вебморды. Была выбрана связка rtorrent + rutorrent, установка из репозитариев была отметена сразу, т.к. «родной» пакет был собран без xmlrpc-c который расширяет функционал rutorrent. Ниже фактически, скрипт для авто-установки rtorrent+rutorrent+lighttpd+php.
Устанавливаем всё что необходимо для компиляции xmlrpc-c, libtorrent, rtorrent
apt-get install checkinstall subversion build-essential make autoconf autotools-dev automake libtool libcurl4-openssl-dev libsigc++-2.0-dev pkg-config libncurses5-dev
apt-get remove rtorrent libtorrent11 libxmlrpc-c3 libxmlrpc-c3-dev libxmlrpc-core-c3 libxmlrpc-core-c3-dev
Создаем конфиг и папки для сессий и готовых торрент закачек, после чего стартуем rtorrent.
mkdir /torrents/.rtorrent_session
cat >> /torrents/.rtorrent.rc
Теперь можно заходить по server_ip/rutorrent и начинать пользоваться.
Теперь установим DHCP сервер и создадим для него конфиг таким образом чтобы клиенты получали:
router 192.168.1.1
dns сервер 8.8.8.8
сервер времени time.nist.gov
tftp сервер 192.168.1.1
и для примера фиксированная выдача 192.168.1.100 клиенту с MAC-адресом 00:1B:FC:33:F0:25
aptitude install dhcp3-server
cat >> /etc/dhcp3/dhcpd.conf
строчки с option-150 нужны для моего VoIP телефона Cisco 7940.
TFTP и сетевая установка
aptitude install xinetd atftpd atftp
cat >> /etc/xinetd.d/tftp
Теперь проверим, работает ли tftp сервер
root@dvr:
# echo bla > /tftpboot/123
root@dvr:
# atftp 127.0.0.1
tftp> get 123
tftp>
root@dvr:
wget itblog.su/tftpboot_installs.sh
bash tftpboot_installs.sh
cat >> /tftpboot/pxelinux.cfg/default
Без особого труда в это меню можно добавить продукты Acronis, инсталляцию и запуск Windows XP и прочее.
Вот так будет выглядеть наше меню:
и подытожит статью скрипт который всё это установит в «два клика».
С удовольствием выслушаю замечания и дополнения.
Установка сервера Linux + (Nginx + Apache) + PostgreSQL + PHP на VirtualBox (Ubuntu Server 16.04.3 LTS)
На просторах интернета не нашел единого рецепта по установке и настройке такого, довольно нестандартного сервера. Решил написать свой рецепт.
Принцип работы следующий:
Статические данные (файлы) отдает Nginx, а динамикой занимается Apache.
Начнем.
Установим VirtualBox
Подготовим VirtualBox к установке Ubuntu Server 16.04.3 LTS
Важно: У меня 8 ГБ оперативной памяти, и в моем случае, двух гигабайт будет достаточно. У вас может быть иначе.
Размер жесткого диска: 15 ГБ
Другие параметры оставим по умолчанию.
Сменим тип подключения с NAT на Сетевой мост.
Установка Ubuntu Server 16.04.3 LTS
Важно: Читайте подсказку внизу экрана.
Продолжаем.
Выбираем полное клонирование.
Жмем клонировать. У меня клонирование длилось две минуты.
Установим PuTTY, для доступа через SSH
Подключение через SSH к серверу
Мы должны наблюдать следующее:
Вводим логин, после пароль.
SSH соединение успешно настроено, теперь можно приступать к настройке (Nginx + Apache) + PostgreSQL + PHP.
Установка и настройка (Nginx + Apache) + PostgreSQL + PHP
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/
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
Привести к такому виду:
И сразу перейдем в нее
\c test_db
Подключим расширение pguint
И создадим тестовую таблицу
Заполним таблицу тестовыми данными
Посмотрим содержимое таблицы test_tb
Теперь проверим, и убедимся, что это работает
Отлично, мы настроили (Nginx + Apache) + PostgreSQL + PHP и он исправно работает.
Настроим FTP доступ к сайту
Все хорошо, попробуем создать каталог.
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 []:
Локальный web сервер — установка и настройка в Ubuntu 14.04
Для создания новых сайтов или тестирования изменений на существующих часто бывает нужен локальный web сервер. Во-первых, новый сайт лучше выкладывать уже в готовом виде, дабы не смущать потенциальных посетителей пустыми страницами, недописанными материалами. Во-вторых, новые фичи для существующих сайтов тоже лучше тестировать не на живом сайте, а на его клоне. Ну и в третьих, это позволит работать над сайтом даже при временном отсутствии доступа к интернету.
Наш тестовый локальный web сервер ставится на Ubuntu 14.04 (или на Linux Mint 17, что, в сущности, одно и то же). В более ранних версиях возможны некоторые отличия.
Локальный web сервер — введение
Итак, определимся, что нам нужно чтоб локальный web сервер работал на нашем ПК.
Ну для начала (на всякий случай, для новичков) расшифруем аббревиатуру LAMP — Linux, Apache, MySQL, PHP. Предполагается, что Linux у нас уже есть (Если нет, то ставим, не боимся. Ubuntu или Mint, например, ставится сейчас едва ли не проще, чем Винда.). Что нужно установить.
Если вы не являетесь гуру MySQL, и не собираетесь управлять базами в консоли, вводя команды ручками, то следующим пунктом будет
Также нужно подумать и об отправке почты с сайта — это тоже частенько приходится тестировать.
Также с большой вероятностью могут понадобится некоторые библиотеки PHP. В частности
Также стоит озаботиться удаленным доступом к нашему серверу. Если хочется получать доступ на свой домашний, локальный web сервер из любой точки земного шара (правда для этого нужен реальный внешний IP-адрес вашей квартирной сети). В общем, удобная штука. Впрочем, если все это вам не нужно, то следующий пункт опускаем.
Ну и наконец, еще один необязательный, но очень полезный пункт. Система контроля версий (СКВ). Если у вас что-то перестало работать, а изменения перед этим были значительными, то откатить их может быть достаточно тяжело. СКВ позволяет вести учет всех изменений и откатиться в любое из предыдущих состояний одной командой. Существеут множество СКВ, но для локального использования (без доступа к интернету) лучше всего подойдет Git — детище Линуса Торвальдса.
С необходимыми компонентами web-сервера определились, приступаем к установке и настройке
Первые три пункта вполне можно установить одной командой в терминале
Символ ^ в конце не случаен, это часть команды. У нас попросят пароль администратора, вводим.
Эта команда действует, кажется, начиная с Ubuntu 13.04. В более ранних версиях все компоненты устанавливать придется отдельно. Впрочем, сделать это тоже можно одной командой
По ходу установки необходимо ответить на два вопроса. Сначала будет перечень устанавливаемых пакетов и вопрос, хотим ли мы продолжить установку. Жмем Enter. Затем нас попросят ввести пароль рута для MySQL. Вводим, подтверждаем. Дожидаемся конца установки.
Теперь настроим и протестируем все компоненты.
Apache
открываем браузер и вводим в адресной строке
После перехода по этому адресу видим приветственную страницу.
Это означает, что сервер работает.
Теперь выполним кое-какие настройки. Для этого откроем конфигурационный файл Apache /etc/apache2/apache2.conf. Причем сделать это надо из-под рута, т.е. с правами администратора. Можно эту операцию провернуть и в графической оболочке, если знаете как — делайте. Если нет, то здесь описан, способ — с консольным текстовым редактором nano.
Не забываем. что после ввода команды, начинающейся с sudo, нужно ввести пароль администратора.
(это легко сделать встроенным в nano поиском; вызывается он комбинацией клавиш Ctrl+w) и под последним из них дописываем
Имейте ввиду в место user пишем свое имя пользователя в Linux.
Дальше идем в конец файла и дописываем
Сохраняем комбинацией клавиш Ctrl+O, подтверждаем Enter и выходим из nano Ctrl+x.
Поскольку в подавляющем большинстве у сайтов стартовой страницей будет index.php, а не index.html, то открываем следующий файл.
И здесь index.php помещаем в начало строки DirectoryIndex, перед index.html. Должно получиться так.
Сохраняем и закрываем.
Виртуальные хосты
Теперь настроим виртуальные хосты. Зачем? Ну, в общем-то, можно обойтись и без этого. Все сайты хранить в отдельных папках в /var/www/html и заходить на них по адресам вида localhost/sitename (где sitename — имя папки с сайтом). Но тут есть нюанс. Если мы работаем с клоном уже существующего сайта, где прописаны URL вида «/file.html», т.е. со слешем в начале (а такие урлы встречаются довольно часто), то при переходе по такому урлу попадем в localhost/file.html (т.е. в никуда, поскольку такого пути у нас нет) вместо localhost/sitename/file.html. Ведь корневая папка у сервера прописана одна — /var/www/html. И она будет корневой для всех сайтов. Т.е. нам нужно, чтобы корневой папкой каждого сайта была именно его папка. И для каждого нашего сайта нужно будет прописать виртуальный хост.
Предположим, что у нас есть тестовый сайт. И расположен он не в /var/www/html, а в/home/user/public_html/testsite (где user — ваше имя пользователя в Linux). Почему там? В случае переустановки системы (ну мало ли что…) не придется заново заливать все сайты ( /home у вас на отдельном разделе?). Да и с правами меньше мороки.
Сайт этот у нас состоит всего из одного файла index.html, содержащего следующее
Здесь в первую строку добавим имя нашего сайта.
127.0.0.1 localhost testsite
Сохраняем и закрываем (Ctrl+О и Ctrl+x соответственно).
Теперь выполняем в терминале
Таким образом мы создали кофигурационный файл сайта testsite, скопировав конфигурационный файл дефолтного сайта. Теперь откроем этот файл и настроим его под наш сайт.
Здесь раскомментируем (т.е. уберем #) строчку
#ServerName www.example.com
И пропишем имя нашего сайта. Должно получиться:
ServerName testsite
Далее исправим DocumentRoot, прописав вместо /var/www/html /home/user/public_html/testsite (не забываем вместо user поставить реальное имя пользователя).
Сохраняем и закрываем. Теперь включаем наш сайт.
В терминале нам любезно подсказывают, что активировать новую конфигурацию мы можем, перезагрузив настроки Апача.
В адресной строке браузера пишем
http://testsite
И видим нашу тестовую страничку. Если не видим — тщательно проверяем правильность своих предыдущих действий.
Ну и в дальнейшем будем работать уже с этим тестовым сайтом, а не с дефолтным.
В большинстве случаев нам придется работать с ЧПУ-ссылками. Поэтому необходимо подключить модуль Апача mod_rewrite.
Теперь проверим. Создадим в корне нашего сайта (папке testsite) файл .htaccess и запишем в нем следующее
Это означает, что запросы на testsite/test будем перенаправлять на страницу sef.html.
Теперь создаем этот самый файл sef.html с содержимым, аналогичным index.html, кроме заголовка и текста:
Идем на http://testsite/test. Если видим нашу новосозданную страницу, значит порядок.
Теперь проверим PHP. Для этого в папке /home/user/public_html/testsite создадим текстовый файлик со следующим содержимым:
Сохраняем этот файлик под именем, например, info.php. Если мы теперь перейдем по адресу http://testsite/info.php, то увидим полную информацию об установленном в системе PHP.
Если увидели — PHP работает.
Если локальный web сервер, и доступа извне к нему нет, то файлик этот можно оставить, он, возможно, еще пригодится. Но ни в коем случае не делайте этого на общедоступном сервере, здесь этот файл должен быть удален незамедлительно после проверки!
php.ini
Ну а теперь поковыряемся в конфигурационном файле PHP, находящемся по адресу /etc/php5/apache2/php.ini. Да не просто поковыряемся, а и кое-что поменяем.
Короткая форма записи
Это значит, что по умолчанию запрещено использовать короткую форму записи тегов, т.е.
Все OK. MySQL работает. Вводим quit для выхода.
Можно еще одним махом проверить работу связки MySQL и PHP. Для этого создадим файл db-test.php (все там же, в корне нашего сайта — /home/user/public_html/testsite) и запишем туда следующее.
Перейдем по адресу http://testsite/db-test.php. Если видим текст «OK… localhost via UNIX socket», то все хорошо.
phpMyAdmin
Поехали дальше. Теперь очередь phpMyAdmin. В терминале вводим
После получения списка пакетов нажимаем Enter на вопрос, хотим ли мы продолжить. В ходе установки нас спрашивают, какой сервер будем настраивать. Поскольку у нас Apache, то и выбираем, естественно, его же. Для этого нажимаем пробел, убедившись, что красный курсор установлен в квадратных скобках напротив строчки apache2. И убеждаемся, что там же, в скобках, появилась звездочка.
Нажимаем Enter. Через некоторое время появится еще одно окно с предложением установить и настроить базу данных. У нас уже выбрано «Да», жмем Enter. Вводим пароль административного пользователя базы данных (тот самый, который вводили при установке MySQL), жмем Enter, задаем пароль для регистрации phpmyadmin в базе, подтверждаем. Дожидаемся конца установки.
Теперь в терминале последовательно вводим
http://propk.ru/phpmyadmin
Видим окно входа в phpMyAdmin
Вводим имя пользователя root и пароль, введенный нами при установке MySQL. Входим в phpMyAdmin.
Библиотеки GD и CURL
Теперь доустановим библиотеки PHP GD и CURL. Здесь все крайне просто. В терминале вводим
Опять-таки, подтверждаем, что мы действительно хотим их установить. И перезагружаем Apache.
Почтовый сервер SSMTP
Теперь почтовик. В принципе, можно обойтись SSMTP — это легкая утилита, отправляющая письма через сторонний SMTP-сервер, например Gmail. Но в этом случае о тестировании почты оффлайн придется забыть. Если тестирование оффлайн не актуально, то ставим и настраиваем:
И здесь меняем значения на следующие (для Gmail-сервера).
root=youraccount@gmail.com
mailhub=smtp.gmail.com:587
AuthUser=youraccount@gmail.com
AuthPass=password
UseSTARTTLS=YES
Здесь youraccount@gmail.com — ваш существующий адрес на Gmail; password — пароль вашего аккаунта на Gmail. Если не хотите Gmail, то для других сервисов настройки принципиально отличаться не будут.
Далее. В /etc/php5/apache2/php.ini находим строку ;sendmail_path =, раскомментируем ее (т.е. уберем ;) и пропишем путь к ssmtp. Должно получиться
А теперь проверим. Создадим файл index.php в testsite, откроем его и пропишем туда следующее
Здесь опять же testaccount@gmail.com — ваш существующий адрес, к которому у вас есть доступ (здесь — какой угодно, не обязательно Gmail).
Теперь перейдем по http://testsite. Отобразиться у нас должна пустая страница. Теперь проверяем testaccount@gmail.com — туда должно прийти наше тестовое письмо.
Sendmail
Если же необходимо тестировать отправку почты оффлайн, ставим Sendmail.
На всякий случай. Речь не идет об одновременном использовании SSMTP и Sendmail — устанавливаем либо то, либо другое!
По окончанию установки запускаем
На все три вопроса, задаваемых в ходе установки, отвечаем утвердительно, т.е. жмем Enter.
И здесь в строчку с 127.0.0.1 дописываем через пробел
propk.ru.loc testserver
Здесь testserver — имя нашего сервера. Оно уже прописано строчкой ниже для 127.0.1.1. Сохраняем, закрываем и пере запускаем наш локальный web сервер
telnet localhost smtp
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
220 propk.ru.loc ESMTP Sendmail 8.14.4/8.14.4/Debian-4.1ubuntu1; Sat, 26 Jul 2014 21:46:56 +0300; (No UCE/UBE) logging access from: localhost(OK)-localhost [127.0.0.1]
Начинаем тестирование. Вводим
helo localhost
250 localhost.loc Hello localhost [127.0.0.1], pleased to meet you
Далее чередуются команды и ответы
mail from: no-reply@gmail.com
250 2.1.0 no-reply@gmail.com… Sender ok
rcpt to: user@localhost
Здесь user — ваше имя пользователя в Linux.
250 2.1.5 user@localhost… Recipient ok
data
354 Enter mail, end with «.» on a line by itself
Теперь мы вводим текст тестового письма. Закончить его обязательно точкой.
test message
.
Жмем Enter и получаем ответ.
250 2.0.0 s6QItc6L010145 Message accepted for delivery
Прекрасно. А теперь настроим почтовый клиент, чтобы иметь возможность видеть отправленные с сайта и полученные в user@localhost письма. Настраивать будем Thunderbird. Идем в Создать — Другие учетные записи. Выбираем тип учетной записи Unix Mailspool (Movemail), жмем Далее. Выводимое имя абсолютно без разницы, мы сюда письма только получать будем, а Адрес электронной почты прописываем user@localhost (вновь, user — это ваше имя пользователя в Ubuntu). Жмем Далее, затем еще раз Далее, и еще раз Далее, и, наконец, Готово. Если все сделали правильно — во входящих видим наше только что отправленное при тестировании письмо.
Можем протестировать через PHP, аналогично тому, как мы делали это с SSMTP, только в index.php исправим адрес получателя на user@localhost.
Теперь при работе с популярными CMS в админке будем прописывать адрес получателя писем с сайта user@localhost.loc. Почему не user@localhost? Потому что такой адрес не пройдет валидацию. User заменяем на ваше имя пользователя в Ubuntu.
Осталось установить SSH-сервер. Как уже говорилось, это нужно лишь в том случае, если необходимо управлять сервером удаленно.
Открыли конфигурационный файл. Здесь я бы рекомендовал поменять порт, на котором ssh-сервер будет ожидать подключения. Находим строку
Port 22
Port 1111
и будем его использовать в дальнейших примерах.
Дальше находим строку
PermitRootLogin yes
и меняем значение yes на no.
Можно вообще запретить входить по SSH всем, кроме одного пользователя — вас. Для этого добавляем следующую строку (здесь, как всегда, user нужно заменить на ваше имя пользователя).
AllowUsers user
А теперь пробуем подключиться с удаленного устройства. Предположим, что IP-адрес сервера — 192.168.1.2. Вводим (заменив user на свое имя пользователя на сервере)
Вводим свой пароль на сервере и наслаждаемся. Чтобы отключиться, вводим exit.
Примечание. Если вы уже подключались на свой локальный web сервер с какого-либо устройства, но переустановили ОС на сервере, то после этого подключиться уже не получится. В этом случае удалите файл /home/user/.ssh/known_hosts на клиенте, подключитесь вновь и ответьте yes на вопрос Are you sure you want to continue connecting?(действительно ли вы хотите подключиться?). Все, можно работать.
Для заливки файлов на локальный web сервер удаленно также можно воспользоваться SSH, а не традиционным FTP. Можно это делать и в консоли. Но можно и проще. Показываю на примере файлового менеджера Dolphin в KDE.
В левой панели (Точки входа) жмем Сеть, здесь Добавить сетевую папку. Выбираем Папка SSH, жмем Далее и заполняем поля:
Имя — пишем что угодно, лишь бы понимать, куда мы подключаемся. Ну например, LocalServer.
Пользователь — имя пользователя на сервере.
Сервер — IP-адрес (или имя, если прописано в /etc/hosts) сервера.
Порт — мы меняли на 1111, его здесь и прописываем. Если не меняли — оставляем 22.
Протокол — выбираем fish.
Папка — для удобства пропишем корневую папку нашего web-сервера, т.е. /home/user/public_html. Теперь при подключении будем сразу попадать туда. Если оставить поле пустым — будет открываться корень Ubuntu, т.е. /.
Теперь жмем Сохранить и подключиться. И можем гонять файлы туда-сюда, как на родном компьютере.
В дальнейшем чтобы подключиться жмем Сеть и в открывшемся окне папку с земным шариком поверх с именем LocalServer.
git config —global user.name «User Name»
git config —global user.email «username@gmail.com»
Здесь username — ваше имя, а username@gmail.com — ваша существующая почта. В общем-то, это все. Об использовании Git в ближайшем будущем надеюсь написать отдельную статью.
Удаленный доступ к сайтам
Осталось понять, как зайти браузером с удаленного компьютера (в локальной сети) на наш сервер. Возьмем мою ситуацию. Напомню, сервер — на нетбуке, а работаю я на стационарном компьютере. Так вот, на компьютере открываем /etc/hosts и в новой строке прописываем
192.168.1.2 testsite
Здесь 192.168.1.2 — IP-адрес нашего сервера, testsite — имя тестового сайта (их может быть много через пробел). Теперь, набрав в адресной строке http://testsite, мы попадем именно на testsite на нашем сервере.
Владельцы и права
Вводим три команды
Здесь user — ваше имя пользователя в Ubuntu. Мы добавили себя в группу www-data (поскольку от пользователя www-data группы www-data работает Apache и, как следствие, все популярные CMS) и сделали группу www-data группой владельца корневой папки наших сайтов и присвоили для этой папки права чтения и записи для владельца и его группы. Это нужно для того, чтобы у пользователя user (от имени которого мы заливаем файлы на сервер) и пользователя www-data (от имени которого работет CMS) имели одинаковые права. При добавлении каждого сайта над его папкой нужно будет производить эту процедуру (кроме первой команды; только не ко всей public_html, а лишь к папке нового сайта). Также нужно это делать для новых файлов, требующих изменения со стороны сервера.