OpenCMS

24.07.07
Последнее изменение 09.07.2018
Иванов Аркадий

 

    В качестве системы управления контентом я использовал раньше OpenCMS - www.opencms.org. Эта система максимально полно использует инструментарий Java, сервер приложений. Поэтому заметки по этой системе  я разместил в разделе о Java. Этот документ просто содержит мои заметки по освоению OpenCMS. За подробной документацией обращайтесь непосредственно к этой CMS. С моей точки зрения это исключительно мощный инструмент для управления сайтом. Те программеры, кому нравится Java, JSP, может быть получат удовольствие от этой системы, поскольку она легко перепрограммируется. Обычных юзеров - редакторов сайта виртуальная файловая система  и WYSIWYG редактор ограждает от мучительных подробностей HTML, файловой системы сервера, что круто облегчает жизнь сисадмина, поддерживающего сайт.

В 2018 году замечу, что разработчики наконец-то добились интуитивно непонятного интерфейса для работы с системой. Она стала реально жрать время пользователя, а не помогать и я ушёл на Liferay.

Итак. Тут просто заметки для самого себя (типа блог :-))), а не документация.

  • Настройка SMTP-сервера, E-mail адреса для формы обратной связи делается в файле WEB-INF/config/opencms-system.xml 
      
  • Настройка дополнительных поддерживаемых локализаций (<locale>ru</locale>) делается в файлах:
    • WEB-INF/config/opencms-system.xml
    • WEB-INF/config/opencms-workplace.xml
    • WEB-INF/config/opencms-search.xml 
       
  •  В server.xml убрать ограничение на размер POST (по умолчанию 2Mb). В раздел Connector добавить: 
    maxPostSize="0". Иначе редактор ломается на загрузке больших документов. 
     
  • Замена обработчика ошибки 404 (Document not found) делается заменой файла: 
    webapps/opencms/WEB-INF/jsp/online/system/handler/handle404.html.jsp 
    После внесения изменений сервер приложений надо перезапустить. 
     
  • Если глюки с показом изображений (нарвался в 7.0.0), скорее всего "static export on demand" не отработал. 
    Лечится статическим экспортом в режиме "Администрирование", "Database management". 
    После этой процедуры ручками вычищаем <opencms>/export/system и templateone, иначе визуальные глюки на "Рабочем столе". 
    (М.б. у меня что-то не срослось с пробросом через Apache). 
     
  • Как избавиться от /opencms/opencms префикса. Это перевод статьи Sebastian Humberger с некоторыми замечаниями и поправками от меня лично. 

    Что получаете в результате 
    • Динамический контент обслуживается через запросы к http://www.yourdomain.com
    • Статический контент обслуживается через http://www.yourdomain.com/export (ни фига со статикой пока не получается).
    • Вы можете использовать несколько алиасов для названия хоста и обслуживать несколько сайтов, поддерживаемых в OpenCMS, например: 
      http://www.yourdomain1.com 
      http://www.yourdomain2.com 
       
    В каком окружении работало 
    • Apache Tomcat 6.0.16
    • Sun JDK 1.6.02
    • Apache HTTPD 2.2.4 (mod_rewrite, mod_jk 1.2.26)
    • Linux (Alt Linux Server 4.0.1)
    • OpenCMS 7.0.0 
       
    Обозначения 
    • ${WEBAPP_HOME}: путь к домашнему каталогу WEB-приложений, ( .../apache-tomcat/webapps )
    • ${WEBAPP_NAME}: название WEB-приложения, которое вы использовали для OpenCMS, ( opencms )
    • ${YOURDOMAIN}: доменное имя, которое вы использовали для OpenCMS ( yoursite.ru ) 
       
    Шаг 1: Конфигурирование OpenCMS: 
    • Установите OpenCMS с помощью обычной процедуры установки с помошнком установки. После перезапуска Tomcat-а, зарегистрируйтесь на рабочем месте Администратором (Admin) и откройте "/system/workplace/top_js.jsp". Найдите строку, начинающуюся с "this.servpath=" и замените значение на: 

      this.servpath="<%= OpenCms.getStaticExportManager().getVfsPrefix() %>"; 

      также в этом же файле добавьте в импортируемые пакеты org.opencms.main.*
    • Разрегистрируйтесь на Рабочем месте, откройте "WEB-INF/config/opencms-importexport.xml. Найдите следующие настройки: 

      <rfs-prefix>${CONTEXT_NAME}/export</rfs-prefix> 
      <vfs-prefix>${CONTEXT_NAME}${SERVLET_NAME}</vfs-prefix> 
       
    • Замените их на: 

      <rfs-prefix>/export</rfs-prefix> 
      <vfs-prefix></vfs-prefix> 
       
    • Сохраните файл и остановите Tomcat.

    Шаг 2: Конфигурирование Tomcat: 
    • Откройте "server.xml" и посмотрите на настройки AJP-коннектора. Измените настройки на следующее: 
      <Connector port="8009" emptySessionPath="true" enableLookups="false" protocol="AJP/1.3"  /> 
       
    • Сохраните файл и запустите Tomcat.
    Шаг 3: Конфигурирование Apache HTTPD 
    • Предполагается, что Апача уже сконфигурирована для загрузки модулей mod_rewrite и mod_jk.
    • Файл workers.properties должен лежать в каталоге с конфигами Апачи (у меня это каталог /etc/httpd2/conf) и иметь следующее содержание: 
        
      workers.tomcat_home=//usr/local/apache-tomcat 
      workers.java_home=/usr/local/jdk 
      ps=/ 
      worker.list=ocms 
      worker.ocms.type=ajp13 
      worker.ocms.host=localhost 
      worker.ocms.port=8009 
      worker.ocms.lbfactor=1 

      Вместо "ocms" можно использовать любое другое название, но тогда вам надо изменить его соответсвенно и в последующих секциях этого файла. 
      Настройки в "workers.properties" используются для того, чтобы связать вашу Апачу и Tomcat, но вам надо ещё кое-что изменить в конфигах Апачи. Вставьте следующие 
      строки в httpd.conf  (после секции LoadModule). Замечу, что я лично запихал эти строки в файл с описанием виртуального хоста для OpenCMS. 
        
      Load mod_jk module 
      LoadModule    jk_module  /usr/lib/apache2/modules/mod_jk.so 
      # Where to find workers.properties 
      JkWorkersFile /etc/httpd2/conf/workers.properties 
      # Where to put jk logs 
      JkLogFile     /var/log/httpd2/mod_jk_log 
      # Set the jk log level [debug/error/info] 
      JkLogLevel    info 
      # Select the log format 
      JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " 
      JkOptions     +ForwardKeySize +ForwardURICompat 
      # JkRequestLogFormat set the request format 
      JkRequestLogFormat     "%w %V %T" 

      Определяем виртуальные хосты:

    • Здесь вы уже почти завершили основное конфигурирование. Последний шаг - соединить запросы к вашему домену с OpenCMS-Webapp. Ниже приводятся настройки для виртуального хоста: 
        
      <VirtualHost xxx.xxx.xxx.xxx> 
       ServerName www.yourdomain 
       DocumentRoot "${WEBAPP_HOME}/$WEBAPP_NAME}" 
       JkMount /* ocms 

      # If the requested URI is located in the resources folder, do not forward the request 
       SetEnvIfNoCase Request_URI ^/opencms/resources/.*$ no-jk 

      # If the requested URI is static content do not forward the request 
       SetEnvIfNoCase Request_URI ^/export/.*$ no-jk 

       RewriteEngine on 

      # If the requested URI is NOT located in the resources folder. 
      # Prepend an /${WEBAPP_NAME}/opencms to everything that does not already starts with it 
      # and force the result to be handled by the next URI-handler ([PT]) (JkMount in this case) 

       RewriteCond %{REQUEST_URI} !^/opencms/resources/.*$ 
       RewriteCond %{REQUEST_URI} !^/export/.*$ 
       RewriteRule !^/opencms/opencms/(.*)$ /opencms/opencms%{REQUEST_URI} [PT] 

      # These are the settings for static export. If the requested resource is not already 
      # statically exported create a new request to the opencms404 handler. This has to be 
      # a new request, because the current would net get through mod_jk because of the "no-jk" var. 

       RewriteCond %{REQUEST_URI} ^/export/.*$ 
       RewriteCond "%{DOCUMENT_ROOT}%{REQUEST_FILENAME}" !-f 
       RewriteCond "%{DOCUMENT_ROOT}%{REQUEST_FILENAME}/index_export.html" !-f 
       RewriteRule .* /opencms/opencms/handle404?exporturi=%{REQUEST_URI}&%{QUERY_STRING} [P] 

      # If the request starts with /${WEBAPP_NAME}/resources, delete the /${WEBAPP_NAME} prefix 
       RewriteCond %{REQUEST_URI} ^/opencms/resources/.*$ 
       RewriteRule ^/opencms/(.*)$ /$1 
      </VirtualHost>
    • Что ж, всё сделано. Перезапускайте Апачу. 


       
    Приложение: Конфигурация для мульти-сайтов. 
       

    Одним из приятных свойств mod_jk в отличие от mod_proxy, является то, что запрос передаётся в Tomcat по AJP-протоколу. Это даёт Tomcat-у доступ к данным оригинального HTTP-запроса, полученного Апачей, т.е., возможность прочитать заголовок "HTTP_HOST". OpenCMS использует этот заголовок, чтобы определить, какой сайт запросил пользователь. Таким образом легко добавить новый сайт в OpenCMS: 
    1. Добавляем новый домен (например, ${YOURDOMAIN2}) как новый VirtualHost или добавляем его к существующей записи VirtualHost, используя директиву Апачи "ServerAlias".
    2. Вводим новый сайт в конфигурацию сайтов OpenCms, добавляя запись: 
      "<site server="http://www.$(YOURDOMAIN2}" uri="/sites/${YOURDOMAIN2}/"/> 

       
    Пример конфигурации мульти-сайтов (OpenCms: opencms-system.xml) 

       <sites> 
          <workplace-server>http://opencms.mydomain.ru</workplace-server> 
          <default-uri>/sites/default/</default-uri> 
          <site server="http://opencms.mydomain.ru" uri="/sites/default/"></site> 
          <site server="http://www.mydomain.ru" uri="/sites/www/"></site> 
          <site server="http://foto.mydomain.ru" uri="/sites/foto/"></site> 
        </sites> 

    Пример конфигурации мульти-сайтов (Apache HTTPD: vhosts.conf) 
      
    <VirtualHost xxx.xxx.xxx.xxx:80> 
    .... 
     ServerName opencms.mydomain.ru 
     ServerAlias www.mydomain.ru foto.mydomain.ru opencms.mydomain.ru 
    .... 
    </VirtualHost> 
    Не забудьте вставить в DNS соответствующие записи.
  • Мультиязычные сайты. Делается так: 
    - В конфигах вручную добавляем нужные локали ("ru",...). Перезапускаем сервер. 
    - В корне сайта создаются каталоги "ru", "en", ... 
    - Для каталога "ru" устанавливаем в свойствах locale "ru", для каталога "en" локаль "en". 
    - Документ создаём только в одном каталоге, например "ru".  При редактировании создаём все (или необходимые) локализованные варианты текста, переключая локаль в редакторе. 
      Т.е. документ у нас будет только один. 
    - В дополнительных каталогах ("en", ...) создаём связь с данным документом. В свойствах файла связи указываем нужную локаль. Если не указать, локаль возьмётся из свойств каталога. 
    - Если в документе не будет части для какой-то локали, то будет показан текст другой локали. 
  • Добавление MIME-типа делается в config/opencms-vfs.xml. 
    Например, пришлось добавить ".rar", иначе оно отдавало тип ресурса как "text".
  • FireFox 3.7.5 + Editor bug:

    by Andreas Zahner (Mailing list) Jan 13, 2010; 08:16pm :: Rate this Message: - Use ratings to moderate (?)

    Hi,

    maybe we have a little "2010" bug here :-)
    Try to do the following to check if the editor works:

    - edit the file /system/workplace/editors/fckeditor/editor_configuration.xml

    - replace the line
       ^Mozilla/5\.0 \(.* rv:1\..*\) Gecko/200\d* .*$</agent>
       with
       ^Mozilla/5\.0 \(.*\) Gecko/20\d* .*$</agent>

    - save and publish the file

    - reinitialize the workplace or restart the servlet container