предисловие
Что касается развертывания среды, мы прошли три этапа: традиционная установка, восстановление образа, автоматическая регистрация обнаружения + выдача инструкции. В настоящее время, после восстановления образа, запустите виртуальную машину.Как только мы сможем пропинговать адрес нашей компании, эта машина будет автоматически зарегистрирована (даже если нет других прав доступа к внешней сети и внешние порты не были открыты), мы также есть эта машина.Управление полномочиями, может выдавать команды в пакетном групповом управлении. (Вторая и третья стадии разработаны мной.)
задний план
Мы продукт + заказная компания спроса.После завершения проекта он будет развернут непосредственно на сервере заказчика. А заказчики редко выбирают облачные серверы, потому что у них есть свой машинный зал, они перед развертыванием предоставят нам 1-2 виртуальные машины, а потом всю проблему развертывания среды переложат на нас.
эволюция
Этап 1: Традиционная установка
время использования:? ~ 2016 г.
- Стороне А необходимо предоставить метод удаленного подключения к серверу Windows или Linux (здесь каждая Сторона А предоставляет разные методы, такие как бастионный хост, vpn, прямой открытый порт, vpn + бастионный хост и т. д.) очень сложно , только от случая к случаю
- Удалённо на сервер
- Загрузить базу данных, jdk, tomcat различные установочные пакеты (ограниченный коэффициент пропускной способности, часто отнимающий много времени)
- установить установить базу данных
- Установите jdk, tomcat, nginx (в среде Linux использование написанного скрипта sh для прямого запуска по-прежнему занимает много времени)
- Ручное развертывание военных пакетов и т. д. Ждать
Этот метод относительно старый, и я не буду вводить больше. Конечно, насколько я знаю, некоторые небольшие компании все еще используют этот метод развертывания, поэтому я советую компаниям, которые используют этот метод, завершить трансформацию как можно скорее.
Этап 2: Восстановление образа
Время использования: 2016~2017
- Стороне А необходимо предоставить метод удаленного подключения к серверу Windows или Linux (здесь каждая Сторона А предоставляет разные методы, такие как бастионный хост, vpn, прямой открытый порт, vpn + бастионный хост и т. д.) очень сложно , только от случая к случаю
- Используйте образ vm для восстановления виртуальной машины и установки ip (включая докер)
- Развертывание военного пакета одним щелчком мыши через модуль развертывания
В это время наша зависимость от оперативного и обслуживающего персонала значительно снижается, а рабочая нагрузка значительно сокращается до 2-6 часов. (С этого этапа наша компания не имеет эксплуатационного и обслуживающего персонала и вступила в эпоху DevOps. Фактически, в начале этого этапа наш эксплуатационный и обслуживающий персонал уволился, что заставило меня ускорить проектирование)
Третий этап: автоматическая регистрация открытия + выдача инструкции
Время использования: 2017~2018
- Сторона A использует наш образ виртуальной машины для восстановления и установки IP-адреса, чтобы мы могли пропинговать адрес нашей компании.
- Автоматическая регистрация открытия + выдача инструкции
- Развертывание военного пакета одним щелчком мыши через модуль развертывания
На данном этапе наше развертывание занимает 5-10 минут, и нам больше не нужна Сторона А для обеспечения удаленного управления.Также мы можем управлять всеми машинами в пакетном режиме, что не только удовлетворяет потребности в данный момент, но и закладывает основу для последующего расширение.
конкретная технология
Здесь в основном обсуждаются второй и третий этапы.
Поскольку у традиционного метода много недостатков, после того, как я представил план руководителю, он очень заинтересовался и быстро организовал для меня его выполнение. В целях повышения эффективности при выборе различных инструментов или фреймворков в этой статье представлен только дизайн окончательного выбора.
frp
frp — это программное обеспечение для проникновения в интрасеть, которое может открывать машины без IP-адреса экстрасети во внешнюю сеть, но в этой статье используется функция открытия порта одной машины интрасети в другую интрасеть.
Установить фрп сервер
Выберите компьютер в интрасети, например 172.0.0.2, и временно убедитесь, что этот сервер использует фиксированную линию IP общедоступной сети.
wget --no-check-certificate https://raw.githubusercontent.com/clangcn/onekey-install-shell/master/frps/install-frps.sh -O ./install-frps.sh
chmod 700 ./install-frps.sh
./install-frps.sh install
Все параметры имеют значения по умолчанию, просто нажмите Enter, чтобы ввести значения по умолчанию:
Please input frps bind_port [1-65535](Default Server Port: 5443): #输入frp提供服务的端口,用于服务器端和客户端通信,默认即可
Please input frps vhost_http_port [1-65535](Default vhost_http_port: 80): #输入frp进行http穿透的http服务端口,建议不用默认
Please input frps vhost_https_port [1-65535](Default vhost_https_port: 443): #输入frp进行https穿透的https服务端口,建议不用默认
Please input frps dashboard_port [1-65535](Default dashboard_port: 6443):#输入frp的控制台服务端口,用于查看frp工作状态,默认即可
Please input dashboard_user (Default: admin):#登录控制台的用户名,默认即可
Please input dashboard_pwd (Default: kpkpM7VZ):#登录控制台的密码,如果记不住默认的建议修改
Please input privilege_token (Default: 9m2UAOWa6hx5Eise):#输入frp服务器和客户端通信的密码,默认是随机生成的,默认即可
Please input frps max_pool_count [1-200](Default max_pool_count: 50):#设置每个代理可以创建的连接池上限,默认50
##### Please select log_level #####
1: info
2: warn
3: error
4: debug
#####################################################
Enter your choice (1, 2, 3, 4 or exit. default [1]): 默认即可
Please input frps log_max_days [1-30](Default log_max_days: 3 day):
##### Please select log_file #####
1: enable
2: disable
#####################################################
Enter your choice (1, 2 or exit. default [1]):默认即可
На данный момент сервер frp построен
клиент
Здесь мы возьмем линукс в качестве примера
Откройте http://diannaobos.iok.la:81/frp/frp-v0.14.0/
Загрузите файл frp_0.14.0_linux_amd64.tar.gz и сохраните только файлы, начинающиеся с frpc (клиент frp)
Разархивируйте его в виде папки frp в домашнюю директорию linux
Напишите скрипт reg.sh
reg.sh также помещается в домашнюю директорию Linux.
UUID=$(cat /sys/class/dmi/id/product_uuid)
wget -O frpc.ini http://114.114.114.114/frp.php?file=$UUID;
a=`du -s frpc.ini | awk '{print $1}'`
if [ $a -lt 1 ]
then
echo "none"
else
echo "action"
pkill frpc
sleep 2s
rm -rf ~/frp/frpc.ini
cp frpc.ini ~/frp/frpc.ini
~/frp/./frp.sh
fi
UUID – это уникальный идентификатор сервера. Даже если образы ВМ совпадают, uuid не будет совпадать.
114.114.114.114 — внешний регистрационный центр компании
написать кронтаб
crontab -e
*/5 * * * * ~/reg.sh
Выполняется каждые 5 минут, что означает регистрацию или получение запроса на изменение каждые 5 минут. Если конфигурация сервера не изменится, служба не будет перезапущена.
frp запускается при загрузке
linux
chmod +x ~/frp/frp.sh
vi /etc/rc.d/rc.local
#文件底部追加
bash ~/frp/frp.sh
chmod +x /etc/rc.d/rc.local
#重启即可
Содержание упрощенной версии frp.php выглядит следующим образом.
<?php
$filename=$_GET['file'].'.ini';
$filename='frp/'.$filename;
if(!file_exists($filename)){
file_put_contents($filename,"");
file_put_contents($filename.'.update',$_SERVER['REMOTE_ADDR']);
}else{
if (!file_exists($filename.'.update')){
$str = file_get_contents($filename);
echo $str;
file_put_contents($filename.'.update',$_SERVER['REMOTE_ADDR']);
}
}
?>
Когда машина зарегистрирована, в папке frp будет имя файла, соответствующее id. Нам нужно только написать конфигурацию в .ini, а затем удалить файл .update. После того, как сервер получит новую конфигурацию frp, он автоматически перезапустит создание файла .update и запишет IP-адрес в файл .update.
.ini пример
[common]
server_addr = 114.114.114.114
server_port = 5443
privilege_token =密钥
[webserver]
type = tcp
local_ip = 127.0.0.1
local_port = 22
use_encryption = false
use_compression = false
remote_port = 7001
[a-web]
type = http
local_ip = 127.0.0.1
local_port = 80
use_encryption = false
use_compression = true
custom_domains = a.a.com
общая - это публичная часть
Веб-сервер использует технологию туннелирования для проникновения через локальный порт 22 на компьютер компании 172.0.0.2.
Машине интрасети нужен только доступ к порту 7001 из 172.0.0.2.
a-web — это URL-адрес прямого доступа к локальному 80-му порту во внутренней сети компании: a.a.com
Через фон управления frp вы можете просматривать состояние подключения каждой машины в режиме реального времени.На этом этапе мы можем получить удаленный доступ к машине и получить доступ к порту 80 машины.Теоретически мы можем получить доступ ко всем портам машины.Например, если проникает новый порт, нам нужно только изменить .ini.Это представляет собой упрощенную версию введения.
Затем подключитесь к Ansible для удаленного группового управления.
ansible
ansible — это автоматизированный инструмент для работы и обслуживания."Практика автоматизированной эксплуатации и обслуживания средств анзибл"
отображение экстрасети
Предположим, что экстранет компании — 114.114.114.114. Необходимо сопоставить порт 5443 114.114.114.114 с 5443 172.0.0.2 и не сопоставлять другие порты.
docker
В первые два года docker был очень популярен, и DevOps был очень популярен, поэтому мы выбрали docker, чтобы наш образ docker мог быстро развернуть нашу систему. Пожалуйста, обратитесь к другому моему сообщению в блоге«Как мне реорганизовать весь проект НИОКР, чтобы способствовать внедрению DevOps для автоматизированной эксплуатации и обслуживания? 》Portainer
Смотрите мой другой пост в блоге«Сравнение платформ веб-управления Docker (DockerUI, Shipyard, Portainer, Daocloud)»
deploy
deploy разработан для нас самостоятельно, можно сослаться на лежащий в его основе принцип"план развертывания автоматического обновления пакета войны веб-проекта Java"
Суммировать
В этой статье в основном рассказывается об использовании технологии проникновения во внутреннюю сеть frp и технологии построения туннелей для развертывания операций и обслуживания машин без внешних сетей и портов; использовании инструментов ansible для достижения группового контроля; использовании докера для быстрого развертывания; использовании самостоятельно разработанного развертывания для версии. контроль и т.д.
Этот набор решений значительно сократил наши расходы на эксплуатацию и техническое обслуживание, позволив такой небольшой компании, как мы, вступить в эпоху отсутствия эксплуатационного и обслуживающего персонала и DevOps.
Если у вас есть подобный сценарий, я надеюсь, что эта статья поможет вам.