Настройка сервера

Полезное#

Видео:

Вопросы, можно задать в комментариях телеграмма: TG: fitgame

Настройка DNS#

Создаем сервер, требования:

Сохраняем логин и пароль, а также айпи адрес, в статье будет 45.131.40.167

Регистрируем домен, в статье demo-fitgame.ru

Настраиваем A запись в панели регистратора домена

Для demo-fitgame.ru (домен 2-го уровня)

Для поддомена game.demo-fitgame.ru (домен 3-го уровня)

Изменения обычно вступают в силу 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:

Создаем папки

/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

Проверяем сервер: