Путь эволюции развертывания проектной среды небольшой компании

сервер Linux Docker Эксплуатация и техническое обслуживание

предисловие

Что касается развертывания среды, мы прошли три этапа: традиционная установка, восстановление образа, автоматическая регистрация обнаружения + выдача инструкции. В настоящее время, после восстановления образа, запустите виртуальную машину.Как только мы сможем пропинговать адрес нашей компании, эта машина будет автоматически зарегистрирована (даже если нет других прав доступа к внешней сети и внешние порты не были открыты), мы также есть эта машина.Управление полномочиями, может выдавать команды в пакетном групповом управлении. (Вторая и третья стадии разработаны мной.)

задний план

Мы продукт + заказная компания спроса.После завершения проекта он будет развернут непосредственно на сервере заказчика. А заказчики редко выбирают облачные серверы, потому что у них есть свой машинный зал, они перед развертыванием предоставят нам 1-2 виртуальные машины, а потом всю проблему развертывания среды переложат на нас.

эволюция

Этап 1: Традиционная установка

время использования:? ~ 2016 г.

  1. Стороне А необходимо предоставить метод удаленного подключения к серверу Windows или Linux (здесь каждая Сторона А предоставляет разные методы, такие как бастионный хост, vpn, прямой открытый порт, vpn + бастионный хост и т. д.) очень сложно , только от случая к случаю
  2. Удалённо на сервер
  3. Загрузить базу данных, jdk, tomcat различные установочные пакеты (ограниченный коэффициент пропускной способности, часто отнимающий много времени)
  4. установить установить базу данных
  5. Установите jdk, tomcat, nginx (в среде Linux использование написанного скрипта sh для прямого запуска по-прежнему занимает много времени)
  6. Ручное развертывание военных пакетов и т. д. Ждать

В этом методе слишком много недостатков, и часто на выполнение всех развертываний уходит 3-5 человеко-дней, но у нас всего один эксплуатационный и обслуживающий персонал, поэтому, когда проект конфликтует, он крайне пассивен. И поскольку каждая версия программного обеспечения изменилась, виртуальная машина, предоставленная Стороной А, имеет 3 буквы диска, 2 буквы диска или диск D отсутствует (хотя отображаемый номер диска можно изменить с помощью управления компьютером, это может привести к сбою другого программного обеспечения). бежать), поэтому окружающая среда сравнивается с хаосом.

Этот метод относительно старый, и я не буду вводить больше. Конечно, насколько я знаю, некоторые небольшие компании все еще используют этот метод развертывания, поэтому я советую компаниям, которые используют этот метод, завершить трансформацию как можно скорее.

Этап 2: Восстановление образа

Время использования: 2016~2017

  1. Стороне А необходимо предоставить метод удаленного подключения к серверу Windows или Linux (здесь каждая Сторона А предоставляет разные методы, такие как бастионный хост, vpn, прямой открытый порт, vpn + бастионный хост и т. д.) очень сложно , только от случая к случаю
  2. Используйте образ vm для восстановления виртуальной машины и установки ip (включая докер)
  3. Развертывание военного пакета одним щелчком мыши через модуль развертывания

deloy模块
Таким образом, мы инкапсулируем 2, 3, 4 и 5 первого этапа в образ виртуальной машины vm, разрабатываем модуль развертывания и извлекаем проект без сохранения состояния.

В это время наша зависимость от оперативного и обслуживающего персонала значительно снижается, а рабочая нагрузка значительно сокращается до 2-6 часов. (С этого этапа наша компания не имеет эксплуатационного и обслуживающего персонала и вступила в эпоху DevOps. Фактически, в начале этого этапа наш эксплуатационный и обслуживающий персонал уволился, что заставило меня ускорить проектирование)

Третий этап: автоматическая регистрация открытия + выдача инструкции

Время использования: 2017~2018

  1. Сторона A использует наш образ виртуальной машины для восстановления и установки IP-адреса, чтобы мы могли пропинговать адрес нашей компании.
  2. Автоматическая регистрация открытия + выдача инструкции
  3. Развертывание военного пакета одним щелчком мыши через модуль развертывания

На данном этапе наше развертывание занимает 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.

Если у вас есть подобный сценарий, я надеюсь, что эта статья поможет вам.