Пошаговое руководство по установке и запуску 1С в Docker контейнере
с учетом всех требований. Структурированное решение:
- Подготовка Docker образа
- Скрипт запуска
- Создание systemd сервисов для 1С (внутри контейнера)
- Сборка и запуск Docker контейнера
- Настройка хоста и копирование файлов
- Настройка PostgreSQL для работы с 1С
- Мониторинг процессов
- Утилиты для управления
- Docker Compose файл для удобства развертывания
(Если что, логи с ошибками ваши путеводители к истине!)
***************************************************************
1. Подготовка Docker образа
Создайте Dockerfile:
dockerfile
FROM ubuntu:22.04
# Установка локалей
RUN apt-get update && apt-get install -y locales && \
locale-gen ru_RU.CP1251 && \
locale-gen ru_RU.UTF-8 && \
locale-gen en_US.UTF-8 && \
update-locale LANG=ru_RU.UTF8
# Установка зависимостей
RUN echo "deb http://cz.archive.ubuntu.com/ubuntu focal main universe" >> /etc/apt/sources.list && \
apt-get update && \
apt-get install -y \
libenchant1c2a \
imagemagick \
unixodbc \
ttf-mscorefonts-installer \
fontconfig \
libgsf-1-114 \
mc \
p7zip-full \
elinks \
wget \
curl \
iputils-ping \
net-tools \
&& apt-get clean
# Создание пользователей
RUN useradd -m -s /bin/bash usr1cv8 && \
echo "root:Admin1234!" | chpasswd
# Создание структуры каталогов
RUN mkdir -p /opt/1cv8/x86_64 && \
chown -R usr1cv8:usr1cv8 /opt/1cv8
# Установка PostgreSQL (Postgres Pro 1C)
RUN wget https://repo.postgrespro.ru/pg1c-13/keys/pgpro-repo-add.sh && \
sh pgpro-repo-add.sh && \
apt-get install -y postgrespro-1c-13
# Инициализация PostgreSQL с правильной локалью
RUN service postgrespro-1c-13 stop && \
rm -rf /var/lib/pgpro/1c-13/data/* && \
su postgres -c "/opt/pgpro/1c-13/bin/initdb -D /var/lib/pgpro/1c-13/data --locale=ru_RU.UTF-8" && \
service postgrespro-1c-13 start
# Скрипт для запуска 1С без демона
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
EXPOSE 1540 1541 1560-1591
ENTRYPOINT ["/entrypoint.sh"]
2. Скрипт запуска entrypoint.sh
bash
#!/bin/bash
# Функция для обработки сигналов
trap 'echo "Получен сигнал, останавливаем процессы..." && kill $(jobs -p) && exit 0' SIGTERM SIGINT
# Запуск PostgreSQL
service postgrespro-1c-13 start
# Установка пароля для PostgreSQL
su postgres -c "psql -c \"ALTER USER postgres WITH PASSWORD 'Admin1234!';\""
# Запуск 1С сервера (без демона - в foreground)
su - usr1cv8 -c "/opt/1cv8/x86_64/8.3.23.1688/ragent -port 1540 -regport 1541 -range 1560:1591" &
RAGENT_PID=$!
# Запуск менеджера кластера
su - usr1cv8 -c "/opt/1cv8/x86_64/8.3.23.1688/ras cluster --daemon" &
RAS_PID=$!
# Проверка запущенных процессов
echo "Проверка запущенных процессов:"
ps aux | grep -E "(ragent|rmngr|rphost|ras)"
# Бесконечный цикл для поддержания работы контейнера
while true; do
sleep 60
# Проверяем, живы ли основные процессы
if ! kill -0 $RAGENT_PID 2>/dev/null; then
echo "Процесс ragent завершился, перезапускаем..."
su - usr1cv8 -c "/opt/1cv8/x86_64/8.3.23.1688/ragent -port 1540 -regport 1541 -range 1560:1591" &
RAGENT_PID=$!
fi
done
3. Создание systemd сервисов для 1С (внутри контейнера)
Создайте файлы сервисов для управления процессами 1С:
/opt/1cv8/x86_64/8.3.23.1688/srv1cv8-8.3.23.1688@.service:
ini
[Unit]
Description=1C:Enterprise Application Server
After=network.target postgresql.service
[Service]
Type=forking
User=usr1cv8
PIDFile=/home/usr1cv8/.1cv8/1C/1cv8/pid
ExecStart=/opt/1cv8/x86_64/8.3.23.1688/ragent -daemon -port 1540 -regport 1541 -range 1560:1591
ExecStop=/bin/kill -TERM $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
/opt/1cv8/x86_64/8.3.23.1688/ras-8.3.23.1688.service:
ini
[Unit]
Description=1C:Enterprise Administration Server
After=srv1cv8-8.3.23.1688@service
[Service]
Type=forking
User=usr1cv8
ExecStart=/opt/1cv8/x86_64/8.3.23.1688/ras --daemon cluster
Restart=on-failure
[Install]
WantedBy=multi-user.target
4. Сборка и запуск Docker контейнера
bash
# Сборка образа
docker build -t 1c-server:latest .
# Создание сети
docker network create --subnet=192.168.111.0/24 1c-network
# Запуск контейнера
docker run -d \
--name ubuntu1c \
--hostname ubuntu1c \
--network 1c-network \
--ip 192.168.111.142 \
-p 1540:1540 \
-p 1541:1541 \
-p 1560-1591:1560-1591 \
-v /path/to/1c/distrib:/app \
-v 1c_data:/opt/1cv8 \
-v pg_data:/var/lib/pgpro/1c-13/data \
--restart unless-stopped \
1c-server:latest
5. Настройка хоста и копирование файлов
bash
# Добавление записей в /etc/hosts на хосте
echo "192.168.111.142 1c-ubuntu-test ubuntu1c" | sudo tee -a /etc/hosts
# Копирование дистрибутива 1С в контейнер
docker cp setup-full-8.3.23.1688-x86_64.run ubuntu1c:/app/
# Вход в контейнер
docker exec -it ubuntu1c /bin/bash
# Внутри контейнера установите 1С
cd /app
chmod +x setup-full-8.3.23.1688-x86_64.run
./setup-full-8.3.23.1688-x86_64.run --mode unattended --enable-components server,server_admin,config_storage_server --installdir /opt/1cv8
6. Настройка PostgreSQL для работы с 1С
bash
# Внутри контейнера
su postgres
psql
# В psql создайте базу для 1С
CREATE DATABASE "test_db"
WITH OWNER "postgres"
ENCODING 'UTF8'
LC_COLLATE = 'ru_RU.UTF-8'
LC_CTYPE = 'ru_RU.UTF-8'
TEMPLATE = template0;
# Настройка доступа
echo "host all all 192.168.111.0/24 md5" >> /var/lib/pgpro/1c-13/data/pg_hba.conf
echo "listen_addresses = '*'" >> /var/lib/pgpro/1c-13/data/postgresql.conf
# Перезапуск PostgreSQL
service postgrespro-1c-13 restart
7. Мониторинг процессов
bash
# Проверка запущенных процессов
docker exec ubuntu1c ps aux | grep -E "(ragent|rmngr|rphost|ras|postgres)"
# Просмотр логов
docker logs ubuntu1c -f
# Проверка доступности портов
netstat -tlnp | grep -E "(1540|1541)"
8. Утилиты для управления
check_1c_processes.sh:
bash
#!/bin/bash
# Скрипт для проверки процессов 1С
PROCESSES=("ragent" "rmngr" "rphost" "ras")
for proc in "${PROCESSES[@]}"; do
if pgrep -x "$proc" > /dev/null; then
echo "✓ Процесс $proc запущен"
else
echo "✗ Процесс $proc не запущен"
fi
done
9. Docker Compose файл для удобства развертывания
yaml
version: '3.8'
services:
1c-server:
build: .
container_name: ubuntu1c
hostname: ubuntu1c
networks:
1c-net:
ipv4_address: 192.168.111.142
ports:
- "1540:1540"
- "1541:1541"
- "1560-1591:1560-1591"
volumes:
- 1c_data:/opt/1cv8
- pg_data:/var/lib/pgpro
- ./distrib:/app
restart: unless-stopped
environment:
- POSTGRES_PASSWORD=Admin1234!
- TZ=Europe/Moscow
networks:
1c-net:
driver: bridge
ipam:
config:
- subnet: 192.168.111.0/24
volumes:
1c_data:
pg_data:
Ключевые особенности решения:
- Отсутствие демона - процессы запускаются в foreground через скрипт entrypoint
- Защита от завершения - бесконечный цикл в entrypoint.sh
- Контроль процессов - проверка состояния всех компонентов 1С
- Настройка сети - статические IP для удобства подключения
- Поддержка PostgreSQL - правильная локали и настройки
- Восстановление после сбоев - автоматический перезапуск процессов
Для запуска используйте:
bash
docker-compose up -d
docker exec -it ubuntu1c bash
Это решение обеспечивает стабильную работу 1С сервера в Docker контейнере с защитой от случайного завершения и контролем всех необходимых процессов.