DEPLOY
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash source ~/.bashrc
После установки nvm вам необходимо установить node (версия 18):
nvm i 18
Если вы используете yarn, установите и его:
npm i -g yarn
Затем перейдите в каталог вашего проекта и установите пакеты через npm или yarn, затем создайте свое приложение. После этого установите pm2 для запуска вашего приложения (навсегда):
npm i -g pm2
После установки pm2 проверьте, работает ли он:
pm2
Если это так, вы можете запустить свое приложение, выполнив команду. Если есть postgres или redis, вам нужно сначала запустить их, а затем ваше приложение (см. 2)
pm2 start ./dist/main.js --name my-nestjs-app # pm2 start <script_file_path.js> --name <name_optional>
- Если вы используете Postgres или Redis, я рекомендую использовать для них Docker Compose. Это мой пример файла docker-compose.yml для Postgres и Redis:
УСТАНОВКА DOCKER
Сначала обновите существующий список пакетов:
sudo apt update
Затем установите несколько необходимых пакетов, которые позволяют apt использовать пакеты по протоколу HTTPS:
sudo apt install apt-transport-https ca-certificates curl software-properties-co
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Добавьте репозиторий Docker в APT sources:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
Это также обновит нашу базу данных пакетов пакетами Docker из недавно добавленного репозитория.
Убедитесь, что вы собираетесь выполнять установку из репозитория Docker, а не из репозитория Ubuntu по умолчанию:
apt-cache policy docker-ce
Вы увидите вывод, подобный этому, хотя номер версии Docker может отличаться:
Вывод политики apt-кэша docker-ce
docker-ce:
Installed: (none)
Candidate: 5:19.03.9~3-0~ubuntu-focal
Version table:
5:19.03.9~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
Обратите внимание, что docker-ce не установлен, но кандидат на установку находится в репозитории Docker для Ubuntu 20.04 (focal).
sudo apt install docker-ce
Теперь Docker должен быть установлен, демон запущен, а процесс разрешен для запуска при загрузке. Убедитесь, что он запущен:
sudo systemctl status docker
Вывод должен быть похож на следующий, показывающий, что служба активна и запущена:
Output● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-05-19 17:00:41 UTC; 17s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 24321 (dockerd)
Tasks: 8
Memory: 46.4M
CGroup: /system.slice/docker.service
└─24321 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Установка Docker теперь предоставляет вам не только службу Docker (daemon), но и docker утилиту командной строки или клиент Docker. Мы рассмотрим, как использовать docker команду позже в этом руковод
version: "3"
services:
postgres:
image: postgres
restart: always
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
ports:
- '5432:5432'
volumes:
- my-nestjs-app:/var/lib/postgresql/data
redis:
image: "bitnami/redis:7.2"
restart: unless-stopped
ports:
- "6379:6379"
# volumes:
# - "redis_data:/bitnami/redis/data"
environment:
REDIS_PASSWORD: ${REDIS_PASSWORD}
REDIS_PORT: ${REDIS_PORT}
REDIS_DB: ${REDIS_DB}
REDIS_IO_THREADS: 4
REDIS_IO_THREADS_DO_READS: yes
REDIS_DISABLE_COMMANDS: FLUSHDB,FLUSHALL
volumes:
my-nestjs-app:
Для запуска docker compose у вас должен быть docker. Полное руководство по установке docker в ubuntu. После установки docker запустите docker-compose:
sudo docker compose up -d
Настройка nginx
Итак, давайте настроим nginx для приложения nestjs. Перед установкой nginx обновите существующий список пакетов:
sudo apt update
sudo apt install nginx
Проверьте nginx, работает ли он:
sudo systemctl status nginx
Создайте файл конфигурации nginx в /etc/nginx/sites-available/my-nestjs-app
sudo vim /etc/nginx/sites-available/my-nestjs-app
Затем скопируйте / вставьте эту конфигурацию:
server {
server_name domain.com;
client_max_body_size 300M;
# add_header 'Access-Control-Allow-Origin' '*';
location = /favicon.ico { access_log off; log_not_found off; }
location / {
proxy_set_header Host $http_host;
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;
proxy_pass http://127.0.0.1:3000;
}
}
Давайте разберемся в этой конфигурации:
- имя_сервера — Согласно документам nginx: оно используется для данного запроса. Они могут быть определены с использованием точных имен, подстановочных знаков (например, domain.com sub.dobmain.com) или регулярных выражений.
- client_max_body_size - максимальный размер тела клиентского запроса. При превышении этого размера nginx возвращает ошибку с кодом состояния 413. Если вы этого не хотите, просто прокомментируйте это.
- location / — означает, что если запрос соответствует этому “/” или значению location, то nginx запускает ”код внутри своего блока". Мы использовали директивы proxy_set_header и proxy_pass. proxy_set_header задает заголовок для определенного запроса. proxy_pass вроде как пересылает запросы по заданному URL или пути. Мы устанавливаем localhost 3000, чтобы каждый запрос в имя_сервера и местоположении перенаправлялся в местоположение 3000 (domain.com / -> localhost: 3000/)
После этого сохраните файл (в виде vim : wq) и протестируйте conf-файл с помощью команды nginx:
sudo nginx -t
Если вы допустите синтаксическую ошибку, она будет показана. Если все в порядке, создайте ссылку:
sudo ln -s /etc/nginx/sites-available/my-nestjs-app /etc/nginx/sites-enabled/my-nestjs-app
затем протестируйте nginx и перезапустите nginx:
sudo systemctl restart nginx
Настройка доменного имени
Прежде всего, вам необходимо перенаправить доменное имя на ваш VPS. Перейдите на панель управления вашего провайдера домена> Записи DNS> создайте запись с именем и введите IP-адрес вашего VPS в поле “имя” (пример). Затем проверьте, что оно перенаправлено на ваш IP-адрес ($ hostname -I чтобы увидеть IP):
ping thetestdev.ru
Если эти IP-адреса не совпадают с IP-адресом вашего VPS, вам следует подождать, пока он не станет таким же (это может занять от нескольких минут до нескольких дней, в зависимости от регистратора вашего домена), в противном случае вы столкнетесь с проблемами.
Вам необходимо добавить SSL-сертификат к вашему домену. С certbot это просто, поэтому установите cerbot:
sudo apt update sudo apt install certbot python3-certbot-nginx
После этого запустите эту команду, чтобы сгенерировать SSL-сертификаты для вашего домена:
sudo certbot --nginx -d example.com
После этого протестируйте файл nginx conf:
sudo nginx -t
Если все в порядке, перезапустите nginx:
sudo systemctl restart nginx