Что такое Следующий JS?
Прежде чем перейти к изучению Next Js, мы должны знать, что это такое
Next.js — это популярная платформа с открытым исходным кодом для создания приложений React, которая позволяет разработчикам с легкостью создавать серверные приложения React.
Почему мы использовали NextJs?
Он предоставляет набор инструментов и функций, которые делают создание и развертывание современных веб-приложений более эффективными, например:
Рендеринг на стороне сервера: Next.js поддерживает рендеринг на стороне сервера (SSR) из коробки, что означает, что исходный HTML-код создается на сервере и отправляется клиенту, что приводит к более быстрой загрузке страницы и улучшению SEO.
Автоматическое разделение кода: Next.js автоматически разбивает код на более мелкие фрагменты, поэтому загружается только тот код, который необходим для каждой страницы, что сокращает время первоначальной загрузки приложения.
Генерация статического сайта: Next.js позволяет создавать статические сайты (SSG), которые предварительно отображают страницы во время сборки, что приводит к еще более быстрому времени загрузки и снижению нагрузки на сервер.
Маршруты API: Next.js предоставляет простой способ создания маршрутов API, что позволяет легко интегрироваться с внешними источниками данных.
Встроенная поддержка CSS: Next.js имеет встроенную поддержку стилей с использованием модулей CSS или стилизованных компонентов, что упрощает написание и поддержку CSS для вашего приложения.
В целом, Next.js упрощает и ускоряет создание и развертывание современных веб-приложений, а также предоставляет функции, повышающие производительность, SEO и опыт разработки.
Предпосылки изучения Next Js:
Прежде чем погрузиться в изучение Next.js, рекомендуется иметь прочную основу в следующих технологиях:
HTML и CSS: Next.js построен на основе React, что требует глубокого понимания HTML и CSS для создания отзывчивых, хорошо спроектированных веб-приложений.
JavaScript: Next.js — это среда JavaScript, поэтому вы должны хорошо понимать язык и его основы, включая переменные, функции, массивы, объекты, циклы и условные операторы.
React: Next.js построен на основе React, поэтому вы должны хорошо понимать основные концепции React, включая компоненты, состояние, свойства и виртуальный DOM.
Node.js: Next.js использует Node.js для запуска рендеринга на стороне сервера и других задач на стороне сервера. Вы должны иметь хорошее представление о Node.js и о том, как его использовать для создания веб-приложений.
Git: Git — это система контроля версий, которая обычно используется для управления репозиториями кода. Вы должны быть знакомы с Git и знать, как его использовать для управления своим кодом.
Кроме того, рекомендуется, чтобы у вас был некоторый опыт создания веб-приложений, прежде чем погрузиться в Next.js. Хотя Next.js предоставляет много преимуществ по сравнению с vanilla React, он все же может быть сложным, поэтому опыт создания веб-приложений может помочь вам лучше понять концепции и инструменты, используемые в Next.js.
Системные требования
Чтобы начать работу с Next.js, вам необходимо убедиться, что ваша система соответствует следующим требованиям:
Node.js: Next.js построен на основе Node.js, поэтому вам необходимо установить Node.js в вашей системе. Вы можете скачать последнюю версию Node.js с официального сайта: Node.js
NPM: NPM (менеджер пакетов узлов) используется для управления зависимостями для вашего проекта Next.js. Он поставляется в комплекте с Node.js, поэтому он должен быть установлен по умолчанию.
Git: Git — это система контроля версий, которая обычно используется для управления репозиториями кода. В вашей системе должен быть установлен Git для управления вашим проектом Next.js.
Давайте создадим приложение NextJs
Вот пошаговое руководство по созданию приложения Next.js, которое показывает изображения в карточках, реализует бесконечную прокрутку и использует рендеринг на стороне сервера для получения данных с помощью getServerSideProps.
Шаг 1. Настройка проекта
Чтобы начать работу, создайте новый проект Next.js, выполнив следующие команды:
npx create-next-app
my-app cd my-app
Шаг 2. Установите зависимости
Затем установите следующие зависимости:
npm установить axios реагировать на бесконечную прокрутку компонента tailwindcss
Мы будем использовать библиотеку axios для выполнения HTTP-запросов к API, react-infinite-scroll-component для реализации бесконечной прокрутки и tailwindcss для стилизации наших компонентов.
Шаг 3. Создайте компонент карты изображения
Создайте новый файл с именем ImageCard.js в каталоге компонентов и добавьте следующий код:
код:
import React from 'react'; function ImageCard({ image }) { return ( <div className="rounded overflow-hidden shadow-lg"> <img src={image.urls.regular} alt={image.alt_description} /> <div className="px-6 py-4"> <div className="font-bold text-xl mb-2">{image.user.username}</div> </div> </div> ); } export default ImageCard;
Этот компонент берет объект изображения в качестве реквизита и отображает его в карточке с именем фотографа.
Шаг 4. Создание компонента бесконечной прокрутки
Создайте новый файл с именем InfiniteScrollImages.js в каталоге компонентов и добавьте следующий код:
import React, { useState, useEffect } from 'react'; import axios from 'axios'; import InfiniteScroll from 'react-infinite-scroll-component'; import ImageCard from './ImageCard'; function InfiniteScrollImages() { const [images, setImages] = useState([]); const [page, setPage] = useState(1); useEffect(() => { fetchImages(); }, []); const fetchImages = async () => { const response = await axios.get(`https://api.unsplash.com/photos`, { params: { client_id: '<YOUR_API_KEY>', page: page, per_page: 9, }, }); setImages((prevImages) => [...prevImages, ...response.data]); setPage((prevPage) => prevPage + 1); }; return ( <InfiniteScroll dataLength={images.length} next={fetchImages} hasMore={true} loader={<h4>Loading...</h4>} > <div className="grid grid-cols-3 gap-4"> {images.map((image) => ( <ImageCard key={image.id} image={image} /> ))} </div> </InfiniteScroll> ); } export default InfiniteScrollImages;
Этот компонент использует хук useState для хранения изображений и номера страницы. Мы используем хук useEffect для получения изображений при монтировании компонента. Функция fetchImages делает HTTP-запрос к Unsplash API для получения изображений и обновляет состояние новыми изображениями и новым номером страницы. Наконец, компонент InfiniteScroll упаковывает карты изображений и загружает дополнительные изображения, когда пользователь прокручивает страницу до конца.
Шаг 5. Создайте индексную страницу
export async function getServerSideProps() { const { data } = await axios.get(`https://api.unsplash.com/photos/random`, { params: { client_id: '<YOUR_API_KEY>', count: 9, }, }); return { props: { initialImages: data, }, }; } export default function Home({ initialImages }) { return ( <div className="container mx-auto my-8"> <h1 className="text-4xl font-bold mb-8">Infinite Scroll Images</h1> <InfiniteScrollImages initialImages={initialImages} /> </div> ); }
Эта страница использует функцию getServerSideProps для получения начального набора изображений на стороне сервера. Мы делаем запрос к API Unsplash, чтобы получить 9 случайных изображений и передать их компоненту InfiniteScrollImages в качестве реквизита. Наконец, мы визуализируем компонент InfiniteScrollImages на странице.
Шаг 6. Добавьте Tailwind CSS
Next.js поставляется со встроенной поддержкой модулей CSS, поэтому мы можем легко добавить Tailwind CSS в наш проект. Создайте новый файл с именем styles/globals.css и добавьте следующий код:
@tailwind base; @tailwind components; @tailwind utilities;
Затем импортируйте этот файл в файл pages/_app.js:
import '../styles/globals.css'; function MyApp({ Component, pageProps }) { return <Component {...pageProps} />; } export default MyApp;
Шаг 7. Добавьте ключ API
Чтобы использовать API Unsplash, вам необходимо создать учетную запись и сгенерировать ключ доступа. Получив ключ доступа, замените файлы InfiniteScrollImages.js и index.js вашим фактическим ключом.
Шаг 8. Запустите сервер разработки
Наконец, запустите сервер разработки, выполнив следующую команду:
npm run dev
Посетите http://localhost:3000 в своем браузере, чтобы увидеть приложение в действии.
Вот и все! Вы создали приложение Next.js, которое показывает изображения в карточках, реализует бесконечную прокрутку и использует рендеринг на стороне сервера для получения данных с помощью getServerSideProps.
Отправьте код на gitLab/gitHub
Теперь давайте развернем его
Шаг 1. Запустите инстанс EC2
Сначала запустите инстанс EC2 с помощью Консоли управления AWS. Обязательно выберите тип экземпляра, соответствующий вашим потребностям, и настройте группу безопасности, чтобы разрешить входящий трафик через порт 80 (HTTP) и 443 (HTTPS).
Шаг 2. Подключитесь к экземпляру
После запуска экземпляра подключитесь к нему с помощью SSH. Вы можете использовать команду ssh в своем терминале или использовать такой инструмент, как PuTTY, если вы работаете на компьютере с Windows.
ssh -i <PATH_TO_PRIVATE_KEY> <USER>@<PUBLIC_IP_ADDRESS>
Замените , и соответствующими значениями.
Шаг 3. Установите Nginx
Затем установите Nginx на экземпляр, используя следующие команды:
sudo apt update sudo apt install nginx
Шаг 4. Клонируйте проект
Затем установите Nginx на экземпляр с помощью следующих команд:
cd /var/www/html sudo git clone <repo url> cd my-app
Шаг 4. Настройка Nginx
Создайте новый файл в /etc/nginx/sites-available/default и добавьте следующую конфигурацию:
server { server_name www.DOMAINNAME.com DOMAINNAME.com; index index.html index.htm; root /var/www/html/my-app; #Make sure using the full path # Serve any static assets with NGINX location /_next/static { alias /var/www/html/my-app/.next/static; add_header Cache-Control "public, max-age=3600, immutable"; } location / { try_files $uri.html $uri/index.html # only serve html files from this dir @public @nextjs; add_header Cache-Control "public, max-age=3600"; } location @public { add_header Cache-Control "public, max-age=3600"; } location / { proxy_pass http://localhost:3000; 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; } location @nextjs { # reverse proxy for next server proxy_pass http://localhost:3000; #Don't forget to update your port number 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; } listen 80 default_server; listen [::]:80; }
Замените своим доменным именем или общедоступным IP-адресом.
Эта конфигурация указывает Nginx прослушивать порт 80 и прокси-запросы к приложению Next.js, работающему на локальном хосте: 3000.
Шаг 5. Перезапустите Nginx
После добавления конфигурации перезапустите Nginx с помощью следующей команды:
sudo systemctl перезапустить nginx
Шаг 6. Установите PM2
Установите PM2 глобально на экземпляре с помощью следующей команды:
sudo npm install -g pm2
Шаг 7. Сборка и запуск приложения Next.js
В корневом каталоге приложения Next.js создайте рабочую версию приложения:
cd /var/www/html/my-app npm run build
Затем запустите приложение с помощью PM2:
pm2 start npm --name "<APP_NAME>" -- start
Замените на имя вашего приложения.
Шаг 8. Сохраните конфигурацию PM2
Сохраните конфигурацию PM2, чтобы обеспечить перезапуск приложения при перезапуске экземпляра:
pm2 save
Шаг 9. Получите доступ к приложению
Введите имя своего домена или общедоступный IP-адрес в браузере, чтобы получить доступ к приложению. Nginx будет передавать запросы приложению Next.js, работающему на локальном хосте: 3000.
Поздравляем, вы успешно развернули приложение Next.js на экземпляре AWS EC2, используя Nginx в качестве обратного прокси-сервера и PM2 в качестве диспетчера процессов!