Junior DevOps/SR engineer
115 subscribers
4 photos
10 links
Меня зовут Леша и я начинающий DevOps инженер в компании Флант
Download Telegram
#оффтоп
Если у вас есть вопросы по древнешумерскому и не очень - пожалуйста, пишите, буду рад помочь вам разобраться и самому подтянуть знания:)
1
#оффтоп
Когда выкатил говно-коммит и коллеге пришлось его поправлять
1
#оффтоп
В общем, сюда уже несколько дней ничего не выкладывал. Есть, что рассказать, но со временем сложно:(((
Может, у кого-то из вас есть какие-то интересные штуки?)
1
#оффтоп
Сегодня в маршрутке девчушка лет 4-х спросила маму: «А если всем попросить Лёшу не бросать канал на первой неделе после создания, он сможет это сделать?» С мамой плакала половина маршрутки… Леша, как так?!!
👍21
Благодаря очень хорошему человеку, у нас появился сервачок, на котором можно делать всякое.
В общем, необязательно иметь белый ipшник, чтобы ходить на удалённую машину по ssh (или любому другому протоколу).

Берём самый дешёвый хостинг, разворачиваем на нем самую дешёвую виртуальную машину, ставим openvpn (или wireguard).

Подключаем сервер в любой сети с доступом в интернет к этому впну, заворачиваем через iptables проброс порта на тачке с впном до вашего сервера и профит:) (ещё надо не забыть сконфигурить в впне роут до подключенного устройства)

ssh из любой точки мира до вашего сервера дома без платы за белый IP у провайдера.

Подробный мануал, может быть, напишу, а может и нет:)
1
Как какать, когда ты тормоз.

Значится, как все было.
Развернули с одним очень хорошим человеком на новом сервере гитлаб в докере (по инструкции с офф сайта: https://docs.gitlab.com/ee/install/docker.html). Настроили бэкапы (в будущем планировали переехать из обычного докера в кубы), но не особо придали значения, что у гитлаба кучу разных вариантов бэкапов. Прожили так пару недель.

Затем зачесалось кое у кого кое-где (у вашего покорного слуги), снесли к чертовой бабушке докер и накатили кубик (не простой, а золотой https://deckhouse.io/en/). Конечно, и бэкапы, и маунты от гитлаба оставили.
Начали жить по-новому и все было хорошо, до момента осознания, что бэкапы были сделаны "неправильно" и их не получится без танцев с бубнами перенести в новый гитлаб (который теперь в кластере k8s). Поняв, что даже бубен племени майя и жертвоприношения не особо помогут с восстановлением бэкапа в новый инстанс гитлаба, решил запустить гитлаб у себя на ноуте (почему на ноуте - потому что куб работает на containerd и deckhouse (который не простой куб, а золотой) не любит containerd и docker на одной машине) и перенести все репы вручную.

Перенес на ноут маунты старого докерного гитлаба, начал запускать и столкнулся с ошибкой доступов. Провозившись часа полтора, нашел наконец решение: https://stackoverflow.com/a/48037595. Оказалось, что проблема во внутреннем устройстве файловой системы OSX и что нужно было запускать все из домашней директории, а не из /tmp, как хотел изначально.
В общем, потратив всего часа 3-4 на все эти манипуляции, получилось поднять локально гитлаб и достать старые репы. Дальше все пошло легче.

Первым делом, сделал себе acess token для доступа к api гитлаба (https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html)
Затем, вытащил все проекты, которые уже были в нем, и сохранил в файл их repo_url для клонирования (стоит упомянуть, что все требуемые к восстановлению репы были в одной группе (папке)):

curl -sSf -H "PRIVATE-TOKEN: $GITLAB_API_TOKEN" "http://127.0.0.1/api/v4/projects?per_page=1000" | jq -r '.[].http_url_to_repo )' | tee repos.txt

Поменял url remote, чтобы можно было клонить локально (фикс от остатков конфигов от работающего гитлаба в докере) и нехитрыми манипуляциями склонировал все:

cat repos.txt | sed 's/gitlab.alexmakh.ru/127.0.0.1:20080/g' | xargs -I{} git clone {}

затем, поменял git remote url, так как он был направлен на 127.0.0.1, а нужно было на новый домен удаленного гитлаба:

CURR_DIR=$(pwd)
for path in $(ls -d */); do cd $CURR_DIR/$path; git remote set-url origin $(git remote get-url origin | sed 's/127.0.0.1:20080/gitlab.alexmakh.ru/g'); done


создал группу(папку) в новом инстансе с тем же названием, что и в прошлом гитлабе.
Также сделал себе acess token в новом гитлабе и создал пустые проекты для всех, которые хотел пушнуть:

ls -d */ | tr -d '/' | xargs -I{} curl -H "PRIVATE-TOKEN: $GITLAB_API_TOKEN" --request POST -H "Content-Type: application/json" --data '{
"name": "{}", "description": "", "path": "{}",
"namespace_id": "8", "initialize_with_readme": "false"}' \
--url "https://gitlab.alexmakh.ru/api/v4/projects"


и затем пушнул все нехитрыми манипуляциями.

CURR_DIR=$(pwd)
for path in $(ls -d */); do cd $CURR_DIR/$path; git push; done


Профит, потрачено 5-6 часов на все, вместе с развертыванием гитлаба в кубы, но зато все восстановлено без потерь:)
1👍1
И по просьбам трудящихся,
Wireguard vpn, локальная сеть и проброс портов для доступа из вне:

