Перейти к содержанию

Обзор развертывания Akaunting на сервере

Предпосылки и предварительные требования

  • ОС: Ubuntu 22.04 LTS (или совместимая дистрибутивная система, использующая APT).
  • Сетевой доступ к интернету для загрузки пакетов, репозиториев и сертификатов.
  • Настроенный домен akaunting_domain, который указывает на публичный IP сервера.
  • Доступ по SSH от пользователя с привилегиями sudo.
  • Пакеты, необходимые для работы:
  • docker-compose
  • docker (неявно, так как docker-compose использует его)
  • nginx, certbot, python3-certbot-nginx
  • php8.3-fpm и расширения PHP (mysql, curl, gd, xml, mbstring, intl, gmp, bcmath, zip)
  • mysql-server
  • nodejs 18.x (для сборки фронтенда)
  • git, cron, ufw, acl, gnupg, software-properties-common, unzip

Структура файлов и каталогов

После установки и клонирования репозитория расположение файлов будет таким:

/opt/akaunting/
├── docker-compose.yml
├── Dockerfile
├── .env
├── env/
│   ├── db.env
│   └── run.env
├── data/
│   └── certbot/
│       ├── conf/
│       └── www/
└── templates/
    ├── nginx.conf.j2
    └── nginx2.conf.j2
  • docker-compose.yml – конфигурация Docker Compose, создающая контейнеры для приложения и базы данных.
  • env/db.env – переменные окружения для MySQL (база, пользователь, пароль).
  • env/run.env – переменные окружения приложения (URL, локаль, соединение с БД, префикс таблиц, админка).
  • data/certbot/conf и data/certbot/www – каталоги, используемые Certbot для размещения challenge‑файлов.
  • Шаблоны nginx.conf.j2 и nginx2.conf.j2 генерируют конфигурации Nginx: временный HTTP‑конфиг и окончательный HTTPS‑конфиг после получения сертификата.

Права доступа и безопасность

  • Папка /opt/akaunting принадлежит пользователю root и группе root.
  • Файлы конфигурации (например, docker-compose.yml, env/*.env, templates/*) имеют права 0644.
  • Скрипты, выполняемые из docker-compose, используют пользователь root в контейнере, но наружу взаимодействуют только через Nginx и HTTP/HTTPS.
  • Брандмауэр UFW открыт только на порты 22, 80 и 443, что ограничивает внешние подключения.

Базы данных

MySQL запускается в отдельном контейнере (akaunting-db). Файл env/db.env задаёт:

MYSQL_DATABASE=akaunting
MYSQL_USER=admin
MYSQL_PASSWORD=<root пароль>
MYSQL_RANDOM_ROOT_PASSWORD=yes

При первом запуске контейнера создаётся база akaunting и пользователь admin.
Права доступа к базе ограничены только контейнером akaunting-db, а наружу не выдаются.

Контейнеры Docker и их запуск

Docker Compose запускает два сервиса:

  1. akaunting – приложение PHP/Laravel, слушает на порту 8080 внутри сети Docker.
  2. akaunting-db – MySQL, доступ к которому ограничен переменными окружения в env/db.env.

Запуск производится командой:

cd /opt/akaunting
docker-compose up --detach

Команда создаёт сети, монтирует каталоги и запускает контейнеры в фоне.
Для проверки доступности приложения используется HTTP‑запрос к http://<akaunting_domain>:8080.

Прокси серверы (Nginx, Certbot)

  1. Тимплейт nginx.conf.j2 создаёт конфигурацию, открывающую порт 80 и проксирующую запросы к 127.0.0.1:8080.
    Также он обслуживает директорию /.well-known/acme-challenge/ для проверки домена.

  2. После запуска контейнеров и проверки доступности, Certbot запрашивает сертификат:

certbot certonly --nginx -d <akaunting_domain> --email <admin_email> --agree-tos --non-interactive
  1. Получив сертификат, скрипт генерирует окончательный конфиг nginx2.conf.j2, в котором:

  2. Порт 80 перенаправляет все запросы на HTTPS.

  3. Порт 443 обслуживает HTTPS через сертификаты Let’s Encrypt.
  4. Все заголовки проксирования передаются в контейнер akaunting.

  5. После замены конфигурации Nginx, сервис перезагружается:

sudo systemctl reload nginx

Настройки прав, Запуск, остановка и обновление

Шаг Команда Описание
Запуск cd /opt/akaunting && docker-compose up --detach Создаёт и запускает контейнеры в фоне.
Остановка cd /opt/akaunting && docker-compose down Останавливает и удаляет контейнеры, но оставляет тома.
Обновление cd /opt/akaunting && git pull && docker-compose up --detach --build Обновляет код из репозитория и пересобирает контейнеры.
Перезапуск приложения cd /opt/akaunting && docker-compose restart akaunting Перезапускает только контейнер приложения.
Проверка статуса docker ps Показывает запущенные контейнеры.
Перезапуск Nginx sudo systemctl restart nginx Перезапускает веб‑сервер, применяя новые сертификаты.
Устранение проблем docker logs akaunting Выводит логи приложения.
Удаление сертификатов certbot delete --cert-name <akaunting_domain> Удаляет сертификат, если требуется.

Права доступа к файлам конфигурации и каталогам строго ограничены, а брандмауэр разрешает только необходимые порты. Это обеспечивает безопасный и стабильный развертывание Akaunting с Docker, Nginx и Let’s Encrypt.

question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×