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: - Добавляем новый домен (например, ${YOURDOMAIN2}) как новый VirtualHost или добавляем его к существующей записи VirtualHost, используя директиву Апачи "ServerAlias".
- Вводим новый сайт в конфигурацию сайтов 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