1. Перед запуском требуется установить зависимости и подготовить окружение:
# для ALT Linux
su -
control sudowheel enabled
control newuidmap public
control newgidmap public
exit
sudo apt-get update && sudo apt-get dist-upgrade
# для docker
sudo apt-get install docker.io
# для podman
sudo apt-get install podman
sudo apt-get install docker-compose-v2 openssl sed grep gawk nano
sudo groupadd docker
sudo usermod -aG docker $USER
# для docker
sudo systemctl enable docker
sudo systemctl start docker
# для podman (rootless)
sudo touch /etc/containers/nodocker
sudo sysctl -w kernel.unprivileged_userns_clone=1
echo "kernel.unprivileged_userns_clone=1" | sudo tee /etc/sysctl.d/99-podman.conf
sudo usermod --add-subuids 100000-165535 $USER
sudo usermod --add-subgids 100000-165535 $USER
echo 'export DOCKER_HOST="unix://$(podman info -f "{{.Host.RemoteSocket.Path}}")"' >> ~/.bashrc
echo "alias docker=podman" >> ~/.bashrc
source ~/.bashrc
loginctl enable-linger $USER
sudo systemctl enable podman.service
sudo systemctl start podman.service
systemctl --user enable --now podman.socket
podman system migrate
sudo reboot
2. В каталоге /opt/online_answer создайте файл docker-compose.yaml, но не запускайте его!
sudo mkdir -p /opt/online_answer
sudo chmod 777 /opt/online_answer
cd /opt/online_answer
nano docker-compose.yaml
Файл docker-compose.yaml
name: online_answer
services:
app:
image: jonyrh/online_answer:latest
container_name: online_answer_app
stdin_open: true
tty: true
environment:
- ONLINE_ANSWER_PASSWORD=${ONLINE_ANSWER_PASSWORD}
- ONLINE_ANSWER_TZ=${ONLINE_ANSWER_TZ}
networks:
- network
ports:
- "9010:9010"
volumes:
- ./data/backups:/root/online_answer/backups
- ./data/out:/root/online_answer/out
- ./data/settings.ini:/root/online_answer/settings.ini
- ./data/webapp.pem:/root/online_answer/webapp.pem
- ./data/ignore_ip_addresses.txt:/root/online_answer/ignore_ip_addresses.txt
- db_tmp:/var/online_answer:Z
restart: unless-stopped
depends_on:
db:
condition: service_healthy
db:
image: mariadb:lts
container_name: online_answer_db
environment:
- MARIADB_ROOT_PASSWORD=${ONLINE_ANSWER_PASSWORD}
- MARIADB_ROOT_HOST=%
- TZ=${ONLINE_ANSWER_TZ}
networks:
- network
volumes:
- db_data:/var/lib/mysql
- db_tmp:/var/online_answer:Z
command: >
sh -c "mkdir -p /var/online_answer &&
chmod 777 -R /var/online_answer &&
exec docker-entrypoint.sh mariadbd --default-time-zone=\"\$$TZ\""
restart: unless-stopped
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
start_period: 30s
interval: 10s
timeout: 5s
retries: 5
volumes:
db_data:
name: online_answer_db
db_tmp:
name: online_answer_tmp
networks:
network:
driver: bridge
3. Для настройки окружения, в каталоге /opt/online_answer с файлом docker-compose.yaml, создайте файл-скрипт prepare_online.sh и запустите его:
nano prepare_online.sh
chmod +x prepare_online.sh && ./prepare_online.sh
Файл prepare_online.sh
#!/bin/bash
set -e
ask_confirm() {
read -p "$1 (y/n + Enter): " -r
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Canceled..."
exit 1
fi
}
echo
echo "********************************************"
echo "*** Preparing for install Online Answer ***"
echo "********************************************"
echo
ask_confirm "Remove ALL DATA and prepare to new installation?"
ask_confirm "You a shure?"
sudo -v
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &
echo "[installing] Remove docker data..."
echo
docker compose down -v --rmi local 2>/dev/null || true
echo
echo "[installing] Recreating directories and setting permissions..."
sudo rm -R ./data 2>/dev/null || true
mkdir ./data
mkdir -p ./data/backups ./data/out
echo "empty" > ./data/ignore_ip_addresses.txt
ONLINE_ANSWER_PASSWORD=$(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 16)
ONLINE_ANSWER_TZ=$(readlink /etc/localtime | sed 's|.*/zoneinfo/||')
echo
read -p "Enter DB Password: [$ONLINE_ANSWER_PASSWORD]: " READ_PASSWORD
READ_PASSWORD=${READ_PASSWORD:-"$ONLINE_ANSWER_PASSWORD"}
while true; do
read -p "Enter TimeZone: [$ONLINE_ANSWER_TZ]: " READ_TZ
READ_TZ=${READ_TZ:-"$ONLINE_ANSWER_TZ"}
if [ -f "/usr/share/zoneinfo/$READ_TZ" ]; then
break
else
echo "Error: '$READ_TZ' is not a valid timezone."
echo "Available examples: Europe/Moscow, Asia/Yekaterinburg"
fi
done
ONLINE_ANSWER_PASSWORD=$READ_PASSWORD
ONLINE_ANSWER_TZ=$READ_TZ
cat <<EOF > .env
ONLINE_ANSWER_PASSWORD=$ONLINE_ANSWER_PASSWORD
ONLINE_ANSWER_TZ=$ONLINE_ANSWER_TZ
EOF
ONLINE_ANSWER_IP=$(ip -4 addr show scope global | awk '/inet / {print $2}' | cut -d/ -f1 | head -n 1)
ONLINE_ANSWER_IPS=$(ip -4 addr show scope global | awk '/inet / {print $2}' | cut -d/ -f1 | sed 's/^/IP:/' | paste -sd "," -)
ONLINE_ANSWER_HOST=$(hostname -f 2>/dev/null | grep -vE 'localhost|localdomain' || hostname)
echo
echo "Host IP: $ONLINE_ANSWER_IP"
echo "Host Name: $ONLINE_ANSWER_HOST"
echo
read -p "USB KEY HOST: [$ONLINE_ANSWER_IP]: " ONLINE_ANSWER_USB
ONLINE_ANSWER_USB=${ONLINE_ANSWER_USB:-"$ONLINE_ANSWER_IP"}
echo "[installing] Generating SSL certificate..."
echo
openssl req -x509 -newkey rsa:2048 -nodes -days 3650 \
-keyout ./key.pem -out ./cert.pem \
-subj "/CN=$ONLINE_ANSWER_HOST" \
-addext "subjectAltName = DNS:$ONLINE_ANSWER_HOST, $ONLINE_ANSWER_IPS"
cat ./key.pem ./cert.pem > ./data/webapp.pem
rm -f ./key.pem ./cert.pem 2>/dev/null || true
echo
echo "[installing] Creating settings.ini..."
cat <<EOF > ./data/settings.ini
[license]
grd_usbkey_host=$ONLINE_ANSWER_USB
[database]
db_engine=mariadb
db_library=/usr/lib/x86_64-linux-gnu/libmariadb.so.3
db_tmp_path=/var/online_answer/
db_host=db
db_port=3306
db_base=online_answer
db_user=root
db_password=
EOF
find ./data -type d -exec chmod 777 {} +
find ./data -type f -exec chmod 666 {} +
echo "[installing] Loading images to docker..."
docker compose pull
echo
echo "[installing] Success! Run: docker compose up -d"
echo
echo "[installing] URL: https://$ONLINE_ANSWER_IP:9010"
echo "[installing] URL: https://$ONLINE_ANSWER_HOST:9010"
echo
4. Запуск контейнеров. Для Podman (rootless), в каталоге пользователя, необходимо создать файл сервиса online_answer.service для автоматического запуска:
# для docker
docker compose up -d
# для podman (rootless)
mkdir -p ~/.config/systemd/user/
nano ~/.config/systemd/user/online_answer.service
systemctl --user daemon-reload
systemctl --user enable --now online_answer.service
Файл online_answer.service
[Unit]
Description=Online Answer Podman Compose
After=network-online.target
Requires=podman.socket
After=podman.socket
[Service]
Type=simple
WorkingDirectory=/opt/online_answer
ExecStart=/usr/bin/podman compose up
ExecStop=/usr/bin/podman compose down
Restart=always
[Install]
WantedBy=default.target
Content type
Image
Digest
sha256:80026ae19…
Size
158 MB
Last updated
3 months ago
docker pull jonyrh/online_answer