https://github.com/ngrsoftlab/astra-apache-httpd
Проект по сборке Apache HTTP Server на базе Astra Linux
https://github.com/ngrsoftlab/astra-apache-httpd
apache2 astralinux best-practices devops docker httpd podman pre-commit security shell
Last synced: about 1 month ago
JSON representation
Проект по сборке Apache HTTP Server на базе Astra Linux
- Host: GitHub
- URL: https://github.com/ngrsoftlab/astra-apache-httpd
- Owner: NGRsoftlab
- License: mit
- Created: 2026-01-28T15:19:15.000Z (5 months ago)
- Default Branch: master
- Last Pushed: 2026-01-28T15:29:54.000Z (5 months ago)
- Last Synced: 2026-04-10T17:37:26.740Z (2 months ago)
- Topics: apache2, astralinux, best-practices, devops, docker, httpd, podman, pre-commit, security, shell
- Language: Shell
- Homepage: https://www.ngrsoftlab.ru
- Size: 68.4 KB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README

# httpd

Ascii svg art by aasvg.
## Description
Среда для сборки контейнера с Apache HTTP Server на базе Astra Linux. Данный веб сервер относится к [сертифицируемой](https://wiki.astralinux.ru/pages/viewpage.action?pageId=302028564) сборке предлагаемой Astra Linux, т.к. поставка пакета происходит из основного репозитория (main).
Присоединяйтесь к нашим социальным сетям:
## Contents
- [httpd](#httpd)
- [Description](#description)
- [Contents](#contents)
- [Supported Technologies](#supported-technologies)
- [What is it](#what-is-it)
- [How to work with](#how-to-work-with)
- [Build variables](#build-variables)
- [How to use this image](#how-to-use-this-image)
- [How to test local](#how-to-test-local)
- [Configuration](#configuration)
- [SSL/HTTPS](#sslhttps)
- [Issues and solutions](#issues-and-solutions)
- [Miscellaneous](#miscellaneous)
- [Cya!](#cya)
## [Supported Technologies](#contents)
| OS | Apache2 | Status |
| :-------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------: | :----------------- |
|  |  | ✅ Fully supported |
Таблица 1. Поставляемые версии для контейнерных сред.
## [What is it](#contents)
Dockerfile для сборки Apache в Astra Linux
## [How to work with](#contents)
Для начала работы необходимо установить [pre-commit](https://pre-commit.com/) и хуки
```console
$ 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-push
```
> [!warning]
> Чтобы проверить свои изменения, воспользуйтесь командой `pre-commit run --all-files`.
> Чтобы проверить конкретную задачу, воспользуетесь командой `pre-commit run --all-files`.
> Если Вы понимаете что творите и хотите пропустить проверку `pre-commit`-ом воспользуйтесь `--no-verify`, пример `git commit -m "Добавил изменения и не хочу проверки" --no-verify`
Собрать образ `Astra Linux based`
```shell
## 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}" \
.
```
### [Build variables](#contents)
| Имя | Значение по умолчанию | Тип | Описание |
| :--------------- | :-------------------: | :----: | ------------------------------------------------------------------------------------------: |
| `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 | Ожидаемая версия httpd[^1]. |
| `version` | 1.0.0 | float | Версия выпуска минимального контейнера. |
Таблица 2. Переопределяемые аргументы для Dockerfile.
> [!tip]
> Проверка доступных версий приложения -
> `apt show apache2`,
> `apt-cache policy apache2`,
> `apt-cache show apache2`
## [How to use this image](#contents)
Для того чтобы начать использовать данный образ, создайте `Dockerfile` с простыми настройками
```Dockerfile
FROM httpd:2.4.65-astra1.8.x-slim
COPY static-html-directory /var/www/html
```
Затем соберите и запустите полученный образ
```console
$ docker build -t some-content-httpd .
$ docker run --name some-httpd -d some-content-httpd
...run logic...
```
## [How to test local](#contents)
Простой тест:
```shell
$ 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
```
Хостинг простой статики:
```shell
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
```
## [Configuration](#contents)
Для создания своего пользовательского конфига httpd сервера воспользуйтесь командой ниже и получите конфигурационный файл, который используется по умолчанию
```shell
docker run --rm httpd:2.4.65-astra1.8.x-slim cat /etc/apache2/apache2.conf >my-httpd.conf
```
После модификаций просто **скопируйте** его в свой образ
```Dockerfile
FROM httpd:2.4.65-astra1.8.x-slim
COPY ./my-httpd.conf /etc/apache2/apache2.conf
```
## [SSL/HTTPS](#contents)
При необходимости передачи веб-трафика по SSL, простейший способ настройки - это **скопировать** или **монтировать** пользовательские **server.crt**, **server.key** и [файл конфигурации](configuration/httpd-ssl.conf) внутрь образа
- Создать пользовательские самоподписанные сертификаты
```shell
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/
```
- Собрать образ
```shell
docker build \
--progress=plain \
--no-cache \
-f Dockerfile.ssl \
-t httpd:ssl \
.
```
- Запустить проверку
```shell
docker run -d \
--name httpd-ssl \
-p 8080:8080 \
-p 8443:8443 \
-v $(pwd)/certs:/certs:ro \
httpd:ssl
```
- Проверить из консоли
```shell
## Проверить 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]
> Рекомендую более подробно ознакомиться с [конфигурационным файлом](configuration/httpd-ssl.conf). В нём отражены неплохие практики оформления ssl/secure для веб-сервера
## [Issues and solutions](#contents)
- При необходимости включить логи отладки запросов, например отладки websocket, стоит использовать следующую конструкцию:
```conf
# apache2.conf
LogLevel alert proxy:trace4 ssl:info
```
- При необходимости аудита подключения, можно воспользоваться `tcpdump`-ом
```shell
tcpdump -i any -nn port 8080
tcpdump -i lo -nn port 8443
```
- Для того чтобы обновить конфигурационный файл внутри контейнера необходимо воспользоваться командой
```shell
docker exec -it kill -USR1 1
```
## [Miscellaneous](#contents)
Лого для проекта создано при помощи [`aasvg`](https://github.com/martinthomson/aasvg) проекта. Вы можете создать такое же и/или модифицировать имеющееся. Для этого воспользуйтесь [сайтом](https://patorjk.com/software/taag/#p=display&f=Doom) или установите `figlet`. Если Вы используете способ с установкой `figlet`, то вдобавок необходимо сказать необходимый шрифт, например я использую `Doom`. Далее, необходимо воспользоваться `aasvg` и конвертировать `ascii` арт в `svg`. Обратите внимание - по умолчанию будет svg в красном цвете, чтобы изменить цвет, необходимо изменить его определение [тут](docs/images/logo.svg#L128). Конвертация цвета происходит по следующему принципу - `%23D42029`, где `%23` это закодированный URL символ #, итоговое получаемое значение `#D42029`
```console
$ 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".
### [Cya!](#contents)
---
[^1]: 🛠️ За счёт скрипта [`httpd-install-approximately.sh`](scripts/httpd-install-approximately.sh) нас может не волновать полная версия httpd, мы можем передавать лишь приблизительно желаемую версию, а скрипт позаботится чтобы была выбрана последняя и актуальная из списка