Вернулся на Debian

Раньше, когда у меня был старый, медленный компьютер, я был вынужден установить дистрибутив менее требовательный к ресурсам. Выбор пал на Debian.

Позже я установил Ubuntu. Я долгое время работал на этой ОС, но современем стали надоедать поломки после обновления на мажорную версию. Так же не радовало количество процессов поставляемого в дистрибутив софта.

Установил на ноутбук Debian 9, впоследствии обновился на Debian 10.

В целом, я остался с тем же софтом, что в Ubuntu, правда немного постарее. Наиболее свежий и проприетарный софт можно ставить с помощью Snap.

Я боялся, что шрифты в Debian, по сравнению с Ubuntu будут выглядеть очень коряво. В самом деле, сразу после установки это было так. Но к счастью, это корректируется редактированием файла ~/.fonts.conf с таким содержимым:

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
 <match target="font">
  <edit name="rgba" mode="assign">
   <const>rgb</const>
  </edit>
 </match>
 <match target="font">
  <edit name="lcdfilter" mode="assign">
   <const>lcddefault</const>
  </edit>
 </match>
 <match target="font">
  <edit name="hinting" mode="assign">
   <bool>true</bool>
  </edit>
 </match>
 <match target="font">
  <edit name="hintstyle" mode="assign">
   <const>hintslight</const>
  </edit>
 </match>
 <match target="font">
  <edit name="antialias" mode="assign">
   <bool>true</bool>
  </edit>
 </match>
</fontconfig>

GUI для РСУБД

Я использовал разные GUI для MySQL - Phpmyadmin, Mysql Workbench, Valentina Studio, все что-то в них было не то. То неудобно было работать, то работали медленно.

Не так давно я нашел инструмент, который мне действительно подходит - DBeaver.

Что мне в нем понравилось - минималистчный и понятный интерфейс, высокая скорость работы без всяких глюков. Работает с большим количеством СУБД, в том числе - PostgreSQL.

Scopes в Yii2

В Yii первой версии были scope, что очень улучшало практику написания кода. В Yii2 тоже есть скопы, но они называются немного по-другому.

Итак, как сделать scope в Yii2.

Создаем класс UserQuery в common\models (если шаблон advanced)

UserQuery.php

<?php

namespace common\models;

use yii\db\ActiveQuery;

class UserQuery extends ActiveQuery
{
    public function active()
    {
        return $this->andWhere(['status' => 10]);
    }
}

В модели User добавляем код

public static function find()
{
    return new UserQuery(get_called_class());
}

Пример использования:

User::find()->active()->all(); //выводим всех пользователей с полем status = 10

Task::findOne(123)->getUsers()->active()->all(); //пример с реляциями

Более подробно смотрите в документации https://www.yiiframework.com/doc/guide/2.0/en/db-active-record

Внешний вид уведомлений Xubuntu

При установке i3 и подобных оконных менеджеров, где устанавливается dmenu внешний вид уведомлений становится мягко говоря не очень красивым. Темы из настроек Xfce не меняются, иконки в уведомлении нет.

Причиной тому служит dunst, который выводит все OSD уведомления.

Все решается очень просто - нужно удалить пакет dunst

sudo apt-get purge dunst

Self hosted

Облачные сервисы уже очень тесно вошли в нашу жизнь. Мы не можем контролировать свои данные - сервис могут взломать, сервис может потерять или слить кому-нибудь ваши данные, или использовать в своих целях.

Наткнулся на проект De-google-ify Internet и поделиться некоторым софтом, который я использую на своем сервере.

Мои аналоги:

Google read (который закрыли) - Tiny Tiny RSS

VPN (любой сервис) - OpenVPN

Github, Bitbucket - Gitlab, Gogs, Gitea, форк Gogs

Pocket - Wallabag

Evernote - TURTL. Все данные хранятся в зашифрованном виде.

Trello - Taiga

Деплой Yii2 с Capistrano

Очень удобно заливать проект одной командой, не заливая по FTP кучу файлов. К тому же, можно автоматически ставить новые пакеты через Composer и выполнять последние миграции.

Данная методика позаимствована с Ruby On Rails. Сам Capistrano написан на Ruby, но это не мешает использовать его для других языков.

Устанавливаем сам Capistrano:

gem install capistrano

Инициализация Capistrano:

cap install

После данной команды в папке проекта создадутся папки и файлы: config и Capfile.

Все нужные Вам настройки находятся в папке config.

config/deploy.rb содержит основные настройки деплоя

Пример deploy.rb

lock '3.8.1'

