Сервер
June 23, 2022

Сервак на Orange Pi PC с своим сайтом за сутки

  • Покупаем Orange Pi PC (далее Апельсинка).
  • Нужна зарядка - сойдёт блок питания от сотового на 2 ампера, 5 вольт. Количество ампер зависит от подключённых устройств.

Для подключения старенького монитора я использовал переходник HDMI->VGA (слева)

  • Флешка на 16гб micro SD + переходник на SD для подключения к ноуту (необязательно).
  • Ethernet провод для подключения интернета (беленький на картинке)
  • Радиаторы (необязательно).
  • Качаем дистрибутив Debian отсюда.
  • Ставим на ноут с линуксом Etcher.
  • Вставляем флешку в ноут, через Etcher пишем образ на флешку.
  • Вставляем флешку в сервер, подключаем блок питания.
    Сервер горит красным - это питание подано. Горит зелёным - запускается.
    Если хотим работать через монитор с клавиатурой, подключаем их до запуска.
    Если используем без монитора и клавиатуры, тогда ищем "серый" IP сервера в роутере и подключаемся к нему по ssh (допустим через Putty) с любого домашнего компьютера.
  • При успешном прохождении предыдущих пунктов видим приветственное сообщение, температуру компа.

Если устанавливали с визуальной оболочкой, допустим Armbian, то можно подключить монитор напрямки к Апельсинке и спокойно пользоваться новым компьютером. Скорость слабовата, но мелкие задачи выполнятся. Тот же ютубчик.

  • Меняем пароль у root и orangepi.
passwd
  • Переключение между пользователями.
su - root
sudo adduser <ВЫ>
sudo adduser <ВЫ> sudo
  • Подключаем белый IP у провайдера.
  • Создаём свой домен через какой-нибудь сайт.
  • Подключаем к домену свой белый IP (ждать от 2 до 24 часов).
  • Настраиваем на роутере подключение через DMZ серого IP Апельсинки к белому IP. Теперь у нас кто попадёт на наш домен, летит в белый IP, который по DMZ летит в серый IP и на Апельсинку.
  • Открываем WinSCP на Windows либо FileZilla на Linux. Подключаемся к серому хосту из роутера, порт по умолчанию 22, логин и пароль новые (которые ввели в sudo adduser <ВЫ>).
/etc/network/interfaces
  • Меняем на
