https://github.com/harryheman/self-host-nextjs
https://github.com/harryheman/self-host-nextjs
Last synced: 4 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/harryheman/self-host-nextjs
- Owner: harryheman
- Created: 2024-10-31T05:39:47.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2024-11-13T04:57:53.000Z (11 months ago)
- Last Synced: 2025-04-03T13:43:39.530Z (6 months ago)
- Language: Shell
- Size: 93.8 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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