Apache (AlmaLinux 8)

Apache (AlmaLinux 8)

  • Операционна система: almalinux 8

Описание

Apache е уеб сървър с отворен код, който може да бъде инсталиран върху дистрибуция AlmaLinux 8. Той е създаден, за да обработва уеб заявки от клиентите и да доставя уеб съдържание към тях. Apache е един от най-популярните уеб сървъри в света и е предпочитан избор за уеб разработчиците и системните администратори.

Този уеб сървър може да работи с различни програмни езици, бази данни и приложения. Той поддържа множество протоколи за комуникация, като HTTP, HTTPS, FTP и други, което го прави много универсален и гъвкав уеб сървър.

Включен софтуер

Пакет Версия
Apache latest
Docker 3.20.10
Docker compose 2.12.2
containerd.io 1.6.10

Първоначално стартиране на услугата

Това приложение използва Docker, за да осигури по-бързо стартиране на прилежащия софтуер (Apache) и директно започване на употребата му. По този начин се елиминира нуждата от запознаване със спецификите му по отношение на конфигурация и инсталация. За да започнете директна работа с приложението, единственото, което трябва да направите е да качите своето съдържание, което желаете да се обслужва от Apache в директорията /opt/apache/data/. След като извършите това, можете да посетите IP адреса, който е назначен за виртуалната Ви машина в бразура си, за да видите съдържанието, което сте качили.

Забележка: По подразбиране, Apache може да се достъпи директно по IP адрес. За да започнете да използвате Apache с реалния си домейн, първо трябва да насочите въпросния домейн към IP адреса си и да промените настройките за това от къде се отваря Apache през неговия административен панел.

Бързи настройкии и често задавани въпроси

  • Входът в клауд услугата се извършва посредством SSH ключ или парола, която сте посочили.
  • Docker е инсталиран според препоръките от официалната docker документация.
  • Стандартните команди docker и docker compose са вече достъпни в това приложение.
  • При първо стартиране на виртуалната машина, отнема няколко минути, преди да се стартира Docker контейнер, съдържащ Apache.
  • Apache data се намира в /opt/apache/data/.
  • По подразбиране, Apache стартира работа върху всички налични интерфейси на машината. Портовете за достъп до Apache са 80 и 443.

Допълнителни настройки при Docker

Допълнителнителните настройки за Apache, които можете да променяте и които се контролират директно от Docker са зададени като променливи стойности в конфигурационния файл /opt/docker-apache/docker-compose.yml:

Забележка: След промяна на която и да е от стойностите, трябва да пресъздадете Docker контейнера, върху който работи приложението. За повече информация, моля, прочетете секцията за пресъздаване на Docker контейнери.

  • APACHE_HTTP_PORT_NUMBER: Вътрешен порт, използван от Apache за комуникация между docker и виртуалната машина за HTTP трафик. Не е нужно да се променя за нормалната работа, освен ако не желаете да промените начина на поведение на docker приложението. Default: 8080
  • APACHE_HTTPS_PORT_NUMBER: Вътрешен порт, използван от Apache за комуникация между docker и виртуалната машина за HTTPS трафик. Не е нужно да се променя за нормалната работа, освен ако не желаете да промените начина на поведение на docker приложението. Default: 8443

Добавяне на собствен Apache vhost към конфигурацията

Ако разполагате с няколко домейна или желаете специфична конфигурация за конкретен сайт, то разполагате с гъвкавостта да добавите свои виртуални хост конфигурации. Всички допълнителни конфигурационни файлове се зареждат в директория /vhosts в самия docker контейнер. За целта, изпълнете следните стъпки:

Стъпка 1 - създаване на файл, съдържащ конфигурацията, която желаете

Примерно съдържание на конфигурационен файл my_vhost.conf, който можете да запишете където и да е, например в /opt/apache-vhosts/my_vhost.conf:

<VirtualHost *:8080>
  ServerName www.example.com
  DocumentRoot "/app"
  <Directory "/app">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>

Моля, обърнете внимание, че този конфигурационен файл съдържа стандартни конфигурационни опции в Apache. За повече информация ви съветваме да се запознаете с официалната документация.

Стъпка 2 - включване на новия конфигурационен файл

  1. Отворете /opt/docker-apache/docker-compose.yml и добавете новия си конфигурационен файл като допълнителен docker volume, например:
---
version: '2'

