Обзор развертывания Akaunting на сервере¶
Предпосылки и предварительные требования¶
- ОС: Ubuntu 22.04 LTS (или совместимая дистрибутивная система, использующая APT).
- Сетевой доступ к интернету для загрузки пакетов, репозиториев и сертификатов.
- Настроенный домен
akaunting_domain, который указывает на публичный IP сервера. - Доступ по SSH от пользователя с привилегиями
sudo. - Пакеты, необходимые для работы:
docker-composedocker(неявно, так какdocker-composeиспользует его)nginx,certbot,python3-certbot-nginxphp8.3-fpmи расширения PHP (mysql, curl, gd, xml, mbstring, intl, gmp, bcmath, zip)mysql-servernodejs18.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 запускает два сервиса:
- akaunting – приложение PHP/Laravel, слушает на порту 8080 внутри сети Docker.
- akaunting-db – MySQL, доступ к которому ограничен переменными окружения в
env/db.env.
Запуск производится командой:
Команда создаёт сети, монтирует каталоги и запускает контейнеры в фоне.
Для проверки доступности приложения используется HTTP‑запрос к http://<akaunting_domain>:8080.
Прокси серверы (Nginx, Certbot)¶
-
Тимплейт
nginx.conf.j2создаёт конфигурацию, открывающую порт 80 и проксирующую запросы к127.0.0.1:8080.
Также он обслуживает директорию/.well-known/acme-challenge/для проверки домена. -
После запуска контейнеров и проверки доступности, Certbot запрашивает сертификат:
-
Получив сертификат, скрипт генерирует окончательный конфиг
nginx2.conf.j2, в котором: -
Порт 80 перенаправляет все запросы на HTTPS.
- Порт 443 обслуживает HTTPS через сертификаты Let’s Encrypt.
-
Все заголовки проксирования передаются в контейнер
akaunting. -
После замены конфигурации 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.