Среда для сборки контейнера с Apache HTTP Server на базе Astra Linux. Данный веб сервер относится к сертифицируемой сборке предлагаемой Astra Linux, т.к. поставка пакета происходит из основного репозитория (main).
Присоединяйтесь к нашим социальным сетям:
| OS | Apache2 | Status |
|---|---|---|
| ✅ Fully supported |
Dockerfile для сборки Apache в Astra Linux
Для начала работы необходимо установить pre-commit и хуки
$ pip install pre-commit
$ pre-commit --version
pre-commit 4.2.0
$ pre-commit install
pre-commit installed at .git/hooks/pre-commit
pre-commit installed at .git/hooks/commit-msg
pre-commit installed at .git/hooks/pre-pushWarning
Чтобы проверить свои изменения, воспользуйтесь командой pre-commit run --all-files.
Чтобы проверить конкретную задачу, воспользуетесь командой pre-commit run <target> --all-files.
Если Вы понимаете что творите и хотите пропустить проверку pre-commit-ом воспользуйтесь --no-verify, пример git commit -m "Добавил изменения и не хочу проверки" --no-verify
Собрать образ Astra Linux based
## Image build
export ASTRA_VERSION='1.8.x-slim'
export APACHE_HTTPD_VERSION="2.4.65-astra${ASTRA_VERSION}"
## Apache image:
docker build \
--progress=plain \
--no-cache \
-t httpd:"${APACHE_HTTPD_VERSION}" \
.| Имя | Значение по умолчанию | Тип | Описание |
|---|---|---|---|
image_name |
astra | string | Имя образа. |
image_registry |
'' | string | Адрес до реестра образа. Например: --build-arg image_registry=my-container-registry:1111/ |
image_version |
1.8.x-slim | string | Версия образа. |
httpd_identity |
2.4.65 | string | Ожидаемая версия httpd1. |
version |
1.0.0 | float | Версия выпуска минимального контейнера. |
Tip
Проверка доступных версий приложения -
apt show apache2,
apt-cache policy apache2,
apt-cache show apache2
Для того чтобы начать использовать данный образ, создайте Dockerfile с простыми настройками
FROM httpd:2.4.65-astra1.8.x-slim
COPY static-html-directory /var/www/htmlЗатем соберите и запустите полученный образ
$ docker build -t some-content-httpd .
$ docker run --name some-httpd -d some-content-httpd
...run logic...Простой тест:
$ docker run --rm -p 80:80 httpd:2.4.65-astra1.8.x-slim
$ curl -s -i -w "\nStatus code: %{http_code}\n" http://localhost
...
httpd header
httpd body
httpd status codeХостинг простой статики:
docker run --rm -d --name some-httpd -p 8080:80 -v /some/content:/var/www/html:ro httpd:2.4.65-astra1.8.x-slimДля создания своего пользовательского конфига httpd сервера воспользуйтесь командой ниже и получите конфигурационный файл, который используется по умолчанию
docker run --rm httpd:2.4.65-astra1.8.x-slim cat /etc/apache2/apache2.conf >my-httpd.confПосле модификаций просто скопируйте его в свой образ
FROM httpd:2.4.65-astra1.8.x-slim
COPY ./my-httpd.conf /etc/apache2/apache2.confПри необходимости передачи веб-трафика по SSL, простейший способ настройки - это скопировать или монтировать пользовательские server.crt, server.key и файл конфигурации внутрь образа
-
Создать пользовательские самоподписанные сертификаты
mkdir -p ./certs openssl req -x509 -nodes -days 365 \ -newkey rsa:2048 \ -keyout ./certs/server.key \ -out ./certs/server.crt \ -subj "/C=RU/ST=Test/L=Test/O=TestOrg/CN=localhost" \ -addext "basicConstraints=critical,CA:FALSE" \ -addext "keyUsage=digitalSignature,keyEncipherment" \ -addext "extendedKeyUsage=serverAuth" chmod 600 ./certs/server.key chmod 644 ./certs/server.crt sudo chown -R 999:999 certs/
-
Собрать образ
docker build \ --progress=plain \ --no-cache \ -f Dockerfile.ssl \ -t httpd:ssl \ . -
Запустить проверку
docker run -d \ --name httpd-ssl \ -p 8080:8080 \ -p 8443:8443 \ -v $(pwd)/certs:/certs:ro \ httpd:ssl -
Проверить из консоли
## Проверить HTTPS curl -k https://localhost:8443 ## Проверить сертификат openssl s_client -connect localhost:8443 -servername localhost 2>/dev/null | openssl x509 -noout -subject -issuer ## Проверить на защиту от XST атак - должен вернуть 405 или 403 curl -k -X TRACE https://localhost:8443/ ## Проверить на посторонние методы - должен вернуть 405 или 403 curl -k -X PUT https://localhost:8443/ ## Проверить сервер - должен показать 'Server: Apache' curl -I http://localhost:8080/
Tip
Рекомендую более подробно ознакомиться с конфигурационным файлом. В нём отражены неплохие практики оформления ssl/secure для веб-сервера
-
При необходимости включить логи отладки запросов, например отладки websocket, стоит использовать следующую конструкцию:
# apache2.conf LogLevel alert proxy:trace4 ssl:info -
При необходимости аудита подключения, можно воспользоваться
tcpdump-омtcpdump -i any -nn port 8080 tcpdump -i lo -nn port 8443
-
Для того чтобы обновить конфигурационный файл внутри контейнера необходимо воспользоваться командой
docker exec -it <my-httpd-container> kill -USR1 1
Лого для проекта создано при помощи aasvg проекта. Вы можете создать такое же и/или модифицировать имеющееся. Для этого воспользуйтесь сайтом или установите figlet. Если Вы используете способ с установкой figlet, то вдобавок необходимо сказать необходимый шрифт, например я использую Doom. Далее, необходимо воспользоваться aasvg и конвертировать ascii арт в svg. Обратите внимание - по умолчанию будет svg в красном цвете, чтобы изменить цвет, необходимо изменить его определение тут. Конвертация цвета происходит по следующему принципу - %23D42029, где %23 это закодированный URL символ #, итоговое получаемое значение #D42029
$ curl 'http://www.figlet.org/fonts/doom.flf' -o /usr/share/figlet/doom.flf
$ curl 'http://www.figlet.org/fonts/larry3d.flf' -o /usr/share/figlet/larry3d.flf
$ figlet -f doom 'Apache2-HTTPd'
___ _ _____ _ _ _____ ___________ _
/ _ \ | | / __ \ | | | |_ _|_ _| ___ \ | |
/ /_\ \_ __ __ _ ___| |__ ___`' / /______| |_| | | | | | | |_/ __| |
| _ | '_ \ / _` |/ __| '_ \ / _ \ / /|______| _ | | | | | | __/ _` |
| | | | |_) | (_| | (__| | | | __./ /___ | | | | | | | | | | | (_| |
\_| |_| .__/ \__,_|\___|_| |_|\___\_____/ \_| |_/ \_/ \_/ \_| \__,_|
| |
|_|
$ aasvg --source --embed < ./docs/ascii.txt > docs/images/logo.svg|
Apache feather logo, symbolizing the Apache Software Foundation's focus on distributed systems, open collaboration, and the "Apache Way".
|
Footnotes
-
🛠️ За счёт скрипта
httpd-install-approximately.shнас может не волновать полная версия httpd, мы можем передавать лишь приблизительно желаемую версию, а скрипт позаботится чтобы была выбрана последняя и актуальная из списка ↩