No caminho para criar nosso próprio serviço de nuvem, enquanto nos
acostumamos com o sistema Debian e
criamos um servidor web . Agora é hora da etapa final - criar e configurar uma nuvem pessoal baseada no servidor Nextcloud.

Sumário
Parte 1. Configurando seu ambiente Debian para uso diárioParte 2. Criando um servidor - configurando o LAMP no DebianParte 3. Criando uma nuvem pessoal - instalando e configurando o NextcloudParte 4. Atualização 2018 - Debian 9 e Nextcloud 13Parte 5. Atualizando 2019 - PHP 7.2, MariaDB 10.4 e Nextcloud 17
Navegação rápida por capítulo
PrefácioPreparando um Servidor para Instalar o NextcloudInstale o NextcloudOrganizando o armazenamento NextcloudConfigurar o acesso à máquina virtual Nextcloud a partir da rede localConfiguração do NextcloudAjuste avançado avançado da NextcloudProteção para NextcloudSincronização na nuvem do smartphoneSincronização em nuvem para computador pessoalPosfácio
Prefácio
Então chegamos exatamente àquilo em que tudo foi iniciado e para o qual não avançamos rapidamente. Esta parte descreverá a instalação e alguns pontos na configuração do servidor Nextcloud na máquina virtual VMWare, além de um pouco de experiência trabalhando com ele na forma de sincronizar o conteúdo de um par de smartphones e pastas baseados no Windows em um computador desktop. As instruções de instalação a seguir para o Nextcloud indicam que o serviço é implantado em um servidor criado de acordo com as instruções na parte anterior da minha história.
Inicialmente, este capítulo foi planejado para ser pequeno, já que eu queria me limitar a apenas descrever a instalação e configuração do Nextcloud, encerrando essencialmente essa história sobre “apenas entrar no Linux para uma tarefa específica”. Mas, pensando que isso pode parecer interessante para alguém, ele decidiu mostrar como eu resolvi o problema de sincronizar as pastas do meu computador doméstico, de modo que este capítulo final fluiu suavemente a partir das instruções claras sobre o que e como fazer na programação. Isso explica alguns “vinagretes” desta parte - começa com o trabalho e as configurações no Linux, fluindo para o nível das configurações de rede e software virtual e termina com muletas de planejamento no Windows. Por outro lado, esta série de artigos tem o título “História da Criação ...” e eu decidi contar até o final.
NotaApós uma leitura mais aprofundada nas construções do formulário http: // 127.0.0.1 (https: // 127.0.0.1), o espaço após http: // (https: //) deve ser removido ao entrar na barra de endereços do navegador. Um espaço foi inserido ao publicar este artigo para impedir que o mecanismo converta automaticamente o texto em links.
Preparando um Servidor para Instalar o Nextcloud
O Nextcloud é um aplicativo da web que possui um conjunto de arquivos e funciona com um determinado banco de dados MySQL. O aplicativo da Web é instalado como um site regular, para a instalação da qual você precisa fazer o upload dos arquivos “engine” para o servidor, execute o arquivo de instalação e especifique os detalhes de acesso ao banco de dados criado anteriormente para este site durante a instalação.
Crie um diretório no qual os arquivos Nextcloud serão colocados:
# mkdir / var / www / nextcloudDecidi recusar o HTTP, deixando o acesso apenas via HTTPS. Para fazer isso, você precisa configurar o apache.
Abra o arquivo:
# nano /etc/apache2/sites-available/default-ssl.confE antes da tag, adicione o seguinte conteúdo:
<Directory /var/www/nextcloud> Options FollowSymLinks AllowOverride All Require all granted </Directory>
Desative a configuração HTTP:
# a2dissite 000-default.confFeche a porta 80:
# ufw delete allow 80E reinicie o servidor da web:
# service apache2 restartAgora você precisa criar um banco de dados para o nextcloud. Entramos no mysql digitando a senha do superusuário mysql:
# mysql -u root -pCrie um banco de dados chamado nextcloud:
mysql> CREATE DATABASE `nextcloud`;Crie um usuário com o nome nextcloud e a senha trivial nc123:
mysql> CREATE USER 'nextcloud' @ 'localhost' IDENTIFICADO POR 'nc123';Damos acesso total ao usuário nextcloud ao banco de dados nextcloud:
mysql> CONCEDE TODOS OS PRIVILÉGIOS NO `nextcloud`. * TO 'nextcloud' @ 'localhost';Atualizar tabela de privilégios:
mysql> PRIVILÉGIOS DE FLUSH;Saia do mysql:
mysql: mysql> exitAlém disso, você precisa instalar módulos adicionais para PHP:
# apt-get install curl libcurl3 libcurl3-dev php5-curl
# a2enmod reescritaNa primeira parte desta história, abrimos portas para interação de rede e correio, mas para nosso destino elas não são necessárias e é melhor fechá-las. Exclua as regras:
# ufw delete allow 138 / udp
# ufw delete allow 139 / udp
# ufw delete allow 139 / tcp
# ufw delete allow 445 / tcp
# ufw delete allow 25
# ufw delete allow 465
# ufw delete allow 110
# ufw delete allow 143
# ufw delete allow 993
Instale o Nextcloud
Faça o download dos arquivos e descompacte-os no diretório desejado:
# wget download.nextcloud.com/server/releases/nextcloud-11.0.2.tar.bz2
# tar xjf nextcloud-11.0.2.tar.bz2 -C / var / wwwAlterar permissões da pasta:
# chmod 755 / var / www / nextcloudE atribuímos ao proprietário desta pasta um servidor web para que não haja problemas ao escrever nela:
# chown -R www-data: www-data / var / www / nextcloudIsso é tudo! O serviço está instalado. Se você digitar o navegador https: // 127.0.0.1/nextcloud, o assistente de instalação será aberto. Mas vamos esperar com isso, tendo preparado anteriormente um local para armazenar dados do usuário.
Vale ressaltar que a versão 11.0.2 do Nextcloud atualmente está bastante desatualizada e contém vulnerabilidades que não estão presentes nas versões mais recentes e mais recentes; portanto, se você instalar o ramo 11.x, será melhor instalar uma versão mais recente (no início de 2018 - este versão 11.0.7).
Organizando o armazenamento Nextcloud
Esta parte é opcional e pode ser pulada sem problemas - tudo funcionará sem ela. No entanto, se você criar um diretório de dados fora da máquina virtual, recomendo que você se familiarize com ele.
Por padrão, o conteúdo sincronizado será armazenado no diretório / var / www / nextcloud / nxcdata. Esta opção não me agradou imediatamente por vários motivos. Por um lado, eu não gostaria de aumentar constantemente o tamanho do arquivo de um disco virtual. Por outro lado, gostaria de ter uma solução separada e independente da solução de armazenamento de dados da máquina virtual. A coisa mais simples que vem à mente imediatamente é o uso de uma unidade USB. Se não houver espaço suficiente, a unidade pode ser simplesmente substituída. Se necessário, ele pode ser conectado a outro computador e baixar os arquivos necessários. Móvel e conveniente. No entanto, eu não queria usar o USB 2.0 por causa da largura de banda relativamente pequena para os padrões modernos, e não obtive sucesso com o USB 3.0 - o software de virtualização (WMVare e VirtualBox) não queria encaminhar normalmente dispositivos conectados por um controlador USB 3.0.
Meu apetite no processo de criação da nuvem aumentou e eu não tinha mais de um terabyte, então, no final, decidi conectar um disco rígido comum de dois terabytes à máquina virtual, que já estava localizada e conectada dentro do computador. Se necessário, ele pode ser retirado sem problemas e conectado através do adaptador SATA <-> USB 3.0 existente.
Portanto, a idéia principal é organizar um ponto permanente para conectar um diretório ao conteúdo do usuário fora do diretório / var / www / nextcloud, no qual um link simbólico chamado nxcdata é criado, referenciando um diretório de dados reais que pode ser conectado de várias maneiras em diferentes mídias.
Crie um diretório:
# mkdir / mnt / nxcdataMudamos os direitos:
# chmod 770 / mnt / nxcdataTornamos o proprietário do servidor web:
# chown www-data: www-data / mnt / nxcdataPosso colocar os dados em qualquer lugar e em qualquer lugar, o principal é colocar um link simbólico para esse diretório no diretório / mnt / nxcdata e nomeá-lo como nxcdata, ou seja, o caminho completo será parecido com / mnt / nxcdata / nxcdata.
Primeiro, testei a solução para a pasta local que criei no diretório inicial.
Criou uma pasta no lugar certo:
$ mkdir / home / usuário / nxcdataOs direitos foram alterados:
# chmod 755 / home / usuário / nxcdataPropriedade do servidor da web:
# chown -R www-data: www-data / home / user / nxcdataCriou um link simbólico:
# ln -s / home / usuário / nxcdata / mnt / nxcdata / nxcdataEsta solução foi viável, para que você possa seguir em frente. O diretório de dados externo pode ser conectado de duas maneiras - por meio do serviço VMWare Shared ou diretamente como um disco ou partição física. Deve-se entender que a primeira solução é possível apenas se as ferramentas vmware estiverem instaladas, que são instaladas sem problemas apenas se houver uma interface gráfica do sistema operacional (caso contrário, você precisará editar os scripts de instalação das ferramentas vmware). Se abandonarmos a interface gráfica, resta apenas a opção de conectar a unidade diretamente à máquina virtual, mas com esta solução, tive que sofrer muito. Depois de algum tempo, ainda encontrei uma versão de trabalho estável, levando em consideração que um script universal foi inventado e que incorporava as duas opções de conexão.
Para uma pasta conectada por meio de Pastas compartilhadas do VMWare, na seção Pastas compartilhadas das configurações da máquina virtual, é necessário conectar a pasta necessária no sistema host e dar o nome de vmw-nxcdata. Essa pasta pode se referir a algum diretório no disco rígido ou diretamente ao diretório raiz de algum disco no sistema host.
A pasta montada aparecerá no sistema virtual automaticamente ao longo do caminho / mnt / hgfs / vmw-nxcdata. No entanto, o problema é que o servidor da Web não terá direitos suficientes para gravar arquivos nesse caminho e os meios padrão do sistema não podem reatribuir os direitos para esse diretório. Portanto, eu tive que descobrir como montar manualmente esses recursos.
Crie uma pasta:
# mkdir / mnt / vmw-nxcdataMontamos usando o módulo vmhgfs, que foi instalado com o vmware-tools:
# mount -t vmhgfs -o uid = www-data, gid = www-data, fmask = 007, dmask = 007 .host: / vmw-nxcdata / mnt / vmw-nxcdataA montagem precisa ser realizada com exatamente esses parâmetros para uma operação sem problemas do servidor da Web no futuro. Inicialmente, montei sem especificar uid / gid e máscaras, mas não levou a nada de bom, pois não era mais possível alterar os direitos após a montagem. Após concluir a montagem, ele pode exibir: “Não foi possível adicionar entrada ao mtab, continuando”, mas ele será montado e funcionará.
Ótimo, montamos o diretório. Agora você pode colocar um link simbólico para esse diretório em / mnt / nxcdata. Mas eu não gostaria de fazer isso manualmente sempre que iniciar ou reiniciar o servidor. A maneira mais fácil é inserir o comando acima no arquivo /etc/rc.local para montá-lo na linha "exit 0". No entanto, eu queria que a desmontagem automática ocorresse quando a máquina virtual fosse desligada para segurança confiável dos dados. E eu decidi fazer tudo no nível de serviço e lidar um pouco com os mecanismos init / update-rc, tanto mais fiquei curioso que acabou sendo bastante interessante.
O significado das ações a seguir é criar um serviço do sistema que seria chamado e executar comandos predefinidos quando o sistema for ligado ou desligado. O serviço é descrito por um script compilado de acordo com certas regras e está localizado em /etc/init.d. O bloco INIT INFO está localizado no início do script e contém informações auxiliares nas quais eu gostaria de mencionar as diretivas Default-Start e Default-Stop - elas especificam os níveis de execução nos quais o script deve ser iniciado ou interrompido por padrão.
Níveis de execução:
0 - execução de script quando o sistema está desligado
1 - execução de script na inicialização do sistema no modo de usuário único
2 - execução de script na inicialização do sistema no modo multiusuário
3 - 5 - reservado
6 - execução de script na reinicialização do sistema
Após escrever o script, ele é ativado usando o mecanismo update-rc, que de fato cria links para o script nos diretórios necessários /etc/rc0.d - /etc/rc6.d, cujo conteúdo corresponde às tarefas executadas pelos níveis de execução. Os links podem ser criados de forma independente, mas, ao contrário de ativar ou desativar as configurações do servidor da web apache, é necessário levar em consideração muitas nuances aqui; portanto, é necessário ativar ou desativar o serviço através do update-rc.
Então, crie um arquivo:
# nano /etc/init.d/nxcdata_automount.shE escreva o seguinte conteúdo nele:
Preste atenção a algumas equipes comentadas na seção perform_start - este é o nosso fundamento para o futuro. Além disso, após a montagem, o serviço fail2ban é reiniciado.
O paradoxo é que, depois de um ano, não me lembro mais por que fiz isso, mas duvido muito que tenha sido feito assim. Obviamente, após a montagem do serviço, por algum motivo, o serviço travou ou falhou ao iniciar inicialmente e teve que ser reiniciado manualmente.
Após essa distração, continuamos a configurar ainda mais. Crie um link simbólico:
# ln -s / mnt / vmw-nxcdata / mnt / nxcdata / nxcdataTornamos nosso script executável:
# chmod + x /etc/init.d/nxcdata_automount.shAdicione o script à inicialização:
# update-rc.d padrões nxcdata_automount.shReiniciamos o sistema e garantimos que a montagem automática foi bem-sucedida e que tudo esteja acessível da maneira certa.
Para remover o script, você precisará executar alguns comandos:
# update-rc.d -f nxcdata_automount.sh remover
# rm -f /etc/init.d/nxcdata_automount.shNo caso de montar uma unidade que não seja através das Pastas Compartilhadas do VMWare, você deve seguir diretamente as mesmas etapas que ao montar através das Pastas Compartilhadas do VMWare, mas levando em consideração o fato de uma segunda unidade aparecer no sistema. Como descobrir a letra da unidade?
A maioria dos dispositivos de bloco do Linux são conectados via interface SCSI; portanto, na maioria dos casos, os discos começam com as letras sd. A terceira letra no nome do disco significa seu número de série no sistema e é indicada em ordem alfabética: sda - o primeiro disco, sdb - o segundo disco, sdc - o terceiro e assim por diante. Depois, vem o número que define o número da partição no disco: sda1, sda2 e assim por diante. A maneira mais fácil de ver todas as unidades mapeadas é examinar o conteúdo do diretório / dev / e filtrar os dispositivos sd:
$ ls -l / dev / | grep sdPor exemplo, precisamos conectar uma unidade sdb1 a um sistema de arquivos NTFS.
Crie um diretório e monte o disco nele:
# mkdir / mnt / sdb1
# mount -t ext4 / dev / sdb1 / mnt / sdb1Crie um diretório para os dados, defina os direitos e o usuário para eles:
# mkdir / mnt / sdb1 / nxcdata e chmod 770 / mnt / sdb1 / nxcdata e chown -R www-data: www-data / mnt / sdb1 / nxcdataEm seguida, você também precisa criar um script para montagem automática e ajustar o comando mount no script (exemplos de conexão de uma unidade com NTFS e EXT4 já estão no script e comentados) e incluir o script na inicialização.
B crie um link simbólico para o diretório de dados:
# ln -s / mnt / sdb1 / nxcdata / mnt / nxcdata / nxcdataDe fato, todo esse problema com um monte de diretórios nxcdata foi projetado para uma coisa: fornecer uma transferência simples do diretório de dados no futuro - você não precisará editar a configuração no mecanismo Nextcloud e, geralmente, entrar nele - tudo o que você precisa fazer é conectar um novo disco, copiar para dados e recrie um link simbólico que leva a um novo diretório com dados. Ao mesmo tempo, todas as ações não vão além do diretório / mnt. Então tudo se tornou complicado evolutivamente, eu só não queria perder as soluções que tinha.
Qual é a melhor maneira de transferir dados para fora da máquina virtual? Vou compartilhar minha experiência sobre qual opção eu parei e por quê.
As unidades USB foram capturadas automaticamente quando a máquina virtual foi inicializada, correta e totalmente lançada para dentro, e tudo sempre funcionou, mas apenas até a unidade ser desconectada do sistema por algum motivo. Reinicialização ou desconexão física e conexão de um disco ajudado. A decisão acabou não sendo confiável. Não havia esse problema com os pen drives, mas o volume e a velocidade do trabalho categoricamente não eram adequados para mim. Talvez valesse a pena tentar uma unidade externa com energia autônoma.
O encaminhamento de diretório por meio das pastas compartilhadas do VMWare funcionou de maneira estável e perfeita. Esta solução satisfez completamente a tarefa de sincronizar dois smartphones. Tudo funcionou por vários dias, dezenas de gigabytes de dados foram bombeados. No entanto, quando decidi adicionar dados do computador à nuvem, repentinamente encontrei um problema com caminhos longos e nomes de arquivos. Em teoria, o limite de nome de arquivo / pasta NTFS é de 255 caracteres, mas, na prática, a API do Windows o limita a 244 caracteres. Em teoria, o limite do comprimento do caminho para um arquivo ou pasta no NTFS é de 32.767 caracteres, mas, na prática, a API do Windows o limita a 245 caracteres. Dado que sou um grande fã de informações estruturantes, o comprimento do meu caminho pode ser muito grande. O título não abreviado dos livros também pode ser facilmente de 100 a 150 caracteres, incluindo espaços. Essa restrição é um problema conhecido das pastas compartilhadas do VMWare, que não pôde ser curado mesmo quando o Windows 10 foi usado com todos os tipos de chaves inteligentes no registro para remover o limite de 255 caracteres. Um possível motivo são as limitações do vmhgfs. Essa maneira conveniente de se conectar teve que ser abandonada. O motivo foi resolvido com certeza - o problema está no sistema de arquivos virtual, usado no mecanismo VMWare Shared Folders.
A próxima solução é conectar o disco rígido diretamente à máquina virtual. Também não deu certo. A estrutura de dados (ou sistema de arquivos, e isso era evidente para o NTFS e o EXT2 / 3/4) era constantemente interrompida quando o disco ou sua partição era “capturada” pelo software da máquina virtual ou quando era devolvida ao sistema host, mesmo que eu transferisse o todo Dirija offline no sistema host. Em alguns modos, não estou gravando ou lendo dados - não conseguia nem formatar adequadamente o disco rígido ou a partição encaminhada. No entanto, conseguimos encontrar um modo de trabalho: um disco rígido físico com uma partição, formatada em NTFS, foi conectado à máquina virtual em um determinado modo de conexão: SATA / Independente / Persistente / Usar partição individual. A pasta nxcdata que contém os dados deve estar no disco rígido.
Configurar o acesso à máquina virtual Nextcloud a partir da rede local
Não temos problemas para abrir sites em uma máquina virtual ou em um sistema host. Mas como abrir o site criado a partir de outro computador na rede local? Vejamos a estrutura de nossa rede, mostrada abaixo.

