Может войдёшь?
Черновики Написать статью Профиль

Установка и настройка Debian Linux в качестве хостинга

хостинг debian

УСТАНОВКА

Устанавливаем Debian Linux (amd64) с параметрами по умолчанию — по обыкновению протыкиваем всё всквозную...

Нюансы:

1. При выборе языка — выбираем по умолчанию и ищем своё расположение при выборе страны размещения сервера.

2. При настройке пользователя:
а) root дозволено логиниться
б) пароль root (потом смените)
в) нормальных пользователей НЕ добавляем (пока не надо)
г) по умолчанию локаль ввода en_US.UTF-8 плюс ваша родная локаль, как дополнительная.

3. При разметке диска указываете Manual
Внутри:
Если диск чистый (нет строки FREE SPACE, выбираем корневую запись нашего жёсткого диска ⇒ Yes ⇒ msdos
Если диск не пустой — желательно зачистить его таким же способом, дабы избежать побочных телодвижений по дозачистке от того, чем не пользуетесь, и место кончилось...
Далее, первым ставим swap-раздел равный размеру оперативной памяти+256мб. Если у Вас 2 гига памяти на машине — swap = 2048+256 = вводите «2304 mb»; На виртуалках swap размещается в конце диска, чтобы не мешал. На физических машинах желательно в центр диска.
Потом ставим корневую партицию с файловой системой ext4.
Если у Вас высокие или аггресивные нагрузки на файловую систему, то выделяете отдельную партицию /home с файловой системой xfs

4. Конфигурирование Package Manager
Use a Network Mirrir: Yes
Use non-free software: Yes
Выберите все сервиса для использования, когда спросит (надо довыбрать backports)

5. Select and Install Software
Должно быть выбрано SSH Server + standard system utilities

FINISH

УСТАНОВКА СОФТА И НАСТРОЙКА

Если это виртуалка то ставим open-vm-tools
apt-get install open-vm-tools
Это позволит Хосту виртуализации видеть нашу гостевую машину (обычно актуально для vSphere / Workstation / Xen Server )

Обязательный набор софта для комфортной жизни:
(для боевого хоста 99% не нужно, так как его функция отнюдь не удобства предоставлять)

shapt-get install mc zip unzip rar unrar arj putty-tools

запускаем mc и по желанию настраиваем как нужно.

для удобства правим файл .profile добавляя в конце mc

НАСТРОЙКА ПОЛЬЗОВАТЕЛЕЙ

!!! ИЗ ПОД ROOT'А НИЧЕГО НЕ КРУТИМ И НЕ ВЕРТИМ НА СЕРВЕРЕ ! НИКОГДА !

добавляем папки

shmkdir /etc/skel/logs
mkdir /etc/skel/tmp
mkdir /etc/skel/www

Обязательно выходим из mc (F10)

исполняем (passphrase оставляем пустым — прокликиваем ENTER'ом):

shssh-keygen -t dsa
cd ~/.ssh
# создаём публичный пул ключей
cat id_dsa.pub > authorized_keys
# генерим ключи для путти
puttygen id_dsa -O private -o id_dsa.ppk
rm *.pub
chmod 0600 *
cd ~

запускаем mc

ЭТУ ЖЕ САМУЮ ОПЕРАЦИЮ НЕОБХОДИМО ВЫПОЛНИТЬ ИЗ ПОД КАЖДОГО НОВОГО ПОЛЬЗОВАТЕЛЯ — СГЕНЕРИТЬ КЛЮЧИ ДОСТУПА К МАШИНЕ ИЗВНЕ (ЕСЛИ ТРЕБУЕТСЯ).
ДОСТУПА ПО ПАРОЛЮ НЕ БУДЕТ ! ЗАБУДЬТЕ ! пароли воруют. Особенно при передаче скайпом в кафе на бесплатном вайфай :-).

Настраиваем SSHd

/etc/ssh/sshd_config

confPermitRootLogin yes
PasswordAuthentication yes

исполняем:

shservice ssh restart

Настраиваем putty для входа и входим.
Если удачно, то идём /etc/ssh/sshd_config и отключаем парольный доступ
PasswordAuthentication no

УСТАНОВКА ВЕБ СЕРВЕРА, СЕРВЕРОВ БД И PHP5

(php7 в дебиан 8 пока нет)
# NGINX

shapt-get install nginx-full mcrypt memcached

# PHP5

shapt-get install php5-fpm php-pear php5-imagick php5-mcrypt php5-memcache php5-memcached php5-dev php5-curl php5-apcu php5-json php5-gd

# MySQL

shapt-get install mysql-server

#PostgreSQL

shapt-get install postgresql-server

У нас не будет апача — к чёрту его. У нас будет Nginx+PHP5-FPM

COMPOSER

Согласно инструкции
https://getcomposer.org/download/

shcd ~
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === 'e115a8dc7871f15d853148a7fbac7da27d6c0030b848d9b3dc09e2a0388afed865e6a3d6b3c0fad45c48e2b5fc1196ae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/bin/composer

СОЗДАНИЕ ПОЛЬЗОВАТЕЛЯ ДЛЯ ПРОЕКТА НА LARAVEL

исполняем:

shadduser lara

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

В папке /home появится папка lara — домашняя директория пользователя

НАСТРАИВАЕМ ВЕБ СЕРВЕР, БД, РНР ДЛЯ ПОЛЬЗОВАТЕЛЯ lara

PHP5

Повышаем безопасность CGI согласно статье
https://habrahabr.ru/post/100961/

/etc/php5/fpm/php.ini

ищем
;cgi.fix_pathinfo=1
меняем на
cgi.fix_pathinfo=0

/etc/php5/fpm/pool
удаляем всё
создаём файл lara.conf ( USERNAME.conf )

shtouch /etc/php5/fpm/pool/lara.conf

с содержимым

conf[lara]
user = $pool
group = www-data

listen = /var/run/php5-fpm.$pool.sock
listen.owner = $pool
listen.group = www-data
listen.mode = 0660

pm = dynamic
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.status_path = /fpmstat

php_admin_value[display_errors] = Off
php_admin_value[log_errors] = On
php_admin_value[upload_tmp_dir] = /home/$pool/tmp
php_admin_value[session.save_path] = /home/$pool/tmp
php_admin_value[sendmail_path] = "/usr/sbin/sendmail -t -i -f $pool@localhost"

request_slowlog_timeout = 3s
slowlog = /home/$pool/logs/php5-fpm.$pool.slow.log

chdir = /
security.limit_extensions = .php

В итоге:
— все файлы php создаёт от пользователя lara и группы www-data, что позволит владельцу владеть файлами, а вебсерверу их крутить и вертеть, как тому надо.
— собственная папка tmp для временных файлов
— собственные логи web-сервера и php (донастроете если надо будет)
— отправка почты через php mail()

Исполняем:

shservice php5-fpm restart

НАСТРОЙКА NGINX

сразу конфиги выложу, а то статья уже резиновая

/etc/nginx/nginx.conf

confuser www-data;
worker_processes 3; # по единичке на ядро проца
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
    # multi_accept on;
}

