Настройка сервера
Полезное#
Видео:
Вопросы, можно задать в комментариях телеграмма: TG: fitgame
Настройка DNS#
Создаем сервер, требования:
- Операционная система: Ubuntu 20.04 и выше
- Оперативная память: 1 ГБ и больше
- Диск: 10ГБ и больше
- Выделенный IP
Сохраняем логин и пароль, а также айпи адрес, в статье будет 45.131.40.167
Регистрируем домен, в статье demo-fitgame.ru
Настраиваем A запись в панели регистратора домена
Для demo-fitgame.ru (домен 2-го уровня)
- Subdomain: @
- IP Address: 45.131.40.167
Для поддомена game.demo-fitgame.ru (домен 3-го уровня)
- Subdomain: game
- IP Address: 45.131.40.167
Изменения обычно вступают в силу 15 минут, рекомендую подождать
Первые шаги#
Соединяемся с сервером
ssh root@45.131.40.167
Получаем список пакетов
apt update
Обновляем их, на вопросы отвечаем install the package maintainer's version
apt upgrade
Устанавливаем firewall и настраиваем
apt install ufw
Разрешаем заходить через ssh
ufw allow OpenSSH
Включаем firewall
ufw enable
Создаем пользователя admin и даем ему права
adduser admin usermod -aG sudo admin
Перезагружаемся
reboot
Теперь заходим под админом
ssh admin@45.131.40.167
Устанавливаем NGINX#
Устанавливаем NGINX
sudo apt install nginx
Разрешаем для firewall
sudo ufw allow 'Nginx Full'
Устанавливаем Midnight Commander (редактор файлов)
sudo apt install mc
Создаем файл с минимальной настройкой NGINX
sudo mcedit /etc/nginx/sites-enabled/game
Содержимое
server { listen 80; server_name demo-fitgame.ru; }
Перезапускаем NGINX
sudo systemctl restart nginx
Устанавливаем certbot
sudo add-apt-repository universe # sudo apt-get install software-properties-common # если не получилось sudo apt install certbot python3-certbot-nginx
Запускаем certbot
sudo certbot --nginx --redirect
Проверяем автоматическое продление
sudo certbot renew --dry-run
Вы можете установить только NGINX и пропустить PHP/nodeJS/SQL
Если пропускаете, то нужно выполнить эту команду, иначе можете не выполнять и перейти к следующей
sudo chmod -R 777 /var/www/
Устанавливаем PHP#
Устанавливаем PHP
sudo apt install php-fpm php-pgsql
Устанавливаем модуль curl
sudo apt install php8.1-curl
Устанавливаем nodeJS#
Устанавливаем nodeJS и npm
sudo apt install nodejs sudo apt install npm
Устанавливаем pm2 для управления
sudo npm install pm2 -g
Создаем папку для nodeJS
sudo chmod -R 777 /var/www/
cd /var/www/
mkdir nodejs
cd nodejs/
Устанавливаем необходимые npm для проекта
npm install express npm install socket.io
Создаем файл с минимум проекта для nodeJS
mcedit game.js
Содержимое
'use strict'; console.log('\x1b[36m%s', '-------------------------------'); console.log('\x1b[36m%s', 'Server init'); //Минимум отладки process.env.NODE_ENV = 'production'; //Настройки let express = require('express'); //Основа express let app = express(); let http = require('http').Server(app); let body_parser = require('body-parser'); app.disable('x-powered-by'); let server = http.listen(8000, () => { }); app.use((req, res, next) => { body_parser.json()(req, res, err => { if (err) { return res.sendStatus(400); // Bad request } next(); }); }); app.use(body_parser.urlencoded({ extended: true })); app.use('/nodejs/:action', function (req, res) { console.log(req); res.send('OK'); });
Запускаем game.js
pm2 start /var/www/nodejs/game.js
Выполняем команду и делаем copy/past вывода команды
pm2 startup
Устанавливаем PostgreSQL#
Устанавливаем часовой пояс
sudo timedatectl set-timezone Europe/Moscow
Устанавливаем базу данных
sudo apt-get install postgresql-14
Устанавливаем пароль для postgresql
sudo -u postgres psql postgres
\password postgres
\q
Меняем в pg_hba.conf peer -> md5
sudo mcedit /etc/postgresql/14/main/pg_hba.conf
Перезапускаем БД
sudo service postgresql restart
Конфигурация и проверка сервера#
Создаем пользователя ftp и даем ему права
sudo adduser ftp
Заливаем файлы на сервер, рекомендую, через FileZilla:
- Протокол: SFTP важно
- Хост: 45.131.40.167
- Пользователь: ftp
- Пароль: ваш пароль
Создаем папки
/var/www/php /var/www/php/adminer/ /var/www/php/game/
Скачиваем adminer.
Распаковываем и переименовываем в index.php. Грузим в
/var/www/php/adminer/
Создаем index.php с текстом и грузим в
<?php phpinfo(); ?>
/var/www/php/game/
Создаем index.html с текстом и грузим в
Well done
/var/www/html/
Удаляем файл index.nginx-debian.html
/var/www/html/index.nginx-debian.html
Финальная конфигурация NGINX
sudo mcedit /etc/nginx/sites-enabled/game
server { server_name demo-fitgame.ru; listen 443 ssl http2; ssl_certificate /etc/letsencrypt/live/demo-fitgame.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/demo-fitgame.ru/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; gzip on; gzip_comp_level 6; gzip_proxied any; gzip_min_length 1000; gzip_disable "msie6"; gzip_types text/plain text/css application/json application/javascript application/octet-stream application/x-javascript text/xml application/xml application/xml+rss text/javascript; root /var/www/html; #Panel for database location /sql/ { rewrite ^/sql/(.*) /$1 break; include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; root /var/www/php/adminer/; } #PHP location /php-game/ { rewrite ^/php-game/(.*) /$1 break; include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; root /var/www/php/game/; } #nodeJS location /nodejs-game { proxy_pass http://localhost:8000/nodejs; proxy_set_header Host $host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } server { if ($host = demo-fitgame.ru) { return 301 https://$host$request_uri; } listen 80; server_name demo-fitgame.ru; }
Перезапускаем NGINX
sudo systemctl restart nginx
Проверяем сервер:
- Статика: https://demo-fitgame.ru/
- База данных: https://demo-fitgame.ru/sql/
- PHP: https://demo-fitgame.ru/php-game/
- nodeJS: https://demo-fitgame.ru/nodejs-game/444?id=5