# Название приложения
set :application, 'app_name'
set :repo_url, 'git@your-host.com/repo.git'

# Директория, где на сервере будет располагаться Ваше приложение
set :deploy_to, '/var/www/app_name.com'

# Система управления версиями - git
set :scm, :git

# Файлы, которых не должно быть в репозитории. Например, конфиг. 
# Я сделал main-local.php, где хранятся настройки подключения к базе данных. 
# Необходимые файлы и папки надо создать в папке с  проектом на сервере в папке shared
append :linked_files, 'common/config/main-local.php'

# Папки, которых не должно быть в репозитории. Здесь всякие временные файлы и загрузки
append :linked_dirs, 'api/runtime', 'backend/runtime', 'frontend/runtime', 'frontend/web/uploads', 'vendor', 'console/runtime'

# Задания после окончания деплоя. Устанавливаем новые пакеты и применяем миграции

namespace :deploy do
    desc 'composer install'
    task :composer_install do
        on roles(:web) do
            within release_path do
                execute "cd #{release_path} && composer install"
            end
        end
    end

    desc 'apply migrations'
    task :migrate do
        on roles(:web) do
            within release_path do
                execute "cd #{release_path} && php yii migrate --interactive=0"
            end
        end
    end

    after :updated, 'deploy:composer_install'
    after :updated, 'deploy:migrate'

end

Далее нам нужно настроить сервера, на которые будет производиться деплой. По умолчанию представляется два файла в config/deploy: production.rb и staging.rb

В каждом файле можно настроить IP сервера, пользователя, под которым заходить на сервер, номер порта, роли сервера, и т.д.

Важно! При запуске миграций может вылезти такая ошибка:

Could not open input file: yii

Это может быть из-за того, что в стандартном репозитории Yii нет файла под названием yii. Этот файл появляется только после локальной инициализации фреймворка. Поскольку на каждый релиз мы заново тянем все файлы из репозитория, соответственно этого файла и не будет. Поэтому добавляем скрипт инициализации после установки пакетов через Composer, добавив в composer.json строки

"scripts": {
    "post-install-cmd": "php init --env=Production --overwrite=n"
}

Деплой:

cap production deploy для production и cap staging deploy для staging

На этом всё. Хорошего деплоя! ;)

Клиентская настройка ssh

Порой бывает нужно зайти на сервер под другим пользователем, по другому порту, или по другому IP (например, если используется Cloudflare). Каждый раз в консоли не удобно писать кастомный порт или имя пользователя. А если еще и IP адрес другой, постоянно надо искать и копировать IP.

На помощь приходит файл конфигурации ssh для клиента, который находится по адресу ~/.ssh/config.

По умолчанию в поставке openssh нет такого файла, поэтому первым делом нужно его создать:

touch ~/.ssh/config

Структура у файла следующая:

Host название_хоста_1
  SSH_OPTION_1 custom_value
  SSH_OPTION_2 custom_value

Host название_хоста_2
  SSH_OPTION custom_value

Host *
  ANOTHER_OPTION custom_value

Что это все означает - в начале используется имя хоста. Задать можно любое значение и писать в консоли ssh название_хоста. Ниже указываются опции, как имя пользователя, порт, адрес хоста.

Пример:

Host dev.myhost
  HostName dev.myhost.com
  Port 4567
  User custom_user

Теперь, чтобы не указывать все флаги вручную, можно просто написать в консоли ssh dev.myhost и мы подключимся к dev.myhost.com по порту 4567 и под пользователем custom_user.

Доступ к SMB без логина и пароля

Не все программы поддерживают гостевой доступ через SMB (Samba).

Чтобы зайти как гость, нужно ввести логин и пароль “Guest”.

Отладка почты

Чтобы каждый раз не отправлять письма при тестировании почты можно использовать локальный сервер и клиент, на помощь приходит очень простой гем, который называется mailcatcher.

Устанавливается просто:

gem install mailcatcher

После чего запускаем в коносли

mailcatcher

Mailcatcher запускается как демон, и слушает порт 1025 для отправки почты (SMTP прописывается в Вашем приложении localhost:1025 без авторизации).

Просматривать отправленные письма можно через веб-интерфейс - http://localhost:1080

Несколько версий PostgreSQL

Иногда бывает нужно держать на одной машине несколько версий PostgreSQL

Можно подключаться к разным версиям следующим образом:

# cd /usr/lib/postgresql/9.4/bin

# sudo -u postgres ./psql -p 5433

Обязательно нужно запускать psql той же версии, что и СУБД. В данном случае мы подключаемся к порту 5433, который слушает инстанс другой версии PostgreSQL

Старые записи