http {
    sendfile                                    on;
    tcp_nopush                              on;
    tcp_nodelay                             on;
    keepalive_timeout                   200;
    types_hash_max_size               2048;
    server_tokens                          off;
    server_name_in_redirect         off;
    server_names_hash_bucket_size   64;
    access_log                      /var/log/nginx/access.log;
    error_log                        /var/log/nginx/error.log;
    gzip                               on;
    gzip_disable                  "msie6";
    limit_conn_zone            $binary_remote_addr             zone=download_c:10m;
    limit_req_zone              $binary_remote_addr             zone=search_r:10m rate=1r/s;
    include                         /etc/nginx/mime.types;
    default_type                  application/octet-stream;
    include                         /etc/nginx/conf.d/*.conf;
    include                         /etc/nginx/sites-enabled/*;
    include                         /etc/nginx/vhosts/*;
    include                         /etc/nginx/vhosts/*/*;
}

/etc/nginx/vhosts/lara.com

confserver {
    listen 80;
    server_name lara.comm www.lara.com;
    charset UTF-8;
    disable_symlinks if_not_owner from=$root_path;
    index index.html index.php;
    root $root_path;
    set $root_path /home/lara/www/lara.com/public;
    access_log /home/lara/logs/lara.com.access.log;
    error_log /home/lara/logs/lara.com.error.log notice;
    include /etc/nginx/vhosts-includes/*.conf;
    location ~ \.php$ {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php5-fpm.lara.sock; #тот, который мы в php5-fpm pool создавали
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

SSL сами настроете, там не сложно, но долго его генерить, а лучше его получать у https://www.startssl.com/

/etc/nginx/vhosts-includes/locations.conf

conf  location / {
      index index.html index.php index.htm;
      try_files $uri $uri/ /index.php?$query_string;
  }
  location = /favicon.ico {
      log_not_found off;
      access_log off;
  }
  location = /robots.txt {
      allow all;
      log_not_found off;
      access_log off;
  }
  location ~ /\.ht {
      deny  all;
  }

исполняем

shservice nginx restart

если ругнётся, то читайте логи.
в отдельных ситуациях ему надо видеть все директории, куда указывает document_root (у нас ещё нет lara.com/public в /home/lara/www)

ПОЛЬЗОВАТЕЛЬ И ВСЁ ИЗ ПОД НЕГО

выходим из mc (F10) если запущен

исполняем:

shsu - lara
mc

настраиваем ключи для доступа по ключу, как настраивали для root'а
забираем ключи и логинимся через putty этим пользователем.

COMPOSER И LARAVEL

исполняем:

shcomposer global require "laravel/installer"
composer global require "laravel/lumen-installer"

затем добавляем в файл

~/.profile

shellPATH="~/.composer/vendor/bin:$PATH"

после чего мы можем крафтить приложение laravel куда угодно в рамках директории пользователя.

shcd ~/www
laravel new lara.com
service nginx restart

вот и всё. технически вам останется настроить сервера БД и кастомизировать архитектуру системы как нужно проекту.

ЗАПОМНИТЕ!
НИЧЕГО!
НИКОГДА!
НЕ ИСПОЛНЯЙТЕ ОТ РУТА, ЕСЛИ ТОГО НЕ ТРЕБУЕТ СИСТЕМА.
САМОВОЛЬНЫЕ ПОПЫТКИ ЗАПУСТИТЬ ВЕБСЕРВЕР ИЛИ РНР ОТ РУТА ВЕДУТ К САМЫМ ЖЕСТОКИМ ПОСЛЕДСТВИЯМ !

КРОН

Ваш кронтаб ещё не существует.
Из под рута создайте файл /var/spool/cron/crontabs/lara

shtouch /var/spool/cron/crontabs/lara
chown lara:lara /var/spool/cron/crontabs/lara
chmod 0600 /var/spool/cron/crontabs/lara

запуск задач от лары

* * * * php /home/lara/www/lara.com/artusan scheduler:run

Как вы считаете, полезен ли этот материал? Да Нет

Комментарии (18)

Proger_XP
  1. ЗАПОМНИТЕ!
  2. НИЧЕГО!
  3. НИКОГДА!

Слушай, оформи статью — я всё понимаю, время, деньги, но пожалей читателей. Ещё капсом тут не писали...

Есть же Markdown.

hzone

форму создания статей улучши :)
а то ни подсказок о маркдауне ни элементов редактора.
в идеале банальный бб-редактор сделай, чтобы было красиво.

Proger_XP
  1. а то ни подсказок о маркдауне ни элементов редактора.

Как это нет подсказок? Внимательнее смотри:

/packages/proger/habravel/uploads/cmt-487.png

Кнпоок для форматирования нет, но на GitHub их тоже нет и никто не жалуется. Для статей они бесполезны, ибо надо мышкой возить. Препросмотр есть.

  1. в идеале банальный бб-редактор сделай, чтобы было красиво.

Оформлять BB-кодами статьи это прошлый век.

Proger_XP
shphp -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "unlink('composer-setup.php');"

Я знаю, что у них на сайте именно так, но интересно, почему не curl и rm? У PHP могут быть отключены fopen_wrappers, да и писать же длинно.

conflocation ~ /\.ht {
    deny  all;
}

Тогда уж ~ /\., ибо кроме .ht* есть не менее интересные файлы и папки .git, .svn и т.д.

hzone

я думаю либо дело вкуса либо подразумевается отсутствие модуля курл

Proger_XP

Я про нативный curl. Во многих ли системах присутствует PHP, но отсутствует curl? Или если удалили curl ради каких-то целей, то зачем оставлять PHP, через который можно сделать то же самое (или с модулем curl, или через fopen_wrappers)? ИМХО, curl без php это понятно, но php без curl, когда последний идёт штатно — совершенно не понятно, зачем.

hzone

Многие проекты диктуют требования — максимальная производительность и/или безопасность и/или обеспечение hi-load.
Админам приходится удалять неиспользуемые модули php, иногда требуется пересобрать php не через загружаемый бинарник получаемый пакажом от операционки, а путём компиляции, да ещё и с интеграцией необходимых модулей в компилируемую сборку таким образом, чтобы в следствии отключать подгружаемые модули, как функцию, которая высвобождает большие ресурсы при большом кол-ве уникальных посетителей (hi-load).
По теме курла.
В системе debian 8.5 (сейчас, текущая) по умолчанию НЕТ курла. Его надо доустанавливать руками.
Только что проверил на виртуалке, установленной с нуля (из пакетов только standard utils).

Коротко говоря:
Боевой сервер должен обеспечивать hi-load и безопасность. И наличие там «удобств» ведёт в вероятным потерям производительности и невероятным финансовым потерям от взлома.
Сервер для разработки в принципе может нести что и как угодно на себе и в себе, главное чтобы доступ к нему был затруднён любым способом тем, кто не входит в круг разработчиков.
Это может быть мудрёное имя домена/хоста, вход по ключу, а не по паролю, да что угодно...

Proger_XP
  1. В системе debian 8.5 (сейчас, текущая) по умолчанию НЕТ курла.

Понятно. Я обычно работаю с CentOS и Ubuntu, там попадаются супер-минималистичные сборки без curl и cron, но редко. Всё равно тот же curl почти всегда нужен для обычных задач типа загрузки ключей для gpg и apt, сборки из исходников и так далее.

Я с трудом могу представить гипотетический сценарий, когда отсутствие curl спасает от взлома, ИМХО слишком много векторов для атаки, если уже есть доступ к shell.

hzone

в дебиане апт в состоянии загрузить ключ и сам.
Да и не надо привязываться только к курлу, смотри шире на всю систему в целом, а то за отсутствием курла не увидишь PermitEmptyPasswords yes в конфигурации sshd

hzone

По операционкам и всяким там билдам и веткам отдельных линуксов хочу заметить, что из линуксов знаю следующие сертифицированы в качестве промышленных Red Hat, SUSE, Debian, Ubuntu.
Возможно (не интересовался) в этом списке Centos так как на нём строили и vmware esx(i) и XenServer. Сейчас vmware esx(i) живёт на базе Red Hat, а XenServer не скажу (не знаю текущего положения дел).

Старайтесь использовать проверенные, стабильные и медленно развивающиеся дистрибутивы линукса, такие как debian, centos, redhat ибо они и есть стандартизированные для промышленного использования, где скорость развития дистрибутива и есть яркий показатель жёсткой стандартизации/сертификации (процесс долгий и трудоёмкий — проверить всё и вся перед выпуском нового билда).
Не путайте со слабыми командами, которые медленно развивают свой дистрибутив ввиду малой численности.

OVF

Подскажи в каком месте должен лежать фаил ~/.profile ?

hzone

в профиле пользователя

OVF

Ты имеешь ввиду в домашней директории пользователя создать фаил .profile ? у меня Debian 7...

OVF

Все разобрался ))
/etc/profile
~/.profile

hzone

ты не прав, — у файлов даже название разное.
"~/" означает домашний каталог пользователя
выполни "cd " и где бы ты ни был — перейдёшь в домашний каталог пользователя.
кстати правильно говорить «директория», ни «папка» ни «каталог».

OVF

Вот теперь дошло, опять таки через ls файла не видно, но через: nano .profile набирается... Из гайда обывателю сразу не понять.

hzone

а где вы видели обывателя разворачивающего хостинг? :)

Proger_XP

Действительно, это основы Linux...

~ это домашняя папка (/root, /home/user), а .file — скрытая папка/файл, показывается не через shls, а через shls -a («all»).

p.s: «папка» короче, чем «директория».

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.