An open API service indexing awesome lists of open source software.

https://github.com/harryheman/self-host-nextjs


https://github.com/harryheman/self-host-nextjs

Last synced: 4 months ago
JSON representation

Awesome Lists containing this project

README

          

# Пример самостоятельного разворачивания приложения Next.js

Этот репозиторий содержит пример деплоя приложения Next.js и базы данных PostgreSQL на сервере Ubuntu Linux с помощью Docker и Nginx. В приложении используется несколько возможностей Next.js, таких как кэширование, ISR, переменные окружения и др.

## Подготовка

1. Купите домен.
2. Купите сервер Linux Ubuntu.
3. Создайте запись DNS `A`, указывающую на адрес IPv4 вашего сервера.

## Быстрый запуск

1. **Подключаемся к серверу по SSH**:

```bash
ssh root@ip_сервера
```

2. **Загружаем скрипт для деплоя**:

```bash
# необходимо заменить путь к файлу в репозитории
curl -o ~/deploy.sh https://raw.githubusercontent.com/harryheman/self-host-nextjs/main/deploy.sh
```

Укажите свои данные в переменных `DOMAIN_NAME` и `EMAIL` в файле `deploy.sh`.

3. **Запускаем скрипт для деплоя**:

```bash
chmod +x ~/deploy.sh
./deploy.sh
```

## Поддерживаемые возможности

В этом демо используется много разных возможностей Next.js:

- оптимизация изображений
- потоковая передача данных
- взаимодействие с БД Postgres
- кэширование
- инкрементальная статическая регенерация
- чтение переменных окружения
- использование посредника
- выполнение кода при запуске сервера
- задача cron, взаимодействующая с обработчиком роута

Смотрите [демо](https://nextselfhost.ru) для получения более полной информации.

## Скрипт для деплоя

Репозиторий содержит скрипт Bash, который включает следующее:

1. Установка всех необходимых серверу зависимостей.
2. Установка Docker, Docker Compose и Nginx.
3. Клонирование репозитория.
4. Генерация сертификата SSL.
5. Сборка приложения Next.js с помощью Dockerfile.
6. Настройка Nginx с HTTPS и ограничением количества запросов.
7. Настройка cron, очищающего БД каждые 10 мин.
8. Создание файла `.env` с данными для работы с Postgres.

После завершения деплоя, приложение будет доступно по адресу:

```
https://ваш-домен
```

Приложение Next.js и БД PostgreSQL поднимаются и запускаются в контейнерах. Для настройки БД можно использовать `psql`:

```bash
docker exec -it myapp-db-1 sh
psql -U myuser -d mydb
\dt
SELECT * FROM "Todo";
```

Для последующих обновлений предназначен скрипт `update.sh`.

## Локальный запуск

Команда для локального запуска проекта с помощью Docker Compose:

```bash
docker-compose up -d
```

Эта команда запустит оба сервиса и сделает приложение доступным по адресу: `http://localhost:3000` с БД, запущенной в фоновом режиме. Мы также создаем сеть, чтобы контейнеры могли общаться между собой.

Для просмотра содержимого БД можно использовать Prisma Studio:

```bash
npm run studio
# или
npx prisma studio
```

## Полезные команды

- `docker-compose ps` - получение списка запущенных контейнеров Docker
- `docker-compose logs web` - отображение логов Next.js
- `docker-compose down` - остановка и удаление контейнеров Docker
- `docker-compose up -d` - запуск контейнеров в фоновом режиме
- `docker system prune -a` - удаление контейнеров, образов и сетей Docker
- `docker volume ls` - получение списка томов
- `docker volume rm postgres_data` - удаление тома `postgres_data`
- `sudo systemctl restart nginx` - перезапуск Nginx
- `docker exec -it myapp-web-1 sh` - подключение к контейнеру Next.js
- `docker exec -it myapp-db-1 psql -U myuser -d mydb` - подключение к Postgres