Установка - настройка VPS / VDS з нуля з PHP7

  1. Про VPS Даний посібник описує повний процес налаштування VPS під ваші сайти, на вашому віртуальному...
  2. Корисні утиліти
  3. послуги

Про VPS

Даний посібник описує повний процес налаштування VPS під ваші сайти, на вашому віртуальному сервері під Linux, використовуючи Apache, PHP 7, MySQL, phpmyadmin, vsftpd як FTP, і інші дрібні утиліти. Все що я знайшов в інтернеті або не повне, або місцями не підходило до сучасних реалій. Я переносив зі звичайного віртуального хостингу свій сайт, так як уперся в обмеження більшості хостерів.

Якщо ви плануєте продавати хостинг або встановлювати панель управління (ISP Manager, cPanel , Plesk і т.п.), даний метод настройки не підійде. Налаштування для такого розгортання інші. PHP7 має ряд серйозних переваг у швидкодії і оптимізації в порівнянні з PHP 5. Мої проекти на WordPress, наприклад, помітно швидше працюють. Важливо знати: якщо у вас не сильно відома CMS з останніми оновленнями, а якийсь самопісний проект, який не оптимізований під PHP7, то можливі нестиковки.

Я використовую в даному керівництві Ubuntu Server 14.04.4 LTS, також все тут описане підійде для VPS \ VDS на інших Debian - подібних дистрибутивів. Мається на увазі, що ви маєте базові знання Linux і вмієте працювати з термінальною консоллю. Я частково поясню ази, але все ж.

налаштовуємо

Отже, у нас є свіжовстановленому на VPS система і доступ по SSH. Логіном на сервер під рутом.

1. Створимо собі користувача. Працювати під рутом без потреби - ознака дурень.

adduser user

Де user - міняємо на ваш майбутній логін. Відповідаємо на питання системи, пароль придумуємо складний, ваш логін буде основним для віддаленого управління системою, рут ми надалі відключимо від віддаленого терміналу з міркувань безпеки.

2. Додаємо нашого створеного користувача в групу sudo, щоб виконувати команди з-під рута:

usermod -a -G sudo user

Плюс, додамо самого себе в групу адміністраторів:

sudo usermod -aG adm YourUserName

3. Виходимо з системи (logout) і логіном під своїм новим створеним користувачем на SSH. З цього моменту, якщо нам потрібно виконати команду від імені рута, ми використовуємо операнд sudo перед іншими операндами команди (приклади нижче).

4. Варто вам тільки опублікувати ваш сайт-адреса сервера VPS, як усілякі хакінговие боти почнуть стукати до вас на термінальний порт 22. Тому, забезпечимо термінал VPS, змінивши порт з 22 на щось інше. Як новий порт, вводимо будь-яке число від 1 до 65535. Не можна використовувати для цього порти 80, 443, 3306, 22, 21 і 8080. Вони зайняті під інші сервіси нашого VPS.

sudo nano / etc / ssh / sshd_config

Nano - консольний «блокнот». Напевно ви вже з ним знайомі, але я нагадаю базове управління: Ctrl + X - вихід, Ctrl + O - збереження, Ctrl + W - пошук, стрілки - переміщення курсору.

Шукаємо в розпочатому файлі рядок «Port 22», зазвичай вона прямо зверху. Змінюємо 22 на обраний вами порт. Далі він розтратив кнопкою PgDn до самого низу файлу і дописуємо кожну команду з нового рядка:

AddressFamily inet PermitRootLogin no AllowUsers user

Перша команда обмежує підключення тільки стандартом IPv4, відключаючи непотрібний IPv6. Друга забороняє логінитися в термінал під рутом. Третя забороняє взагалі кому небудь логінитися, крім вас - підставляйте свій логін замість user.

Зберігаємо і закриваємо, як я показував вище. Надалі все редагування файлів будуть проходити за таким сценарієм. Перезапустити віддалений термінал, щоб настройки застосувались:

sudo service ssh restart