A imagem mostra que o roteador está conectado diretamente à Internet e configurado para distribuir automaticamente os endereços IP aos dispositivos conectados no intervalo 192.168.0.2-192.168.0.254. O endereço 192.168.0.2 foi recebido pelo nosso computador e 192.168.0.3 - o segundo computador em que fabricamos o servidor. No entanto, o software de virtualização é instalado no segundo computador, que criou seu próprio roteador virtual e configurou seu
DHCP na sub-rede 192.168.233.0/24. Nosso servidor virtual recebeu IP 192.168.133.138.
Eu posso abrir facilmente o site dentro da máquina virtual 192.168.233.138. Eu posso abrir o site facilmente da máquina 192.168.0.3 simplesmente inserindo o endereço IP desejado no navegador - o software de virtualização já cuidou da configuração correta do ambiente de rede na máquina host. Mas como chego ao site a partir do computador 192.168.0.2? Se eu inserir o endereço IP 192.168.233.138, nada será aberto para mim, pois nem meu computador nem o roteador real sabem alguma coisa sobre essa sub-rede. Se eu digitar o endereço 192.168.0.3, nada será aberto para mim também, já que realmente não há site neste computador - ele está dentro de sua máquina virtual.
Para resolver esse problema, você precisa configurar o roteador virtual do computador 192.168.0.3. Já sabemos que o acesso aos sites passa pelas portas 80 e 443. Ao acessar essas portas para uma máquina 192.168.0.3, precisamos criar roteamento para que as solicitações sejam encaminhadas para a máquina virtual 192.168.233.138. Felizmente para isso, temos as ferramentas disponíveis. O VMWare Workstation possui uma ferramenta do Editor de rede virtual que pode ser aberta no menu da máquina virtual (Editar -> Editor de rede virtual).

