Как Передать Домен и Базу Данных с Hestia

Введение: В современном мире веб-разработки и управления серверами, где требуется гибкость и оперативность, ключевую роль играет возможность легко передавать ресурсы, такие как домены и базы данных, между пользователями. В этой статье мы рассмотрим, как использовать Hestia Control Panel для эффективной передачи домена пользователю hestia и переноса базы данных другому пользователю с помощью команды v-change-database-owner.

Основная Часть:

  1. Передача Домена:
    • Что такое Hestia Control Panel?
    • Почему важна передача домена?
    • Шаги для передачи домена пользователю hestia:
      • Вход в Hestia Control Panel.
      • Выбор домена для передачи.
      • Использование команды v-change-domain-owner.
      • Проверка передачи домена.
  2. Перенос Базы Данных:
    • Значение баз данных в управлении веб-ресурсами.
    • Процесс переноса базы данных:
      • Выбор базы данных для переноса.
      • Применение команды v-change-database-owner.
      • Важные аспекты безопасности при переносе.
      • Подтверждение успешного переноса.

Заключение: Передача домена и перенос базы данных с использованием Hestia Control Panel - это простые и эффективные процедуры, которые значительно облегчают управление веб-ресурсами. Следуя представленным здесь инструкциям, вы сможете быстро и безопасно осуществить необходимые изменения.

Настроить ssh.exe вместо putty

В windows 10 уже есть интегрирован ssh.exe(наконец-то!) и winscp можно настроить так что бы putty, как не крути, более тяжелая программа вообще не запускалась

делается просто

 %SystemRoot%\Sysnative\OpenSSH\ssh.exe !U@!@ -p !# -t "cd !/ ; /bin/bash"

Drupal 8 commerce2 add custom field checkout


https://www.drupal.org/project/commerce_checkout_order_fields. Just enable it, go to /admin/commerce/config/order-types/default/edit/form-display, scroll down, enable 'Checkout' view, drag/drop fields on the Checkout view, and then go to /admin/commerce/config/checkout-flows/manage/default and add 'Order Fields: Checkout' pane to a step you want. Enjoy

Некие команды для ./occ

Выполнять от юзера www-data

docker exec -it -u 82 dockername /bin/sh

./occ upgrade - обновляет базу

./occ files:scan --all

./occ files:scan grenuy
./occ files:scan --path "grenuy/files/Share uWorld"
sudo -u www-data php occ files:scan --help
  Usage:
  files:scan [-p|--path="..."] [-q|--quiet] [-v|vv|vvv --verbose] [--all]
  [user_id1] ... [user_idN]

Arguments:
  user_id               will rescan all files of the given user(s)

Options:
  --path                limit rescan to the user/path given
  --all                 will rescan all files of all known users
  --quiet               suppress any output
  --verbose             files and directories being processed are shown
                        additionally during scanning
  --unscanned           scan only previously unscanned files

Удаление 5 миллионов файлов

Обычно предлагается удалять через find и рабочий вариант, но в моем случаи 1.5млн удаляло часов 10 что недопустимо долго так перебирать пошел другим путем через цыклы и маски

for i in {a..z}
  do 
	rm /var/www/*/data/www/*/system/sessions/sess_$i[a-c]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[d-g]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[h-k]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[l-n]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[p-r]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[s-v]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[w-y]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[y-z]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[0-2]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[3-5]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[6-8]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[8-9]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i*
 done



 for i in {0..9}
  do 
	rm /var/www/*/data/www/*/system/sessions/sess_$i[a-c]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[d-g]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[h-k]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[l-n]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[p-r]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[s-v]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[w-y]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[y-z]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[0-2]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[3-5]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[6-8]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i[8-9]*
	rm /var/www/*/data/www/*/system/sessions/sess_$i*
 done

Или удалить файлы, которые старше семи дней:

