Если эта статья может помочь вам, вы можете помочь мне вshfshanyue/op-noteнажмите на звезду
Если вы новичок, вы можете нажатьСсылка на сайтКупить
Предварительное исследование
В начале исследования сервера рендеринга и написания демки меня просто интересовала поэзия, поэтому я сделал сайт о поэзии, чем больше я писал, тем демка становилась ДЕМО, и в целом это было очень просто. Просто завис на сервере.
Стек технологий 👉 Next.js + React + ApolloClient + Docker + Docker Compose
URL-адрес выглядит следующим образом 👉Поэзия и струны
Позже я повесил свой блог 👉Блог Ямадзуки
Бэкэнд поддержка
С фронтендом естественно требуется поддержка на стороне сервера.По принципу простоты, удобства и простоты использования я сделал прямой выбор между parse-server и graphql, и в итоге выбрал graphql. И сделал полуфабрикаты строительных лесов. Поддерживаются следующие функции
Полуфабрикат вывешен на githubGitHub.com/Шаншанюэ/…
- N+1 query
- Загрузка полей базы данных по запросу
- Промежуточное ПО для кэширования определенных полей
- Часовой доступа
- Доступ к Consul kev/value store
- jwt для аутентификации
- Структурированные сообщения об ошибках и предупреждения с помощью sentry
- Структурированная информация журнала для легкого анализа лосей
- Докер и Докер Compose
- Traefik балансирует нагрузку (и не делает) с обратным прокси
У этих лесов есть живой пример здесьtodos.xiange.tech/playgroundСначала вам нужно использовать shanyue/shanyue для входа в систему с учетной записью и паролем.Мутация для входа в систему — createUserToken
В то время я написал полу-полу-полу-полузаконченные леса на переднем конце.shfshanyu/react-apollo-starter, я не знаю, смогу ли я бегать сейчас...
Стек технологий 👉 Graphql + ApolloServer + Sequelize + Docker + JWT + (Traefik + Sentry + Consul)
Docker
При развертывании используйте docker + docker-compose, чтобы получить код и перезапустить его, чтобы решить эту проблему. Также часто делайте на нем некоторые докер-тесты
база данных
Серверная часть зависит от данных, поэтому Redis и Postgres развертываются с помощью Docker.
Когда вы подключитесь к мониторингу, вы обнаружите, что postgres занимает все больше и больше памяти с самого начала использования, то есть часть данных перемещается с диска в память.
VPN
Доступ к базе данных в общедоступной сети немного опасен, поэтому я использовал docker для создания vpn для локального доступа для разработки. Используются следующие зеркала
Хотя он настроен, но все равно очень запутанно.В настоящее время я контролирую только определенный сегмент cidr и захожу в VPN
служба конфигурации
Бэкенд должен настроить службу, развернуть консул с докером и использовать только свое хранилище ключей и значений, его функция обнаружения службы тратится впустую, как это
Прямая установка и загрузка на «голое железо»
consul agent -data-dir=/consul/data -config-dir=/consul/config -server -data-dir=/consul/data -advertise 172.17.68.39 -bootstrap-expect=1 -node=consul-server -bind=0.0.0.0 -client=0.0.0.0 -ui
система сбора ошибок
И передняя часть, и задняя часть нуждаются в системе сбора ошибок, поэтому sentry развертывается с докером.
Sentry зависит от redis и postgres, и я напрямую указываю зависимости от redis и postgres, общие для моего сайта. Во-первых, миграция — это проблема в будущем, а во-вторых, слишком много журналов ошибок может даже привести к взрыву базы данных. Но не смотря ни на что, мой сайт - это только я как пользователь, нет ошибки, если им никто не пользуется, и нет проблемы, если ошибки нет.
обратный прокси
Фронт и бекенд должен быть обратным прокси.Выбранный случайно траефик имеет как минимум более красивые интерфейсы, чем nginx, более удобную настройку сервисов и сервисное открытие.Минус в том, что мало документов.
Traefik также устанавливается непосредственно на «голое железо», метка настраивается непосредственно из докера, а номер порта прокси-сервера напрямую используется в файле. Позже я написал статью с кратким описанием
Запуск Traefik и простая настройка
Что касается того, почему на графике так много запросов, это потому, что gitlab runner запрашивает gitlab каждую секунду.
лог-система
Построить лося. Но учитывая, что тремя самыми посещаемыми друзьями являются Google Spider, Baidu Spider и я, я не использовал его с момента его создания.
Эталонная сборка:GitHub.com/Деви Энтони/…
Так же может быть потребность в файловых битах, но я пока не делал
репозиторий кода
Некоторым личным кодам, учебным записям и некоторым моим собственным заметкам о пейзажах и цветах нужно место для размещения, и gitlab построен, но gitlab съел более двух G моей памяти...
Обратите внимание на отключение зависимостей типа prometheus от gitlab, иначе будет кушать много памяти
CI
После сборки gitlab для поддержки gitlab был создан gitlab-runner для CI/CD.
Однако в настоящее время к CI подключены только блоги, потому что только блоги создаются после CI, и я чувствую, что проекты front-end и back-end, которые были запущены первыми, будут отменены...
DNS server
Есть так много сервисов, но некоторые вещи не так просто выложить в публичную сеть, такие как консул, редис, постгрес и гитлаб, и я не могу вспомнить номер порта, поэтому я настроил dns-сервер для облегчения локального доступа
yum install dnsmasq
Редактирование файлов и управление окнами
vim и tmux являются стандартными для linux для повышения эффективности работы на сервере, для компиляции и установки рекомендуется использовать исходный код. Даже если yum настроен с помощью epel, установленная версия пакета слишком низкая и не имеет многих функций. Например, vim, чтобы открыть каталог файлов. Ниже приведена моя собственная конфигурация vim и tmux.
Автоматизированная эксплуатация и техническое обслуживание
В первые дни использования серверов часто приходилось переустанавливать систему, а у меня два сервера, поэтому автоматическая работа и обслуживание имеют важное значение. Как правило, я использую ansible для предварительной настройки некоторых серверов и установки некоторых необходимых инструментов, таких как docker, git, vim, tmux, jq и auto-jump.
Поскольку все мои серверы - Centos, книга написана немного плохо.
Однако большинство сервисов на сервере управляется docker-compose, а небольшое количество инструментов управляется ansible role, поэтому нет необходимости писать ansible-playbook.
Если у вас есть новый сервер, вы можете выполнить следующие действия.
- Предоставление среды с ansible-role
- Если у вас нет ansible-role, напишите свой собственный ansible-playbook
- Установить с помощью докера для некоторых сервисов
- Если ни один из вышеперечисленных способов не решает проблему, установите его вручную.
монитор
использоватьprometheus + node-exporter + cadvisorДля мониторинга хостов и контейнеров используйтеgrafanaвизуализировать
Когда вам нужно следить за хостом, контейнером или базой данных, вы можете использовать следующие шаги.
- Найдите панель инструментов с более чем одной звездой в grafana
- Внесите небольшие изменения по мере необходимости
С момента использования базы данных временных рядов место на диске стало уменьшаться.
Суммировать
Короче говоря, сервер все еще в основном тестируется, изучается и практикуется, и в будущем следует добавить k8s.
Обратите внимание на публичный аккаунтГорная Луна Путешествие, зафиксируйте мой технический рост, добро пожаловать в общение