Розгортання SmartSign в Docker контейнері
Підготовчі роботи
Для прикладу використовується платформа Ubuntu Linux 22.04 LTS, але користувач може використовувати будь-яку підтримувану Docker платформу
Документація Docker знаходиться за посиланням
- Встановіть Ubuntu Linux 22.04 LTS
- Встановіть останню версію docker, docker compose та текстовий редактор nano
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin nano
sudo systemctl enable docker && sudo systemctl start docker
- Створіть директорію web у будь-якому місці
sudo mkdir web && cd web/
Надалі всі дії будуть проводитися всередині цієї директорії
- Створіть директорію для мікросервісів
sudo mkdir backend backend/storage_app_public backend/storage_app_public/certs
- Завантажте необхідні сертифікати
sudo wget -P backend/storage_app_public/certs/ https://iit.com.ua/download/productfiles/CACertificates.p7b
sudo wget -P backend/storage_app_public/certs/ https://iit.com.ua/download/productfiles/CAs.json
- Створіть compose файли
sudo touch backend/docker-compose.yml
- Створіть .env файли зі змінними
sudo touch backend/.env
- Відкрийте для редагування compose файл від модуля аналітики
sudo nano backend/docker-compose.yml
- Вставте наступний текст та змініть значення на потрібні (після редагування для збереження натисніть клавіші Ctrl+O, Enter, Ctrl+X):
version: '2'
services:
backend:
container_name: backend
image: <registry_image_url>
env_file:
- .env
volumes:
- ./.env:/var/www/.env
- ./database/db:/var/www/database/db
- ./storage_app_public:/var/www/storage/app/public
tty: true
networks:
- nginx-proxy
restart: unless-stopped
networks:
nginx-proxy:
name: nginx-proxy
- Відкрийте для редагування
.env файлвід бекенду
sudo nano backend/.env
- Встановіть наступний текст та змініть значення на потрібні (після редагування для збереження натисніть клавіші Ctrl+O, Enter, Ctrl+X):
APP_NAME=Lumen
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=<URL сайту backend>
APP_TIMEZONE=UTC
DOMAIN_=<доменне ім'я backend>
BACKEND_=backend
LOG_CHANNEL=stack
LOG_SLACK_WEBHOOK_URL=
DB_CONNECTION=sqlite
DB_DATABASE=/var/www/database/db/database.sqlite
CACHE_DRIVER=memcached
QUEUE_CONNECTION=sync
- Для тестування використовується
APP_ENV=local, для кінцевої версії —APP_ENV=production APP_KEYможна отримати від технічної підтримки
Запуск та оновлення
-
Підключення до регістру
В консолі виконайте підключення до docker-регістру
<REGISTRY-SERVER>та встановіть секретний ключ як ім'я користувача та пароль:
sudo docker login <REGISTRY-SERVER>
-
Запуск мікросервісів
Перейдіть до робочої директорії з бекендом та запустіть контейнери:
cd backend/ && sudo docker compose up -d
-
Доступність мікросервісів
Мікросервіси доступні за наступними внутрішніми адресами:
| Мікросервіс | Контейнер : Порт |
|---|---|
| Бекенд | backend:8080 |
-
Оновлення мікросервісів
Щоб виконати оновлення мікросервісів, дотримуйтесь наступного алгоритму:
- Зайдіть на сервер, де розгорнуто ваш Docker.
- Перед оновленням, про всяк випадок, обов'язково зробіть локальні копії папок для захисту даних:
./database/db:/./storage_app_public:/
- Перейдіть у директорію web та виконайте наступну команду:
cd backend/ && sudo docker compose pull && sudo docker compose up -d
-
Налаштування зовнішнього доступу та SSL
Для виводу потрібних мікросервісів в інтернеті та налаштування SSL-сертифікатів для доменів, встановіть і налаштуйте реверс-проксі сервер (наприклад: jwilder/nginx-proxy, traefic/latest або haproxy/latest).
Опис типових помилок
Помилка під час виконання docker-compose pull
Опис помилки:
При виконанні команди docker-compose pull з'являється повідомлення: unauthorized: HTTP Basic: Access denied
Причина:
Термін дії токена вичерпано або дані авторизації застаріли.
Рішення:
Виконайте авторизацію в Docker-регістрі, використовуючи новий токен доступу як ім’я користувача та пароль:
docker login gitlab.phrm.pro:4567
Помилка відсутності файлів (сертифікатів)
Опис помилки:
У логах з'являється помилка: no such file or directory, open './storage/app/public/certs/CAs.json
Причина:
У робочій директорії (volume) відсутні важливі файли конфігурації або сертифікати.
Рішення:
Скопіюйте відсутні файли (наприклад, із резервної копії каталогу certs/) у volume storage_app_public/certs на головному хості, де запущено Docker.
Помилка прав доступу (читання / запис)
Опис помилки:
Контейнер не може записати лог-файли, завантажити зображення або змінити файли.
Причина:
Користувач усередині контейнера не має прав на маніпуляції з файлами на хост-машині.
Рішення:
Змініть власника директорії volume на головному хості (встановіть ідентифікатор 1000:1000, що відповідає стандартному)
На головному хості виконайте команду:
chown -R 1000:1000 storage_app_public/
Версії Docker та синтаксис команд
Опис помилки:
Система видає помилку docker: command not found (команда не знайдена).
Причина:
Застаріла версія Docker.
Рішення:
Пишіть команду через дефіс: docker-compose замість docker compose.
Якщо ви отримуєте помилку command not found, перевірте свою версію Docker. Починаючи з 2022 року, Docker перейшов на стандарт V2, де команди пишуться через пробіл. Докладніше про перехід та різницю між версіями можна прочитати на сайті Docker: Migrate to Compose V2