Запуск RemoteApp в Docker контейнере

Установите пакеты Docker и Docker-compose в соответствии с документацией к вашему дистрибутиву.

  1. Создайте произвольную директорию, например, remoteapp:

    mkdir remoteapp
    
  2. В ней создайте три файла:

    Dockerfile с содержимым:

    FROM debian:10
    
    RUN apt-get update -y ; apt-get upgrade -y
    RUN apt-get install -y apache2 --no-install-recommends; apt-get install -y libapache2-mod-wsgi-py3 --no-install-recommends; apt-get install -y mariadb-client --no-install-recommends
    RUN a2enmod wsgi
    
    RUN cd /usr/local/bin ; ln -s /usr/bin/python3 python
    
    # Need to get up to date pip
    RUN apt-get install -y wget --no-install-recommends
    RUN adduser --system --group --disabled-login aos
    RUN apt-get update -y ; apt-get upgrade -y
    RUN apt-get install -y python3-pip --no-install-recommends
    RUN wget -O get-pip.py 'https://bootstrap.pypa.io/get-pip.py' ; python get-pip.py --disable-pip-version-check --no-cache-dir
    # pip should be now pip3
    RUN pip --version ; rm -f get-pip.py
    
    # Install remoteapp
    ENV PIP_INDEX_URL="http://pypi.accentos.ru/simple/"
    ENV PIP_TRUSTED_HOST="pypi.accentos.ru"
    ARG CLOUD_IP
    ARG CLOUD_DOMAIN
    ARG CLOUD_USER
    ARG CLOUD_PASSWORD
    ARG CLOUD_API
    RUN pip3 install remoteapp
    RUN mkdir -p /etc/remoteapp /var/log/remoteapp/ /var/lib/remoteapp/
    RUN chown -R aos:aos /var/log/remoteapp/ /etc/remoteapp /var/lib/remoteapp/ /usr/local/lib/python3.7/dist-packages/remoteapp/
    RUN remoteapp-configure
    RUN sed -i "s/cloud_url = localhost/cloud_url = $CLOUD_IP/g" /etc/remoteapp/remoteapp.conf
    RUN sed -i "s/127.0.0.1/$CLOUD_API/g" /etc/remoteapp/remoteapp.conf
    RUN sed -i "s/localhost:3306/ra_db:3306/g" /etc/remoteapp/remoteapp.conf
    
    # Config
    RUN ln -s /etc/apache2/conf-available/remoteapp-web.conf /etc/apache2/conf-enabled/remoteapp-web.conf
    
    RUN rm -rf /etc/apache2/sites-available/000-default.conf
    RUN rm -rf /etc/apache2/sites-enabled/000-default.conf
    
    EXPOSE 8080
    
    RUN apt-get clean
    
    # Prep for init setup
    COPY entrypoint.sh /usr/bin
    RUN chmod +x usr/bin/entrypoint.sh
    

    docker-compose.yaml с содержимым:

    version: '3'
    
    services:
    
      ra_db:
        image: mariadb:10.5
        container_name: ra_db
        environment:
          MYSQL_ROOT_PASSWORD: 123456
          MYSQL_DATABASE: remoteapp
          MYSQL_USER: aos
          MYSQL_PASSWORD: password
        restart: on-failure
        ports:
         - "3306:3306"
        networks:
         -  "important_network"
    
      ra_api:
        build:
          context: .
          dockerfile: Dockerfile
          args:
            CLOUD_IP: IP
            CLOUD_DOMAIN: DOMAIN
            CLOUD_USER: USER
            CLOUD_PASSWORD: PASSWORD
            CLOUD_API: localhost
        depends_on:
         - "ra_db"
        command: /usr/bin/entrypoint.sh
        image: remoteapp/ra_api:latest
        container_name: ra_api
        ports:
          - "8001:8001"
        restart: on-failure
        networks:
         -  "important_network"
    
    networks:
      important_network:
        driver: bridge
    

    и entrypoint.sh с содержимым:

    #!/bin/bash
    
    sleep 10
    FLASK_APP=remoteapp.cloudapi.app flask db upgrade
    /usr/local/bin/gunicorn --bind=0.0.0.0:8001 --user aos --group aos --workers=3 --threads=10 remoteapp.cloudapi.wsgi &
    ra-client create type ipaddr=10.40.12.5 domain=default user=admin password=cobbler type=mstsc template=default ext=rdp os_type=appv
    ra-client create pub ipaddr=10.40.12.5 domain=default user=admin password=cobbler type=win configure=default ext=reg
    exec /usr/sbin/apachectl -DFOREGROUND
    

    В файле docker-compose.yaml заполните необходимые аргументы:

    • CLOUD_IP: - IP-адрес облака, с которым будет работать RemoteApp. Например, 10.40.50.60;
    • CLOUD_DOMAIN: - имя домена для авторизации в облаке. Например, default;
    • CLOUD_USER: - имя пользователя для авторизации в облаке. Например, admin;
    • CLOUD_PASSWORD: - пароль для пользователя, указанного в CLOUD_USER. Например, password;
    • CLOUD_API: - IP-адрес, где запущен контейнер c remoteapp api. Например, 10.60.50.40.
  3. Для создания образа для запуска контейнера в папке, в которой были созданы файлы на шаге 2, выполните:

    sudo docker-compose build
    
  4. Для старта контейнера с RemoteApp выполните:

    sudo docker-compose up -d
    
  5. После успешного старта интерфейс RemotApp будет доступен по адресу http://HOST_IP:8080, где HOST_IP – IP-адрес хоста, на котором выполнялся запуск контейнеров.