Это серверное приложение предоставляет API для фронтенда и использует переменные окружения для аутентификации, настройки портов и связи с другими сервисами.
- Node.js v18+
- npm
Клонирование репозитория и переход в каталог проекта:
git clone https://github.com/vacuumDev/grass-panel.git-
Установка зависимостей:
cd backend npm install -
Создайте .env
LOGIN=admin PASSWORD=482905316 PORT=8080 FRONTEND_BASE=http://127.0.0.1:3001 # фронтенд базовый урл SECRET=123312123123123123123123 # секретный ключ для подписи SERVERS=127.0.0.1:3000,133.33.33.133:3001 # список серверов через запятую SERVERS_AUTH_TOKEN=fea5143d18395eeed87f7b124ce0efe4 # секретный токен для авторизации на серверах
-
Запуск сервера
node app.js
- Установка зависимостей:
cd client npm install - Создайте .env
NEXT_PUBLIC_API_URL=http://127.0.0.1:8080 # базовый урл сервера
- Запуск клиента
npm run build npm run start
Этот гайд поможет привязать домен к вашему приложению, запущенному на сервере, с настройкой HTTPS через Certbot. Перед использованием данного мануала вам надо привязать домен к серверу. Также надо создать поддомен api и его тоже привязать к серверу
-
Обновите индекс пакетов:
sudo apt update
-
Установите Nginx:
sudo apt install nginx
-
Запустите сервис Nginx:
sudo systemctl start nginx
-
Проверьте статус работы Nginx и включите автозапуск:
sudo systemctl status nginx sudo systemctl enable nginx
-
Создайте новый файл конфигурации для домена:
sudo nano /etc/nginx/sites-available/<ваш-домен>
Пример:
sudo nano /etc/nginx/sites-available/example.com
-
Добавьте следующую конфигурацию в файл, заменив
<ваш-домен>на свой домен:server { client_max_body_size 64M; listen 80; server_name <ваш-домен>; location / { proxy_pass http://127.0.0.1:<ваш-порт>; proxy_read_timeout 60; proxy_connect_timeout 60; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; } }
замените <ваш-домен> и <ваш-порт> на ваши значения
-
Создайте новый файл конфигурации для api поддомена:
sudo nano /etc/nginx/sites-available/api.<ваш-домен>
Пример:
sudo nano /etc/nginx/sites-available/api.example.com
-
Добавьте следующую конфигурацию в файл, заменив
<ваш-домен>на свой домен:server { client_max_body_size 64M; listen 80; server_name api.<ваш-домен>; location / { proxy_pass http://127.0.0.1:<ваш-порт-бекенд>; proxy_read_timeout 60; proxy_connect_timeout 60; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; } }
замените <ваш-домен> и <ваш-порт-бекенд> на ваши значения
-
Активируйте файл конфигурации:
sudo ln -s /etc/nginx/sites-available/<ваш-домен> /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/api.<ваш-домен> /etc/nginx/sites-enabled/
-
Проверьте корректность конфигурации:
sudo nginx -t
Вы должны увидеть:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful -
Перезапустите Nginx:
sudo systemctl restart nginx
-
Установите Certbot и плагин для Nginx:
sudo apt install certbot python3-certbot-nginx
-
Получите SSL-сертификат для вашего домена:
sudo certbot --nginx -d <ваш-домен>
Пример:
sudo certbot --nginx -d example.com
-
Следуйте инструкциям Certbot: укажите email.
-
Сделайте все тоже самое для api.example.com и проверьте работу автоматического обновления сертификатов:
sudo systemctl status certbot.timer
Ожидаемый результат:
certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since ... Trigger: ... Triggers: ● certbot.service
Теперь ваш домен настроен, и приложение доступно по защищённому HTTPS-протоколу! 🚀