Оказывается, хороший человек, который все это делал - просто воспользовался мауналом (в этом ничего плохого нет, зачем пилить велосипеды?):
https://noostyche.ru/blog/2022/03/29/ispolzovanie-wireguard-klientami-s-serymi-ip/

Вводные: локальная сеть комнаты общежития, VPS на самом дешевом хостинге и туториал выше. Для проброса портов использовался скрипт с iptables таблицей nat (https://ru.wikipedia.org/wiki/NAT)
Сам скрипт добавления проброса порта:

#!/bin/bash

EXT_IP="белый IP вашей VPSки"
INT_IP="Внутренний адрес VPSки в сети ВПН"
EXT_IF=ens3 (интерфейс VPSки, на который приходит внешний трафик)
INT_IF=wg_ihor (интерфейс VPN)
LAN_IP="Адрес сервера внутри сети VPN, на который нужно отправлять трафик"
SRV_PORT=$1


iptables -t nat -A PREROUTING --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -t nat -A POSTROUTING --dst $LAN_IP -p tcp --dport $SRV_PORT -j SNAT --to-source $INT_IP
iptables -t nat -A OUTPUT --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -I FORWARD 1 -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j ACCEPT


где SRV_PORT - нужный порт для проброса (первый аргумент при вызове баш скрипта)

Также, для персистентности правил на впн сервере (так как они сбросятся после перезагрузки), стоит после отрабатывания скрипта сделать:
netfilter-persistent save

а после перезагрузки VPSки:
netfilter-persistent start

или сделать маленькый скрипт:
#!/bin/sh
netfilter-persistent start


И засунуть его в крончик:
@reboot /path/to/script/netfilter-persist-start.sh
#держувкурсе
Гошная библиотека для регулярных выражений не поддерживает опережающие и ретроспективные проверки (https://habr.com/ru/post/159483/), и вот почему: https://groups.google.com/g/golang-nuts/c/7qgSDWPIh_E/m/aKBGgoj8AAAJ

Если коротко: "тупые" кодеры не хотят их включать, так как не могут тогда гарантировать скорость O(n) при сопоставлении паттерна
1
#оффтоп
Как коротко объяснить, кто такой девопес
👍52
#оффтоп
Решили значит с корешом обновить бубунту с 20 до 22 на своем домашнем “серваке“.
Сделали все по правильному, обновили пакетики, сделали do-release-upgrade, система в ребут ушла и больше не поднялась.

Но суть не в этом, суть в том, как проиводился дебаг - была подключена видеокарта к серваку, видеокарта к конвертеру VGA на HDMI, далее по HDMI к карте видео захвата (монитора отдельного нет), а она к ноуту. Там был запущен OBS. После запуска, OBS решил, что он камера и вставил картинку с карты видео захвата (то есть, с сервера) прям в мит.

В итоге, дебаг производился под общажным хуевым интернетом через картинку с гугл мита на телефоне (так как на ноуте картинка была отзеркалена🤡) и клаву, подключенную к серверу. Картинка сетапа, конечно, прилагается
👍3🔥32😁1🤡1