services:
  apache:
    image: 'bitnami/apache:latest'
    ports:
      - '80:8080'
      - '443:8443'
    volumes:
      - /opt/apache-vhosts/my_vhost.conf:/vhosts/my_vhost.conf:ro
  1. Пресъздайте docker контейнерите си:
cd /opt/docker-apache/
docker compose stop
docker compose up -d

Промяна на пълната Apache конфигурация (http.conf)

В случай, че се наложи да направите промяна в основния httpd.conf файл, то винаги имате възможността да го презапишете със свой собствен. За целта следвайте следните стъпки:

Стъпка 1 - качете конфигурационния си файл

Можете да го качите например в /opt/apache-conf/httpd.conf

Стъпка 2 - включване на httpd.conf в конфигурацията

  1. Отворете /opt/docker-apache/docker-compose.yml и добавете новия си конфигурационен файл като допълнителен docker volume, например:
---
version: '2'

services:
  apache:
    image: 'bitnami/apache:latest'
    ports:
      - '80:8080'
      - '443:8443'
    volumes:
      - /opt/apache-conf/httpd.conf:/opt/bitnami/apache/conf/httpd.conf
  1. Пресъздайте docker контейнерите си:
cd /opt/docker-apache/
docker compose stop
docker compose up -d

SSL сертификати

Използване на собствени (платени) SSL сертификати

Ако вече разполагате с готови, валидни сертификати, трябва да направите няколко модификации върху конфигурацията, преди да можете да ги използвате. За да постигнете това, моля следвайте следните стъпки:

Стъпка 1 - поставяне на сертификатите

Създайте директория, където сертификатите ще се съхраняват:

mkdir /opt/certs/

Копирайте сертификатите в директорията, която създадохте току-що и модифицирайте техните права:

chown 1001:1001 /opt/certs/ -R

Стъпка 2 - модифицирайте Docker конфигурацията

Отворете docker конфигурационния файл /opt/docker-apache/docker-compose.yml с текстов редактор и намерете следния фрагмент:

  apache:
    image: docker.io/bitnami/apache:2.4
    ports:
      - 80:8080
      - 443:8443
    volumes:
      - '/opt/apache/data:/app'

Редактирайте го, така че да изглежда по следния начин:

  apache:
    image: docker.io/bitnami/apache:2.4
    ports:
      - 80:8080
      - 443:8443
    volumes:
      - '/opt/apache/data:/app'
      - '/opt/certs/cert.pem:/opt/bitnami/apache/conf/server.crt'
      - '/opt/certs/privkey.pem:/opt/bitnami/apache/conf/server.key'
      - '/opt/certs/ca-bundle.pem:/opt/bitnami/apache/conf/server-ca.crt'

Обърнете внимание, че /opt/certs/cert.pem е пътя до сертификата, /opt/certs/privkey.pem е пътя до частния ключ, a /opt/certs/ca-bundle.pem е CA bundle/Intermediate chain-а. Можете да именувате файловете и директоряита както пожелаете, но трябва да са посочени правилно в конфигурацията.

Стъпка 3 - рестартирайте Docker контейнерите

cd /opt/docker-apache/
docker compose up -d

Издаване на сертификати с Letsencrypt

Ако желаете, винаги можете да издадете и безплатни сертификати от Letsencrypt. За целта, моля следвайте следните стъпки:

Стъпка 1 - инсталиране на нужните пакети

Влезте в сървъра си, като добиете root права и изпълнете следните команди:

dnf install -y epel-release
dnf install -y certbot

Стъпка 2 - издаване на сертификата

Моля имайте предвид, че за да бъде издаден безплатен сертификат, то е нужно да можете да верифицирате по някакъв начин собствеността на домейна си. Letsencrypt предоставя няколко възможности за верификация на домейните ви, в този пример ще използваме верификация чрез стартиране на временен уеб сървър.

За целта, спрете временно контейнера с командата docker stop docker-apache-apache-1. Важно: Изпълнявайки тази стъпка, сайтът ви ще спре да работи временно. Уверете се, че искате да изпълните това действие във време, когато най-малко ще афектира потребителите ви.

Издайте сертификата с командата certbot certonly --standalone --preferred-challenges http -d example.com, като замените "example.com" с домейна, който сте насочили към IP адреса на Cloud сървъра си.

Стъпка 3 - поставете новите сертификати в конфигурацията

