多くの管理者の典型的な状況:
- 仮想/非仮想サーバーがあります。
- サイトを作成してからサポートしているクライアントがいくつかあります。
- 顧客サイトのバックアップの問題があります。
そして、お客様のYa。Disksでバックアップを整理してみませんか? ファイルだけでなく、データベースダンプもバックアップしますか? そして、彼らに指示してください:
なぜなら Yandexについて話しているのはもちろん、サーバー上のドメインをYandexに委任しました。 サーバーをロードする理由 Yandexは、smtpプロトコル経由でメールを処理できます。 同時に、YandexとNSが管理を引き継ぎます。 実際には便利です。
異なるYa.Diskアカウントへのバックアップを整理するには何が必要ですか:
- サーバーにssmtpをインストールして構成します。
- 必要なクライアントI.ディスクをインストールして構成します。
- バックアップ用のbashスクリプトを作成および構成します。
- cronでタスクを登録します。
そしてもちろん、Yandexで作成されたroot@your-site.ruという形式の大切なメールがあります。 root@your-site.ruに代わって、バックアップに関する手紙を受け取ります。
この記事で提案されているアルゴリズムは、 Ubuntu 16.04を搭載したサーバーでテストされています。
サーバーにssmtpをインストール、構成、テストする
すでにサーバーから自分にメールを送信している場合は、この項目をスキップしてください。それ以外の場合は読みます。
なぜなら サーバーには多くのユーザーがいます。ルートスーパーユーザーで作業する必要があります。 さらに、データベースファイルとデータベースパスワードをユーザーファイルに書き込み、このすべてのデータを/ルートディレクトリに保存する必要があります。
ルートのssh-connectionを閉じましたか? suを実行できるのは、最も信頼できるユーザーのみです。
コンソールで実行します:
su cd /root apt update && apt upgrade apt install ssmtp
/ルートディレクトリに移動し、ssmtpをインストールしました。 それ以降のすべてのコマンドもこのディレクトリで実行されます。
ssmtp構成の編集:
nano /etc/ssmtp/ssmtp.conf
フォームにそれをもたらします:
root=root@your_site.ru mailhub=smtp.yandex.ru:465 AuthUser=root@your_site.ru AuthPass=your_passwd AuthMethod=LOGIN FromLineOverride=YES UseTLS=YES Hostname=your_site.ru
構成は明らかであり、コメントするものはありません。
それだけです! これで問題を解決できます。
/ rootでのバックアップに関するレターのテンプレートを作成し、ssmtpの動作を確認しましょう
nano rsync_email_orig
フォームに持っていきましょう:
To: your_email@gmail.com From: root@your-site Subject: Backup sites Info on backup:
自分にメールを送信:
cp rsync_email_orig rsync_email_orig_test echo 'Test msg' >> rsync_email_orig_test ssmtp your_email@gmail.com < rsync_email_orig_test rm -f rsync_email_orig_test
問題はないはずです。設定は基本です。
クライアントのインストール、構成I.ディスク
私は仕事にクライアントIを使用しています。開発者Anton Batenevのディスク: github.com/abbat/ydcmd
この特定のクライアントが選ばれた理由:
- 別のYandexアカウントで作業できます。
- 必要なものだけを同期できます。
ydcmdをインストールするには、次のコマンドを実行します。
sudo add-apt-repository ppa:abbat/ydcmd sudo apt update sudo apt install ydcmd
私たちが検討しているクライアントは、/ usr / binにコピーされたpythonコマンド-ydcmd.pyにすぎません。 動作させるには、お客様のYandexアカウントのトークンを取得する必要があります。
トークンを取得するプロセスを説明することは意味がありません。 Githubの詳細: github.com/abbat/ydcmd 、またはYandex マニュアル 。
トークンを受け取った後、お客様用に異なる構成を作成します。 2つの異なるトークンがあります。1つはすべてのサイトに共通で、2つ目はサービス契約が締結されている個々のクライアント用です。 したがって、この記事では、すべてのユーザー用とユーザー獣医用の2つの構成に焦点を当てます。
/ rootにデフォルト構成を作成します
nano /root/.ydcmd.cfg
フォームにそれをもたらします:
[ydcmd] token = 1234567890
同様に、ユーザーvetの設定を作成します。このユーザーのサイトは別のYandex.Diskにバックアップされます。
nano /root/.ydcmd_vet.cfg
また、フォームにそれをもたらします:
[ydcmd] token = any_token
両方の構成のydcmdの動作を確認します。
ydcmd stat ydcmd --config=.ydcmd_vet.cfg stat
どちらの場合も、次のようなものが出力されるはずです。
name: disk exif: {} resource_id: 21239186:e9065863c345ergdfghjfgy51da3c5e06bc12345afeb14158ddcaae created: 2012-04-04T20:00:00+00:00 modified: 2012-04-04T20:00:00+00:00 path: disk:/ comment_ids: {} type: dir revision: 1354646733351472
通常の仕組み:
ydcmd --help
Ya.Diskiにバックアップ用のフォルダーを作成します。
ydcmd mkdir backup ydcmd --config=.ydcmd_vet.cfg mkdir backup
これで準備は完了です。
Ssmtpが機能し、バックアップレターテンプレートが作成され、Ya.Diskクライアントが異なるアカウント用に構成されます。 / rootフォルダーで作業していることを思い出してください。
バックアップ用のbashスクリプトの準備
実際、bashスクリプトには新しいものは何もありません。 覚えていないさまざまなソースからの編集。 スクリプトは1日おきに実行され、最後の3つのコピーが保存されます。 なぜそう 私にとってより便利だからです 誰でも自分で変更できます。
bashスクリプト
#!/bin/bash DATE=`/bin/date '+%d.%m.%Y'` USER=$1 DIR=/var/www DIR_SITES=public_html EMAIL=your_email@gmail.com TEMPLATE_EMAIL=/root/rsync_email D=`date +%j` # . 2 bash. == 1, == 0. .. if [ $((10#$D % 2)) == 1 ];then case $USER in vet) FILE=user_list_vet cnf=.ydcmd_vet.cfg DIR_BACKUP=/root/backup_vet ;; *) FILE=user_list_all cnf=.ydcmd.cfg DIR_BACKUP=/root/backup ;; esac else exit 1 fi if ! [[ -d $DIR_BACKUP ]]; then mkdir $DIR_BACKUP fi cp rsync_email_orig rsync_email echo "$DATE" >> $TEMPLATE_EMAIL echo "==============================================" >> $TEMPLATE_EMAIL while read line;do IFS=";" set -- $line USER=$1 SITES=$2 DB=$3 DB_USER=$4 DB_PASSWD=$5 FILE_NAME=$DIR_BACKUP/backup_"$SITES"_"$DATE".zip cd $DIR/$USER/$DIR_SITES mysqldump -u$DB_USER -p$DB_PASSWD $DB > $DB.sql zip -r9 $FILE_NAME $SITES $DB.sql > /dev/null rm ./$DB.sql zip -T $FILE_NAME >> $TEMPLATE_EMAIL echo "==============================================" >> $TEMPLATE_EMAIL chown $USER:$USER $FILE_NAME done < /root/$FILE find $DIR_BACKUP/ -mtime +4 -exec rm -f {} \; /usr/bin/ydcmd --config=/root/$cnf put --rsync $DIR_BACKUP/ disk:/backup >> $TEMPLATE_EMAIL /usr/sbin/ssmtp $EMAIL < $TEMPLATE_EMAIL exit 0
実際には、ここに変数を登録する必要があります。
#home dir DIR=/var/www #sites dir DIR_SITES=public_html EMAIL=your_email@gmail.com
そして、ここでの場合:
if [ $((10#$D % 2)) == 1 ];then case $USER in vet) FILE=user_list_vet cnf=.ydcmd_vet.cfg DIR_BACKUP=/root/backup_vet ;; *) FILE=user_list_all cnf=.ydcmd.cfg DIR_BACKUP=/root/backup ;; esac else exit 1 fi
FILE変数が何であるかが明確でないだけです。
FILE=user_list_vet
FILE変数は、次の形式のcsvファイルにすぎません。
user1;site1.ru;DB_name1;user_DB_1;passwd_DB_1 user1;site2.ru;DB_name2;user_DB_2;passwd_DB_2 user2;site3.ru;DB_name3;user_DB_3;passwd_DB_3 ...
バックアップごとに、データを使用して独自のcsvファイルを作成します。
system_username; ドメイン DB_for_dump; db_user_name; DB_password
当然、システムユーザーの名前はユーザーのホームディレクトリの名前と一致します。 ユーザーvet-ホームディレクトリもvetです。
バックアップに必要なcsvファイルを作成し、ファイルに余分な空行がないことを追跡します ! スクリプトには空の行のチェックはありません!
つまり csvファイルを作成するとき-カーソルは、保存されるとき、最後の行の最後になければなりません。
すべてが試運転の準備ができています。
もう一度すべてをチェックします。
- rsync_email_origレターテンプレートがあり、ssmtpが機能する
- さまざまな構成用にYa.Diskクライアントydcmdを構成しました
- rsync.shのすべての変数を編集しました
- 異なるバックアップ用に異なるcsvファイルを作成しました
ルートスーパーユーザーフォルダーで作業します。 少量のデータを持つユーザーに対してスクリプトを実行しようとします。このテストユーザーは獣医です。ユーザー名をパラメーターとしてスクリプトに渡します。
./rsync.sh vet
すべてが透明でシンプルなので、問題はないはずです。
エラーへ:
mysqldump: [Warning] Using a password on the command line interface can be insecure.
私たちは注意を払いません。
しかし、待ち伏せがある可能性があります。スクリプトは単に動作を停止し、何もしないことがあります。
次の行を見てください。
# . 2 bash. == 1, == 0. .. if [ $((10#$D % 2)) == 1 ];then
そして、1を0に変更し、再び開始しようとします。
起こるべきこと:
- スクリプトで指定されたバックアップフォルダーに、次の形式のバックアップを含むアーカイブを作成する必要があります:backup_your_site.ru_date.zip
- バックアップフォルダは、目的のアカウントのI.ディスクと同期されます。
- 次の形式の手紙を受け取ります。
Info on backup: Fri May 12 07:49:15 MSK 2017 ============================================== test of /root/backup_vet/your-site_date.zip OK ==============================================
実際にはすべて。 cronでタスクを登録することは残っています。
私にとってはこのように見えます:
su crontab -e
00 01 * * * /bin/bash /root/rsync.sh all 00 03 * * * /bin/bash /root/rsyn.sh vet
ご覧のとおり、cronは午前1時に実行され、異なるバックアップに対して午前3時に実行されます。 スクリプト自体は1日で機能します。
それだけです。建設的な批判、コメント、明確化を待っています。