Установка и настройка своей системы веб-аналитики с помощью Liwan
1. Почему Liwan
В начале я попробовал использовать для своего сайта Google Analytics, но потом решил перейти на более лёгкое и уважающее приватность посетителя решение.
Что не так с GA?
- Собирает данные пользователей и передаёт их в США. А американские законы о слежке позволяют спецслужбам США получать к ним доступ.
- Даже с дополнительными мерами защиты данные всё равно передаются в читаемом виде и могут быть идентифицированы обратно — либо самим Google, либо американскими властями.
- Ряд европейских стран признали использование GA незаконным по GDPR.
Я стал искать другие self-hosted решения, но натыкался на тяжеловесные варианты, которые ставят миллион npm пакетов для работы, или что-то подобное. И довольно быстро нашёл Liwan через статью от Henry Gressmann — автора этой замечательной программы.
Он написан полностью на Rust и распространяется в виде одного единственного исполняемого файла. Конфигурация простая, а потребление ресурсов незначительное — то что нужно для моего небольшого блога на моём небольшом VPS :)
2. Установка
На официальном сайте есть инструкции, я просто опишу полный процесс каким он получился у меня.
Весь процесс можно и нужно делать под обычным пользователем, я назову его user. В качестве порта буду использовать стандартный 9042, а в качестве домена example.org.
Для начала можно установить A-запись для субдомена, на котором будет расположен Liwan, чтобы она указывала на наш сервер. Это может быть тот же IP-адрес. В этом примере будет использоваться liwan.example.org.
После этого можно приступать к установке, а по окончанию DNS записи уже должны обновиться.
curl -JLO 'https://github.com/explodingcamera/liwan/releases/latest/download/liwan-x86_64-unknown-linux-musl.tar.gz'
mkdir -p ~/.local/bin
tar -xzf liwan-x86_64-unknown-linux-musl.tar.gz -C ~/.local/bin liwan
chmod +x ~/.local/bin/liwan
export PATH=$HOME/.local/bin:$PATH
echo 'export PATH=$HOME/.local/bin:$PATH' >> ~/.bashrc
Для получения страны посетителя используются базы MaxMind. Liwan может автоматически скачивать и обновлять базу, если предоставить ему API ключ. Или можно скачать её самому. У меня были проблемы с регистрацией, поэтому пошёл вторым путём.
curl -LO --create-dirs --output-dir ~/.local/share/liwan https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-City.mmdb
Дальше можно создать файл конфигурации и отредактировать его.
liwan generate-config
mv liwan.config.toml ~/.config/liwan/
vim ~/.config/liwan/liwan.config.toml
Я покажу свою версию:
base_url="https://liwan.example.org"
port=9042
[geoip]
maxmind_db_path="/home/user/.local/share/liwan/GeoLite2-City.mmdb"
У меня статический сайт и я использую Nginx для его раздачи, поэтому мне проще всего было использовать его в качестве обратного прокси для Liwan.
Я создал отдельный файл /etc/nginx/sites-available/liwan:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name liwan.example.org;
location / {
proxy_pass http://127.0.0.1:9042;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Теперь включаем конфиг и устанавливаем SSL сертификат.
sudo ln -s /etc/nginx/sites-available/liwan /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d liwan.example.org
Дальше лучше всего запустить один раз liwan руками из консоли. Он произведёт первичную настройку и выдаст секретный URL по которому можно создать свой первый проект и сущность для сайта. Как я понимаю проект — это как папка для отдельных сайтов, а сущность — уже сам сайт.
Теперь можно создать сервис systemd для удобного управления. Я поместил в файл /etc/systemd/system/liwan.service:
[Unit]
Description=Liwan Web Analytics
After=network.target
[Service]
ExecStart=/home/user/.local/bin/liwan
Restart=on-failure
User=user
[Install]
WantedBy=multi-user.target
Осталось запустить и убедиться, что всё работает:
sudo systemctl daemon-reload
sudo systemctl enable liwan --now
sudo systemctl status liwan
В панели управления для сущности будет доступен HTML код, который нужно вставить на каждую страницу для сбора аналитики.
Для того чтобы не учитывать свои визиты, нужно открыть сайт и в консоли разработчика выполнить:
localStorage.setItem('disable-liwan', 'true');
Краткая сводка по посещаемости будет доступна на liwan.example.org, а более подробный отчёт в проекте по адресу liwan.example.org/p/<project-id>. Отчёты можно делать публичными. Например мой вот тут: https://liwan.crowsflock.org/p/main.