Download Articles Stats About us Contact us
HomeVestaCP

DirectAdmin to VestaCP

1. [เก่า] แก้ตามนี้
nano /usr/local/directadmin/conf/directadmin.conf
direct_imap_backup=0
2. [เก่า] สร้าง backup
3. [ใหม่] 

cd /root/
wget www.domain.com/da-user-backup.tar.gz
wget mirror.skamasle.com/vestacp/skdaimporter/sk_da_importer.sh
bash sk_da_importer.sh da-user-backup.tar.gz

credit: https://forum.vestacp.com/viewtopic.php?f=19&t=13867

sk_da_importer.sh
001.#!/bin/bash
002.# This script is provided whitout any warranty
003.# Run at your own risk
004.# Version 0.2
005.# This script restore backups from DA to VestaCP
006.# This script can restore Datases, databases user and passwords, mails and domains.
007.# Contact da_importer@skamasle.com
008.# Skamasle | Maks Usmanov
009.# Twitter @skamasle
010.# Turn this to 1 if you want get domains and paths from apache_owened_list
011.# Turn int to 2 if you want to get domains dir "domains" and set public_html as default
012. 
013.sk_get_dom=2
014. 
015.if [ ! -e /usr/bin/rsync ] || [ ! -e /usr/bin/file ] ; then
016.    echo "#######################################"
017.    echo "rsync not installed, try install it"
018.    echo "This script need: rsync, file"
019.    echo "#######################################"
020.    if  [ -e /etc/redhat-release ]; then
021.        echo "Run: yum install rync file"
022.    else
023.        echo "Run: apt-get install rsync file"
024.    fi
025.    exit 3
026.fi
027.# Put this to 0 if you want use bash -x to debug it
028.sk_debug=1
029.sk_vesta_package=default
030.b=backup
031.d=domains
032.#
033.# Only for gen_password but I dont like it, a lot of lt
034.# maybe will use it for orther functions :)
035.source /usr/local/vesta/func/main.sh
036.sk_file=$1
037.sk_tmp=sk_tmp
038.sk_delete_tmp () {
039.echo "Removing tmp files"
040.rm -rf /root/${sk_tmp}
041.}
042.sk_file_name=$(ls $sk_file)
043.tput setaf 2
044.echo "Checking provided file..."
045.tput sgr0
046.if file $sk_file |grep -q -c "gzip compressed data," ; then
047.    tput setaf 2
048.    echo "OK - Gziped File"
049.    tput sgr0  
050.    if [ ! -d /root/${sk_tmp} ]; then
051.        echo "Creating tmp.."
052.        mkdir /root/${sk_tmp}
053.    fi
054.    echo "Extracting backup..."
055.    if [ "$sk_debug" != 0 ]; then
056.        tar xzvf $sk_file -C /root/${sk_tmp} 2>&1 |
057.               while read sk_extracted_file; do
058.                    ex=$((ex+1))
059.                    echo -en "wait... $ex files extracted\r"
060.               done
061.        else
062.            tar xzf $sk_file -C /root/${sk_tmp}
063.    fi
064.        if [ $? -eq 0 ];then
065.            tput setaf 2
066.            echo "Backup extracted whitout errors..."
067.            tput sgr0
068.        else
069.            echo "Error on backup extraction, check your file, try extract it manually"
070.            sk_delete_tmp
071.            exit 1
072.        fi
073.    else
074.    echo "Error 3 not-gzip - no stantard cpanel backup provided of file not installed ( Try yum install file, or apt-get install file )"
075.    sk_delete_tmp
076.    exit 3
077.fi
078.cd /root/${sk_tmp}/
079.sk_importer_in=$(pwd)
080.echo "Access tmp directory $sk_importer_in"
081.echo "Get prefix/user..."
082.sk_da_user=$(grep username backup/user.conf |cut -d "=" -f 2)
083.sk_da_usermail=$(grep email backup/user.conf |cut -d "=" -f 2 |grep @)
084.if [ -z $sk_da_usermail ];then
085.    sk_da_usermail=$(grep domain backup/user.conf |cut -d "=" -f 2 |head -n 1)
086.fi
087. 
088.if /usr/local/vesta/bin/v-list-users | grep -q -w $sk_da_user ;then
089.    echo "User alredy exist on your server, maybe on vestacp or in your /etc/passwd"
090.    echo "**"
091.    echo "Grep your /etc/passwd"
092.    grep -q -w $sk_da_user /etc/passwd
093.    echo "**"
094.    sk_delete_tmp
095.    exit 21
096.else
097.    echo "Generate random password for $sk_da_user and create Vestacp Account ..."
098.    sk_password=$(generate_password)
099.    /usr/local/vesta/bin/v-add-user $sk_da_user $sk_password $sk_da_usermail $sk_vesta_package $sk_da_user $sk_da_user
100.    if [ $? != 0 ]; then
101.        tput setaf 2
102.        echo "Stop Working... Cant create user...if is fresh install of vestacp try reboot or reopen session check bug https://bugs.vestacp.com/issues/138"
103.        tput sgr0
104.        sk_delete_tmp
105.        exit 4
106.        fi
107.fi
108.for sk_ex1 in crontab ticket user
109.do
110.    mv backup/${sk_ex1}.conf backup/${sk_ex1}
111.done
112.# start whit databases
113.tput setaf 2
114.echo "Start Whit Databases"
115.tput sgr0
116.echo "Get local databases"
117.mysql -e "SHOW DATABASES" > server_dbs
118.sk_da_db_user_list=$(ls -1 backup/ |grep ".conf")
119.function sk_run_da_db () {
120.for sk_da_db_u in $sk_da_db_user_list
121.do
122.#   userdb=${sk_da_db_u:: -5}
123.#   md5=$(grep $userdb ${b}/${sk_da_db_u} | head -n 1 | tr '&' '\n ' |grep passwd |cut -d "=" -f 2)
124.#   db=$(grep db_collation ${b}/${sk_da_db_u} | tr '&' '\n ' |grep SCHEMA_NAME |cut -d "=" -f 2)
125.#   grep -w $db server_dbs
126. 
127.# modify by tospat
128. 
129.    db=${sk_da_db_u:: -5}
130.    userdb=$(grep ${db%_*}_ ${b}/${sk_da_db_u} | head -n 1 | tr '&' '\n ' | grep alter_priv=Y | cut -d "=" -f 1)
131.    md5=$(grep $userdb ${b}/${sk_da_db_u} | head -n 1 | tr '&' '\n ' | grep passwd | cut -d "=" -f 2)
132.    grep -w $db server_dbs
133. 
134.    if [ $? == "1" ]; then
135.            tput setaf 2
136.            echo " Create and restore ${db} "
137.            tput sgr0
138.            mysql -e "CREATE DATABASE $db"
139.            mysql ${db} < backup/${db}.sql
140.            echo "Add $db to vestacp"
141. 
142.# don't forget to change CHARSET
143. 
144.            echo "DB='$db' DBUSER='$userdb' MD5='$md5' HOST='localhost' TYPE='mysql' CHARSET='TIS620' U_DISK='0' SUSPENDED='no' TIME='$TIME' DATE='$DATE'" >> /usr/local/vesta/data/users/${sk_da_user}/db.conf
145.    else
146.            echo "Error: Cant restore database $db alredy exists in mysql server"
147.    fi
148.done
149.echo "Fix passwords and users"
150./usr/local/vesta/bin/v-rebuild-databases $sk_da_user
151.}
152. 
153.if [[ -z $sk_da_db_user_list ]]; then
154.    echo "No database found"
155.else
156.sk_run_da_db
157.fi
158. 
159.# Start whit domains
160.tput setaf 2
161.echo "Start Whit Domains"
162.tput sgr0
163.if [ "$sk_get_dom" = 1 ];then
164.    sk_da_domain_list=$(grep "=G" ${b}/apache_owned_files.list |grep -v public_html |grep -v private_html)
165.else
166.    sk_da_domain_list=$(ls -1 domains/)
167.fi
168.for sk_da_dom in $sk_da_domain_list
169.    do
170.        if [ "$sk_get_dom" = 1 ];then
171.            sk_da_dom=${sk_da_dom:: -2}
172.        fi         
173.        tput setaf 2
174.        echo "Add $sk_da_dom if not exists"
175.        tput sgr0
176.        /usr/local/vesta/bin/v-add-domain ${sk_da_user} $sk_da_dom
177.        if [ "$?" = "4" ]; then
178.            tput setaf 4
179.            echo "Domain $sk_da_dom alredy added in some account, skip..."
180.            tput sgr0
181.        elif [ -d /home/${sk_da_user}/web/${sk_da_dom} ];then
182.            echo "Domain $sk_da_dom added, restoring files"
183.            echo $sk_da_dom >> sk_restored_domains
184.            #some paths maybe change, I dont know yet so we get it.
185.            if [ "$sk_get_dom" = 1 ];then
186.                sk_da_do_path=$(grep -w $sk_da_dom ${b}/apache_owned_files.list |grep -v "${sk_da_dom}=G" |grep -v "private_html")
187.                sk_da_do_path=${sk_da_do_path:: -2}
188.            else
189.                sk_da_do_path=${sk_da_dom}/public_html
190.            fi
191.            if [ "$sk_debug" != 0 ]; then
192.                rm -f /home/${sk_da_user}/web/${sk_da_dom}/public_html/index.html
193.                rsync -av ${d}/${sk_da_do_path}/ /home/${sk_da_user}/web/${sk_da_dom}/public_html 2>&1 |
194.# copy webalizer stats
195.                rsync -av ${d}/${sk_da_dom}/stats/ /home/${sk_da_user}/web/${sk_da_dom}/stats 2>&1 |
196.                while read sk_file_dm; do
197.                    sk_sync=$((sk_sync+1))
198.                    echo -en "-- $sk_sync restored files\r"
199.                done
200.                echo " "
201.            else
202.                rm -f /home/${sk_da_user}/web/${sk_da_dom}/public_html/index.html
203.                rsync ${d}/${sk_da_do_path}/ /home/${sk_da_user}/web/${sk_da_dom}/public_html
204.                rsync ${d}/${sk_da_dom}/stats/ /home/${sk_da_user}/web/${sk_da_dom}/stats
205.            fi
206.            chown ${sk_da_user}:${sk_da_user} -R /home/${sk_da_user}/web/${sk_da_dom}/public_html
207.            chown ${sk_da_user}:${sk_da_user} -R /home/${sk_da_user}/web/${sk_da_dom}/stats
208.            chmod 751 /home/${sk_da_user}/web/${sk_da_dom}/public_html
209.            chmod 751 /home/${sk_da_user}/web/${sk_da_dom}/stats
210.        else
211.            echo "Ups.. cant restore or add domain: $sk_da_dom"
212.        fi
213.done
214.echo " "
215.echo "Domains restored!"
216.tput setaf 2
217.echo "Start restoring mails"
218.tput sgr0
219.function sk_da_restore_imap_pass () {
220.if [ -d /etc/exim ]; then
221.    EXIM=/etc/exim
222.else
223.    EXIM=/etc/exim4
224.fi
225. 
226.sk_actual_pass=$(grep -w $1 ${EXIM}/domains/$2/passwd | cut -d ":" -f 2)
227.sk_da_orig_pass=$(grep -w $1 ${b}/$2/email/passwd | cut -d ":" -f 2)
228. 
229.replace "${sk_actual_pass}" "${sk_da_orig_pass}" -- ${EXIM}/domains/$2/passwd
230.echo "Password for $1@$2 restored"
231.#################
232.# fix vesta needed
233.}
234.if [ -e sk_restored_domains ]; then
235.cat sk_restored_domains | while read sk_da_mail_domain
236.    do 
237.        if [ "$(ls -A ${b}/${sk_da_mail_domain}/email/data/imap/)" ]; then
238.            tput setaf 2
239.            echo "Found Imap for ${sk_da_mail_domain}"
240.            tput sgr0
241.                ls -1 ${b}/${sk_da_mail_domain}/email/data/imap/ | while read sk_da_imap
242.                    do
243.                        /usr/local/vesta/bin/v-add-mail-account $sk_da_user $sk_da_mail_domain $sk_da_imap temp
244.                        if [ "$sk_debug" != 0 ]; then
245.                            rsync -av ${b}/${sk_da_mail_domain}/email/data/imap/${sk_da_imap}/Maildir/ /home/${sk_da_user}/mail/${sk_da_mail_domain}/${sk_da_imap} 2>&1 |
246.                            while read sk_file_dm
247.                            do
248.                                sk_sync=$((sk_sync+1))
249.                                echo -en "-- $sk_sync restored files\r"
250.                            done
251.                            echo " "
252.                        else
253.                            rsync ${b}/${sk_da_mail_domain}/email/data/imap/${sk_da_imap}/Maildir/ /home/${sk_da_user}/mail/${sk_da_mail_domain}/${sk_da_imap}
254.                        fi
255.                        chown ${sk_da_user}:mail -R /home/${sk_da_user}/mail/${sk_da_mail_domain}/${sk_da_imap}
256.                sk_da_restore_imap_pass $sk_da_imap $sk_da_mail_domain
257.                    done
258. 
259.        fi
260.    done
261.fi
262.sk_delete_tmp
263.echo "Account $sk_da_user restored"
264.echo "REport eny errores in skamasle.com or in vesta forum ( official forum thread ) "
265.echo "Or in twitter @skamasle"
266.echo "This was powered by skamasle.com | Maks Usmanov"
267. 
268.echo "Modified by Tospat 2019-08-04"
269.echo "to restore db_user, db_pass, email_pass, stats"

4. หลังจาก restore เสร็จแล้ว

สิ่งที่ copy ได้คือ
- public_html
- mysql database, user, passwd
- email, passwd, content
- webstat

สิ่งที่ copy ไม่ได้คือ
- email forward
- roundcube contact

5. เพื่อให้แน่ใจว่า stats ทำงานถูกต้อง ให้แก้ไขไฟล์
 nano /usr/local/vesta/data/templates/web/webalizer/webalizer.tpl

HostName         %domain_idn%
LogFile          /var/log/%web_system%/domains/%domain%.log
OutputDir        %home%/%user%/web/%domain%/stats
HistoryName      %home%/%user%/web/%domain%/stats/webalizer.hist
Incremental      yes
IncrementalName  %home%/%user%/web/%domain%/stats/webalizer.current

จากนั้น stats น่าจะใช้ได้ปรกติ

คำสั่งให้ vesta อัพเดท stats
/usr/local/vesta/bin/v-update-web-domain-stat

 

26 ก.ค. 62
© 2000 - 2025 palthai.com. All rights reserved.