2 заметки с тегом

server

a2ensite для Nginx

Думаю многим известен a2ensite/a2dissite для включения/выключения виртуальных хостов в apache, к сожалению для nginx такого нет, хотя диретории site-enabled site-available есть (это касается только ubuntu, про другие не скажу). Эта небольшая статья призвана помочь заполнить недостающие инструменты.

Скелет скрипта я взял из своей предыдущей статьи https://softroot.ru/?go=all/pravilny-lamp-na-archlinux/
Принцип действия просто. Мы просто делаем мягкую ссылку на конфиг.

Пишем первый скрипт. Для включения.

sudo nano /usr/sbin/n2ensite
#!/bin/bash
if test -d /etc/nginx/sites-available && test -d /etc/nginx/sites-enabled  ; then
echo "-------------------------------"
else
echo "Error!! Folders /etc/nginx/sites-available & /etc/nginx/sites-enabled not fo$
exit 0
fi

avail=/etc/nginx/sites-available/$1.conf
enabled=/etc/nginx/sites-enabled

site=`ls /etc/nginx/sites-available/`

if [ "$#" != "1" ]; then
        echo "Use script: n2en site_config"
        echo -e "\nAvailable configs:\n$site"
        exit 0
else
if test -e $avail; then
sudo ln -s $avail $enabled
else
echo -e "$avail config does not exist! Please create one!\n$site"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Success!!"
echo "For test nginx config: sudo nginx -t"
echo "Now reload nginx server: sudo systemctl reload nginx"
else
echo  -e "Config $avail does not exist!\nPlease see avail configs:\n$site"
exit 0
fi
fi

Делаем скрипт исполняемым

sudo chmod +x /usr/sbin/n2ensite

Второй скрипт для выключения сайтов.

sudo nano /usr/sbin/n2dissite
#!/bin/bash
if test -d /etc/nginx/sites-available && test -d /etc/nginx/sites-enabled  ; then
echo "-------------------------------"
else
echo "Error!! Folders /etc/nginx/sites-available & etc/nginx/sites-enabled not found."
exit 0
fi

avail=/etc/nginx/sites-enabled/$1.conf
enabled=/etc/nginx/sites-enabled
site=`ls /etc/nginx/sites-enabled`

if [ "$#" != "1" ]; then
        echo "Use script: n2dissite site_config"
        echo -e "\nEnabled configs: \n$site"
        exit 0
else
if test -e $avail; then
sudo rm  $avail
else
echo -e "$avail config does not exist! Exiting"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Error!! Could not remove $avail config!"
else
echo  -e "Success! $avail has been removed!\nsudo systemctl reload nginx"
exit 0
fi
fi
fi

Делаем скрипт исполняемым

sudo chmod +x /usr/sbin/n2dissite

Для себя я для краткости именую скрипты как n2en и n2di.
На этом всё.

2017   linux   server

Ставим tomcat, настраиваем apache + jk коннектор

Предупреждение

Данный текст написан новичком в настройке tomcat да и в целом Java.

Установка

Установка достаточно простая, заходим в консоль и ставим tomcat. Надеюсь у вас стоит Java и apache? ;)

sudo pacman -Suy tomcat8 tomcat-native

Включаем сервис

systemctl enable tomcat8.service

Стартуем ...

sudo systemctl start tomcat8.service

Коннектор JK я буду ставить из aur:

yaourt -S mod_jk

На этом собственно всё. Заходим на http://localhost:8080 проверять работает ли tomcat.
Если всё в порядке, то вы должны увидеть что-то вроде этого

Настройка

Тут я напишу о простой настройке, не вникая в подробности.

По умолчанию файлы конфигурации хранятся в /etc/tomcat8/.
Первым делом настроим пользователей. А то вы наверное уже потыкали кнопочки Server Status, Manager App, а там просят какой то пароль? =)

Открываем tomcat-users.xml

sudo nano /etc/tomcat8/tomcat-users.xml

И приводи его к такому виду:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">

  <role rolename="manager-gui"/>
  <role rolename="admin-gui"/>
  <user username="tomcat" password="tomcatpswd" roles="manager-gui,admin-gui"/>
</tomcat-users>

И не забываем сменить username и password!

//Вот теперь можно пробежаться по кнопочкам Server Status, Manager App, Host Manager. Но перед этим лучше рестартонуть сервер.

sudo systemctl restart tomcat8.service

хотя пока рано. Но вдруг не терпится)//

Теперь некоторые настройки сервера. Лучше предварительно сделать бэкап файла server.xml

И заменить его содержимое следующими настройками:

sudo nano /etc/tomcat8/server.xml
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <Service name="Catalina">

    <Connector port="8487" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>

      <Host name="java.local" appBase="/mnt/raid/domains/java.local">
        <Context path="" docBase="html"/>
      </Host>

    </Engine>
  </Service>
</Server>

В этом файле я поменял порт коннектора HTTP с 8080 на 8487, т. к. 8080 достаточно популярный и часто бывает занят. Так же добавил ещё один тег Host, в котором указал путь до папки. Т. е. localhost остался, и до панели можно достучаться по адресу localhost:8487

Настроим коннектор jk.

Добавляем в файл /etc/httpd/conf/httpd.conf строчку

Include conf/extra/java-jk.conf

Теперь

LoadModule jk_module modules/mod_jk.so

к директиве LoadModule

Создадим и заполним java-jk.conf

sudo nano /etc/httpd/conf/extra/java-jk.conf

Приводим к такому виду

<IfModule jk_module>
  JkWorkersFile "/etc/httpd/conf/extra/workers.properties"
  JkLogFile "/var/log/tomcat8/mod_jk.log"
  JkLogLevel info
  JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
</IfModule>

А рядом положим worker.properties

sudo nano /etc/httpd/conf/extra/workers.properties
workers.tomcat_home=/usr/share/tomcat8
workers.java_home=/usr/lib/jvm/java-8-openjdk/

# unix stile
ps=/

worker.list=ajp13

# ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1

Пока не знаю по какой причине, но jk мне выдавал ошибку (спасибо логам), что не может найти директорию log
в /etc/httpd/. Я ещё не разбирался, и просто создал требуемую директорию.

Настроим vhost у apache.

<VirtualHost java.local:80>
  ServerAdmin admin@java.local
  ServerName java.local
  DocumentRoot /mnt/raid/domains/java.local/html
  ErrorLog /mnt/raid/domains/java.local/logs/error.log
  CustomLog /mnt/raid/domains/java.local/logs/access.log common
  JkMount /* ajp13
</VirtualHost>

Пропишем имя в hosts

sudo nano /etc/hosts
127.0.0.1 java.local

И перезапускаем apache и tomcat

sudo systemctl restart httpd.service
sudo systemctl restart tomcat8.service

Размещаем в нашей директории (в моём случае /mnt/raid/domains/java.local/html) тестовый html файл с именем index.html. К примеру такой:

<html>
<head>
  <title>example static</title>
</head>
<body>
  <h2>Hello, Java!</h2>
</body>
</html>

Теперь пробуем перейти на java.local

И если всё правильно, то увидим нашу надпись.

Видим? Значит статика работает. На этом пока всё. Кстати, не стоит забывать менять пути на свои ;)