for f in /tmp/logs/*.log
do
  find $f -mtime +7 -exec rm {} \;
done

Удаление заняло несколько минут времени.

Что бы скачать с googledrive любые по размеру файлы без вопросов нужно подменить FILEID

wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILEID' -O- | sed -rn 's/.confirm=([0-9A-Za-z_]+)./\1\n/p')&id=FILEID" -O FILENAME && rm -rf /tmp/cookies.txt

SSL https free auto crbot

1. Скачиваем сам CERBOT:

Код:
wget https://dl.eff.org/certbot-auto

2. Устанвливаем права на CERBOT:

Код:
chmod a+x certbot-auto

3. настраиваем "webroot-path" папка доступна из вне

/etc/letsencrypt
authenticator = webroot
webroot-path = /var/www/grenuydev/data/www/dev.uw-t.com
post-hook = service nginx reload
text = True

./certbot-auto certonly --webroot

test auto renew
certbot-auto renew --dry-run

renew auto
certbot-auto renew --no-self-upgrade

ngnix config:
add file


# cat /etc/nginx/acme
location ^~ /.well-known/ {
proxy_pass http://91.203.5.41:81;
proxy_redirect http://91.203.5.41:81/ /;
root /var/www/grenuydev/data/www/dev.uw-t.com;
}


include acme;
include /usr/local/ispmgr/etc/nginx.inc;
listen 91.203.5.41:443 ssl;
ssl_certificate /etc/letsencrypt/live/example.dev.uw-t.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.dev.uw-t.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2 SSLv3;

Может пригодиться конвертировать ключи

openssl rsa -outform der -in private.pem -out private.key
openssl x509 -outform der -in your-cert.pem -out your-cert.crt

Обновить в Debian php с 5.4 до 5.5 или 5.6

1. sudo nano /etc/apt/sources.list
2. добавить строчки если хотите до 5.5

deb http://packages.dotdeb.org wheezy-php55 all
deb-src http://packages.dotdeb.org wheezy-php55 all

или

deb http://packages.dotdeb.org wheezy-php56 all
deb-src http://packages.dotdeb.org wheezy-php56 all

3. apt-get update
но скорее всего не сможет обновить проблема с ключами бла бла лечиться тдвумя способами
3.1.
gpg --keyserver packages.dotdeb.org --recv-key E9C74FEEA2098A6E
gpg -a --export E9C74FEEA2098A6E | sudo apt-key add -

или
wget http://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg

4. apt-get update
5. apt-get install php5
6. service apache2 restart

ispmanager 4 change phpversion

Два шага, 1 собрать PHP с исходников(другая тема) суть ее в том что бы в отедльных папках были отдельные версии PHP в инете куча статей, может и у меня дойдут руки.
Второй шаг 3 файла создать и перезапустить ispmanager

killall ispmgr

По пути /usr/local/ispmgr/etc
создаем файл ispmgr_mod_phpversion.xml с содержимым

<?xml version="1.0" encoding="UTF-8"?>
  <mgrdata>
    <handler name="phpversion.pl" type="cgi">
      <func>phpversion</func>
      <func>phpversion.edit</func>
      <func>phpversion.delete</func>
      <func>userphpversion</func>
      <func>userphpversion.enable</func>
   </handler>
 
   <metadata name="phpversion" type="list" key="item">
     <toolbar>
       <toolbtn func="phpversion.edit" type="new"  img="t-new" name="new"/>
       <toolbtn func="phpversion.edit" type="edit" img="t-edit" name="edit" default="yes"/>
       <toolbtn func="phpversion.delete" type="group" img="t-delete" name="delete"/>
     </toolbar>
     <coldata>
       <col sort="alpha" sorted="yes" name="item" type="data"/>
       <col sort="alpha" name="path" type="data"/>
     </coldata>
   </metadata>
 
   <metadata name="phpversion.edit" type="form">
     <form>
       <field name="item">
         <input type="text" name="item" />
       </field>
       <field name="path">
         <input type="text" name="path" />
       </field>
     </form>
   </metadata>
 
   <metadata name="userphpversion" type="list" key="item">
     <toolbar>
       <toolbtn func="userphpversion.enable" type="edit"  img="t-on" name="enable" default="yes"/>
     </toolbar>
     <coldata>
       <col sort="alpha" sorted="yes" name="item" type="data"/>
       <col name="props" sort="prop">
         <prop name="active" onimg="t-on" defimg="t-off"/>
       </col>
     </coldata>
   </metadata>
 
   <mainmenu level="7">
     <node name="tool">
       <node name="phpversion"/>
     </node>
   </mainmenu>
 
   <mainmenu level="5">
     <node name="tool">
       <node name="userphpversion"/>
     </node>
   </mainmenu>
 
   <lang name="en">
     <messages name="desktop">
       <msg name="menu_phpversion">PHP versions</msg>
       <msg name="menu_userphpversion">PHP version</msg>
     </messages>
     <messages name="phpversion">
       <msg name="title">PHP versions</msg>
       <msg name="item">Availible versions</msg>
       <msg name="path">Path to binary</msg>
       <msg name="msg_phpversion_delete">Delete version</msg>
       <msg name="hint_new">Add version</msg>
       <msg name="hint_edit">Edit version</msg>
       <msg name="hint_delete">Delete version</msg>
     </messages>
     <messages name="phpversion.edit">
       <msg name="title">Edit version</msg>
       <msg name="title_new">New version</msg>
       <msg name="item">Version value</msg>
       <msg name="path">Path to binary file</msg>	
       <msg name="hint_item">Version value</msg>
       <msg name="hint_path">Path to php-cgi (e.g. /usr/bin/php-cgi)</msg> 
     </messages>
     <messages name="userphpversion">
       <msg name="title">PHP version in use</msg>
       <msg name="item">Availible versions</msg>
       <msg name="hint_enable">Choose version</msg>
     </messages>
   </lang>
   <lang name="ru">
     <messages name="desktop">
       <msg name="menu_phpversion">Версии PHP</msg>
       <msg name="menu_userphpversion">Версия PHP</msg>
     </messages>
     <messages name="phpversion">
       <msg name="title">Версии PHP</msg>
       <msg name="item">Доступные версии</msg>
       <msg name="msg_phpversion_delete">Удалить версию</msg>
       <msg name="hint_new">Добавить версию</msg>
       <msg name="hint_edit">Править версию</msg>
       <msg name="hint_delete">Удалить версию</msg>
     </messages>
     <messages name="userphpversion">
       <msg name="title">Используемая версия PHP</msg>
       <msg name="item">Доступные версии</msg>
       <msg name="hint_enable">Включить версию</msg>
     </messages>
     <messages name="phpversion.edit">
       <msg name="title">Править версию</msg>
       <msg name="title_new">Новая версия</msg>
       <msg name="item">Значение версии</msg>
       <msg name="path">Путь до исполняемого файла</msg>
       <msg name="hint_item">Значение версии (5.1.6, 5.2.10) </msg>
       <msg name="hint_path">Путь до бинарника (например, /usr/bin/php-cgi)</msg>
     </messages>
   </lang>
 </mgrdata>

По пути /usr/local/ispmgr/addon
создаем два файла, первый phpversion(в конце пустая строка обязательная в редакторе не отображается)

5.4 /usr/bin/php-cgi
5.5 /usr/local/share/phpfarm/inst/php-5.5.32/bin/php-cgi
5.6.21 /usr/local/share/phpfarm/inst/php-5.6.21/bin/php-cgi
7.0 /usr/local/share/phpfarm/inst/php-7.0.6/bin/php-cgi

второй файл по пути /usr/local/ispmgr/addon
phpversion.pl

#!/usr/bin/perl
BEGIN { push @INC, '/usr/local/ispmgr/lib/perl' }
 
use Mgr;
use CGI qw/:standard/;
use strict;
use warnings;
 
my $Q = new CGI;
my $func = $Q->param( "func" );
my $conf = '/usr/local/ispmgr/addon/phpversion';
print "<doc>";
 
my $user = $ENV{REMOTE_USER};
if (!defined $user) {
  print "<error>Authentication failed!</error>";
  print "</doc>";
  exit 0;
}
 
if( $func eq 'phpversion' ){
	&List;
} elsif( $func eq "phpversion.delete" ){
	&Delete;
} elsif( $func eq "phpversion.edit" ){
	if(	$Q->param( "sok" ) ){
		if( $Q->param( "elid" ) ){
			&Set;
		} else{
			&New;
		}
		print "<ok/>";
	} else{
		&Get;
	}
}
elsif ($func eq 'userphpversion') {
	&UserList;
}
elsif ($func eq 'userphpversion.enable') {
	&UserSet;
}
 
print "</doc>";
exit 0;
 
sub List {
	if( open( IN, $conf ) ){
		while( <IN> ){
			chomp;
			my @t = split ' ', $_;
			print "<elem><item>" . $t[0] . "</item><path>" . $t[1] ."</path></elem>";
		}
		close( IN );
	}
}
 
sub UserList {
	my $wrapper_path = "/var/www/$user/data/php-bin/php";
	if ( open( WRAPPER, $wrapper_path ) ) {
		my $wrapper = <WRAPPER>;
		chomp $wrapper;
 
		if( open( IN, $conf ) ) {
        	        while( <IN> ){
	                        chomp;
                	        my @t = split ' ', $_;
        	                print "<elem><item>" . $t[0] . "</item>";
				print "<active />" if ( $wrapper eq "#!" . $t[1] );
				print "</elem>";				
	                }
        	        close( IN );
	        }
		close( WRAPPER );
	}
}
 
#sub Get {
#	my $elid = $Q->param( "elid" );
#        print "<elid>$elid</elid><item>$elid</item>" if( $elid );
#}
 
 
sub Get {
	my $elid = $Q->param( "elid" );
        my $ok = 0;
 
        if( open( IN, $conf ) ) {
		for( <IN> ) {
			chomp;
			my @t = split ' ', $_;
                       	if( $t[0] eq $elid ) {
				print '<elid>' . $t[0] . '</elid><item>' . $t[0] . '</item><path>' . $t[1] .'</path>' ;
			}
                        $ok = 1;
                } 
                close( IN );
        }
 
        if( !$ok ) {
                print "<error>Item not found</error>";
        }
}
 
sub Set {
	my $elid = $Q->param( "elid" );
	my $item = $Q->param( "item" );
        my $path = $Q->param( "path" );
	my $ok = 0;
 
	if( open( IN, $conf ) ){
		if( open( OUT, ">$conf.new" ) ){
			for( <IN> ){
				chomp;
				my @t = split ' ', $_;
				if( $t[0] eq $elid ){
					print OUT "$item $path\n";
					$ok = 1;
				} else {
					print OUT $t[0] . ' ' . $t[1] . "\n";
				}
			}
			close( OUT );
		}
		close( IN );
	}
 
	if( $ok ){
		rename( "$conf.new", $conf );
		print "<ok/>";
	} else {
		print "<error>Item hasn`t been updated</error>";
	}
}
 
sub UserSet {
    my $wrapper_path = "/var/www/$user/data/php-bin/php";
    my $php_ini = "/var/www/$user/data/php-bin/php.ini";
 
    unless ( -e $php_ini ) {;
        print "<error>$php_ini not found</error>";
        return;
    };
    my ($login, $pass, $uid, $gid) = getpwnam($user) or print "<error>$user not in passwd file</error>";
 
    chown $uid, $gid, $php_ini or print '<error>you are not a superuser</error>';
    chmod 0644, $php_ini or print '<error>you are not a superuser</error>';
 
    my $elid = $Q->param( "elid" );
    my $item = $Q->param( "item" );
 
    if( open( IN, $conf ) ){
        if( open( OUT, ">", $wrapper_path ) ){
            for( <IN> ){
                chomp;
                my @t = split ' ', $_;
                if( $t[0] eq $elid ){
                    print OUT  '#!' . $t[1] . "\n";
                }
            }
            close( OUT );
        }
        close( IN );
    }
 
    my $check_for_timezone = `cat $php_ini | grep date.timezone`;
    my $is_php_53 = `cat $wrapper_path | grep 5.4`;
 
    # need for bitrix install, only for 5.4
    if ( $is_php_53 && !$check_for_timezone && open( OUT, ">>", $php_ini ) ) {
        print OUT "date.timezone='Europe/Moscow'\n";
        close( OUT );
    }
 
    my $check_for_maillog = `cat $php_ini | grep mail.log`;
    if ( $is_php_53 && !$check_for_maillog && open( OUT, ">>", $php_ini ) ) {
        print OUT "mail.log = \"/var/www/$user/data/mail.log\"\n";
        print OUT "mail.add_x_header = On\n";
        close( OUT );
    }
 
    print "<ok>restart</ok>";
}
 
sub New {
	my $elid = $Q->param( "elid" );
	my $item = $Q->param( "item" );
	my $path = $Q->param( "path" );
	if( open( ADD, ">>$conf" ) ){
		print ADD "$item $path\n";
		close( ADD );
		print "<ok/>";
	} else {
		print "<error>Item hasn`t been added</error>";
	}
}
 
sub Delete {
	my $elid = $Q->param( "elid" );
 
	if( open( IN, "$conf" ) ){
		if( open( OUT, ">$conf.new" ) ){
			for( <IN> ){
				chomp;
				my @t = split ' ', $_;
				print OUT $t[0] . ' ' . $t[1] . "\n" if( $t[0] ne $elid );
			}
			close( OUT );
		}
		close( IN );
	}
 
	rename( "$conf.new", "$conf" );
	print "<ok/>";
}

Скачать пример плагина

Попытка получить тиц 10

Первый шаг, попытаюсь зарегаться на сайте dir.ikernel.org, они очень просили опубликовать обратную ссылку, вот и опубликую здесь 🙂

Глобальный каталог сайтов

Каким я был сегодня #1

У меня была задача быть сегодня сопереживающим и активным.
Для начала сегодня был день Бади, и естественно думал как угодить бади, и это получилось, вот теперь буду везти ей агруз, алычу, вишню, с собственного сада.
Далее с командой, еще помог с дизайнером, но понял, что инициатива наказуемая, начали вылазить с «мелкими просьбами» на голову, хватило сил и мужества начать говорить что НЕТ, что бы не подводить тех людей на которое было распланированное время, после разговора с бади, поехал ставить коронку, где получил предложения поехать в кино от товарища, предложения принял. После поехал к дизайнеру, она вчера жалувалась о своему несчастью, она попросила меня подвезти, ее на лошадях покататься в понедельник, а за одно и самому прокататься с своей девушкой, на что она конечно же получила положительный ответ.
После поехал к девушки, забрал ее, ухаживал за ней, выполнял всяческие желания и т.д. Короче объявил, ДЕНЬ ТВОИХ желаний. И все послушно выполнял… Это было забавно и весело…
После было кино, по дороге зацепили тему работы, потом сосики и дом…
Сейчас перед сном попытаюсь сложить принтер надеюсь получиться… и не будет лишних запчастей. Вот так я день провел…
Кстати девушка сказала, что был заботливый и нежный. Так что миссия более менее выполненная

ЛП программа в агенстве «Развитее»

Вот совсем не давно меня вовлекли в агенство "Развитие" на прохождения курсов. Сначала в первую ступень, далее решил пойти в ЛП.
Подобного уровня курсов я не знаю, первая ступень еще так себе, круто конечно но все же как то не столько сколько ожидал, было несколько упражнений, которые позволили покопаться в прошлом, войти в себя, но много как то не дало.
И все же я решил пойти дальше, в лидерскую, ЛПрограмму.
Лидерская делиться на уикенды, вот прошел первый уикенд, что же могу сказать, это просто ППЦ!!!! Получил в 5 раз больше чем ожидал, услышал и принял то о себе, что не мог принять уже долгие годы, и считал что это не про меня, хотя говорили часто. Очень негатива много ушло. Научился, смотреть на жизнь по другому, начал появляться опыт НАСТОЯЩЕЙ, командной игры, один из интересных моментов, в первый день каждый выбирает себе "БАДИ", это человек, который найбольше тебя бесит, и с которым в жизни ты просто бы не общался, но с помощью тренинга, учишься и с такими работать...
На мир начинаешь смотреть совсем по другому, как то "по-настоящему" что-ли, с помощью тренировок, вспоминаешь как это ПОНАСТОЯЩЕМУ чувствовать радоваться, более того учать переключаться, и делать выводы.
Но даже после окончание первого уикенда не дают спуску, назначают капитана и начинают контролировать что бы ты выполнял СОБСТВЕННЫЕ обещания. И реально начинаешь работать, и стараться более эффективно и делать больше….
Вот их сайт http://razvitie.od.ua/.