УСТАНОВКА
Устанавливаем 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
УСТАНОВКА СОФТА И НАСТРОЙКА
Если это виртуалка то ставим 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 ~
ЭТУ ЖЕ САМУЮ ОПЕРАЦИЮ НЕОБХОДИМО ВЫПОЛНИТЬ ИЗ ПОД КАЖДОГО НОВОГО ПОЛЬЗОВАТЕЛЯ — СГЕНЕРИТЬ КЛЮЧИ ДОСТУПА К МАШИНЕ ИЗВНЕ (ЕСЛИ ТРЕБУЕТСЯ).
ДОСТУПА ПО ПАРОЛЮ НЕ БУДЕТ ! ЗАБУДЬТЕ ! пароли воруют. Особенно при передаче скайпом в кафе на бесплатном вайфай :-).
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
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
shapt-get install mysql-server
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
Повышаем безопасность CGI согласно статье
https://habrahabr.ru/post/100961/
ищем
;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
сразу конфиги выложу, а то статья уже резиновая
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/*/*; }
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"
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)
Слушай, оформи статью — я всё понимаю, время, деньги, но пожалей читателей. Ещё капсом тут не писали...
Есть же Markdown.
форму создания статей улучши :)
а то ни подсказок о маркдауне ни элементов редактора.
в идеале банальный бб-редактор сделай, чтобы было красиво.
Как это нет подсказок? Внимательнее смотри:
Кнпоок для форматирования нет, но на GitHub их тоже нет и никто не жалуется. Для статей они бесполезны, ибо надо мышкой возить. Препросмотр есть.
Оформлять BB-кодами статьи это прошлый век.
Я знаю, что у них на сайте именно так, но интересно, почему не curl и rm? У PHP могут быть отключены fopen_wrappers, да и писать же длинно.
Тогда уж ~ /\., ибо кроме .ht* есть не менее интересные файлы и папки .git, .svn и т.д.
я думаю либо дело вкуса либо подразумевается отсутствие модуля курл
Я про нативный curl. Во многих ли системах присутствует PHP, но отсутствует curl? Или если удалили curl ради каких-то целей, то зачем оставлять PHP, через который можно сделать то же самое (или с модулем curl, или через fopen_wrappers)? ИМХО, curl без php это понятно, но php без curl, когда последний идёт штатно — совершенно не понятно, зачем.
Многие проекты диктуют требования — максимальная производительность и/или безопасность и/или обеспечение hi-load.
Админам приходится удалять неиспользуемые модули php, иногда требуется пересобрать php не через загружаемый бинарник получаемый пакажом от операционки, а путём компиляции, да ещё и с интеграцией необходимых модулей в компилируемую сборку таким образом, чтобы в следствии отключать подгружаемые модули, как функцию, которая высвобождает большие ресурсы при большом кол-ве уникальных посетителей (hi-load).
По теме курла.
В системе debian 8.5 (сейчас, текущая) по умолчанию НЕТ курла. Его надо доустанавливать руками.
Только что проверил на виртуалке, установленной с нуля (из пакетов только standard utils).
Коротко говоря:
Боевой сервер должен обеспечивать hi-load и безопасность. И наличие там «удобств» ведёт в вероятным потерям производительности и невероятным финансовым потерям от взлома.
Сервер для разработки в принципе может нести что и как угодно на себе и в себе, главное чтобы доступ к нему был затруднён любым способом тем, кто не входит в круг разработчиков.
Это может быть мудрёное имя домена/хоста, вход по ключу, а не по паролю, да что угодно...
Понятно. Я обычно работаю с CentOS и Ubuntu, там попадаются супер-минималистичные сборки без curl и cron, но редко. Всё равно тот же curl почти всегда нужен для обычных задач типа загрузки ключей для gpg и apt, сборки из исходников и так далее.
Я с трудом могу представить гипотетический сценарий, когда отсутствие curl спасает от взлома, ИМХО слишком много векторов для атаки, если уже есть доступ к shell.
в дебиане апт в состоянии загрузить ключ и сам.
Да и не надо привязываться только к курлу, смотри шире на всю систему в целом, а то за отсутствием курла не увидишь PermitEmptyPasswords yes в конфигурации sshd
По операционкам и всяким там билдам и веткам отдельных линуксов хочу заметить, что из линуксов знаю следующие сертифицированы в качестве промышленных Red Hat, SUSE, Debian, Ubuntu.
Возможно (не интересовался) в этом списке Centos так как на нём строили и vmware esx(i) и XenServer. Сейчас vmware esx(i) живёт на базе Red Hat, а XenServer не скажу (не знаю текущего положения дел).
Старайтесь использовать проверенные, стабильные и медленно развивающиеся дистрибутивы линукса, такие как debian, centos, redhat ибо они и есть стандартизированные для промышленного использования, где скорость развития дистрибутива и есть яркий показатель жёсткой стандартизации/сертификации (процесс долгий и трудоёмкий — проверить всё и вся перед выпуском нового билда).
Не путайте со слабыми командами, которые медленно развивают свой дистрибутив ввиду малой численности.
Подскажи в каком месте должен лежать фаил ~/.profile ?
в профиле пользователя
Ты имеешь ввиду в домашней директории пользователя создать фаил .profile ? у меня Debian 7...
Все разобрался ))
/etc/profile
~/.profile
ты не прав, — у файлов даже название разное.
"~/" означает домашний каталог пользователя
выполни "cd " и где бы ты ни был — перейдёшь в домашний каталог пользователя.
кстати правильно говорить «директория», ни «папка» ни «каталог».
Вот теперь дошло, опять таки через ls файла не видно, но через: nano .profile набирается... Из гайда обывателю сразу не понять.
а где вы видели обывателя разворачивающего хостинг? :)
Действительно, это основы Linux...
~ это домашняя папка (/root, /home/user), а .file — скрытая папка/файл, показывается не через
shls
, а черезshls -a
(«all»).p.s: «папка» короче, чем «директория».