Отворете docker конфигурационния файл /opt/docker-apache/docker-compose.yml с текстов редактор и намерете следния фрагмент:

  apache:
    image: docker.io/bitnami/apache:2.4
    ports:
      - 80:8080
      - 443:8443
    volumes:
      - '/opt/apache/data:/app'

Редактирайте го, така че да изглежда по следния начин:

  apache:
    image: docker.io/bitnami/apache:2.4
    ports:
      - 80:8080
      - 443:8443
    volumes:
      - '/opt/apache/data:/app'
      - '/etc/letsencrypt/live/example.com/cert.pem:/opt/bitnami/apache/conf/server.crt'
      - '/etc/letsencrypt/live/example.com/privkey.pem:/opt/bitnami/apache/conf/server.key'
      - '/etc/letsencrypt/live/example.com/chain.pem:/opt/bitnami/apache/conf/server-ca.crt'

С тази модификация оказвате, че "свързвате" външните сертификати, издадени от Letsencrypt с конфигурацията, която се намира вътре в docker контейнера. Заменете "example.com" с името на домейна си. След като подмените конфигурацията, е нужно да поправите правата на сертификатите с командата chown 1001:1001 /etc/letsencrypt/archive/example.com/ -R, като отново замените "example.com" с името на домейна си.

Стъпка 4 - стартиране на услугите

Тъй като временно е спрян docker контейнера, то трябва да се приложи новата конфигурация и да го стартираме. Моля изпълнете следните команди:

cd /opt/docker-apache/
docker compose up -d

Стъпка 5 (опционално) - автоматично подновяване на сертификата

Автоматичното подновяване може да бъде организирано чрез cron. Можете да зададете следната cron конфигурация, за да се случи автматичното подновяване:

# Automated Letsencrypt renewal
0 0 * * * /usr/bin/certbot renew --pre-hook 'docker stop docker-apache-apache-1' --post-hook 'chown 1001:1001 /etc/letsencrypt/archive/example.com/ -R; docker start docker-apache-apache-1'

Разбира се, можете да промените времето на изпълнение, когато пожелаете. В горният пример, тази задача ще се изпълнява всеки ден в 00:00 часа.

Работа с Docker

Организацията на това приложение е осъществена изцяло посредством Docker. По този начин можем да Ви предоставим готови приложения по-бързо. Освен това, конфигурацията им е по-гъвкава и е доста контролируема. За да можете да го контролирате това приложение обаче, е нужно да знаете някой базови Docker функционалности и особености.

Рестартиране на всички услуги

Рестартирането на базата данни и Docker контейнера, който съдържа самия Apache, заедно с останалия софтуер, може да бъде извършено по два начина:

  1. Чрез рестартиране на цялата виртуална машина
  2. Рестартиране на Docker контейнерите, което е по-бързия вариант. За целта, достъпете машината си чрез SSH, и изпълнете следните команди:
sudo su -
cd /opt/docker-apache
docker compose restart

Пресъздаване на Docker контейнери

Пресъздаването може да се наложи, в случай че сме променяли конфигурацията в docker-compose.yml. При тази ситуация, трябва да следвате следните стъпки:

cd /opt/docker-apache/
docker compose stop
docker compose up -d

Проверка на статуса на Docker приложението

За да направите проверка, трябва да изпълните следните команди:

sudo su -
docker ps -a

Моля, обърнете внимание на колоната STATUS. Тя трябва да показва от колко време работи услугата, например Up X minutes. Ако статуса е Restarting, то трябва да се провери какво не е наред с приложението. В такъв случай, можете да направите проверка, като проследите логовете на приложението по следния начин:

  1. Вземете името на приложението, което можете да видите в колоната NAMES от изходния код на командата docker ps -a. Вижте логовете с командата docker logs <NAME>, Където е името на контейнера.

Промяна на настройки

Описаните настройки в секцията Допълнителни настройки при Docker могат да бъдат нагласяни в docker-compose.yml файла. Пътят до него е описан отново в тази секция. За да промените настройка, отворете конфигурационния файл и обърнете внимание на секцията environment, намираща се под apache. Всяка една конфигурационна опция трябва да бъде описана на нов ред с тире отпред по следния примерен начин:

    environment:
      - APACHE_HTTP_PORT_NUMBER=8080

Моля, обърнете внимание, че трябва да се спазва и правилната индентация (брой празно място), тъй като това е важно за конфигурационни файлове от тип yaml.