Установка Sakai 11 на CentOS 7
Sakai — система сетевого и дистанционного обучения используется для поддержки учебного процесса. Большинство ресурсов системы существует в закрытом режиме: доступ к ним есть только у преподавателя курса и студентов, официально зачисленных на его курс. Получить доступ к ресурсам Sakai можно только по представлению преподавателя.
Ниже я опишу, как происходит Установка Sakai 11 на CentOS 7
Начальные данные (что необходимо для установки):
- Сервер на CentOS 7 (VPS) с отключенным SELinux и незапущенным firewalld
- Домен site.ru
- Root права на сервере
Приступим
1. Базовые операции
Обновление пакетов
[root@sakai ~]# yum update
Установка нужных для работы htop nano wget curl epel-release (для Fail2ban)
[root@sakai ~]# yum install htop nano wget curl epel-release
Установка и настройка Fail2ban
[root@sakai ~]# yum install fail2ban
Настройка правил блокировки
Откроем в редакторе файл с правилами (он может не существовать и будет создан)
nano /etc/fail2ban/jail.local
Впишем следующее:
[DEFAULT] bantime = 3600 ignoreip = 127.0.0.1/8 maxretry = 3 [sshd] enabled = true
Данными параметрами мы устанавливаем:
- время блокировки равное 3600 секунд
- добавляем в исключения локальный адрес
- устанавливаем порог блокировки равным 3
- включаем правила блокировки для SSH
Для сохранения файла, нажмите Ctrl + X и потом Y для подтверждения сохранения
Запуск Fail2ban и добавление в автозапуск
[root@sakai ~]# systemctl start fail2ban [root@sakai ~]# systemctl enable fail2ban
При выполнении второй команды в ответ консоль выведет
Created symlink from /etc/systemd/system/multi-user.target.wants/fail2ban.service to /usr/lib/systemd/system/fail2ban.service.
что сообщает о том, что fail2ban успешно добавлен в автозапуск
Установка Java и Tomcat
Sakai написан на Java и будет запускаться сервером Tomcat, установим их.
Установка Java
Для установки необходимо выполнить следующую команду:
[root@sakai ~]# yum install java-1.8.0-openjdk-devel
После установки проверим корректность установки Java, запросив его версию.
[root@sakai ~]# java -version
В результате будет показано следующее:
openjdk version "1.8.0_151" OpenJDK Runtime Environment (build 1.8.0_151-b12) OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)
Если был показан аналогичный результат (могут отличаться версии), то значит Java успешно установлен.
Установка Tomcat
После установки Java установим сам Tomcat
Tomcat поставляемый в репозиториях непригоден для Sakai, поэтому он будет установлен не из репозитория
Добавим группу tomcat
[root@sakai ~]# groupadd tomcat
Добавим пользователя tomcat и запретим ему вход на сервер
[root@sakai ~]# useradd -M -s /bin/nologin -g tomcat -d /opt/tomcat tomcat
Перейдем в домашнюю директорию нашего пользователя (/root)
[root@sakai ~]# cd ~
Загрузим последнюю версию Tomcat (в данный момент это 8.5.24)
[root@sakai ~]# wget http://apache-mirror.rbc.ru/pub/apache/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz
Создадим директорию, куда будет установлен tomcat
[root@sakai ~]# mkdir /opt/tomcat
Распакуем архив с Tomcat в /opt/tomcat
[root@sakai ~]# tar xvf apache-tomcat-8*tar.gz -C /opt/tomcat --strip-components=1
Сделаем владельцем директории с Tomcat пользователя tomcat
[root@sakai ~]# chown -R tomcat:tomcat /opt/tomcat
Перейдем в /opt/tomcat
[root@sakai ~]# cd /opt/tomcat
Установим права доступа к директории conf и файлам в ней
[root@sakai tomcat]# chmod g+rwx conf [root@sakai tomcat]# chmod g+r conf/*
Теперь надо запустить Tomcat, при установке из архива не поставляется юнит для запуска, но его напишем сами
Откроем файл в редакторе
[root@sakai tomcat]# nano /etc/systemd/system/tomcat.service
Запишем в него
# Systemd unit file for tomcat [Unit] Description=Apache Tomcat Web Application Container After=syslog.target network.target [Service] Type=forking Environment=JAVA_HOME=/usr/lib/jvm/jre Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/opt/tomcat Environment=CATALINA_BASE=/opt/tomcat Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC' Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom' ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/bin/kill -15 $MAINPID User=tomcat Group=tomcat [Install] WantedBy=multi-user.target
Перезагрузим список юнитов
[root@sakai tomcat]# systemctl daemon-reload
Запустим Tomcat
[root@sakai tomcat]# systemctl start tomcat
Проверим статус запуска
[root@sakai tomcat]# systemctl status tomcat
Последняя команда должна выдать подобный вывод:
● tomcat.service - Apache Tomcat Web Application Container Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: disabled) Active: active (running) since Вт 2018-01-09 12:14:21 MSK; 5s ago Process: 3930 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS) Main PID: 3937 (java) CGroup: /system.slice/tomcat.service └─3937 java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Djava.security.egd=file:/... янв 09 12:14:21 sakai.rpa-mu.ru systemd[1]: Starting Apache Tomcat Web Application Container... янв 09 12:14:21 sakai.rpa-mu.ru systemd[1]: Started Apache Tomcat Web Application Container.
Добавим Tomcat в автозагрузку
[root@sakai tomcat]# systemctl enable tomcat
В результате должен быть показан подобный вывод:
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /etc/systemd/system/tomcat.service.
На этом начальная настройка Tomcat завершена.
Установка MySQL (MariaDB)
Для работы Sakai требуется сервер баз данных, будет использован MySQL, а точнее его форк MariaDB
Установка MariaDB
[root@sakai tomcat]# yum install mariadb-server
Первый запуск MariaDB
[root@sakai tomcat]# systemctl start mariadb
Добавим в автозагрузку
[root@sakai tomcat]# systemctl enable mariadb
Смена пароля root mysql
Теперь нужно установить пароль для пользователя root, войдем в консоль mysql
[root@sakai tomcat]# mysql
Переключимся на базу данных mysql
MariaDB [(none)]> use mysql;
Установим пароль для пользователя root равным 12345 (для примера)
MariaDB [(none)]> UPDATE user SET Password = PASSWORD('12345') WHERE User = 'root';Никогда не ставьте простые пароли, используйте пароли не менее 10 символов длиной
Создание базы данных и пользователя для Sakai
Сразу подготовим базу данных и пользователя для Sakai
Создадим саму базу данных
MariaDB [mysql]> CREATE DATABASE `sakai` CHARACTER SET utf8;
Создадим пользователя sakai с паролем 12345 и дадим ему все права на базу данных sakai
MariaDB [mysql]> grant all on sakai.* to 'sakai'@'localhost' identified by '12345';
Сбросим кеш привилегий
MariaDB [mysql]> flush privileges;
Базовая настройка сервера баз данных
Откроем файл конфигурации в редакторе
[root@sakai tomcat]# nano /etc/my.cnf
Добавим в него следующие строки в секцию [mysqld]
bind-address = 127.0.0.1 innodb_file_per_table = 1 innodb_flush_method = O_DIRECT innodb_buffer_pool_size = 4096M innodb_flush_log_at_trx_commit = 2 transaction-isolation = READ-COMMITTED query_cache_size = 32M join_buffer_size = 1M tmp_table_size = 256M max_heap_table_size = 256M thread_cache_size = 4 table_open_cache = 1000 max_allowed_packet = 512M wait_timeout = 10000
Сохраним файл и перезагрузим сервер MySQL
[root@sakai tomcat]# systemctl restart mariadb
Установка Sakai
Для того, чтобы Sakai заработал, требуется дополнительно подготовить Tomcat, а также загрузить сам Sakai
Сначала донастроим Tomcat
Дополнительная настройка Tomcat
Sakai требуются особые параметры запуска Tomcat, которые передаются через файл /opt/tomcat/bin/setenv.sh
Т.к. мы уже находимся в директории /opt/tomcat, то пути будут использованы относительно ее.
Откроем файл в редакторе
[root@sakai tomcat]# nano bin/setenv.sh
Запишем в него следующее:
export JAVA_OPTS="-server -Xmx1028m -XX:MaxMetaspaceSize=512m -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -Djava.awt.headless=true -Dcom.sun.management.jmxremote -Dhttp.agent=Sakai -Djava.util.Arrays.useLegacyMergeSort=true -Dsakai.home=/path/to/desired/sakai/home/"
Сохраним файл
Разрешим выполнение файла
[root@sakai tomcat]# chmod +x bin/setenv.sh
Удалим стандартные приложения (они нам не нужны)
[root@sakai tomcat]# rm -rf webapps/*
Исключим некоторые файлы, для ускорения запуска.
Откроем файл в редакторе
[root@sakai tomcat]# nano conf/context.xml
Добавим в секцию Context (после ) следующее:
<JarScanner> <!-- This is to speedup startup so that tomcat doesn't scan as much --> <JarScanFilter defaultPluggabilityScan="false" defaultTldScan="false" tldScan="jsf-impl-*.jar,jsf-widgets-*.jar,myfaces-impl-*.jar,pluto-taglib-*.jar,sakai-sections-app-util-*.jar,spring-webmvc-*.jar,standard-*.jar,tomahawk*.jar,tomahawk-*.jar"/> </JarScanner>
Сохраним файл
В целях безопасности сделаем Tomcat доступным только с localhost:
Откроем файл
[root@sakai tomcat]# nano conf/server.xml
И строки
<Connector port="8080" protocol="HTTP/1.1"
заменим на
<Connector port="8080" address="127.0.0.1" protocol="HTTP/1.1"
и для второй строки
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
на
<Connector port="8009" address="127.0.0.1" protocol="AJP/1.3" redirectPort="8443" />
Сохраним файл и перезагрузим Tomcat
[root@sakai tomcat]# systemctl restart tomcat
Установка самого Sakai
После предварительной подготовки сервера, установка Sakai сводится к копированию файлов.
Загрузим последнюю версию Sakai
[root@sakai tomcat]# wget http://source.sakaiproject.org/release/11.4/artifacts/sakai-bin-11.4.tar.gz
Распакуем архив с Sakai
[root@sakai tomcat]# tar xvf sakai-bin-11.4.tar.gz
Удалим ненужный архив
[root@sakai tomcat]# rm sakai-bin-11.4.tar.gz
Изменим права на директорию
[root@sakai tomcat]# chown -R tomcat:tomcat /opt/tomcat/
Создадим директорию sakai, в которой будет храниться файл конфигурации Sakai
[root@sakai tomcat]# mkdir sakai
Изменим права на нее
[root@sakai tomcat]# chown tomcat:tomcat sakai
Создадим файл конфигурации Sakai:
[root@sakai tomcat]# nano sakai/sakai.properties
Впишите в него следующие строки:
serverName=
site.ru
serverNameAliases=www.
site.ru
serverUrl=http://localhost:8080/ username@javax.sql.BaseDataSource=
sakai
password@javax.sql.BaseDataSource=
12345
vendor@org.sakaiproject.db.api.SqlService=mysql driverClassName@javax.sql.BaseDataSource=com.mysql.jdbc.Driver hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect url@javax.sql.BaseDataSource=jdbc:mysql://127.0.0.1:3306/
sakai
?useUnicode=true&characterEncoding=UTF-8 validationQuery@javax.sql.BaseDataSource=select 1 from DUAL defaultTransactionIsolationString@javax.sql.BaseDataSource=TRANSACTION_READ_COMMITTED
Где жирным шрифтом выделены адрес сайта, логин, пароль и имя базы данных
Сохраним файл
Загрузим MySQL Connector для Java
[root@sakai tomcat]# wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.45.tar.gz
Распакуем архив
[root@sakai tomcat]# tar xvf mysql-connector-java-5.1.45.tar.gz
Скопируем коннектор в директорию lib
[root@sakai tomcat]# cp mysql-connector-java-5.1.45/mysql-connector-java-5.1.45-bin.jar lib/
и изменим права на него
[root@sakai tomcat]# chmod 750 lib/mysql-connector-java-5.1.45-bin.jar
Удалим архив
[root@sakai tomcat]# rm mysql-connector-java-5.1.45.tar.gz
Теперь перезапустим Tomcat, для инициализации и запуска Sakai. Первый запуск Sakai может быть в около минуты.
[root@sakai tomcat]# systemctl restart tomcat
Установка nginx
Т.к. Tomcat будет доступен только с localhost, установим nginx, который будет проксировать все запросы на Tomcat, а также принимать SSL соединения
Установка nginx
[root@sakai tomcat]# yum install nginx
Запуск
[root@sakai tomcat]# systemctl start nginx
Добавление в автозапуск
[root@sakai tomcat]# systemctl enable nginx
Откроем файл /etc/nginx/conf.d/sakai.conf в редакторе
[root@sakai tomcat]# nano /etc/nginx/conf.d/sakai.conf
И запишем в него
server { listen 80; server_name
site.ru www.site.ru
; location / { proxy_pass http://localhost:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /.well-known/acme-challenge { root /usr/share/nginx/html; } }
Где выделенные участки замените на адрес вашего сайта.
Сохраним файл.
Перезапустим nginx, чтобы сайт стал доступен.
[root@sakai tomcat]# systemctl restart nginx
Сразу подготовим все для SSL, будет использован SSL сертификат от LetsEncrypt
Создадим файл dhparam.pem
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Установим необходимые инструменты
yum -y install git bc
Загрузим letsencrypt
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
Перейдем в директорию с LetsEncrypt
cd /opt/letsencrypt
Запросим сертификат
./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d
site.ru
Где выделенное замените на адрес сайта.
В процессе запроса сертификата у вас запросят E-mail (куда будут поступать информационные сообщения), а также публиковать ли данные о вашем сертификате (в анонимном реестре)
В результате вы должны увидеть подобный вывод:
Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/sakai.rpa-mu.ru/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/sakai.rpa-mu.ru/privkey.pem Your cert will expire on 2018-04-09. To obtain a new or tweaked version of this certificate in the future, simply run letsencrypt-auto again. To non-interactively renew *all* of your certificates, run "letsencrypt-auto renew" - If you like Certbot, please consider supporting our work by:
Изменим файл конфигурации nginx, для SSL
Откроем файл /etc/nginx/conf.d/sakai.conf в редакторе
[root@sakai tomcat]# nano /etc/nginx/conf.d/sakai.conf
И заменим содержимое на
server { listen 80; server_name
site.ru www.site.ru
; ## Uncomment to redirect from http to https #return 301 https://
site.ru
$request_uri; location / { proxy_pass http://localhost:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /.well-known/acme-challenge { root /usr/share/nginx/html; } } server { listen 443 ssl; server_name
site.ru www.site.ru
; ssl_certificate /etc/letsencrypt/live/
site.ru
/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/
site.ru
/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_stapling on; ssl_stapling_verify on; add_header Strict-Transport-Security max-age=15768000; location / { proxy_pass http://localhost:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /.well-known/acme-challenge { root /usr/share/nginx/html; allow all; } }
Выделенные участки замените на адрес своего сайта.
Также, если необходим редирект с http на https, то раскомментируйте (уберите #) строку
#return 301 https...;
Перезапустим nginx:
[root@sakai tomcat]# systemctl restart nginx
Настройка firewalld
Запустим firewalld, если он не запущен
[root@sakai tomcat]# systemctl start firewalld
Добавим его в автозагрузку
[root@sakai tomcat]# systemctl enable firewalld
Разрешим доступ извне по HTTP (80 порт)
[root@sakai tomcat]# firewall-cmd --zone=public --permanent --add-service=http
Разрешим доступ извне по HTTPS (443 порт)
[root@sakai tomcat]# firewall-cmd --zone=public --permanent --add-service=https
Перезапустим firewalld
[root@sakai tomcat]# firewall-cmd --reload
Sakai доступен по адресу: http://site.ru/portal/
Источники информации:
Официальная инструкция по установке Sakai (по ней Sakai не заработал)