22.02.2025
Вы можете сделать репозиторий с проектом на GitHub скрытым и после изменения файлов проекта на локальном ПК, проект можно будет обновить на ВМ, с помощью команды — ‘git pull’, о том, как это сделать, будет рассмотрено в 16 пункте, также для работы со скрытым репозиторием, необходимо сделать аутентификацию на GitHub через ВМ, это будет произведено в 9 пункте.
Далее, создайте в вашем GitHub аккаунте скрытый (данная инструкция рассчитана на то, что репозиторий будет скрытым) или открытый репозиторий проекта, под названием — ‘crystal’. Вы можете сделать ‘fork’ (репозиторий fork, нельзя скрыть) или импортировать проект из репозитория CRYSTAL v1.0.
Ключ SSH, нужен для подключения к ВМ с другого ПК, в данном случае через терминал в Win 11. Win 11 поставляется со встроенным клиентом OpenSSH, который можно использовать для генерации ключей SSH.
Чтобы создать SSH ключ, нажмите на клавиатуре — ‘Win+R’, затем введите в открывшимся окне — ‘cmd’ и нажмите — ‘Enter’, откроется терминал, введите в нём команду:
ssh-keygen -t ed25519
Далее введите название ключа:
crystal_key
Скрин 1.
После ввода ключа, нажмите — ‘Enter’.
Вам будет предложено создать пароль, это не является обязательным, но повысит безопасность, так как, при каждом подключении к ВМ, нужно будет вводить пароль. Местоположение ключа по умолчанию — ‘C:\Users\ИмяПользователя\’. После создания ключа, появятся два файла, один с расширением .pub (открытый ключ) и без расширения (закрытый ключ), переместите файлы по адресу — ‘C:\Users\ИмяПользователя\.ssh\’. В дальнейшем, открытый ключ будет добавлен в ВМ на облачном сервисе. С помощью закрытого ключа, будет происходить подключение к ВМ, через терминал в Win 11.
Далее, откройте меню слева, и перейдите в раздел — ‘Группы безопасности’, затем выберите — ‘Создать группу безопасности’.
Зона доступности — ru.AZ-1 (может быть любая, но у группы безопасности и ВМ, должна быть одинаковая зона доступности).
Название — сrystal.
Описание — можно не заполнять.
Теги — можно не заполнять.
Описание портов:
443 — доступ по HTTPS.
80 — доступ по HTTP.
22 — для доступа к ВМ, через ключ SSH, созданный ранее.
В пункте — ‘Правила входящего трафика’, нажмите — ‘Добавить правило’ и заполните пункты, как в примере на скриншоте № 2.
Скопируйте IP ниже, и введите его в поле ‘Источник’:
0.0.0.0/0
В поле ‘Описание’, введите:
HTTPS IPv4
Скрин 2.
После заполнения, нажмите кнопку — ‘Создать’.
Далее, добавьте остальные правила входящего трафика. В итоге должно получиться, как на скриншоте № 3.
Скрин 3.
Добавьте правила исходящего трафика, как на скриншоте № 4.
Скрин 4.
Скопируйте, для заполнения поля ‘Описание’:
All egress IPv4
После добавления правила исходящего трафика, нажмите на кнопку — ‘Создать’ (группу безопасности).
Откройте в меню, раздел — ‘Виртуальные машины’, и выберите — ‘Создать виртуальную машину’.
Заполните пункты, как в примере ниже.
Название — сrystal.
Описание — можно не заполнять.
Теги — можно не заполнять.
Зона доступности — ru.AZ-1 (должна быть, как в ранее созданной группе безопасности).
Не создавайте группу размещения.
Публичные — Debian 12.
Гарантированная доля vCPU — 30%
vCPU — 2
RAM — 4
Загрузочный диск
Название — по умолчанию
Тип — SSD
Размер — 20ГБ
Не подключать к подсети.
Должно быть отмечено — ‘Подключить публичный IP’ (К ВМ подключится, автоматически созданный, статический публичный IP-адрес).
Тип IP — Прямой.
Группы безопасности — выберите ранее созданную группу безопасности — ‘сrystal’.
Имя хоста — crystal.
Логин — crystal-vm.
Выберите — ‘Публичный ключ’.
Так же, вы можете задать пароль для подключения к ВМ, через виртуальную консоль — Cloud.ru. Подключение будет доступно только внутри сервиса Cloud.ru, а не через интернет, так как, по умолчанию — ‘PasswordAuthentication no’.
Далее нажмите — ‘Добавить новый ключ’, выберите — ‘Загрузить из файла’, затем перейдите в директорию — ‘C:\Users\ИмяПользователя\.ssh\’ и выберите ранее созданный публичный ключ — ‘crystal_key.pub’.
После добавления файла ключа, введите в поле — ‘Название’, имя ключа — crystal_key.pub, после, нажмите кнопку — ‘Добавить’.
Далее, нажмите на кнопку — ‘Создать’ (ВМ).
В случае успеха, ВМ должна быть создана и через некоторое время, будет доступна.
Вы можете найти публичный IP адрес вашей ВМ, в разделе — ‘Виртуальные машины’, в одноимённой колонке.
Измените примерный текст, и введите в терминал команду:
ssh -i C:\Users\ИмяПользователя\.ssh\crystal_key crystal-vm@ПубличныйIPАдресВМ
Пример команды:
ssh -i C:\Users\Andrew\.ssh\crystal_key crystal-vm@55.55.55.55
После ввода команды, нажмите — ‘Enter’. Если будет вопрос — ‘Are you sure you want to continue connecting (yes/no/[fingerprint])?’ введите — ‘ yes’, далее введите пароль, который устанавливали при создании SSH-ключа.
В дальнейшем при вводе команд, может появляться вопрос — ‘Do you want to continue? [Y/n]’, в таком случае, введите — ‘Y’, и далее нажмите — ‘Enter’.
sudo -i
apt update && apt -y upgrade
Если при установке откроется окно с вопросами, нажмите клавишу — ‘Enter’.
curl -fsSL https://deb.nodesource.com/setup_23.x | bash - && \apt-get install -y nodejs && nodejs -v
Введите команду:
apt-get install nginx && nginx -v
В случае успешной установки, в консоли должна быть показана версия nginx, например — ‘nginx version: nginx/1.22.1’.
Введите команду:
apt install git && apt install gh
Введите команду:
gh auth login
Из предложенных вариантов выберите — ‘GitHub.com’, далее — ‘HTTPS’, далее — ‘Authenticate Git with your GitHub credentials?’ — ‘Y’, затем ‘Login with a web browser’, после, нажмите — Enter, будет ошибка, так как, работа ведётся из консоли.
Далее, скопируйте ссылку и откройте её в браузере, из которого уже был осуществлен вход в ваш акаунт GitHub:
https://github.com/login/device
После, введите в открывшимся окне, код из терминала, как на скриншоте № 5.
Скрин 5.
Нажмите — ‘Authorize github’. Если всё пройдет удачно, в конце вы увидите сообщение, как на скриншоте № 6.
Скрин 6.
Через некоторое время, в консоли должно появится подобное сообщение — ‘✓ Authentication complete.’.
Введите команду, и замените в ней примерный текст, на ваш логин в GitHub:
cd /var/www/ && gh repo clone ВашЛогинGitHub/crystal
В данной инструкции, будет использоваться текстовый редактор nano. В Debian 12 на ВМ, nano установлен по умолчанию, проверьте установлен ли этот редактор у вас в системе, введя команду:
nano --version
Должно появиться, подобное сообщение — ‘GNU nano, version 7.2’, если его нет, установите nano командами, которые подходят для вашей системы или используйте другой редактор. Вы можете включить в редакторе, управление мышью, для этого нажмите — ‘alt + m’ (должна быть включена английская раскладка клавиатуры).
Введите команду:
rm /etc/nginx/sites-available/default && nano /etc/nginx/sites-available/crystal
Добавьте в открывшиеся окно, код ниже. Замените пример текста в строке 4, на публичный IP адрес вашей ВМ:
server {
listen 80;
listen [::]:80;
server_name 'добавьте здесь публичный IP адрес вашей ВМ, без апострофов';
location /
{
root /var/www/crystal/frontend/dist;
try_files $uri $uri /index.html;
}
location /api/
{
proxy_pass http://localhost:3000/;
proxy_hide_header X-Powered-By;
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;
}
}
После добавления кода, нажмите последовательно — ‘ctrl + x’, ‘y’, ‘Enter’.
Введите команду:
rm /etc/nginx/sites-enabled/default && ln -s /etc/nginx/sites-available/crystal /etc/nginx/sites-enabled/ && systemctl restart nginx
Введите команду:
cd /var/www/crystal/frontend && mkdir env
В следующей команде, добавьте публичный IP адрес ВМ:
echo VITE_BASE_URL=http://ПубличныйIPАдресВМ/api > ./env/.env.prodIP
Введите команду:
curl -fsSL https://get.pnpm.io/install.sh | sh - && source /root/.bashrc && pnpm -v
Введите команду:
pnpm i && pnpm buildProdIP
После успешной сборки, введите в адресную строку браузера публичный IP адрес ВМ, и там появится frontend часть проекта, пример — ‘http://ПубличныйIPАдресВМ/’ (необходимо — ‘http’, а не ‘https’).
Скрин 7.
Введите команду:
cd /var/www/crystal/backend && mkdir env && nano ./env/.env
Далее, необходимо задать значение переменной — ‘JWT_SECRET_KEY’, вы можете сами ввести значение из букв и цифр, или сгенировать его в различных сервисах, например в Nano ID.
Пример того, как может выглядеть JWT_SECRET_KEY — ‘IA9bVtK6yQu1hpG2TCKCrC5h0VJmRZcZlrnZ’.
При регистрации пользователя с email, таким же, как в переменной — ‘CREATOR_EMAIL’, будет включен режим администратора (редактирование/удаление пользователей и постов).
Введите последовательно, данные ниже, в открывшемся окне, и замените примерный текст на ваши значения:
JWT_SECRET_KEY=Секретный_ключ_JWT
CREATOR_EMAIL=email_для_режима_администратора
После добавления кода, нажмите последовательно — ‘ctrl + x’, ‘y’, ‘Enter’.
Переменная — ‘PRODUCTION_STATUS’, в файле .env.prod, определяет в каком режиме будет запускаться сервер. В данном случае, режим — production.
Введите команду:
echo PRODUCTION_STATUS=true > ./env/.env.prodIP
Введите команду:
pnpm i
Действия в этой части, будут основаны на официальной документации MongoDB.
Введите команду:
sudo apt-get install gnupg curl
Введите команду целиком:
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg \
--dearmor
Введите команду целиком:
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/8.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list
Введите команду:
sudo apt-get update
Введите команду:
sudo apt-get install -y mongodb-org
Введите команду целиком:
echo "mongodb-org hold" | sudo dpkg --set-selections
echo "mongodb-org-database hold" | sudo dpkg --set-selections
echo "mongodb-org-server hold" | sudo dpkg --set-selections
echo "mongodb-mongosh hold" | sudo dpkg --set-selections
echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
echo "mongodb-org-tools hold" | sudo dpkg --set-selections
Введите команду:
sudo systemctl start mongod
Убедимся в успешном запуске, введя команду:
sudo systemctl status mongod
При успешном запуске, должны быть подобные сообщения:
Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled) Active: active (running) since Wed 2025-01-08 15:09:54 UTC; 13s ago
Далее нажмите — ‘ctrl + c’.
sudo systemctl enable mongod
Вы можете следить за состоянием процесса MongoDB на предмет ошибок или важных сообщений, наблюдая за выводом в файле — /var/log/mongodb/mongod.log.
Введите команду:
mongosh
Откроется консольный интерфейс для взаимодействия с базами данных, подробнее о mongosh.
В открывшимся интерфейсе введите команду:
show dbs
Вы увидите список баз данных, которые есть на данный момент, должны появится: ‘admin’, ‘config’, ‘local’;
Далее нажмите — ‘ctrl + c’.
Введите команду:
cd /var/www/crystal/backend && sudo npm install pm2@latest -g && pnpm startProdIP && pm2 save && pm2 startup && pm2 status
Описание команды:
Установка PM2 — ‘sudo npm install pm2@latest -g’.
Запуск файла — ‘backend/src/server.js’: ‘pnpm startProd’.
Сохранение процесса PM2 — ‘pm2 save’.
Перезапуск процесса PM2, после перезагрузки ВМ — ‘pm2 startup’.
Статус процесса PM2 — ‘pm2 status’.
Если запуск пройдет успешно, процесс с именем — ‘prodIP’, должен быть в статусе — ‘online’.
Откройте проект в браузере, пример — ‘http://ПубличныйIPАдресВМ/’ (необходимо — ‘http’, а не «https’). Пройдите регистрацию и добавьте пост.
Выберите или создайте любую папку на локальном ПК, в которую будет клонирован проект из вашего репозитория — ‘crystal’.
Откройте новое окно терминала и введите команду ниже:
cd C:\ИмяПапки
Пример: cd C:\GIT
Далее, клонируйте репозиторий, командой GitHub CLI:
gh repo clone ВашеИмяПользователяНаGitHub/crystal
Перейдите в папку c проектом, командой:
cd C:\GIT\crystal
Сделайте любое изменение в проекте, например в файле — ‘crystal\frontend\src\index.css’
После, зафиксируйте изменения в репозитории — ‘crystal’, на GitHub, командой:
git add -A & git commit -m "commit" & git push -u origin main
Далее, откройте окно терминала с ВМ, обновите проект и соберите его, командой:
cd /var/www/crystal && git pull && cd /var/www/crystal/frontend && pnpm buildProdIP
Проверьте изменения на сайте, через браузер.
Поделиться
Прокомментировать в