Essa ferramenta permite gerenciar de maneira bastante flexível as configurações de rede. Precisamos selecionar a placa de rede virtual VMNet8 e clicar no botão "Configurações NAT ..." que ficou disponível. Na janela que se abre, você precisa adicionar regras para criar o roteamento necessário.

Especifique a porta do sistema host e especifique o endereço IP e a porta da máquina virtual para a qual as solicitações devem ser redirecionadas. Para encaminhar o tráfego HTTPS, você deve especificar a porta 443 e 443 do sistema host e o endereço da máquina virtual 192.168.233.138. Após criar as regras, clique em “OK” em todas as janelas - o ambiente de rede virtual é reconfigurado automaticamente.
Após essas alterações, nossos sites começarão a abrir a partir da máquina 192.168.0.2 ao acessar o endereço 192.168.0.3.
Configurações semelhantes para encaminhamento de porta estão disponíveis não apenas para o VMWare, mas também para o VirtualBox (Configurações → Rede → selecione o adaptador necessário → Avançado → Encaminhamento de porta). No entanto, durante as experiências de conexão do disco rígido a esse estágio, encontrei o VMWare Player gratuito instalado, no qual o Editor de Rede Virtual não estava. Não encontrei nada sobre o encaminhamento de portas para o VMWare Player na Internet e tive que usar uma versão de avaliação do VMWare Workstation - ao instalar o produto, ele oferece 30 dias de uso gratuito. Após 30 dias, o produto pode ser removido, limpo e instalado novamente, mas essa atenção ao servidor é de alguma forma redundante e claramente indesejável.
E então eu fui para um truque pequeno (ou grande). O conjunto de arquivos da Estação de Trabalho VMWare contém o utilitário vmnetcfg, que é executado basicamente pelo item do Editor de rede virtual. No entanto, ele não estava no conjunto de arquivos do VMWare Player. Mas, ao instalar o VMWare Player, ele de alguma forma configura seu ambiente de rede? Eu peguei esse utilitário e o copiei para a pasta com o VMWare Player e o iniciei. Surpreendentemente, tudo deu certo. É possível que configurações de rede finas no ambiente do VMWare Player não funcionem, mas o encaminhamento de porta seja fornecido e não preciso de mais.Para acessar nosso servidor pela Internet, é necessário encaminhar as portas em um roteador conectado à Internet da mesma maneira. No firmware da grande maioria dos roteadores, há uma seção de encaminhamento de porta, na qual você pode configurar o roteamento especificando a porta externa, a porta e o endereço IP da máquina interna. No entanto, há uma ligeira nuance. Se o provedor nos fornecer um endereço IP real ou o tivermos comprado dele, não haverá problemas - se inserirmos esse endereço IP de um computador de qualquer lugar do mundo, o roteador real redirecionará o tráfego para um computador com uma máquina virtual na qual o roteador virtual redirecionará o tráfego diretamente para o virtual um carro Mas o que fazer com alguém que não tem a oportunidade de obter um endereço IP real e ele obtém endereços dinâmicos ou está atrás do NATprovedor, obtendo um endereço IP "cinza"? Não precisei resolver esse problema, pois tenho um IP "branco" estático. Qualquer pessoa que precise resolver esse problema de uma forma ou de outra terá que lidar com esse problema. Eu recomendaria procurar na direção de dyndns ou freedns.afraid.org no caso de endereços dinâmicos ou comprar um VDS barato para tentar criar algum tipo de roteamento, já que, em qualquer caso, sem um servidor externo com um endereço IP estático, esse problema não pode ser resolvido.Depois de configurar o roteamento, consertei os endereços IP dos computadores 192.168.0.3 e 192.168.233.138, escrevendo-os manualmente nas configurações da placa de rede dessas máquinas para excluir sua reatribuição automática.
Configuração do Nextcloud
Agora é hora de abrir https: // 127.0.0.1/nextcloud no navegador dentro da máquina virtual, https: // 192.168.233.138/nextcloud do sistema host ou, com base no roteamento configurado descrito acima, https: // 192.168.0.3/nextcloud de qualquer computador na rede local.Em seguida, configuramos o login / senha do administrador, o acesso ao banco de dados criado anteriormente e, como local de armazenamento, especificamos o caminho completo para o diretório nxcdata: / mnt / nxcdata / nxcdata. Esta etapa da instalação não é diferente da instalação de um site.Nas configurações de administrador, fiz as seguintes alterações simples:- Pessoal → escolheu russo e especifiquei um e-mail para o usuário administrador @ localhost- Administração → Acesso geral → desabilitou todos os itens- Administração → Pesquisa de uso → desabilitou todos os itens- Administração → Configurações avançadas → Gerenciamento de arquivos: "Tamanho máximo do arquivo de upload" definido como 25 GB- Usuários → criou o grupo de usuários e adicionou um novo usuário a ele.Após a configuração, é necessário ativar o cache.Abra o arquivo:# nano /var/www/nextcloud/config/config.phpE no final, antes de ");" adicione o seguinte: Agora você precisa permitir acesso externo ao site no nível de seu "mecanismo". Abra o arquivo: # nano /var/www/nextcloud/config/config.php Na seção confiável_domínios , você precisa adicionar o endereço IP do servidor à matriz, adicione o endereço no qual o Nexcloud está instalado. A seção confiável_domínios em nosso caso terá a seguinte aparência:'memcache.local' => '\OC\Memcache\Memcached',
'memcache.distributed' => '\OC\Memcache\Memcached',
'memcached_servers' => array(
array('localhost', 11211),
),
'trusted_domains' =>
array (
0 => '127.0.0.1',
1 => '192.168.233.138',
),
Agora você pode verificar a capacidade de manutenção do serviço - abra o site e faça login como usuário. Se a autorização foi bem-sucedida, o serviço está pronto para a batalha - você pode instalar o aplicativo para sincronização em computadores e smartphones. Para acessar, digite o endereço IP 192.168.0.3 e os detalhes de acesso à conta criados para cada dispositivo.Felizmente ou infelizmente, eu não precisei usar todo o potencial do serviço criado, pois inicialmente eu precisava de um sistema de backup com verificação e, no começo, eu só queria continuar com o subversion, mas a velocidade de consolidação de um número especialmente grande de arquivos pequenos me entristeceu bastante. Fiz tudo para crescer, mas não ia tirar proveito disso e, de alguma forma, ficou completamente fora da nuvem.Uma visão geral mais detalhada do uso do serviço foi feita pelo usuário wtigga no final de 2017 em seu artigo “Como baixar o VPS: sua“ nuvem ”do Nextcloud . Do ponto de vista do usuário, o artigo fornece uma visão geral do servidor Nextcloud mais recente, versão 12.
Ajuste avançado avançado da Nextcloud
Durante a operação da nuvem durante o primeiro mês de trabalho, surgiram alguns problemas que tive que resolver com a ajuda da comunidade ou por conta própria. Devo dizer que usei muito o serviço e, de fato, verifiquei a resistência ao estresse. Sincronizar alguns gigabytes de dados de telefones durante a noite e até um milhão de arquivos pequenos de um computador era algo comum. Em geral, o serviço causou uma impressão muito positiva em mim.Eu não diria que as soluções abaixo são corretas e bonitas, mas essas muletas funcionam pelo menos para a versão 11.0.2, caso contrário, seria impossível usar o serviço. Na versão 12.x, algo pode ter sido aprimorado e corrigido, portanto, eu não recomendaria definir essas configurações imediatamente como parte da configuração de inicialização, enquanto que na linha 11.x elas podem ser aplicadas imediatamente.Problema 1Ocorre um erro como "o arquivo está bloqueado" durante a sincronização. A sincronização para. O problema é conhecido - é necessário limpar o conteúdo da tabela oc_file_locks executando a seguinte consulta no console do mysql (ao autorizar o usuário do nextcloud):mysql> DELETE FROM oc_file_locks WHERE 1Como esses erros não são incomuns, nãocriei nada melhor do que criar um script e colocá-lo diretamente na pasta raiz: # nano / root / empty_oc_file_locksConteúdo do script :
O script pode ser executado manualmente, mas esse não é o nosso método. Decidi executá-lo automaticamente a cada 15 minutos usando cron (https://ru.wikipedia.org/wiki/Cron).Para fazer isso, crie um arquivo:# nano / root / crontabCom o seguinte conteúdo: Agora você precisa fazer alterações no agendador: # crontab / root / crontab Você pode verificar alterações como esta: # crontab -l Problema 2 Ao sincronizar via webDAV nos logs (consulte painel de administrador, autorizado pelo administrador), os seguintes erros podem aparecer:*/15 * * * * root bash /root/empty_oc_file_locks
Error PHP reset() expects parameter 1 to be array, null given at /var/www/nextcloud/apps/files_versions/lib/Storage.php#783
Error PHP ksort() expects parameter 1 to be array, null given at /var/www/nextcloud/apps/files_versions/lib/Storage.php#782
Error PHP Invalid argument supplied for foreach() at /var/www/nextcloud/apps/files_versions/lib/Storage.php#759
Error PHP Undefined index: by_file at /var/www/nextcloud/apps/files_versions/lib/Storage.php#759
Error PHP Undefined index: all at /var/www/nextcloud/apps/files_versions/lib/Storage.php#757
Desta vez, a comunidade não fez nada e teve que conduzir a investigação sozinha. O motivo estava no erro "Índice indefinido ... Storage.php # 757", que causa vários erros em cascata. Nós olhamos o código para este arquivo. Todo o problema estava na cota. Nesta linha do código (Storage.php # 757), o espaço livre é calculado levando em consideração o volume dos arquivos compactados. Algo está errado no cálculo, embora a cota esteja definida como "ilimitada". Para corrigir o erro no painel de administração, defino uma cota "infinita, mas numérica" para cada usuário, por exemplo, 100 TB.Problema 3O problema com a sincronização de arquivos .htaccess - eles simplesmente não são sincronizados! E eu não estava sozinho, em alguns fóruns eles fizeram perguntas semelhantes. No entanto, não encontrei uma solução pronta. Eu mesmo tive que pensar novamente. Como resultado da pesquisa no Google, exibição de logs e análise de código, não pensei em nada melhor do que como corrigir o arquivo do mecanismo nextcloud.No arquivo /var/www/nextcloud/lib/private/Files/filesystem.php, procuramos a seguinte linha: E a trazemos da seguinte forma:$blacklist = \OC::$server->getConfig()->getSystemValue('blacklisted_files', array('.htaccess'));
$blacklist = \OC::$server->getConfig()->getSystemValue('blacklisted_files', array(''));
Proteção para Nextcloud
Você pode proteger nosso serviço da seleção de senhas para o painel de administração usando fail2ban. Para fazer isso, é necessário descrever a expressão característica que ocorre nos logs da nextcloud quando a autenticação falha, de acordo com a qual o acionador correspondente será acionado.Crie o arquivo:# nano /etc/fail2ban/filter.d/nextcloud.confCom o seguinte conteúdo:[Definição]failregex = {"reqId": ". *", "RemoteAddr": ". *", "App": " core "," message ":" Falha no login: '. *' \ (IP remoto: '' \) "," level ": 2," time ":". * "}ignoreregex =Abra o arquivo:# nano / etc /fail2ban/jail.localE no final do arquivo, adicione o seguinte: Reinicie o serviço: # service fail2ban restart Verifique se há um filtro ativo:# nextcloud
[nextcloud]
enabled = true
port = http,https
protocol = tcp
filter = nextcloud
logpath = /var/log/nextcloud.log
# fail2ban-client status nextcloudNão se esqueça que, de acordo com as configurações de fail2ban da parte anterior, se a senha for digitada incorretamente seis vezes seguidas por 12 horas, seu IP será bloqueado por até 30 dias. De alguma forma, passei duas noites devido a uma senha incorreta em um dos telefones, até descobrir esse fato simples nos logs do sistema.
Sincronização na nuvem do smartphone
Para sincronizar o conteúdo de telefones com Android, existe um maravilhoso aplicativo FolderSync. O programa justifica totalmente seu preço baixo.Primeiro, você precisa criar uma nova conta na qual especifique https: // 192.168.0.3/nextcloud como o endereço do servidor, insira o login e a senha da conta criada anteriormente e ative o certificado autoassinado. Clique no botão "Testar" e verifique se a conexão com o servidor está em ordem.Em seguida, você precisa criar uma tarefa. Na tarefa, especifique a conta criada anteriormente e selecione o tipo de sincronização - "Para a pasta remota". Especifique a pasta remota (você pode criá-la diretamente do aplicativo "e selecione a pasta local para sincronização. Defino a programação às 2 da manhã todos os dias. Nas configurações de sincronização, ativei" Sincronização de subpastas "e" Sincronização de pastas incluídas ", também selecionei a opção de sempre substituir arquivos antigos e, em caso de conflito, permiti usar o arquivo local por padrão.Na seção "Conexões", desliguei todas as conexões, exceto o Wi-Fi, e registrei o SSID da minha rede Wi-Fi doméstica na seção "SSIDs WiFi permitidos" - aplicativo broto Só consigo sincronizar na minha rede doméstica e não tentar procurar o servidor em outras redes; deixei o restante das configurações por padrão.Aqui você pode adicionar filtragem. Criei um novo filtro, “O nome da pasta contém” e especifiquei o valor [nosync]. Portanto, posso excluir algumas pastas da pasta local especificada da sincronização simplesmente adicionando o nome “[nosync]” ao final.Essa configuração foi feita para pastas locais como DCIM, Download, Telegram, Viber, WhatsApp. Além disso, algumas das minhas pastas de usuários com vários gigabytes de tamanho. Uma vez por dia, o conteúdo dessas pastas é sincronizado com o servidor, e as versões antigas dos arquivos no servidor não são excluídas, mas são renomeadas e movidas para o arquivo morto. Isso me permitiu recuperar rapidamente arquivos excluídos acidentalmente ou reverter alterações em alguns outros arquivos.
Sincronização em nuvem para computador pessoal
Não me considero um verdadeiro programador. Nos últimos dez anos, tenho programado em linguagens de programação que são usadas apenas no desenvolvimento de processadores ou chipsets. Como eu não fazia nada em C / C ++ há 15 anos, mas precisava automatizar algo no computador, usei ativamente linguagens de script como BAT / CMD ou software como Sign 0f Mistery ou xStarter. Uma vez eu descobri e tentei o que é o AutoIt e isso se tornou uma nova era na automação do meu PC.Depois de me convencer da estabilidade e confiabilidade do sistema de sincronização nos smartphones, pensei que seria bom sincronizar dados no meu computador doméstico. O Nextcloud possui seu próprio cliente para Windows e, naturalmente, tornou-se o primeiro candidato a testes. Iria sincronizar um volume de dados da ordem de um terabyte, consistindo em centenas de milhares de arquivos de tamanhos diferentes. Os dados eram diferentes: músicas, fotos, documentos, livros eletrônicos, distribuições, sites de backup e assim por diante. Seria razoável reduzir tudo isso à sincronização de dados mais críticos, por exemplo, como documentos, mas a emoção tomou conta de mim e eu queria verificar a força do serviço.Dez horas após o início da sincronização e, de fato, o primeiro upload de conteúdo para o servidor, o cliente encontrou um arquivo com um nome longo. Naquela época, no servidor, eu também usava a conexão de armazenamento externo via VMWare Shared Folders e tinha que tentar uma dúzia de clientes e, em seguida, fazer experimentos simples para copiar manualmente os arquivos no servidor, a fim de entender que o problema está no lado do servidor. Portanto, depois de uma semana de lançamento bem-sucedido do serviço, tive que reverter para a máquina virtual de backup e abandonar o mecanismo de pastas compartilhadas do VMWare, começando tudo de novo. No final, removi esse gargalo no lado do servidor, testei a confiabilidade da solução por uma semana de sincronização de smartphones e decidi voltar ao meu computador doméstico. Dessa vez, o cliente não tropeçou no arquivo malfadado e eu já estava felizno entanto, após meio dia de sincronização de arquivos pequenos, o cliente congelou novamente. Agora, o caminho é muito longo no lado do computador doméstico e o cliente Nextcloud não pode processá-lo corretamente. Infelizmente, o cliente nativo do Nextcloud não funcionou e seu conteúdo de informações não era muito alto, então tive que abandoná-lo.Passei algum tempo tentando encontrar um programa conveniente para sincronização que suporte o gerenciamento de linha de comando. Eu queria fazer minha tarefa para todas as pastas grandes do computador e executá-las no modo em lote. Antes, eu já havia criado e elaborado um conjunto de arquivos BAT para sincronização usando scripts e gerenciando o FreeFileSync através da linha de comando. O problema de caminhos longos ou nomes de arquivos foi resolvido configurando pastas locais no formato "\\? \ D: \ Info", ou seja, referindo-se essencialmente à pasta local como uma pasta de rede. No entanto, o que é o webdav FreeFileSync não sabe. Infelizmente, não havia análogos completos do FolderSync para Windows, mas mais de uma vez nos fóruns eles recomendaram o GoodSync e, depois de lançar uma dúzia de outros programas, decidi experimentá-lo. Infelizmente, o GoodSync é muito mais caro,mas um desperdício único de US $ 15 para a segurança de seus preciosos dados, em princípio, um desperdício viável. O programa possui um modo de teste, portanto, primeiro você pode verificar seu desempenho e estabilidade.O GoodSync acabou sendo um software bastante amigável. Existe uma versão portátil especial chamada GoodSync2Go. Então ela me interessou. Durante a instalação, você precisa selecionar a letra da unidade e o programa é instalado nela na pasta GoodSync. Criei a pasta Sync no diretório raiz da unidade, digamos D, e movi a pasta GoodSync criada com todo o conteúdo.[ Este texto foi escrito especificamente para o site geektimes.ru por AlexanderS .
O link para a fonte é opcional, mas sua referência é altamente desejável! ]Após a instalação, o programa precisa criar tarefas: a pasta local e a pasta remota para sincronização são indicadas. Nos parâmetros do trabalho, selecionei a sincronização da esquerda para a direita com as opções "Exclusão síncrona" e "Salvar versões anteriores de arquivos excluídos / substituídos". Nas configurações do lado esquerdo, selecionei "Cópia Segura" e "Não crie a pasta _gsdata_", no lado direito - "Cópia Segura" e "Pré-Análise Rápida por Data e Hora". Assim, são criadas tarefas para cada pasta necessária. Digamos que eu configurei a tarefa na pasta Info e chamei de “bck_Info”.Em seguida, na pasta D: \ Sync, o arquivo bck_Info.bat é criado com o seguinte conteúdo: @set dir=%~dp0 @%dir%GoodSync\GoodSync2Go-v10.exe /miniwin /exit sync "%~n0"
Essa é a linguagem de script BAT. Na primeira linha de código, o caminho atual para o script em execução é definido como a variável A segunda linha inicia o arquivo GoodSync2Go-v10.exe da pasta GoodSync nesse caminho, no qual a tarefa com o nome desse arquivo deve ser executada (bck_Info), a janela de execução da tarefa é minimizada e o programa deve fechar automaticamente após a conclusão da tarefa. Posso copiar esse script várias vezes, alterando apenas seu nome para o nome de uma tarefa criada anteriormente no GoodSync. Assim, apenas clicando no botão Enter no arquivo BAT, posso iniciar a sincronização das pastas necessárias individualmente.Para adicionar uma nova tarefa no FreeFileSync, basta copiar o arquivo de script xml e corrigi-lo manualmente, ou seja, executar o shell gráfico do programa não era necessário. No GoodSync, todas as tarefas são registradas no arquivo D: \ Sync \ GoodSync \ GoodSync \ Profile \ jobs.tic e para adicionar uma nova tarefa, você precisará abrir o programa e criá-lo, porque editar este arquivo é um tanto problemático e não se sabe o que isso pode levar.Para sincronizar todas as pastas, agora você pode escrever um script bck_all.bat simples: @set dir=%~dp0 call %dir%bck_Info.bat call %dir%bck_Info2.bat call %dir%bck_Info3.bat call %dir%bck_Info4.bat
Cada linha do script simplesmente causa a execução de um script separado, que inicia a sincronização.Tudo isso funciona muito bem e convenientemente, mas não há controle de erros durante a sincronização. Por exemplo, se o servidor não estiver ligado, todas as tarefas serão concluídas rapidamente, e eu, depois de uma hora depois, pensarei que a sincronização já foi concluída. Ao mesmo tempo, os logs de todas as tarefas são criados no caminho D: \ Sync \ GoodSync \ GoodSync \ Profile \ *. Log. Basta observar o log de cada sincronização para a presença da palavra "ERRO" - por algum motivo, é assim que as falhas de sincronização são relatadas no log. Portanto, decidiu-se escrever um pequeno programa para analisar esses logs após todas as sincronizações, que deve ser iniciado automaticamente após a sincronização de todas as pastas. O programa recebeu o nome orgulhoso log_analayser e está escrito na linguagem de semi-script AutoIt . Se alguém estiver interessado, faça o download da versão completaVocê pode acessar o site oficial da AutoIt, que contém as bibliotecas necessárias, o compilador e o SciTE - um editor de plataforma cruzada para o código a partir do qual você pode compilar o programa.Quanto tempo gastei no desenvolvimento e depuração do código, o resultado foi um arquivo log_analayser.au3 com o seguinte conteúdo: ; LOG Analyser 1.0 ; - #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_Field=ProductName|LOG Analyser #AutoIt3Wrapper_Res_Fileversion=1.0.0.0 #AutoIt3Wrapper_Res_Field=OriginalFilename|log_analyser.exe #AutoIt3Wrapper_Res_Comment= - #AutoIt3Wrapper_Res_Description= - ;**** #AutoIt3Wrapper_Res_Language=1049 #AutoIt3Wrapper_Res_ProductVersion=1.0 #AutoIt3Wrapper_Compile_Both=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;AutoItSetOption ("WinTitleMatchMode", 2) ; ;#NoTrayIcon ; If WinExists('[CLASS:AutoIt v3;TITLE:' & @ScriptName & ']') Then MsgBox(48, @ScriptName, " !"); ; ;WinActivate(' ') Exit EndIf AutoItWinSetTitle(@ScriptName) #include <Array.au3> #include <_FileDirList.au3> ; Local $msg_title = "LOG Analyser 1.0" Local $path = @ScriptDir Local $soft_open_log = "notepad.exe" Local $path, $dir_mode, $word, $file_analyse_name, $file_analyse_ext, $log_path, $log_msg_on Local $file_log, $word_detect, $file_analyse, $cnt_files, $i ; if ($CmdLine[0] < 6) then MsgBox(0x10, $msg_title, " !" & @CRLF & @CRLF & " ") Exit else if (StringCompare($CmdLine[1], "file") = 0) then $dir_mode = 0 elseif (StringCompare($CmdLine[1], "dir") = 0) then $dir_mode = 1 else MsgBox(0x10, $msg_title, " 'file' 'dir'!" & @CRLF & @CRLF & " ") Exit endif $word = $CmdLine[2] if ($dir_mode = 0) then $file_analyse_name = $CmdLine[3] else $dir_analyse = $CmdLine[3] endif $file_analyse_ext = $CmdLine[4] $log_path = $CmdLine[5] if (StringCompare($CmdLine[6], "err_msg_on") = 0) then $log_msg_on = 1 elseif (StringCompare($CmdLine[6], "err_msg_off") = 0) then $log_msg_on = 0 else MsgBox(0x10, $msg_title, " 'log_msg_on' 'log_msg_off'!" & @CRLF & @CRLF & " ") Exit endif endIf ; $file_log = $log_path & "\" & "log_analyser" & "-" & @YEAR & "-" & @MON & "-" & @MDAY & "-" & @HOUR & "-" & @MIN & "-" & @SEC & ".log" $word_detect = 0 ; if ($dir_mode = 0) then $file_analyse = $file_analyse_name & "." & $file_analyse_ext if (_file_analyser($file_analyse, $msg_title, $word, $file_log, $word_detect) = 1) then $word_detect = 1 endif else ; $dir_arr = _FileDirList($dir_analyse, "*."&$file_analyse_ext, 1, 1, 0) ;_ArrayDisplay($dir_arr) ; - if ($dir_arr = 0) then MsgBox(0x10, $msg_title, " !" & @CRLF & @CRLF & " ") Exit endif $cnt_files = $dir_arr[0] ; $i = 0 While $i <> $cnt_files $i = $i + 1 $file_analyse = $dir_arr[$i] if (_file_analyser($file_analyse, $msg_title, $word, $file_log, $word_detect) = 1) then $word_detect = 1 endif WEnd endif ; if ($word_detect = 1) and ($log_msg_on = 1) then if (MsgBox (0x41034, $msg_title, " !" & @CRLF & " : " & $file_log & @CRLF & @CRLF & " ?")) = 6 then ShellExecuteWait($soft_open_log, $file_log) endif endif Exit ; ; , , Func _file_analyser($file_analyse, $msg_title, $word, $file_log, $word_detect) Local $file1, $file2, $file_line, $write_once $word_detect = 0 $write_once = 0 $file1 = FileOpen($file_analyse, 0) ; If $file1 = -1 Then FileClose($file1) MsgBox(0x10, $msg_title, " !" & @CRLF & @CRLF & " ") Exit EndIf ; While 1 $file_line = FileReadLine($file1) If @error = -1 Then ExitLoop if (StringInStr($file_line, $word) <> 0) then $word_detect = 1 ; if (FileExists($file_log) = 0) then $file2 = FileOpen($file_log, 1) FileClose($file2) endif ; if ($write_once = 0) then $write_once = 1 $file2 = FileOpen($file_log, 1) FileWriteLine($file2, " : " & $file_analyse) FileClose($file2) endif ; $file2 = FileOpen($file_log, 1) FileWriteLine($file2, $file_line) FileClose($file2) endif WEnd ; , if ($word_detect = 1) then $file2 = FileOpen($file_log, 1) FileWriteLine($file2, @CRLF) FileClose($file2) endif FileClose($file1) Return $word_detect EndFunc
Após digitar o código, pressione o botão F7 no editor SciTE e obtenha o arquivo log_analayser.exe na saída.O programa analisa o arquivo quanto à presença de uma palavra, quando encontrada, um arquivo de log é criado, no qual a linha encontrada que contém essa palavra é copiada.O programa pode funcionar de dois modos:- análise de um arquivo específico- análise da pasta que contém os arquivos para análise (todas as subpastas também são analisadas)Quando você faz uma chamada de console, precisa definir seis parâmetros para o programa:1 - modo de operação [arquivo = análise de arquivo; dir = análise da pasta que contém os arquivos]2 - pesquisa por palavra-chave3 - nome do arquivo ou caminho completo para a pasta4 - extensão ou arquivos para análise na pasta5 - o caminho completo para a pasta onde o log do programa estará localizado;6 - exibição da janela após análise de todos os arquivos no caso de encontrar a palavra especificada [err_msg_on = display; err_msg_off = não exibir]Assim, recebemos um novo script bck_auto.bat: @echo Start Backup @set dir=%~dp0 call %dir%bck_all.bat log_analyser.exe dir %dir%GoodSync\Profile log %dir%LOG err_msg_on exit
O script inicia um arquivo a partir do qual as tarefas para sincronizar todas as pastas necessárias são chamadas individualmente uma após a outra e, em seguida, o analisador de log de sincronização é chamado, após o qual, em caso de erros, uma mensagem é exibida solicitando que você observe as linhas de log onde esses erros são encontrados e você pode entender qual tarefa ocorreram problemas. Essas linhas são gravadas em um arquivo de log separado na pasta D: \ Sync \ LOG.E então eu sofri um fracasso terrível. O Log Analyzer não funcionou. Não, funcionou muito bem nos arquivos de teste, mas teimosamente não queria ver erros nos logs. Durante muito tempo, não consegui entender qual era o motivo até descobrir uma coisa terrível: não apenas no registro em inglês, a falha é exibida pela única palavra em russo “ERROR”, mas também a codificação desse alfabeto cirílico é o Macintosh! Não sei por que os programadores da Siber Systems fizeram isso; provavelmente é o resultado de uma muleta terrível dentro do software. Bem, quem disse que a programação deve ser chata?Não havia escolha a não ser apoiar uma muleta com outra e, como resultado, apareceu uma construção de trabalho: @echo Start Backup @set dir=%~dp0 call %dir%bck_all.bat log_analyser.exe dir Ћ˜€ЃЉЂ %dir%GoodSync\Profile log %dir%LOG err_msg_on exit
No entanto, o seguinte problema apareceu: GoodSync em si não exclui arquivos de log, novos arquivos aparecem a cada nova execução de tarefa. E se algum tipo de sincronização falhar, nosso analisador sempre encontrará esse arquivo e informará com alegria o erro. Portanto, antes de iniciar a sincronização, foi decidido limpar automaticamente a pasta D: \ Sync de qualquer arquivo de log. Um script clean_logs.bat elegante foi criado para isso: @echo off set dir=%~dp0 For /R %dir% %%i in (*.log) Do ( Del /q "%%i") @echo on
O script desativa a saída de qualquer mensagem, descobre o diretório de inicialização do script, verifica todos os arquivos (incluindo subpastas) até que eles terminem e exclui todos os arquivos com a extensão de log. No final do trabalho, a saída da mensagem é ativada.O script bck_auto.bat foi alterado: @echo Start Backup @set dir=%~dp0 @call clean_logs.bat call %dir%bck_all.bat log_analyser.exe dir Ћ˜€ЃЉЂ %dir%GoodSync\Profile log %dir%LOG err_msg_on exit
Tudo funciona muito bem, mas o objetivo é automatizar ações de rotina. Por que não desligar o computador à noite e dormir, e ele próprio sincroniza vários arquivos, analisa e desativa o caminho?Vamos modificar nosso script bck_auto.bat: @echo Start Backup & PCOFF @set dir=%~dp0 start MonitorOnOff.exe 0 @call clean_logs.bat call %dir%bck_all.bat log_analyser.exe dir Ћ˜€ЃЉЂ %dir%GoodSync\Profile log %dir%LOG err_msg_off shutdown /s /t 0 exit
Duas novas linhas apareceram no script. O aplicativo MonitorOnOff simplesmente desliga o monitor (para que não ilumine a sala, mas desligá-lo manualmente todas as noites e ligá-lo todas as manhãs é muito preguiçoso) e o comando shutdown desliga o computador. O parâmetro responsável por exibir as mensagens quando um erro foi encontrado foi alterado no log_analyser, porque após a sincronização, não é necessário retardar a execução do script por esta mensagem, mas permitir que ele desligue o computador.MonitorOnOff também é escrito em AutoIt. ; Monitor On Off 1.0 ; / #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_Field=ProductName|Monitor On Off #AutoIt3Wrapper_Res_Fileversion=1.0.0.0 #AutoIt3Wrapper_Res_Field=OriginalFilename|MonitorOnOff.exe #AutoIt3Wrapper_Res_Comment= / #AutoIt3Wrapper_Res_Description= / ;**** #AutoIt3Wrapper_Res_Language=1049 #AutoIt3Wrapper_Res_ProductVersion=1.0 #AutoIt3Wrapper_Compile_Both=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;AutoItSetOption ("WinTitleMatchMode", 2) ; ;#NoTrayIcon ; If WinExists('[CLASS:AutoIt v3;TITLE:' & @ScriptName & ']') Then MsgBox(48, @ScriptName, " !"); ; ;WinActivate(' ') Exit EndIf AutoItWinSetTitle(@ScriptName) HotKeySet("{F10}", "_Monitor_ON") HotKeySet("{F11}", "_Monitor_OFF") HotKeySet("{Esc}", "_Quit") Global Const $lciWM_SYSCommand = 274 Global Const $lciSC_MonitorPower = 61808 Global Const $lciPower_Off = 2 Global Const $lciPower_On = -1 Global $MonitorIsOff = False if ($CmdLine[0] <> 0) then _Monitor_OFF() endif While 1 Sleep(10) WEnd Func _Monitor_ON() $MonitorIsOff = False Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]') DllCall('user32.dll', 'int', 'SendMessage', _ 'hwnd', $Progman_hwnd, _ 'int', $lciWM_SYSCommand, _ 'int', $lciSC_MonitorPower, _ 'int', $lciPower_On) EndFunc Func _Monitor_OFF() $MonitorIsOff = True Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]') While $MonitorIsOff = True DllCall('user32.dll', 'int', 'SendMessage', _ 'hwnd', $Progman_hwnd, _ 'int', $lciWM_SYSCommand, _ 'int', $lciSC_MonitorPower, _ 'int', $lciPower_Off) _IdleWaitCommit(0) Sleep(20) WEnd EndFunc Func _IdleWaitCommit($idlesec) Local $iSave, $LastInputInfo = DllStructCreate ("uint;dword") DllStructSetData ($LastInputInfo, 1, DllStructGetSize ($LastInputInfo)) DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo)) Do $iSave = DllStructGetData ($LastInputInfo, 2) Sleep(60) DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo)) Until (DllStructGetData ($LastInputInfo, 2)-$iSave) > $idlesec Or $MonitorIsOff = False Return DllStructGetData ($LastInputInfo, 2)-$iSave EndFunc Func _Quit() _Monitor_ON() Exit EndFunc
O programa iniciado é controlado por três teclas: F10 liga o monitor, F11 - desliga e o botão ESC finaliza o programa e o descarrega da memória. Se você especificar qualquer parâmetro ao iniciar o programa, o programa em execução desligará imediatamente a tela.Agora estava tudo bem - antes de ir para a cama, executei o bck_all.bat, em vez de "Desligue o computador" e fui para a cama. O monitor não iluminou a sala inteira, a sincronização foi realizada automaticamente e seu sucesso foi analisado automaticamente. De manhã, basta olhar o conteúdo da pasta D: \ Sync \ GoodSync \ LOG \ para pelo menos alguns arquivos. Mas também não é esse o caso - por que perder tempo se está tudo bem? Preciso fazer um analisador de logs e pendurá-lo na inicialização do sistema para que funcione no dia seguinte quando o computador inicializar e preocupe minha atenção apenas quando a sincronização falhar. Foi assim que o programa check_file_exist surgiu. ; Check File Exist 1.0 ; #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_Field=ProductName|Check File Exist #AutoIt3Wrapper_Res_Fileversion=1.0.0.0 #AutoIt3Wrapper_Res_Field=OriginalFilename|check_file_exist.exe #AutoIt3Wrapper_Res_Comment= #AutoIt3Wrapper_Res_Description= ;**** #AutoIt3Wrapper_Res_Language=1049 #AutoIt3Wrapper_Res_ProductVersion=1.0 #AutoIt3Wrapper_Compile_Both=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;AutoItSetOption ("WinTitleMatchMode", 2) ; ;#NoTrayIcon ; If WinExists('[CLASS:AutoIt v3;TITLE:' & @ScriptName & ']') Then MsgBox(48, @ScriptName, " !"); ; ;WinActivate(' ') Exit EndIf AutoItWinSetTitle(@ScriptName) #include <Array.au3> #include <_FileDirList.au3> ; Local $msg_title = "Check File Exist 1.0" Local $path = @ScriptDir Local $soft_open_dir = "explorer.exe" Local $path, $dir_analyse, $words, $msg_open ; if ($CmdLine[0] < 5) then MsgBox(0x10, $msg_title, " !" & @CRLF & @CRLF & " ") Exit else $dir_analyse = $CmdLine[1] $file = $CmdLine[2] $words0 = $CmdLine[3] $words1 = $CmdLine[4] if (StringCompare($CmdLine[5], "msg_on") = 0) then $msg_open = 1 elseif (StringCompare($CmdLine[5], "msg_off") = 0) then $msg_open = 0 else MsgBox(0x10, $msg_title, " 'msg_on' 'msg_off'!" & @CRLF & @CRLF & " ") Exit endif endIf ; $dir_arr = _FileDirList($dir_analyse, "*"&$file&"*", 1, 0, 0) ;_ArrayDisplay($dir_arr) ; if ($dir_arr = 0) then if (StringCompare($words0, "0") <> 0) then if ($msg_open = 0) then MsgBox(0x41030, $msg_title, $words0) else if (MsgBox(0x41034, $msg_title, $words0 & @CRLF & @CRLF & " ?")) = 6 then ShellExecuteWait($soft_open_dir, $dir_analyse) endif endif endif else if (StringCompare($words1, "0") <> 0) then if ($msg_open = 0) then MsgBox(0x41030, $msg_title, $words1) else if (MsgBox(0x41034, $msg_title, $words1 & @CRLF & @CRLF & " ?")) = 6 then ShellExecuteWait($soft_open_dir, $dir_analyse) endif endif endif endif Exit
Essencialmente, este programa é uma funcionalidade log_analyser ligeiramente truncada. O programa analisa a pasta especificada (excluindo subpastas) em busca de arquivos e nomes que correspondam pelo menos parcialmente à palavra de pesquisa especificada e exibe uma mensagem sobre o resultado da verificação.Parâmetros do programa:1 - o caminho completo para a pasta (sem o caractere de barra - /)2 - a palavra-chave para pesquisar nomes de arquivos ou o nome completo do arquivo3 - sequência de texto exibida quando o arquivo não for encontrado, se = 0 - não exibir a mensagem4 - texto a linha exibida quando o arquivo for encontrado, se = 0 - não exibir uma mensagem5 - saída da mensagem: msg_off - apenas uma mensagem sobre a presença / ausência de arquivos é exibida, msg_on - na janela exibida, também é proposto abrir a pasta na qual os arquivos são detectados ou não encontradosAgora, para este programa, criei o script Check_LOG_from_log_analyser.bat, cujo link eu coloquei no habitual Inicialização do Windows: @set dir=%~dp0LOG start check_file_exist.exe %dir% .log 0 " !" msg_on exit
Assim, na final, obtivemos uma solução completamente autônoma que não depende da localização da pasta Sync e funcionará corretamente de qualquer lugar do nosso computador. A solução não é apenas viável, mas também estável - no Windows 7 x64, esse conjunto de scripts funcionou por um ano e não houve absolutamente nenhum problema.Talvez agora tudo isso pareça um tanto monstruoso, mas não há nada de complicado nisso. Se você olhar atentamente para o código AutoIt, a construção básica são os loops habituais do tipo se-então-outro-fim para qualquer linguagem de programação, na qual são aprendidos alguns operadores e funções repetitivas do AutoIt, aprendidos literalmente em algumas noites. A linguagem de script BAT nem pode ser ensinada, pois a maioria das soluções é padrão e há muito tempo é descrita na Internet. Ser capaz de usar a programação não é apenas interessante, mas pode ser muito útil.Ode ao código de Dark Dragon
Posfácio
Para ser sincero, presumi, mas não esperava um volume tão grande de artigos, que precisei gastar até cinquenta horas. Como regra, a instalação da sua nuvem na Internet é reduzida a dizeres como: "Sim, você precisa executar vários comandos lá". É verdade - a instalação é trivial. Quando você sabe quais comandos entrar no console e o que eles significam. Quando você entende a essência do roteamento na rede. Quando você já possui um servidor em funcionamento e quando entende como adicionar um host a ele. Quando você sabe como configurar um site. Ou seja, para aplicar esses vários comandos, você precisa ter uma certa quantidade de conhecimento e experiência. O objetivo desses três artigos é uma tentativa de criar essa bagagem coletando as informações suficientes necessárias em um só lugar e explicando como usá-las corretamente. Eu sinceramente esperoque esta série de artigos ajudará alguém a dar os primeiros passos conscientes no mundo do software livre.
Retorne ao início, ao índice .
A história da criação de uma nuvem doméstica. Parte 3. Criando uma nuvem pessoal - instalando e configurando o Nextcloud.Versão em texto: 1.2.1.Data da primeira publicação: 02/08/2018.Última edição: 15/01/2020.Atualizar log1.2.1 [15-01-2020]
.
1.2.0 [08-02-2018]
.
1.1.0 [08-02-2018]
.
1.0.0 [08-02-2018]
.
Nextcloud 11.0.2 VMWare, VMWare , Nextcloud.
Informações para a administração do recurso (bug suspeito)- (, code blockquote)
:
[Definition]
failregex={«reqId»:".*",«remoteAddr»:".*",«app»:«core»,«message»:«Login failed: '.*' \(Remote IP: ''\)»,«level»:2,«time»:".*"}
ignoreregex =
! , .. . (/) — . :
—
—
— , « Nextcloud» , ,
— ,