source /etc/network/interfaces.d/*
# Network is managed by Network manager
#auto lo
#iface lo inet loopback
#allow-hotplug eth0
iface eth0 inet static
address ВАШ_СЕРЫЙ_IP
netmask 255.255.255.0
gateway 192.168.0.1
#auto lo
#iface lo inet loopback

#auto eth0
#iface eth0 inet static
#address ВАШ_БЕЛЫЙ_IP
#gateway 192.168.0.1
#netmask 255.255.255.0

Где 192.168.0.1 - это адрес роутера в домашней сети

  • Если не удалось через файлы подправить, идём в консоль
sudo nano -wuc /etc/network/interfaces

Вставляем портянку текста с предыдущего пункта

CTRL + X    
Y
Enter   
  • Перезагружаемся, введя в консоль reboot
    Если под вашим пользователем не даёт перезагрузиться, переключаемся в root (su - root) и вводим reboot
  • Если хотим запускать Putty всегда залогиненным, создаём ярлык и в "Объект" пишем
C:\PuTTY\putty.exe -ssh ПОЛЬЗОВАТЕЛЬ@СЕРЫЙ_IP -pw ПАРОЛЬ
  • Обновляемся. Жмём Y где просит
sudo apt update && sudo apt upgrade -y 
  • При желании на Апельсинку можно даже с мобилы заходить
  • Ставим apache
sudo apt-get install apache2
sudo groupadd mgroup
sudo gpasswd -a <ВЫ> mgroup
sudo chown -R root:mgroup /var/www
sudo chmod 775 /var/www/www

Где mgroup - название группы

  • При обращении к серверу должно вывестись стандартное окно приветствия Apache. Это значит, что на Апельсинке уже работает html и мы можем его показать пользователям.
  • Ставим php7.4
sudo apt -y install lsb-release apt-transport-https ca-certificates
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt update
sudo apt -y install php7.4

php -v для проверки

Если ошибка вида:

 Fatal error: Uncaught Error: Call to undefined function Symfony\Component\Console\mb_detect_encoding() in /usr/share/php/Symfony/Component/Console/Application.php:1178
Stack trace:

то ставим ему ту программу, которой не хватает

sudo apt-get install php7.4-mb_detect_encoding
  • Apache + PHP стоят, теперь надо подключить любую БД, чтоб поднять минимальный сайт.
  • Ставим плагин postgresql для PHP
sudo apt -y install php7.4-pgsql
  • Ставим БД
sudo apt install postgresql
sudo -u postgres psql
create database basa;
create user <ВЫ> with encrypted password 'ПАРОЛЬ';
grant all privileges on database basa to <ВЫ>;

Открываем файл etc\postgresql\11\main\postgresql.conf, добавляем

listen_addresses = '*'     # what IP address(es) to listen on;
CTRL+D
sudo service postgresql restart
  • Есть альтернатива phpmyadmin, называется Adminer. Сделан на PHP одним файлом, функции те же. Качаем последнюю версию отсюда.
    Ставим php файл на Апельсинку куда-нибудь в /var/www/html/
    Открываем <ВАШ_ДОМЕН>/adminer.php

Движок PostgreSQL
Сервер 127.0.0.1 Имя пользователя <ВЫ> Пароль ПАРОЛЬ База данных basa

Создаём таблицы.
Для выхода из пользователя postgres используем CTRL+D

  • Настраиваем HTTPS, SSL, UFW с гайда (certbot).
sudo nano /etc/apt/sources.list

Добавляем:

deb http://ftp.debian.org/debian buster-backports main
sudo apt update
sudo apt install python-certbot-apache -t buster-backports
sudo apt update
sudo apt install ufw
sudo ufw allow OpenSSH
sudo ufw allow 'WWW'
sudo apt install curl
su - root
sudo mkdir -p /var/www/site/html
sudo chmod -R 755 /var/www/site
sudo a2ensite ваш_сайт.рф.conf
systemctl reload apache2
sudo a2dissite 000-default.conf
systemctl reload apache2
sudo ufw allow 'WWW Full'
sudo ufw delete allow 'WWW'
sudo certbot --apache -d ваш_сайт.рф -d www.ваш_сайт.рф

Enter email address - вводим своё мыло, далее со всем соглашаемся
Which virtual host would you like to choose? - Выбираем 2 (где есть HTTPS)
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - Выбираем 1: No redirect

  • Должен стать доступным домен через https
  • Проверяем нашу "адекватность" на ssllabs. Нужно для некоторых сервисов, допустим ботов ВК или Telegram. Вставляем наш новый домен с https и проверяем статус.
СТатус сайта на ssllabs

Если А или А+, значит нормально. Если меньше, пробуем поднимать.
Если В и ошибка "This server supports TLS 1.0 and TLS 1.1. Grade capped to B.", то Открываем \etc\letsencrypt\options-ssl-apache.conf и вписываем:

#SSLProtocol             all -SSLv2 -SSLv3
SSLProtocol             all -SSLv2 -SSLv3  -TLSv1.1 -TLSv1

Эти штуки придётся менять если будете в дальнейшем настраивать VPN.

sudo reboot
  • Удаление постгре если нужно:
service postgresql stop
sudo apt-get --purge remove postgresql postgresql-*
apt autoremove -y
apt-get remove pgdg-keyring --purge
rm -f /etc/apt/sources.list.d/pgdg.list
rm -rf /var/lib/postgresql
  • Установка Wordpress
sudo apt install mysql-client mysql-server

если выходит ошибка:

Package mysql-client is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

то ставим другое + плагин для пыхи:

sudo apt install mariadb-server
sudo mysql_secure_installation
sudo mysql -u root -p
sudo apt-get install php7.4-mysql

Проваливаемся в сам MySQL для настройки БД:

mysql> CREATE DATABASE wp_database;
mysql> CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON wp_database.* TO 'wp_user'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> EXIT;

Вуаля, в конфиге можно настраивать наш Wordpress по ВАШ_САЙТ/wp-admin/setup-config.php

Для меня некоторые плагины работали медленно, возможно можно было что-то улучшить, но я не стал.

Итог

Потратились мы на плату (4500), флешку(500-700), зарядку(дома всегда есть), домен(200 в год) и у нас есть свой сайт, работающий из дома. Если купить Orange PI PC Plus, будет доступен модуль Wi-Fi. Иначе можно просто докупить простенький USB Wi-Fi адаптер, чтоб не привязываться дома к проводу, но тогда нужно настраивать роутер от неожиданных отключений света или сбоев напряжения и перенастройки DMZ.

Сайт мишген.рф

Пользуйтесь. Удачи в начинаниях!

Ссылки