Поиск

Найдено 14 статьи по слову "copypaste"

Бекапы через Duplicity

У меня уже был установлен, если нет, то:

apt install -y duplicity

Запускать его рекомендую под root. А также добавить в cron.

Делаем бекап без шифрования.

В первый раз будет полный бекап, при повторной
команде будет инкрементальный:

duplicity --no-encryption /home/crusat/www/crusat file:///mnt/backup/incremental/

Пример вывода:

Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1685457148.21 (Tue May 30 17:32:28 2023)
EndTime 1685457321.37 (Tue May 30 17:35:21 2023)
ElapsedTime 173.16 (2 minutes 53.16 seconds)
SourceFiles 2598
SourceFileSize 2430153960 (2.26 GB)
NewFiles 2598
NewFileSize 2430153960 (2.26 GB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 2598
RawDeltaSize 2428822760 (2.26 GB)
TotalDestinationSizeChange 559464350 (534 MB)
Errors 0
-------------------------------------------------

После инкрементального пример вывода:

Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Tue May 30 17:32:28 2023
--------------[ Backup Statistics ]--------------
StartTime 1685458987.94 (Tue May 30 18:03:07 2023)
EndTime 1685458988.72 (Tue May 30 18:03:08 2023)
ElapsedTime 0.79 (0.79 seconds)
SourceFiles 2598
SourceFileSize 2430165025 (2.26 GB)
NewFiles 1
NewFileSize 4096 (4.00 KB)
DeletedFiles 0
ChangedFiles 5
ChangedFileSize 16991003 (16.2 MB)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 6
RawDeltaSize 72816 (71.1 KB)
TotalDestinationSizeChange 18152 (17.7 KB)
Errors 0
-------------------------------------------------

Делаем полный бекап:

duplicity --no-encryption --full /home/crusat/www/crusat file:///mnt/backup/full/

При необходимости, можно исключить файлы с помощью опции --exclude.

Восстанавливаем бекап:

duplicity --no-encryption restore file:///mnt/backup/incremental/ /home/crusat/www/crusat

Восстанавливаем бекап трехдневной давности:

duplicity -t 3D --no-encryption restore file:///mnt/backup/incremental/ /home/crusat/www/crusat

Восстанавливаем конкретный файл:

duplicity --no-encryption --file-to-restore FILENAME file:///mnt/backup/incremental/ /home/crusat/www/crusat

Все работает через scp, поэтому можно делать так:

duplicity --no-encryption /home/crusat/www/crusat scp:///user@backup.ru/incremental/

Добавляем в cron для ежедневных бекапов:

crontab -e
# добавляем через любимый редактор задачу на час ночи ежедневно
0 1 * * * duplicity --no-encryption /home/crusat/www/crusat file:///mnt/backup/incremental/

Всем спасибо за внимание.

bash copypaste devops

git падает с нехваткой памяти

Когда вы видите подобное сообщение от git при пуше:

Delta compression using up to 2 threads.
warning: suboptimal pack - out of memory 
error: pack-objects died of signal 90)   
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
error: failed to push some refs to '...'
fatal: write error: Bad file descriptor

То можете попробовать увеличить размер доступной памяти, это может помочь. Для этого выполните команду

git config --global pack.windowMemory "32m"

и попробуйте запушить еще раз.

bash copypaste devops

Глобально меняем ключи доступа и пароли от всех своих серверов с помощью Ansible

Если вам необходимо обновить ключи доступа и пароли на многих серверах (например, ушел какой-либо сотрудник у которого был доступ к каким-то серверам, либо просто в целях безопасности обновить надо, либо для CI, вариантов куча), то можно использовать для этого Ansible.

Создайте директорию public_keys/, где будете хранить ваш ключ и ключи ваших сотрудников. Добавьте туда все необходимые ключи, например:

Файл public_keys/crusat:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDDVk9yuKpN/c1+TsM3i0YW5H1Z86dVZQvAkOAxF3VZMIS48Ng6JjTOx58/kf5Z1fjNVcxNWv0uyrARstgZTokWiNfeHGYyMR+htivsJnFHiG6i1OXUdRAfNh84EXPm0LZbvzcRm9MM36nsa5cNS4dGE8ZxObW29O....

Со всеми остальными проделайте то же самое.

Теперь создадим плейбук set_access.yml (обратите внимание на обращение к ключам из public_keys - эти ключи будут добавлены, адаптируйте под себя):

