Microsoft Azure установка/настройка WEB сервера
- ROOT /
- Linux
- 04.12.2015
- job
- 10852
Сразу обращаю внимание посетителей, я не являюсь Linux гуру, а всего лишь программист которому интересно что-то творить, поэтому на вопросы как настроить это или то ответить не смогу. Инструкция скорей рассчитана на таких как я, пытающихся что-то сделать самостоятельно.
Небольшая инструкция по установке и настройке Web-сервера на Microsoft Azure. За основу берем Ubuntu 14.04, сервер будет работать на NGINX + LAMP, php модулем mod_fcgid, в качестве ftp сервера возьмем VSFTPD. Приступим!
Добавляем новую виртуальную машину и настраиваем конфигурацию Ubuntu Server 14.04 LTS. Инфраструктуру системы выбираем DS1 Standart, позже создадим хранилище и примонтируем к рабочей папке. Выбираем датацентр, описывать не стану ниже по скринам думаю понятно. Жмем создать и ждем!
Виртуальный сервер создан, приступаем к первичной настройке. Добавим новый диск в окружение, и настроем firewall открываем порты для nginx, apache, ftp.
Отлично, настройка виртуальный машины и его окружения закончена, переходим к установке web-сервера
Авторизовываемся на сервере по SSH протоколу используя логин и пароль указанный при установке виртуальной машины dev
адрес сервера aspr.cloudapp.net
или 168.61.110.141
sudo -i // переход в root
Находим диск командой:
dmesg | grep SCSI
dmesg | grep SCSI [ 0.313609] SCSI subsystem initialized [ 0.589134] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252) [ 6.098257] sd 2:0:0:0: [sda] Attached SCSI disk [ 6.215376] sd 3:0:1:0: [sdb] Attached SCSI disk [ 8.185439] sd 5:0:0:0: [sdc] Attached SCSI disk
Диск sdc является именно тем диском, который мы создали и подключили к виртуальной машине. Теперь разобьем диск с помощью sudo fdisk /dev/sdc, установим его как основной раздел 1 и примем остальные значения по умолчанию.
fdisk /dev/sdc Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x2a59b123. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-419430399, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-419430399, default 419430399): Using default value 419430399 Command (m for help): p Disk /dev/sdc: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders, total 419430400 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x2a59b123 Device Boot Start End Blocks Id System /dev/sdc1 2048 419430399 209714176 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
Запишем файловую систему на раздел:
sudo mkfs -t ext4 /dev/sdc1
Теперь нам необходимо примонтировать новый диск к папке с данными web сервера /var
mkdir /tmp/var # создаем временную папку ls /var # проверяем, что там лежит mount /dev/sdc1 /tmp/var # монтируем диск во временную папку ls /tmp/var # проверим не лежит ли там чего лишнего, т.к. папка нам нужна пустой lost+found rm -rf /tmp/var/lost+found # удаляем его cp -ax /var /tmp # копируем каталог /var в новый раздел umount /dev/sdc1 # отмонтируем диск rm -rf /tmp/var # теперь можно удалить временную папку rm -rf /var # и оригинал mkdir /var # пересоздаем папку mount /dev/sdc1 /var # подключаем раздел к /var ls /var # проверяем. если папки на месте, все хорошо.
Остается добавить монтирование в автозагрузку
nano /etc/fstab
# добавим свою запись на монтирование, запись в строке разделяется клавишей [tab] /dev/sdс1 /var ext4 defaults 0 2
Давайте перезагрузим сервер, лишний раз проверить автомонтирование не помешает.
reboot
Приступим к установке web-сервера
apt-get update apt-get upgrade apt-get install nginx apache2 apache2-suexec libapache2-mod-fcgid php5-cgi php-pear php5-dev php5-gd mysql-server mysql-client php5-mysql postfix mc -y apt-get install libapache2-mod-rpaf -y echo It works
И так! PHP завелся, проверим работает ли Apache, открывает браузер и переходим на сервер dev.cloudapp.net или 168.61.110.141 если увидели страничку apache - радуемся
Осталось настроить бэкенд nginx на 80 порт и проксировать фронтенд apache на 81 порт. Расписывать не буду, приведу два архива с конфигурацией apache2.zip, nginx.zip
Заменяем конфигурацию на новую, на всякий случай проверяем конфиг Nginx
nginx -t
Если все нормально, перезапускаем apache и nginx
/etc/init.d/apache2 restart /etc/init.d/nginx restart
Открываем браузер и проверяем что показывает сервер. Вуаля отвечает Nginx
Мы на полпути ))) Переходим к настройке хостов, покажу на примере технического dev.cloudapp.net
Активируем Apache модули
a2enmod rewrite a2enmod suexec a2enmod include a2enmod fcgid
Открываем php.ini и меняем значение cgi.fix_pathinfo на 1
nano /etc/php5/cgi/php.ini
Открываем fcgid.conf меняем на:
nano /etc/apache2/mods-available/fcgid.conf
<IfModule mod_fcgid.c> AddHandler fcgid-script .fcgi FcgidConnectTimeout 20 PHP_Fix_Pathinfo_Enable 1 </IfModule>
Перезагружаем Апачь
/etc/init.d/apache2 restart
Создаем хост
Добавляем пользователя, группу и домашнюю папку. (не рекомендую использовать технические имена в том числе www-data)
groupadd dev useradd -s /bin/false -d /var/www/dev -m -g dev dev mkdir -p /var/www/dev/www chown dev:dev /var/www/dev/www
Проверяем Suexec, корневой директорией PHP должна быть /var/www
/usr/lib/apache2/suexec -V -D AP_DOC_ROOT="/var/www" -D AP_GID_MIN=100 -D AP_HTTPD_USER="www-data" -D AP_LOG_EXEC="/var/log/apache2/suexec.log" -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin" -D AP_UID_MIN=100 -D AP_USERDIR_SUFFIX="public_html"
Для того что бы php работал для нашего пользователя создадим исполняемый скрипт
mkdir -p /var/www/php-fcgi-scripts/dev nano /var/www/php-fcgi-scripts/dev/php-fcgi-starter
с содержанием
#!/bin/sh PHPRC=/etc/php5/cgi/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/lib/cgi-bin/php
Даем права
chmod 755 /var/www/php-fcgi-scripts/dev/php-fcgi-starter chown -R dev:dev /var/www/php-fcgi-scripts/dev
Создаем виртуальный хост Apache
nano /etc/apache2/sites-available/dev.conf
<VirtualHost *:81> ServerName dev.cloudapp.net ServerAlias www.dev.cloudapp.net ServerAdmin info @ dev.cloudapp.net //Убрать лишние пробелы DocumentRoot /var/www/dev/www/ <IfModule mod_fcgid.c> SuexecUserGroup dev dev <Directory /var/www/dev/www/> Options +ExecCGI AllowOverride All AddHandler fcgid-script .php .php3 .php4 .php5 .phtml FCGIWrapper /var/www/php-fcgi-scripts/dev/php-fcgi-starter .php Order allow,deny Allow from all </Directory> </IfModule> # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log combined ServerSignature Off </VirtualHost>
a2ensite dev
nano /var/www/dev/www/index.php
<?php phpinfo(); ?>
Создаем хост в Nginx
nano /etc/nginx/sites-available/dev
server { server_name dev.cloudapp.net www.dev.cloudapp.net; disable_symlinks if_not_owner from=$root_path; access_log /var/log/nginx/access.log; set $root_path /var/www/dev/www; location ~* ^.+\.(jpg|jpeg|gif|png|svg|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ { root $root_path; expires 720h; access_log off; log_not_found off; error_page 404 = @fallback; } location ~* ^.+\.(js|css)$ { root $root_path; expires 168h; access_log off; error_page 404 = @fallback; } location / { proxy_pass http://127.0.0.1:81; proxy_redirect http://127.0.0.1:81/ /; } location @fallback { proxy_pass http://127.0.0.1:81; } }
Создаем симлинк
ln -s /etc/nginx/sites-available/dev /etc/nginx/sites-enabled
На всякий случай проверяем создан ли симлинк на хост в Apache, по идее он создается при активации пользователя. Перезагружаем Nginx и Apache
/etc/init.d/apache2 restart /etc/init.d/nginx restart
Открываем браузер и проверяем работу PHP c бэкендом Nginx. Если видим такую картинку, значит у нас все получилось. Обращаем внимание что php работает как FastCGI.
Реализуем возможность индивидуальной настройки php для пользователей
cp /etc/php5/cgi/php.ini /var/www/dev/ chown dev:dev /var/www/dev/php.ini
Редактируем скрипт запуска php
nano /var/www/php-fcgi-scripts/dev/php-fcgi-starter
#!/bin/sh PHPRC=/var/www/dev/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/lib/cgi-bin/php
Перезагружаем Apache
/etc/init.d/apache2 reload
Установка и настройка FTP сервера.
Устанавливать будем VSFTPD
sudo apt-get install vsftpd
Устанавливаем следующие настройки
nano /etc/vsftpd.conf
listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 pasv_enable=YES pasv_address=127.0.0.1 // или внешний IP pasv_min_port=12000 pasv_max_port=12003 dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES async_abor_enable=YES chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list ls_recurse_enable=YES secure_chroot_dir=/var/run/vsftpd/empty user_config_dir=/etc/vsftpd pam_service_name=ftp rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
Создаем папку с конфигами пользователей.
mkdir /etc/vsftpd nano /etc/vsftpd/dev
добавим пользователя в белый лист (по одному в строчке)
nano /etc/vsftpd.chroot_list
Перегружаем ftp-сервер
sudo service vsftpd restart
Это типичные настройки, расширенных инструкций полно в интернете.
Вот и все на сегодня, что хотел рассказать.