Dedinit()

Техноблог обычного жителя маленького города

Portainer: развертывание и решение ошибок подключения к Docker

Поделюсь опытом настройки Portainer — удобного веб-интерфейса для управления Docker. Столкнулся с типичными ошибками и нашел рабочие решения.

Типичные проблемы при запуске:

“The environment named Docker is unreachable”

“client version 1.42 is too old. Minimum supported API version is 1.44”

🔧 Решения:

  1. Права доступа к Docker socket

    # Проверяем права
    ls -l /var/run/docker.sock
    # Если не хватает прав:
    sudo chmod 666 /var/run/docker.sock
    # ИЛИ добавляем пользователя в группу docker
    sudo usermod -aG docker $USER
    # Перезагружаем сессию
    newgrp docker
    
  2. Совместимость с Docker Engine 29+ Основная проблема — несовместимость новых версий Docker с некоторыми версиями Portainer.

Рабочий docker-compose.yml:

services:
  portainer:
    image: portainer/portainer-ce:2.20.2  # Проверенная версия
    container_name: portainer
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./portainer-data:/data
    ports:
      - "9080:9080"
      - "9443:9443"

💡 Важные моменты:

Версия 2.20.2 стабильно работает с Docker 29+ Логи можно посмотреть: docker logs portainer

📊 Проверка работоспособности:


docker ps
docker logs portainer
# В браузере: https://сервер:9443

Теперь Portainer должен работать стабильно! 🎉

#docker #portainer #devops

Мой телеграм канал https://t.me/dedinit/

Предполагается, что у вас есть: VPS с Debian 13, Доступ к серверу через sudo, Доменное имя gelonet.ru, зарегистрированное у любого регистратора.

🔹 Шаг 0: Настройка DNS (в панели регистратора)

Зайдите в панель управления вашего регистратора домена (например, reg.ru, nic.ru, Beget и т.д.).

Найдите раздел «Управление DNS» или «Зоны DNS» для домена gelonet.ru.

Создайте A-запись для поддомена:

Имя (host): wf Тип: A Значение (IP): [вашпубличныйIP_сервера] TTL: 300 или по умолчанию

Пример: wf.gelonet.ru → 5.129.217.146

Сохраните изменения. ⏱ DNS может обновиться от нескольких секунд до 10–30 минут. Проверить можно командой:

dig +short wf.gelonet.ru
# или
nslookup wf.gelonet.ru

Результат должен совпадать с IP вашего сервера.

🔹 Шаг 1: Подготовка сервера

Подключитесь к серверу по SSH и выполните:

# Обновление системы
sudo apt update && sudo apt upgrade -y

# Установка необходимых пакетов
sudo apt install -y nginx curl tar ufw

🔹 Шаг 2: Настройка фаервола (UFW)

Разрешите SSH, HTTP и HTTPS:

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'  # открывает 80/tcp и 443/tcp
sudo ufw enable

Проверка:

sudo ufw status verbose

💡 Порт 80 нужен для получения сертификата, порт 443 — для доступа к сайту по HTTPS.

🔹 Шаг 3: Установка WriteFreely

# Создаём директорию
sudo mkdir -p /var/www/writefreely
cd /var/www/writefreely

# Скачиваем последнюю версию (v0.16.0 на момент написания)
sudo curl -L https://github.com/writefreely/writefreely/releases/download/v0.16.0/writefreely_0.16.0_linux_amd64.tar.gz -o writefreely.tar.gz

# Распаковываем
sudo tar -xzf writefreely.tar.gz --strip-components=1
sudo rm writefreely.tar.gz

# Назначаем права
sudo chown -R www-data:www-data /var/www/writefreely

🔹 Шаг 4: Настройка WriteFreely

sudo -u www-data /var/www/writefreely/writefreely config start

Ответьте на вопросы:

    Environment: Production, behind reverse proxy  
    Server address: localhost:8080 (оставьте по умолчанию)  
    Database: SQLite (проще для старта) или MySQL (если настроена БД)  
    Site name: например, Мой блог  
    Admin username: ваш email  
    Admin password: надёжный пароль  
    Остальное — по желанию

Сгенерируйте ключи шифрования:

sudo -u www-data /var/www/writefreely/writefreely keys generate

🔹 Шаг 5: Создание systemd-сервиса

sudo tee /etc/systemd/system/writefreely.service <<EOF
[Unit]
Description=WriteFreely Instance
After=network.target

[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/var/www/writefreely
ExecStart=/var/www/writefreely/writefreely
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

Запустите сервис:

sudo systemctl daemon-reload
sudo systemctl enable --now writefreely

Проверка:

sudo systemctl status writefreely

🔹 Шаг 6: Настройка Nginx как обратного прокси

Создайте конфиг (замените wf.gelonet.ru на ваш поддомен):

sudo tee /etc/nginx/sites-available/writefreely <<EOF
server {
    listen 80;
    listen [::]:80;
    server_name wf.gelonet.ru;

    gzip on;
    gzip_types
      application/javascript
      application/x-javascript
      application/json
      application/rss+xml
      application/xml
      image/svg+xml
      image/x-icon
      application/vnd.ms-fontobject
      application/font-sfnt
      text/css
      text/plain;
    gzip_min_length 256;
    gzip_comp_level 5;
    gzip_vary on;

    location ~ ^/.well-known/(webfinger|nodeinfo|host-meta) {
        proxy_pass http://127.0.0.1:8080;
        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_redirect off;
    }

    location ~ ^/(css|img|js|fonts)/ {
        root /var/www/writefreely/static;
        expires 12M;
    }

    location / {
        proxy_pass http://127.0.0.1:8080;
        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_redirect off;
    }
}
EOF

Активируйте сайт:

sudo ln -s /etc/nginx/sites-available/writefreely /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

🔹 Шаг 7: Получение SSL-сертификата от Let’s Encrypt

Установите Certbot:

sudo apt install -y certbot python3-certbot-nginx

Получите сертификат:

sudo certbot --nginx -d wf.gelonet.ru

Ответьте N на вопрос о передаче email EFF (если не хотите). Certbot автоматически: запросит сертификат, обновит конфиг Nginx для HTTPS, настроит автоматическое обновление.

📌 Важно: порты 80 и 443 должны быть открыты в UFW и облачном фаерволе!

🔹 Шаг 8: Проверка работы

Откройте в браузере свой поддомен, у меня это: https://wf.gelonet.ru

Вы должны увидеть главную страницу WriteFreely. Админка доступна по: https://wf.gelonet.ru/admin

🔹 Шаг 9: Проверка автопродления сертификата

Certbot уже настроил таймер, но можно проверить вручную:

sudo certbot renew --dry-run

Если команда завершится без ошибок — всё в порядке.

🧰 Полезные команды

Логи WriteFreely:

sudo journalctl -u writefreely -f

Логи Nginx:

 sudo tail -f /var/log/nginx/error.log

Обновление WriteFreely: Остановите сервис: sudo systemctl stop writefreely Замените бинарник (повторите Шаг 3) Запустите: sudo systemctl start writefreely

✅ Готово!

Ваш персональный блог на WriteFreely работает по адресу: 👉 https://wf.gelonet.ru

Теперь вы полностью контролируете свой контент, без зависимости от сторонних платформ.

Мой телеграм канал https://t.me/dedinit/