---
- hosts: all 
  remote_user: root
  vars_files: ['credentials.yml']
  tasks:
  - name: Set main authorized key and remove existent
    authorized_key:
      user: root
      state: present
      key: '{{ item }}'
      exclusive: True
    with_file:
      - ./public_keys/crusat
  - name: Set up other keys
    authorized_key:
      user: root
      state: present
      key: '{{ item }}'
    with_file:
      - ./public_keys/user1
      - ./public_keys/user2
  - name: Set root password
    user:
      name: root
      state: present
      update_password: always
      password: "{{ admin_default_password }}"
      shell: /bin/bash

Теперь надо сделать возможность задания входа по паролю (см. последнюю задачу в ansible - можно задавать для разных пользователей, просто скопируйте, сколько необходимо).

Для этого создадим файл set_access.sh:

#!/bin/bash

NEW_PASSWORD='mysuperpassword'

HASHED_PASSWORD=`python3 -c 'import crypt; print(crypt.crypt("'"$NEW_PASSWORD"'", crypt.mksalt(crypt.METHOD_SHA512)))'`

echo 'admin_default_password: '$HASHED_PASSWORD > ./credentials.yml

ansible-playbook -i inventory_hosts -l test ./set_access.yml

Здесь укажите правильный путь к инвентарю. Суть в следующем - скрипт берет пароль, хэширует его, помещает в файл credentials.yml и затем выполняет плейбук, который как раз возьмет хэшированный пароль как переменную и задаст необходимый пароль для пользователя root.

ansible bash copypaste devops

Как установить модули python без интернета с помощью pip

Для начала надо скачать все модули, которые перечислены в requirements.txt. Проще всего через докер.

$ docker run -it --rm --name my -v "$PWD":/tmp/pip_cache python:3.6 pip download -r /tmp/pip_cache/requirements.txt -d /tmp/pip_cache/

Обратите внимание на версию. Тут используется 3.6 - она должна совпадать с той версией питона, который установлен на сервере. Иначе Pillow, psycopg2 и т.п. скомпилированные модули не поставятся.

Затем можно залить их и установить с помощью такой команды:

$ pip install -r requirements.txt -f /path/to/pip/cache/ --no-index

Все, после этого можно использовать.

copypaste python

Простой конфиг обратного прокси в nginx

Для проксирования запросов через nginx “куда-то еще” можно использовать подобный скрипт. Это называется “reverse proxy”.

В случае ниже, nginx слушает 80 порт для example.com и перенаправляет запрос на http://127.0.0.1:1000. При этом, он сохранит server_name и IP посетителя.

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:1000;
        proxy_set_header Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout       60;
        proxy_send_timeout          60;
        proxy_read_timeout          60;
        send_timeout                60;
    }
}
copypaste

Сжимаем картинки рекурсивно и пропорционально bash

Находим все файлы с расширением “.png” и, если их размер больше 1500х1500 пикселей, то уменьшаем их размер,
чтобы пропорционально вписать в квадрат 1500х1500, перезаписывая оригинал изображения.

find . -name '*.png' -exec convert -resize "1500x1500>" {} {} \;

Это позволит хоть немного освободить место на жестком диске, если у вас слишком большие изображения.

bash copypaste

Сколько доступно памяти сейчас

grep MemTotal /proc/meminfo | awk ‘{print $2}’

bash copypaste

Количество запущенных процессов bash

Список запущенных процессов (например, python)

pidof python

Количество запущенных процессов для python/perl/bash и прочих с параметрами (например, python3 acd_cli …). Пример ниже выведет 0, 1 или больше

pidof -x someapp | wc -w
bash copypaste

Размер содержимого директорий bash

Вывести директории и их размеры в отсортированном виде по убыванию

du -s /my/directory/path/* | sort -nr

Вывести директории и их размеры в человекопонятном стиле

du -sh /my/directory/path/
bash copypaste

Поиск файлов с помощью bash

Найти файлы рекурсивно, начиная с текущей папки, с текстом “my_text”

egrep -ir --include=*.* "(my_text)" .

Найти файлы, измененные за последние три дня в указанной директории рекурсивно

find /my/directory/path -type f -mtime -3

Найти последние измененные файлы в указанной директории рекурсивно (10 шт.)

find /my/directory/path/ -type f -printf '%T@ %p\0' | sort -zk 1nr | sed -z 's/^[^ ]* //' | tr '\0' '\n' | head -n 10

Найти рекурсивно все файлы с размером 0, начиная с текущей директории

find ./ -size 0 -print
bash copypaste