5. Разлогінтесь з терміналу (logout), і підключіться до сервера заново, використовуючи новий порт.

6. Оновимо джерела додатків і самі додатки:

sudo apt-get update && sudo apt-get upgrade

Погоджуємося на установку оновлень натиснувши Y і Enter.

7. Якщо у вас не самої останньої версії система, має сенс оновити дистрибутив до останнього подреліза (необов'язковий крок):

sudo apt-get dist-upgrade

8. Прискорюємо загальну роботу системи - Prelink і Preload. Prelink потрібен для створення статичних адрес для бібліотек, Preload - це невелика програма, яка стежить за файлами найбільш часто використовуваних додатків, і предзагружает їх в пам'ять, поки система простоює.

sudo apt-get install prelink sudo apt-get install preload

Далі, потрібно включити Prelink:

sudo nano / etc / default / prelink

Відкриється знайомий Nano, і там змініть рядок з PRELINKING = unknown на PRELINKING = yes. Не забуваємо зберігати перед закриттям, ви ж запам'ятали вже, ага? Наступний крок - додаємо в планувальник cron щоденний запуск:

sudo /etc/cron.daily/prelink

9. C системними налаштуваннями поки закінчимо, ставимо апач:

sudo apt-get install apache2

Також, включимо mod_rewrite. Чомусь за замовчуванням в більшості систем він відключений. Відповідає за переписування білібердових посилань під красиві короткі. Критично для роботи багатьох сайтів.

sudo a2enmod rewrite

10. Далі, MySQL-сервер:

sudo apt-get install mysql-server

Установка може запитати адресу вашого сервера, вказуємо localhost, якщо ви поки не призначили зовнішній домен. Також ставимо головний пароль бази даних, складний, букви-цифри-різний регістр. Якщо ви ще не здогадалися, нагадую - все логіни-паролі потрібно записати і зберігати в безпечному місці.

MySQL сервер останніх версій коректно налаштований для роботи в нашому оточенні, приймає запити тільки від localhost. Тому, не ліземо в конфіг.

11. Ставимо php7. На момент написання статті, файлові репозиторії Ubuntu не містять PHP7, тому нам потрібно буде додати неофіційний репозиторій і з нього поставити php7:

sudo add - apt - repository ppa: ondrej / php

По закінченню додавання, запитає у вас остаточної згоди, підтверджуємо на Y і Enter. Далі оновимо список програм і встановимо потрібне:

sudo apt-get update sudo apt - get install php7. 0 - cli php7. 0 - common libapache2 - mod - php7. 0 php7. 0 php7. 0 - mysql php7. 0 - fpm php7.0-mbstring php7.0-gd php7.0-curl

Набір модулів тут мною визначено експерементально. У всіх джерелах вказані різні, десь немає mbstring, але він потрібен для phpmyadmin, адмінки для MySQL. Десь відсутня curl і gd, але вони потрібні для капчи і деяких плагінів CMS. У будь-якому випадку, додаткові модулі можна завжди доставити після.

12. поднастроіть Apache. Перейдемо (cd) в каталог з настройками апача:

cd / etc / apache2

Відредагуємо головний конфігураційний файл:

sudo nano apache2.conf

Вже встановлені змінні не чіпаємо, промотувати в кінець файлу. Там додаємо кожну команду з нового рядка:

ServerName localhost ServerSignature Off

Це задасть хост за замовчуванням для самовизначення апача (localhost) і відключить відображення версії системи і сервера на сторінках помилок. Це не безпечно. Як завжди, зберігаємо, закриваємо.

13. поднастроіть PHP.

cd /etc/php/7.0/apache2 sudo nano php.ini

Багато скрипти використовують короткий тег відкриття, замість повного, тому включимо цю опцію, замінивши Off на On (звідси і далі вказую то, як повинно бути, а не як було):

short_open_tag = On

Розсунемо обмеження по пам'яті і завантаження файлів:

memory_limit = 128M post_max_size = 64M

14. Встановимо phpmyadmin. Це графічна панель управління базами даних MySQL. Перший раз коли я його ставив з apt сховища, він не злетів. Виявилося, репозиторії ubuntu не містять останньої версії phpmyadmin, яка розуміє PHP7, так як і самого PHP7 в цих репозиторіях теж немає.

Найкраще встановлювати в / usr / share:

cd / usr / share

Качаємо, на момент написання, остання версія 4.6.0:

sudo wget https://files.phpmyadmin.net/phpMyAdmin/4.6.0/phpMyAdmin-4.6.0-all-languages.zip

Встановимо unzip, він знадобиться:

sudo apt-get install unzip

Разархівіруем:

sudo unzip phpMyAdmin-4.6.0-all-languages.zip

Перейменуємо папку:

sudo mv phpMyAdmin-4.6.0-all-languages ​​phpmyadmin

Приліпити права:

sudo chmod - R 0755 phpmyadmin

Відредагуємо конфиг-файл апача, щоб він знав, гдеі скать наш phpmyadmin:

sudo nano / etc / apache2 / sites - available / 000 - default. conf

Після «DocumentRoot / var / www / html» додаємо рядки:

Alias ​​/ phpmyadmin "/ usr / share / phpmyadmin /" <Directory "/ usr / share / phpmyadmin /"> Order allow, deny Allow from all Require all granted </ Directory>

Все готово, перезапустити апач:

sudo service apache2 restart

15. Після всіх маніпуляцій, у нас буде тестова сторінка апача відкриватися в браузері за адресою вашого сервера, а phpmyadmin буде доступний за адресою http: // вашсайт / phpmyadmin. Логін туди root, пароль - вказаний при установці MySQL.

16. Створимо старніцах phpinfo для перевірки роботи сервера:

cd var / www / html sudo mkdir phpinfo cd phpinfo sudo nano index.php

Вставляємо такий код в Nano і зберігаємо:

<? Php phpinfo (); ?>

Тепер за адресою http: // вашсайт / phpinfo повинна відкриватися сервісна сторінка з інформацією про PHP і підключених модулях, наприклад:

Тепер за адресою http: // вашсайт / phpinfo повинна відкриватися сервісна сторінка з інформацією про PHP і підключених модулях, наприклад:

Якщо все працює і відображається, приховайте phpinfo, змінивши назву цієї папки на якусь тільки вам відому біліберду:

cd / var / www / html sudo mv phpinfo phpinfo312341

Прямий доступ за відомим шляху - діра в безпеці VPS.

17. Поставимо FTP. Використовуємо vsftpd:

sudo apt-get install vsftpd

Правимо конфігурацію:

sudo nano /etc/vsftpd.conf

Переконайтеся, що параметри в цьому файлі відповідають наведеним нижче. Якщо параметри закоментовані знаком #, розкоментуйте його, видаливши #. Якщо параметра немає, додайте вручну в кінець файлу:

anonymous_enable = No local_enable = YES write_enable = YES

Перезапустити фтп:

sudo service vsftpd restart

Після цього, можна логінитися на сервер по FTP, використовуючи логін і пароль від системи. C цим конфіг, у вас буде доступ до ВСІЄЇ операційній системі. Якщо вам потрібно обмежити доступ до папок, пошукайте в інтернеті керівництва.

18. Створення резервної копії. Альфа і Омега адміністрування VPS. Бекапи треба робити хоча б раз на тиждень. Наступний скрипт створює архів з резервних копій папок / var / www (де зазвичай лежать сайти), / etc, / var / log і / root. Також бекапіт всі бази MySQL. Скрипт слід виконувати від імені рута з папки, в якій будуть зберігається бекапи. Також, бажано внести файл скрипта в cron. Власне, скрипт:

#! / Bin / bash USER = root # юзер бази даних PASSWORD = password # пароль BACKUP = / media / Backup # куди зберігати бекапи LOG = / var / log # директорія для чищення старих балок OLD = 30 # скільки днів зберігати бекапи (більш старі буде віддалятися) PREFIX = work # якщо кілька серверів - використовуйте різні префікси, щоб не плутатися DATE = `date '+% Y-% m-% d'` echo "Backup database to $ BACKUP" mkdir $ BACKUP / $ DATE. sql cd $ BACKUP / $ DATE.sql for i in `mysql -u $ USER -p $ PASSWORD -e'show databases; ' | grep -v information_schema | grep -v Database`; do mysqldump -u $ USER -p $ PASSWORD $ i> $ DATE- $ i.sql; done cd .. tar -cjf $ BACKUP / $ DATE-sql- $ PREFIX.tar.bz2 ./$DATE.sql rm -rf ./$DATE.sql echo "Backup files to $ BACKUP" tar -cjf $ BACKUP / $ DATE-files- $ PREFIX.tar.bz2 \ / var / www / \ / etc / \ / var / log / \ / root / \ --exclude = $ BACKUP echo "Deleting old backups and logs from $ BACKUP & $ LOG "find $ LOG -type f \ (-name" * .gz "-o -name" * .1 * "\) -exec rm '{}' \; find $ BACKUP -mtime + $ OLD -exec rm '{}' \;

Зверніть увагу, верхні кілька рядків скрипта потрібно змінити відповідно до вашої конфігурацією MySQL.

Припустимо, у нас в корені буде папка / backup і в ній буде і скрипт, і самі резервні копії. Переходимо в корінь файлової системи:

cd / sudo mkdir backup cd backup sudo nano start.sh

І вставляємо туди скрипт вище. Зберігаємо, призначаємо його виконуваним:

sudo chmod + x start.sh

Тепер, командою:

sudo ./start.sh

Ми запустимо процес бекапа. Для середнього сайту на середньої потужності VPS це займає 5-10 хвилин. Після закінчення процесу, в папці / backup будуть кілька архівів з резервними копіями. Як я говорив вище, найкраще цей скрипт запхати в cron. Погуглити, як це зробити.

На цьому основна настройка сервера закінчена - ми отримали повністю робочий, сучасний і продуктивний веб-сервер на VPS. Я не торкнувся деякі дрібні питання, пов'язані з налаштуванням доступів на веб-сервері, так як цим часто займаються адміни і на звичайному віртуальному хостингу, які як раз і перелазять з часом на VPS.

Корисні утиліти

Варто згадати деякі корисні утиліти, якими я користуюся в адмініструванні, і які можуть стати в нагоді вам.

WP-CLI

Це командна утиліта для адміністрування WordPress з термінальною консолі Linux. Вміє дуже багато, бекапіть, копіювати дані в базі даних, відключати і включати плагіни і так далі. Дуже корисно, у випадках якщо у вас конфлікт плагінів, або ви десь накосорезілі і админка сайту у вас відвалилася. Детальніше тут .

Multitail

Програма для читання логів з просунутим висновком. Виводить вміст лог-файлів і дозволяє спостерігати за їх змінами в реальному часі з підсвічуванням синтаксису. дивимося тут .

Htop

Повний аналог «Диспетчера завдань» з Windows для термінальної консолі. Дуже корисна річ для моніторингу процесів, пам'яті, завантаження і управління процесами. Ставиться командою:

sudo apt-get install htop

І викликається (хто б думав) командою:

htop

Let's Encrypt

Безкоштовний сервіс для видачі SSL сертифікатів. Відмінний варіант для перекладу вашого сайту на HTTPS. Більше в моїй окремій статті тут .

послуги

Якщо для вас все це складно, ви не впевнені в собі, або хочете додаткової підтримки, то я готовий взятися за перенесення \ установку вашого проекту на VDS \ VPS або виділений сервер. Більше 5 років досвіду в адмініструванні мережевих і веб-проектів. У реальному житті працюю системним адміністратором. Первинна консультація безкоштовно! Зв'яжіться зі мною зручним для вас способом через розділ Контакти .

Не забуваємо зберігати перед закриттям, ви ж запам'ятали вже, ага?
Php phpinfo (); ?