forked from wazuh/wazuh-docker
Merge pull request #2131 from wazuh/enhancement/2698-PR-test-adaptation
Modify docker build image process
This commit is contained in:
+2
-46
@@ -13,64 +13,20 @@ file:
|
|||||||
group: wazuh
|
group: wazuh
|
||||||
filetype: file
|
filetype: file
|
||||||
contains: []
|
contains: []
|
||||||
/var/ossec/etc/rules/local_rules.xml:
|
|
||||||
exists: true
|
|
||||||
mode: "0660"
|
|
||||||
owner: wazuh
|
|
||||||
group: wazuh
|
|
||||||
filetype: file
|
|
||||||
contains: []
|
|
||||||
/var/ossec/etc/sslmanager.cert:
|
/var/ossec/etc/sslmanager.cert:
|
||||||
exists: true
|
exists: true
|
||||||
mode: "0640"
|
mode: "0644"
|
||||||
owner: root
|
owner: root
|
||||||
group: root
|
group: root
|
||||||
filetype: file
|
filetype: file
|
||||||
contains: []
|
contains: []
|
||||||
/var/ossec/etc/sslmanager.key:
|
/var/ossec/etc/sslmanager.key:
|
||||||
exists: true
|
exists: true
|
||||||
mode: "0640"
|
mode: "0600"
|
||||||
owner: root
|
owner: root
|
||||||
group: root
|
group: root
|
||||||
filetype: file
|
filetype: file
|
||||||
contains: []
|
contains: []
|
||||||
package:
|
|
||||||
wazuh-manager:
|
|
||||||
installed: true
|
|
||||||
versions:
|
|
||||||
- 5.0.0
|
|
||||||
port:
|
|
||||||
tcp:1514:
|
|
||||||
listening: true
|
|
||||||
ip:
|
|
||||||
- 0.0.0.0
|
|
||||||
tcp:1515:
|
|
||||||
listening: true
|
|
||||||
ip:
|
|
||||||
- 0.0.0.0
|
|
||||||
tcp:55000:
|
|
||||||
listening: true
|
|
||||||
ip:
|
|
||||||
- 0.0.0.0
|
|
||||||
process:
|
|
||||||
wazuh-analysisd:
|
|
||||||
running: true
|
|
||||||
wazuh-authd:
|
|
||||||
running: true
|
|
||||||
wazuh-execd:
|
|
||||||
running: true
|
|
||||||
wazuh-monitord:
|
|
||||||
running: true
|
|
||||||
wazuh-remoted:
|
|
||||||
running: true
|
|
||||||
wazuh-syscheckd:
|
|
||||||
running: true
|
|
||||||
s6-supervise:
|
|
||||||
running: true
|
|
||||||
wazuh-db:
|
|
||||||
running: true
|
|
||||||
wazuh-modulesd:
|
|
||||||
running: true
|
|
||||||
user:
|
user:
|
||||||
wazuh:
|
wazuh:
|
||||||
exists: true
|
exists: true
|
||||||
|
|||||||
@@ -0,0 +1,562 @@
|
|||||||
|
name: Wazuh Docker pipeline
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
id-token: write
|
||||||
|
on: [pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
prepare-variables:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
WAZUH_VERSION: ${{ steps.dotenv.outputs.WAZUH_VERSION }}
|
||||||
|
WAZUH_IMAGE_VERSION: ${{ steps.dotenv.outputs.WAZUH_IMAGE_VERSION }}
|
||||||
|
WAZUH_TAG_REVISION: ${{ steps.dotenv.outputs.WAZUH_TAG_REVISION }}
|
||||||
|
WAZUH_UI_REVISION: ${{ steps.dotenv.outputs.WAZUH_UI_REVISION }}
|
||||||
|
WAZUH_REGISTRY: ${{ vars.IMAGE_REGISTRY_DEV }}
|
||||||
|
IMAGE_TAG: ${{ steps.dotenv.outputs.IMAGE_TAG }}
|
||||||
|
WAZUH_MINOR_VERSION: ${{ steps.dotenv.outputs.WAZUH_MINOR_VERSION }}
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Export .env variables
|
||||||
|
id: dotenv
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
if [ ! -f .env ]; then echo "::error::.env missing"; exit 1; fi
|
||||||
|
grep -v '^#' .env | grep -v '^\s*$' >> "$GITHUB_OUTPUT"
|
||||||
|
FULL_VERSION=$(grep "^WAZUH_VERSION=" .env | cut -d'=' -f2)
|
||||||
|
MINOR_VERSION=$(echo "$FULL_VERSION" | cut -d'.' -f1,2)
|
||||||
|
echo "WAZUH_MINOR_VERSION=$MINOR_VERSION" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
|
||||||
|
build-images:
|
||||||
|
needs: prepare-variables
|
||||||
|
uses: ./.github/workflows/Procedure_push_docker_images.yml
|
||||||
|
secrets: inherit
|
||||||
|
with:
|
||||||
|
image_tag: ${{ needs.prepare-variables.outputs.WAZUH_IMAGE_VERSION }}
|
||||||
|
docker_reference: ${{ github.head_ref }}
|
||||||
|
revision: ${{ needs.prepare-variables.outputs.WAZUH_TAG_REVISION }}
|
||||||
|
reference: "latest"
|
||||||
|
id: ${{ github.run_id }}
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
Execute-Goss-tests:
|
||||||
|
needs: [prepare-variables, build-images]
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
env:
|
||||||
|
WAZUH_IMAGE_VERSION: ${{ needs.prepare-variables.outputs.WAZUH_IMAGE_VERSION }}
|
||||||
|
WAZUH_REGISTRY: ${{ needs.prepare-variables.outputs.WAZUH_REGISTRY }}
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install Goss
|
||||||
|
uses: e1himself/goss-installation-action@v1.0.3
|
||||||
|
with:
|
||||||
|
version: 'v0.4.4'
|
||||||
|
|
||||||
|
- name: Configure aws credentials
|
||||||
|
uses: aws-actions/configure-aws-credentials@v4
|
||||||
|
with:
|
||||||
|
role-to-assume: ${{ secrets.AWS_IAM_DOCKER_ROLE }}
|
||||||
|
aws-region: "${{ secrets.AWS_REGION }}"
|
||||||
|
|
||||||
|
- name: Log in to Amazon ECR
|
||||||
|
uses: aws-actions/amazon-ecr-login@v2
|
||||||
|
|
||||||
|
- name: Execute Goss tests (wazuh-manager)
|
||||||
|
run: dgoss run ${{ env.WAZUH_REGISTRY }}/wazuh/wazuh-manager:${{ env.WAZUH_IMAGE_VERSION }}
|
||||||
|
env:
|
||||||
|
GOSS_SLEEP: 30
|
||||||
|
GOSS_FILE: .github/.goss.yaml
|
||||||
|
|
||||||
|
check-single-node:
|
||||||
|
name: Check single node on ${{ matrix.os }}
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-22.04, ubuntu-22.04-arm]
|
||||||
|
fail-fast: false
|
||||||
|
needs: [prepare-variables, Execute-Goss-tests, build-images]
|
||||||
|
env:
|
||||||
|
WAZUH_IMAGE_VERSION: ${{ needs.prepare-variables.outputs.WAZUH_IMAGE_VERSION }}
|
||||||
|
WAZUH_MINOR_VERSION: ${{ needs.prepare-variables.outputs.WAZUH_MINOR_VERSION }}
|
||||||
|
WAZUH_REGISTRY: ${{ needs.prepare-variables.outputs.WAZUH_REGISTRY }}
|
||||||
|
INDEXER_USERNAME: admin
|
||||||
|
INDEXER_PASSWORD: admin
|
||||||
|
API_USERNAME: wazuh-wui
|
||||||
|
API_PASSWORD: MyS3cr37P450r.*-
|
||||||
|
MANAGER_NODES: "manager"
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: free disk space
|
||||||
|
uses: ./.github/free-disk-space
|
||||||
|
|
||||||
|
- name: Configure aws credentials
|
||||||
|
uses: aws-actions/configure-aws-credentials@v4
|
||||||
|
with:
|
||||||
|
role-to-assume: ${{ secrets.AWS_IAM_DOCKER_ROLE }}
|
||||||
|
aws-region: "${{ secrets.AWS_REGION }}"
|
||||||
|
|
||||||
|
- name: Log in to Amazon ECR
|
||||||
|
uses: aws-actions/amazon-ecr-login@v2
|
||||||
|
|
||||||
|
- name: Create single node certficates
|
||||||
|
run: |
|
||||||
|
wazuh_certs_tool_url=$(aws s3 presign s3://${{ vars.AWS_S3_BUCKET_DEV }}/development/wazuh/5.x/secondary/installation-assistant/${{ env.WAZUH_IMAGE_VERSION }}/wazuh-certs-tool.sh --expires-in 3600 --region us-west-1)
|
||||||
|
curl -sL "$wazuh_certs_tool_url" -o ./wazuh-certs-tool.sh
|
||||||
|
cat > config.yml <<EOF
|
||||||
|
nodes:
|
||||||
|
# Wazuh indexer server nodes
|
||||||
|
indexer:
|
||||||
|
- name: wazuh.indexer
|
||||||
|
ip: wazuh.indexer
|
||||||
|
|
||||||
|
# Wazuh server nodes
|
||||||
|
# Use node_type only with more than one Wazuh manager
|
||||||
|
server:
|
||||||
|
- name: wazuh.manager
|
||||||
|
ip: wazuh.manager
|
||||||
|
|
||||||
|
# Wazuh dashboard node
|
||||||
|
dashboard:
|
||||||
|
- name: wazuh.dashboard
|
||||||
|
ip: wazuh.dashboard
|
||||||
|
EOF
|
||||||
|
cat config.yml
|
||||||
|
bash ./wazuh-certs-tool.sh -A
|
||||||
|
sudo sysctl -w vm.max_map_count=262144
|
||||||
|
working-directory: ./single-node
|
||||||
|
|
||||||
|
- name: Edit single node docker-compose file
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
WAZUH_REGISTRY: ${{ env.WAZUH_REGISTRY }}
|
||||||
|
run: |
|
||||||
|
TARGET_FILE="single-node/docker-compose.yml"
|
||||||
|
if [ -f "$TARGET_FILE" ]; then
|
||||||
|
echo "Updating registry in $TARGET_FILE to: ${{ env.WAZUH_REGISTRY }}"
|
||||||
|
sed -i "s|wazuh/wazuh-|${{ env.WAZUH_REGISTRY }}/wazuh/wazuh-|g" "$TARGET_FILE"
|
||||||
|
else
|
||||||
|
echo "File $TARGET_FILE not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Start single node stack
|
||||||
|
run: docker compose up -d
|
||||||
|
working-directory: ./single-node
|
||||||
|
|
||||||
|
- name: Check Wazuh indexer start
|
||||||
|
run: |
|
||||||
|
for i in {1..20}; do
|
||||||
|
echo "Checking Wazuh indexer health (Attempt $i/20)"
|
||||||
|
RESPONSE=$(curl -XGET "https://127.0.0.1:9200/_cluster/health?pretty" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} -k -s --retry 2 || true)
|
||||||
|
INDEXER_CONTAINERS=$(docker ps --format '{{.Names}}' | grep "indexer")
|
||||||
|
if echo "$RESPONSE" | grep -qE "green|yellow"; then
|
||||||
|
echo "Cluster Online"
|
||||||
|
echo "$RESPONSE"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
echo "Waiting for cluster to be online"
|
||||||
|
for CONTAINER_NAME in $INDEXER_CONTAINERS; do
|
||||||
|
echo ""
|
||||||
|
echo "========================================================="
|
||||||
|
echo "Container logs for $CONTAINER_NAME"
|
||||||
|
echo "========================================================="
|
||||||
|
docker logs --tail 30 "$CONTAINER_NAME"
|
||||||
|
echo "---------------------------------------------------------"
|
||||||
|
done
|
||||||
|
[ $i -lt 20 ] && sleep 60
|
||||||
|
done
|
||||||
|
status_index="`curl -XGET "https://127.0.0.1:9200/_cat/indices" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} -k -s | wc -l`"
|
||||||
|
status_index_green="`curl -XGET "https://127.0.0.1:9200/_cat/indices" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} -k -s | grep -E "green|yellow" | wc -l`"
|
||||||
|
if [[ $status_index_green -eq $status_index ]]; then
|
||||||
|
curl -XGET "https://127.0.0.1:9200/_cat/indices" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} -k -s
|
||||||
|
else
|
||||||
|
curl -XGET "https://127.0.0.1:9200/_cat/indices" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} -k -s
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
- name: Check Wazuh indexer nodes
|
||||||
|
run: |
|
||||||
|
nodes="`curl -XGET "https://127.0.0.1:9200/_cat/nodes" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} -k -s | grep -E "indexer" | wc -l`"
|
||||||
|
if [[ $nodes -eq 1 ]]; then
|
||||||
|
echo "Wazuh indexer nodes: ${nodes}"
|
||||||
|
else
|
||||||
|
echo "Wazuh indexer nodes: ${nodes}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Check documents into wazuh-states index
|
||||||
|
run: |
|
||||||
|
for i in {1..20}; do
|
||||||
|
echo "Checking documents in wazuh-states (Attempt $i/20)..."
|
||||||
|
RESPONSE=$(curl -XGET "https://127.0.0.1:9200/wazuh-states*/_count" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} -k -s || echo "{}")
|
||||||
|
DOCS=$(echo "$RESPONSE" | jq -r '.count // 0')
|
||||||
|
if [[ "$DOCS" -gt 0 ]]; then
|
||||||
|
echo "wazuh-states index has documents: ${DOCS}"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
echo "The index is empty or does not exist yet (Count: $DOCS). Waiting 60s"
|
||||||
|
[ $i -lt 20 ] && sleep 60
|
||||||
|
done
|
||||||
|
echo "Error: No documents found in wazuh-states after 20 attempts."
|
||||||
|
echo "Last response: $RESPONSE"
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
- name: Check Wazuh templates
|
||||||
|
run: |
|
||||||
|
qty_templates="`curl -XGET "https://127.0.0.1:9200/_cat/templates" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} -k -s | grep -P "wazuh|wazuh-agent|wazuh-statistics" | wc -l`"
|
||||||
|
templates="`curl -XGET "https://127.0.0.1:9200/_cat/templates" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} -k -s | grep -P "wazuh|wazuh-agent|wazuh-statistics"`"
|
||||||
|
if [[ $qty_templates -gt 3 ]]; then
|
||||||
|
echo "wazuh templates:"
|
||||||
|
echo "${templates}"
|
||||||
|
else
|
||||||
|
echo "wazuh templates:"
|
||||||
|
echo "${templates}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Check Wazuh manager start
|
||||||
|
run: |
|
||||||
|
for NODE in "${{ env.MANAGER_NODES }}"; do
|
||||||
|
for i in {1..20}; do
|
||||||
|
TOKEN=$(curl -s -u ${{ env.API_USERNAME }}:${{ env.API_PASSWORD }} -k -X GET "https://127.0.0.1:55000/security/user/authenticate?raw=true")
|
||||||
|
services="`curl -k -s -X GET "https://127.0.0.1:55000/cluster/$NODE/status?pretty=true" -H "Authorization: Bearer ${TOKEN}" | jq -r .data.affected_items | grep running | wc -l`"
|
||||||
|
if [[ $services -gt 9 ]]; then
|
||||||
|
echo "Wazuh Manager $NODE Services: ${services}"
|
||||||
|
echo "OK"
|
||||||
|
else
|
||||||
|
curl -k -X GET "https://127.0.0.1:55000/cluster/$NODE/status?pretty=true" -H "Authorization: Bearer ${TOKEN}" | jq -r .data.affected_items
|
||||||
|
echo "Wazuh Manager $NODE Services: ${services}. Retrying in 30s"
|
||||||
|
[ $i -lt 20 ] && sleep 30
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Check Wazuh dashboard service URL
|
||||||
|
run: |
|
||||||
|
for i in {1..20}; do
|
||||||
|
echo "Checking Wazuh dashboard (Attempt $i/20)"
|
||||||
|
STATUS=$(curl -k -s -o /dev/null -w "%{http_code}" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} "https://127.0.0.1:443/app/status")
|
||||||
|
echo "Current status: $STATUS"
|
||||||
|
if [[ "$STATUS" == "200" ]]; then
|
||||||
|
echo "Wazuh dashboard is UP"
|
||||||
|
exit 0
|
||||||
|
elif [[ "$STATUS" == "429" || "$STATUS" == "503" ]]; then
|
||||||
|
echo "Dashboard is busy or initializing (Status $STATUS). Retrying in 30s"
|
||||||
|
else
|
||||||
|
echo "Unexpected status $STATUS. Retrying in 30s"
|
||||||
|
fi
|
||||||
|
sleep 30
|
||||||
|
done
|
||||||
|
echo "Error: Dashboard did not reach 200 status in time."
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
- name: Modify Docker endpoint into Wazuh agent docker-compose.yml file
|
||||||
|
run: sed -i "s/<WAZUH_MANAGER_IP>/$(ip addr show docker0 | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1)/g" wazuh-agent/docker-compose.yml
|
||||||
|
|
||||||
|
- name: Edit Wazuh agent docker-compose file
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
WAZUH_REGISTRY: ${{ env.WAZUH_REGISTRY }}
|
||||||
|
run: |
|
||||||
|
TARGET_FILE="wazuh-agent/docker-compose.yml"
|
||||||
|
if [ -f "$TARGET_FILE" ]; then
|
||||||
|
echo "Updating registry in $TARGET_FILE to: ${{ env.WAZUH_REGISTRY }}"
|
||||||
|
sed -i "s|wazuh/wazuh-|${{ env.WAZUH_REGISTRY }}/wazuh/wazuh-|g" "$TARGET_FILE"
|
||||||
|
else
|
||||||
|
echo "File $TARGET_FILE not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Start Wazuh agent
|
||||||
|
run: docker compose up -d
|
||||||
|
working-directory: ./wazuh-agent
|
||||||
|
|
||||||
|
- name: Check Wazuh agent enrollment
|
||||||
|
run: |
|
||||||
|
for i in {1..5}; do
|
||||||
|
TOKEN=$(curl -s -u ${{ env.API_USERNAME }}:${{ env.API_PASSWORD }} -k -X GET "https://127.0.0.1:55000/security/user/authenticate?raw=true")
|
||||||
|
agents="`curl -k -s -X GET "https://127.0.0.1:55000/agents?pretty=true" -H "Authorization: Bearer ${TOKEN}" | jq -r .data.affected_items | grep active | wc -l`"
|
||||||
|
if [[ $agents -gt 1 ]]; then
|
||||||
|
echo "Wazuh agents: ${agents}"
|
||||||
|
echo "OK"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
curl -k -s -X GET "https://127.0.0.1:55000/agents?pretty=true" -H "Authorization: Bearer ${TOKEN}"
|
||||||
|
echo "Wazuh agents: ${agents}. Retrying in 10s"
|
||||||
|
[ $i -lt 5 ] && sleep 10
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Check errors in ossec.log for Wazuh manager
|
||||||
|
run: ./.github/single-node-log-check.sh
|
||||||
|
|
||||||
|
- name: Docker logs
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
INDEXER_CONTAINERS=$(docker ps --format '{{.Names}}')
|
||||||
|
for CONTAINER_NAME in $INDEXER_CONTAINERS; do
|
||||||
|
echo ""
|
||||||
|
echo "========================================================="
|
||||||
|
echo "Container logs for $CONTAINER_NAME"
|
||||||
|
echo "========================================================="
|
||||||
|
docker logs "$CONTAINER_NAME"
|
||||||
|
echo "---------------------------------------------------------"
|
||||||
|
done
|
||||||
|
working-directory: ./single-node
|
||||||
|
|
||||||
|
check-multi-node:
|
||||||
|
name: Check multi node on ${{ matrix.os }}
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-22.04, ubuntu-22.04-arm]
|
||||||
|
fail-fast: false
|
||||||
|
needs: [prepare-variables, Execute-Goss-tests, build-images]
|
||||||
|
env:
|
||||||
|
WAZUH_IMAGE_VERSION: ${{ needs.prepare-variables.outputs.WAZUH_IMAGE_VERSION }}
|
||||||
|
WAZUH_MINOR_VERSION: ${{ needs.prepare-variables.outputs.WAZUH_MINOR_VERSION }}
|
||||||
|
WAZUH_REGISTRY: ${{ needs.prepare-variables.outputs.WAZUH_REGISTRY }}
|
||||||
|
INDEXER_USERNAME: admin
|
||||||
|
INDEXER_PASSWORD: admin
|
||||||
|
API_USERNAME: wazuh-wui
|
||||||
|
API_PASSWORD: MyS3cr37P450r.*-
|
||||||
|
MANAGER_NODES: "master,worker01"
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: free disk space
|
||||||
|
uses: ./.github/free-disk-space
|
||||||
|
|
||||||
|
- name: Configure aws credentials
|
||||||
|
uses: aws-actions/configure-aws-credentials@v4
|
||||||
|
with:
|
||||||
|
role-to-assume: ${{ secrets.AWS_IAM_DOCKER_ROLE }}
|
||||||
|
aws-region: "${{ secrets.AWS_REGION }}"
|
||||||
|
|
||||||
|
- name: Log in to Amazon ECR
|
||||||
|
uses: aws-actions/amazon-ecr-login@v2
|
||||||
|
|
||||||
|
- name: Create multi node certficates
|
||||||
|
run: |
|
||||||
|
wazuh_certs_tool_url=$(aws s3 presign s3://${{ vars.AWS_S3_BUCKET_DEV }}/development/wazuh/5.x/secondary/installation-assistant/${{ env.WAZUH_IMAGE_VERSION }}/wazuh-certs-tool.sh --expires-in 3600 --region us-west-1)
|
||||||
|
curl -sL "$wazuh_certs_tool_url" -o ./wazuh-certs-tool.sh
|
||||||
|
cat > config.yml <<EOF
|
||||||
|
nodes:
|
||||||
|
# Wazuh indexer server nodes
|
||||||
|
indexer:
|
||||||
|
- name: wazuh1.indexer
|
||||||
|
ip: wazuh1.indexer
|
||||||
|
- name: wazuh2.indexer
|
||||||
|
ip: wazuh2.indexer
|
||||||
|
- name: wazuh3.indexer
|
||||||
|
ip: wazuh3.indexer
|
||||||
|
|
||||||
|
# Wazuh server nodes
|
||||||
|
# Use node_type only with more than one Wazuh manager
|
||||||
|
server:
|
||||||
|
- name: wazuh.master
|
||||||
|
ip: wazuh.master
|
||||||
|
node_type: master
|
||||||
|
- name: wazuh.worker
|
||||||
|
ip: wazuh.worker
|
||||||
|
node_type: worker
|
||||||
|
|
||||||
|
# Wazuh dashboard node
|
||||||
|
dashboard:
|
||||||
|
- name: wazuh.dashboard
|
||||||
|
ip: wazuh.dashboard
|
||||||
|
EOF
|
||||||
|
cat config.yml
|
||||||
|
bash ./wazuh-certs-tool.sh -A
|
||||||
|
sudo sysctl -w vm.max_map_count=262144
|
||||||
|
working-directory: ./multi-node
|
||||||
|
|
||||||
|
- name: Edit multi node docker-compose file
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
TARGET_FILE="multi-node/docker-compose.yml"
|
||||||
|
if [ -f "$TARGET_FILE" ]; then
|
||||||
|
echo "Updating registry in $TARGET_FILE to: ${{ env.WAZUH_REGISTRY }}"
|
||||||
|
sed -i "s|wazuh/wazuh-|${{ env.WAZUH_REGISTRY }}/wazuh/wazuh-|g" "$TARGET_FILE"
|
||||||
|
else
|
||||||
|
echo "File $TARGET_FILE not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Start multi node stack
|
||||||
|
run: docker compose up -d
|
||||||
|
working-directory: ./multi-node
|
||||||
|
|
||||||
|
- name: Check Wazuh indexer start
|
||||||
|
run: |
|
||||||
|
for i in {1..20}; do
|
||||||
|
echo "Checking Wazuh indexer health (Attempt $i/20)"
|
||||||
|
RESPONSE=$(curl -XGET "https://127.0.0.1:9200/_cluster/health?pretty" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} -k -s --retry 2 || true)
|
||||||
|
INDEXER_CONTAINERS=$(docker ps --format '{{.Names}}' | grep "indexer")
|
||||||
|
if echo "$RESPONSE" | grep -qE "green|yellow"; then
|
||||||
|
echo "Cluster Online"
|
||||||
|
echo "$RESPONSE"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
echo "Waiting for cluster to be online"
|
||||||
|
for CONTAINER_NAME in $INDEXER_CONTAINERS; do
|
||||||
|
echo ""
|
||||||
|
echo "========================================================="
|
||||||
|
echo "Container logs for $CONTAINER_NAME"
|
||||||
|
echo "========================================================="
|
||||||
|
docker logs --tail 30 "$CONTAINER_NAME"
|
||||||
|
echo "---------------------------------------------------------"
|
||||||
|
done
|
||||||
|
[ $i -lt 20 ] && sleep 60
|
||||||
|
done
|
||||||
|
status_index="`curl -XGET "https://127.0.0.1:9200/_cat/indices" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} -k -s | wc -l`"
|
||||||
|
status_index_green="`curl -XGET "https://127.0.0.1:9200/_cat/indices" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} -k -s | grep -E "green" | wc -l`"
|
||||||
|
if [[ $status_index_green -eq $status_index ]]; then
|
||||||
|
curl -XGET "https://127.0.0.1:9200/_cat/indices" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} -k -s
|
||||||
|
else
|
||||||
|
curl -XGET "https://127.0.0.1:9200/_cat/indices" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} -k -s
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Check Wazuh indexer nodes
|
||||||
|
run: |
|
||||||
|
nodes="`curl -XGET "https://127.0.0.1:9200/_cat/nodes" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} -k -s | grep -E "indexer" | wc -l`"
|
||||||
|
if [[ $nodes -eq 3 ]]; then
|
||||||
|
echo "Wazuh indexer nodes: ${nodes}"
|
||||||
|
else
|
||||||
|
echo "Wazuh indexer nodes: ${nodes}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Check documents into wazuh-states index
|
||||||
|
run: |
|
||||||
|
for i in {1..20}; do
|
||||||
|
echo "Checking documents in wazuh-states (Attempt $i/20)..."
|
||||||
|
RESPONSE=$(curl -XGET "https://127.0.0.1:9200/wazuh-states*/_count" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} -k -s || echo "{}")
|
||||||
|
DOCS=$(echo "$RESPONSE" | jq -r '.count // 0')
|
||||||
|
if [[ "$DOCS" -gt 0 ]]; then
|
||||||
|
echo "wazuh-states index has documents: ${DOCS}"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
echo "The index is empty or does not exist yet (Count: $DOCS). Waiting 60s"
|
||||||
|
[ $i -lt 20 ] && sleep 60
|
||||||
|
done
|
||||||
|
echo "Error: No documents found in wazuh-states after 20 attempts."
|
||||||
|
echo "Last response: $RESPONSE"
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
- name: Check Wazuh templates
|
||||||
|
run: |
|
||||||
|
qty_templates="`curl -XGET "https://127.0.0.1:9200/_cat/templates" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} -k -s | grep "wazuh" | wc -l`"
|
||||||
|
templates="`curl -XGET "https://127.0.0.1:9200/_cat/templates" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} -k -s | grep "wazuh"`"
|
||||||
|
if [[ $qty_templates -gt 3 ]]; then
|
||||||
|
echo "wazuh templates:"
|
||||||
|
echo "${templates}"
|
||||||
|
else
|
||||||
|
echo "wazuh templates:"
|
||||||
|
echo "${templates}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Check Wazuh manager start
|
||||||
|
run: |
|
||||||
|
IFS=',' read -r -a NODES <<< "${{ env.MANAGER_NODES }}"
|
||||||
|
for NODE in "${NODES[@]}"; do
|
||||||
|
for i in {1..20}; do
|
||||||
|
TOKEN=$(curl -s -u ${{ env.API_USERNAME }}:${{ env.API_PASSWORD }} -k -X GET "https://127.0.0.1:55000/security/user/authenticate?raw=true")
|
||||||
|
services="`curl -k -s -X GET "https://127.0.0.1:55000/cluster/$NODE/status?pretty=true" -H "Authorization: Bearer ${TOKEN}" | jq -r .data.affected_items | grep running | wc -l`"
|
||||||
|
if [[ $services -gt 9 ]]; then
|
||||||
|
echo "Wazuh Manager $NODE Services: ${services}"
|
||||||
|
echo "OK"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
curl -k -X GET "https://127.0.0.1:55000/cluster/$NODE/status?pretty=true" -H "Authorization: Bearer ${TOKEN}" | jq -r .data.affected_items
|
||||||
|
echo "Wazuh Manager $NODE Services: ${services}. Retrying in 30s"
|
||||||
|
[ $i -lt 20 ] && sleep 30
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Check Wazuh dashboard service URL
|
||||||
|
run: |
|
||||||
|
for i in {1..20}; do
|
||||||
|
echo "Checking Wazuh dashboard (Attempt $i/20)"
|
||||||
|
STATUS=$(curl -k -s -o /dev/null -w "%{http_code}" -u ${{ env.INDEXER_USERNAME }}:${{ env.INDEXER_PASSWORD }} "https://127.0.0.1:443/app/status")
|
||||||
|
echo "Current status: $STATUS"
|
||||||
|
if [[ "$STATUS" == "200" ]]; then
|
||||||
|
echo "Wazuh dashboard is UP"
|
||||||
|
exit 0
|
||||||
|
elif [[ "$STATUS" == "429" || "$STATUS" == "503" ]]; then
|
||||||
|
echo "Dashboard is busy or initializing (Status $STATUS). Retrying in 30s"
|
||||||
|
else
|
||||||
|
echo "Unexpected status $STATUS. Retrying in 30s"
|
||||||
|
fi
|
||||||
|
sleep 30
|
||||||
|
done
|
||||||
|
echo "Error: Dashboard did not reach 200 status in time."
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
- name: Modify Docker endpoint into Wazuh agent docker-compose.yml file
|
||||||
|
run: sed -i "s/<WAZUH_MANAGER_IP>/$(ip addr show docker0 | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1)/g" wazuh-agent/docker-compose.yml
|
||||||
|
|
||||||
|
- name: Edit Wazuh agent docker-compose file
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
WAZUH_REGISTRY: ${{ env.WAZUH_REGISTRY }}
|
||||||
|
run: |
|
||||||
|
TARGET_FILE="wazuh-agent/docker-compose.yml"
|
||||||
|
if [ -f "$TARGET_FILE" ]; then
|
||||||
|
echo "Updating registry in $TARGET_FILE to: ${{ env.WAZUH_REGISTRY }}"
|
||||||
|
sed -i "s|wazuh/wazuh-|${{ env.WAZUH_REGISTRY }}/wazuh/wazuh-|g" "$TARGET_FILE"
|
||||||
|
else
|
||||||
|
echo "File $TARGET_FILE not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Start Wazuh agent
|
||||||
|
run: docker compose -f wazuh-agent/docker-compose.yml up -d
|
||||||
|
|
||||||
|
- name: Check Wazuh agent enrollment
|
||||||
|
run: |
|
||||||
|
for i in {1..5}; do
|
||||||
|
TOKEN=$(curl -s -u ${{ env.API_USERNAME }}:${{ env.API_PASSWORD }} -k -X GET "https://127.0.0.1:55000/security/user/authenticate?raw=true")
|
||||||
|
agents="`curl -k -s -X GET "https://127.0.0.1:55000/agents?pretty=true" -H "Authorization: Bearer ${TOKEN}" | jq -r .data.affected_items | grep active | wc -l`"
|
||||||
|
if [[ $agents -gt 1 ]]; then
|
||||||
|
echo "Wazuh agents: ${agents}"
|
||||||
|
echo "OK"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
curl -k -s -X GET "https://127.0.0.1:55000/agents?pretty=true" -H "Authorization: Bearer ${TOKEN}"
|
||||||
|
echo "Wazuh agents: ${agents}. Retrying in 10s"
|
||||||
|
[ $i -lt 5 ] && sleep 10
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Check errors in ossec.log for Wazuh manager
|
||||||
|
run: ./.github/multi-node-log-check.sh
|
||||||
|
|
||||||
|
- name: Docker logs
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
INDEXER_CONTAINERS=$(docker ps --format '{{.Names}}')
|
||||||
|
for CONTAINER_NAME in $INDEXER_CONTAINERS; do
|
||||||
|
echo ""
|
||||||
|
echo "========================================================="
|
||||||
|
echo "Container logs for $CONTAINER_NAME"
|
||||||
|
echo "========================================================="
|
||||||
|
docker logs "$CONTAINER_NAME"
|
||||||
|
echo "---------------------------------------------------------"
|
||||||
|
done
|
||||||
|
working-directory: ./single-node
|
||||||
@@ -1,363 +0,0 @@
|
|||||||
name: Wazuh Docker pipeline
|
|
||||||
|
|
||||||
on: [pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-docker-images:
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
steps:
|
|
||||||
|
|
||||||
- name: Check out code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Build Wazuh images
|
|
||||||
run: ./build-images.sh
|
|
||||||
working-directory: ./build-docker-images
|
|
||||||
|
|
||||||
- name: Create enviroment variables
|
|
||||||
run: cat .env > $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Create backup Docker images
|
|
||||||
run: |
|
|
||||||
mkdir -p /home/runner/work/wazuh-docker/wazuh-docker/docker-images/
|
|
||||||
docker save wazuh/wazuh-manager:${{env.WAZUH_IMAGE_VERSION}} -o /home/runner/work/wazuh-docker/wazuh-docker/docker-images/wazuh-manager.tar
|
|
||||||
docker save wazuh/wazuh-indexer:${{env.WAZUH_IMAGE_VERSION}} -o /home/runner/work/wazuh-docker/wazuh-docker/docker-images/wazuh-indexer.tar
|
|
||||||
docker save wazuh/wazuh-dashboard:${{env.WAZUH_IMAGE_VERSION}} -o /home/runner/work/wazuh-docker/wazuh-docker/docker-images/wazuh-dashboard.tar
|
|
||||||
docker save wazuh/wazuh-agent:${{env.WAZUH_IMAGE_VERSION}} -o /home/runner/work/wazuh-docker/wazuh-docker/docker-images/wazuh-agent.tar
|
|
||||||
|
|
||||||
- name: Temporarily save Wazuh manager Docker image
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: docker-artifact-manager
|
|
||||||
path: /home/runner/work/wazuh-docker/wazuh-docker/docker-images/wazuh-manager.tar
|
|
||||||
retention-days: 1
|
|
||||||
|
|
||||||
- name: Temporarily save Wazuh indexer Docker image
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: docker-artifact-indexer
|
|
||||||
path: /home/runner/work/wazuh-docker/wazuh-docker/docker-images/wazuh-indexer.tar
|
|
||||||
retention-days: 1
|
|
||||||
|
|
||||||
- name: Temporarily save Wazuh dashboard Docker image
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: docker-artifact-dashboard
|
|
||||||
path: /home/runner/work/wazuh-docker/wazuh-docker/docker-images/wazuh-dashboard.tar
|
|
||||||
retention-days: 1
|
|
||||||
|
|
||||||
- name: Temporarily save Wazuh agent Docker image
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: docker-artifact-agent
|
|
||||||
path: /home/runner/work/wazuh-docker/wazuh-docker/docker-images/wazuh-agent.tar
|
|
||||||
retention-days: 1
|
|
||||||
|
|
||||||
- name: Install Goss
|
|
||||||
uses: e1himself/goss-installation-action@v1.0.3
|
|
||||||
with:
|
|
||||||
version: v0.3.16
|
|
||||||
|
|
||||||
- name: Execute Goss tests (wazuh-manager)
|
|
||||||
run: dgoss run wazuh/wazuh-manager:${{env.WAZUH_IMAGE_VERSION}}
|
|
||||||
env:
|
|
||||||
GOSS_SLEEP: 30
|
|
||||||
GOSS_FILE: .github/.goss.yaml
|
|
||||||
|
|
||||||
check-single-node:
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
needs: build-docker-images
|
|
||||||
steps:
|
|
||||||
|
|
||||||
- name: Check out code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Create enviroment variables
|
|
||||||
run: cat .env > $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Retrieve saved Wazuh indexer Docker image
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: docker-artifact-indexer
|
|
||||||
|
|
||||||
- name: Retrieve saved Wazuh manager Docker image
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: docker-artifact-manager
|
|
||||||
|
|
||||||
- name: Retrieve saved Wazuh dashboard Docker image
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: docker-artifact-dashboard
|
|
||||||
|
|
||||||
- name: Retrieve saved Wazuh agent Docker image
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: docker-artifact-agent
|
|
||||||
|
|
||||||
- name: Docker load
|
|
||||||
run: |
|
|
||||||
docker load --input ./wazuh-indexer.tar
|
|
||||||
docker load --input ./wazuh-dashboard.tar
|
|
||||||
docker load --input ./wazuh-manager.tar
|
|
||||||
docker load --input ./wazuh-agent.tar
|
|
||||||
|
|
||||||
- name: Create single node certficates
|
|
||||||
run: docker compose -f single-node/generate-indexer-certs.yml run --rm generator
|
|
||||||
|
|
||||||
- name: Start single node stack
|
|
||||||
run: docker compose -f single-node/docker-compose.yml up -d
|
|
||||||
|
|
||||||
- name: Check Wazuh indexer start
|
|
||||||
run: |
|
|
||||||
sleep 60
|
|
||||||
status_green="`curl -XGET "https://0.0.0.0:9200/_cluster/health" -u admin:SecretPassword -k -s | grep green | wc -l`"
|
|
||||||
if [[ $status_green -eq 1 ]]; then
|
|
||||||
curl -XGET "https://0.0.0.0:9200/_cluster/health" -u admin:SecretPassword -k -s
|
|
||||||
else
|
|
||||||
curl -XGET "https://0.0.0.0:9200/_cluster/health" -u admin:SecretPassword -k -s
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
status_index="`curl -XGET "https://0.0.0.0:9200/_cat/indices" -u admin:SecretPassword -k -s | wc -l`"
|
|
||||||
status_index_green="`curl -XGET "https://0.0.0.0:9200/_cat/indices" -u admin:SecretPassword -k -s | grep "green" | wc -l`"
|
|
||||||
if [[ $status_index_green -eq $status_index ]]; then
|
|
||||||
curl -XGET "https://0.0.0.0:9200/_cat/indices" -u admin:SecretPassword -k -s
|
|
||||||
else
|
|
||||||
curl -XGET "https://0.0.0.0:9200/_cat/indices" -u admin:SecretPassword -k -s
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
- name: Check Wazuh indexer nodes
|
|
||||||
run: |
|
|
||||||
nodes="`curl -XGET "https://0.0.0.0:9200/_cat/nodes" -u admin:SecretPassword -k -s | grep -E "indexer" | wc -l`"
|
|
||||||
if [[ $nodes -eq 1 ]]; then
|
|
||||||
echo "Wazuh indexer nodes: ${nodes}"
|
|
||||||
else
|
|
||||||
echo "Wazuh indexer nodes: ${nodes}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Check documents into wazuh-alerts index
|
|
||||||
run: |
|
|
||||||
sleep 120
|
|
||||||
docs="`curl -XGET "https://0.0.0.0:9200/wazuh-alerts*/_count" -u admin:SecretPassword -k -s | jq -r ".count"`"
|
|
||||||
if [[ $docs -gt 0 ]]; then
|
|
||||||
echo "wazuh-alerts index documents: ${docs}"
|
|
||||||
else
|
|
||||||
echo "wazuh-alerts index documents: ${docs}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Check Wazuh templates
|
|
||||||
run: |
|
|
||||||
qty_templates="`curl -XGET "https://0.0.0.0:9200/_cat/templates" -u admin:SecretPassword -k -s | grep -P "wazuh|wazuh-agent|wazuh-statistics" | wc -l`"
|
|
||||||
templates="`curl -XGET "https://0.0.0.0:9200/_cat/templates" -u admin:SecretPassword -k -s | grep -P "wazuh|wazuh-agent|wazuh-statistics"`"
|
|
||||||
if [[ $qty_templates -gt 3 ]]; then
|
|
||||||
echo "wazuh templates:"
|
|
||||||
echo "${templates}"
|
|
||||||
else
|
|
||||||
echo "wazuh templates:"
|
|
||||||
echo "${templates}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Check Wazuh manager start
|
|
||||||
run: |
|
|
||||||
services="`curl -k -s -X GET "https://0.0.0.0:55000/manager/status?pretty=true" -H "Authorization: Bearer ${{env.TOKEN}}" | jq -r .data.affected_items | grep running | wc -l`"
|
|
||||||
if [[ $services -gt 9 ]]; then
|
|
||||||
echo "Wazuh Manager Services: ${services}"
|
|
||||||
echo "OK"
|
|
||||||
else
|
|
||||||
echo "Wazuh indexer nodes: ${nodes}"
|
|
||||||
curl -k -X GET "https://0.0.0.0:55000/manager/status?pretty=true" -H "Authorization: Bearer ${{env.TOKEN}}" | jq -r .data.affected_items
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
env:
|
|
||||||
TOKEN: $(curl -s -u wazuh-wui:MyS3cr37P450r.*- -k -X GET "https://0.0.0.0:55000/security/user/authenticate?raw=true")
|
|
||||||
|
|
||||||
- name: Check Wazuh dashboard service URL
|
|
||||||
run: |
|
|
||||||
status=$(curl -XGET --silent https://0.0.0.0:443/app/status -k -u admin:SecretPassword -I -s | grep -E "^HTTP" | awk '{print $2}')
|
|
||||||
if [[ $status -eq 200 ]]; then
|
|
||||||
echo "Wazuh dashboard status: ${status}"
|
|
||||||
else
|
|
||||||
echo "Wazuh dashboard status: ${status}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Modify Docker endpoint into Wazuh agent docker-compose.yml file
|
|
||||||
run: sed -i "s/<WAZUH_MANAGER_IP>/$(ip addr show docker0 | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1)/g" wazuh-agent/docker-compose.yml
|
|
||||||
|
|
||||||
- name: Start Wazuh agent
|
|
||||||
run: docker compose -f wazuh-agent/docker-compose.yml up -d
|
|
||||||
|
|
||||||
- name: Check Wazuh agent enrollment
|
|
||||||
run: |
|
|
||||||
sleep 20
|
|
||||||
curl -k -s -X GET "https://localhost:55000/agents?pretty=true" -H "Authorization: Bearer ${{env.TOKEN}}"
|
|
||||||
env:
|
|
||||||
TOKEN: $(curl -s -u wazuh-wui:MyS3cr37P450r.*- -k -X GET "https://0.0.0.0:55000/security/user/authenticate?raw=true")
|
|
||||||
|
|
||||||
- name: Check errors in ossec.log for Wazuh manager
|
|
||||||
run: ./.github/single-node-log-check.sh
|
|
||||||
|
|
||||||
check-multi-node:
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
needs: build-docker-images
|
|
||||||
steps:
|
|
||||||
|
|
||||||
- name: Check out code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Create enviroment variables
|
|
||||||
run: cat .env > $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: free disk space
|
|
||||||
uses: ./.github/free-disk-space
|
|
||||||
|
|
||||||
- name: Retrieve saved Wazuh dashboard Docker image
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: docker-artifact-dashboard
|
|
||||||
|
|
||||||
- name: Retrieve saved Wazuh manager Docker image
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: docker-artifact-manager
|
|
||||||
|
|
||||||
- name: Retrieve saved Wazuh indexer Docker image
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: docker-artifact-indexer
|
|
||||||
|
|
||||||
- name: Retrieve saved Wazuh agent Docker image
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: docker-artifact-agent
|
|
||||||
|
|
||||||
- name: Docker load
|
|
||||||
run: |
|
|
||||||
docker load --input ./wazuh-manager.tar
|
|
||||||
docker load --input ./wazuh-indexer.tar
|
|
||||||
docker load --input ./wazuh-dashboard.tar
|
|
||||||
docker load --input ./wazuh-agent.tar
|
|
||||||
rm -rf wazuh-manager.tar wazuh-indexer.tar wazuh-dashboard.tar wazuh-agent.tar
|
|
||||||
|
|
||||||
- name: Create multi node certficates
|
|
||||||
run: docker compose -f multi-node/generate-indexer-certs.yml run --rm generator
|
|
||||||
|
|
||||||
- name: Start multi node stack
|
|
||||||
run: docker compose -f multi-node/docker-compose.yml up -d
|
|
||||||
|
|
||||||
- name: Check Wazuh indexer start
|
|
||||||
run: |
|
|
||||||
until [[ `curl -XGET "https://0.0.0.0:9200/_cluster/health" -u admin:SecretPassword -k -s | grep green | wc -l` -eq 1 ]]
|
|
||||||
do
|
|
||||||
echo 'Waiting for Wazuh indexer start'
|
|
||||||
free -m
|
|
||||||
df -h
|
|
||||||
sleep 120
|
|
||||||
done
|
|
||||||
status_green="`curl -XGET "https://0.0.0.0:9200/_cluster/health" -u admin:SecretPassword -k -s | grep green | wc -l`"
|
|
||||||
if [[ $status_green -eq 1 ]]; then
|
|
||||||
curl -XGET "https://0.0.0.0:9200/_cluster/health" -u admin:SecretPassword -k -s
|
|
||||||
else
|
|
||||||
curl -XGET "https://0.0.0.0:9200/_cluster/health" -u admin:SecretPassword -k -s
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
status_index="`curl -XGET "https://0.0.0.0:9200/_cat/indices" -u admin:SecretPassword -k -s | wc -l`"
|
|
||||||
status_index_green="`curl -XGET "https://0.0.0.0:9200/_cat/indices" -u admin:SecretPassword -k -s | grep -E "green" | wc -l`"
|
|
||||||
if [[ $status_index_green -eq $status_index ]]; then
|
|
||||||
curl -XGET "https://0.0.0.0:9200/_cat/indices" -u admin:SecretPassword -k -s
|
|
||||||
else
|
|
||||||
curl -XGET "https://0.0.0.0:9200/_cat/indices" -u admin:SecretPassword -k -s
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Check Wazuh indexer nodes
|
|
||||||
run: |
|
|
||||||
nodes="`curl -XGET "https://0.0.0.0:9200/_cat/nodes" -u admin:SecretPassword -k -s | grep -E "indexer" | wc -l`"
|
|
||||||
if [[ $nodes -eq 3 ]]; then
|
|
||||||
echo "Wazuh indexer nodes: ${nodes}"
|
|
||||||
else
|
|
||||||
echo "Wazuh indexer nodes: ${nodes}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Check documents into wazuh-alerts index
|
|
||||||
run: |
|
|
||||||
until [[ $(``curl -XGET "https://0.0.0.0:9200/wazuh-alerts*/_count" -u admin:SecretPassword -k -s | jq -r ".count"``) -gt 0 ]]
|
|
||||||
do
|
|
||||||
echo 'Waiting for Wazuh indexer events'
|
|
||||||
free -m
|
|
||||||
df -h
|
|
||||||
sleep 10
|
|
||||||
done
|
|
||||||
docs="`curl -XGET "https://0.0.0.0:9200/wazuh-alerts*/_count" -u admin:SecretPassword -k -s | jq -r ".count"`"
|
|
||||||
if [[ $docs -gt 0 ]]; then
|
|
||||||
echo "wazuh-alerts index documents: ${docs}"
|
|
||||||
else
|
|
||||||
echo "wazuh-alerts index documents: ${docs}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Check Wazuh templates
|
|
||||||
run: |
|
|
||||||
qty_templates="`curl -XGET "https://0.0.0.0:9200/_cat/templates" -u admin:SecretPassword -k -s | grep "wazuh" | wc -l`"
|
|
||||||
templates="`curl -XGET "https://0.0.0.0:9200/_cat/templates" -u admin:SecretPassword -k -s | grep "wazuh"`"
|
|
||||||
if [[ $qty_templates -gt 3 ]]; then
|
|
||||||
echo "wazuh templates:"
|
|
||||||
echo "${templates}"
|
|
||||||
else
|
|
||||||
echo "wazuh templates:"
|
|
||||||
echo "${templates}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Check Wazuh manager start
|
|
||||||
run: |
|
|
||||||
services="`curl -k -s -X GET "https://0.0.0.0:55000/manager/status?pretty=true" -H "Authorization: Bearer ${{env.TOKEN}}" | jq -r .data.affected_items | grep running | wc -l`"
|
|
||||||
if [[ $services -gt 10 ]]; then
|
|
||||||
echo "Wazuh Manager Services: ${services}"
|
|
||||||
echo "OK"
|
|
||||||
else
|
|
||||||
echo "Wazuh indexer nodes: ${nodes}"
|
|
||||||
curl -k -s -X GET "https://0.0.0.0:55000/manager/status?pretty=true" -H "Authorization: Bearer ${{env.TOKEN}}" | jq -r .data.affected_items
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
nodes=$(curl -k -s -X GET "https://0.0.0.0:55000/cluster/nodes" -H "Authorization: Bearer ${{env.TOKEN}}" | jq -r ".data.affected_items[].name" | wc -l)
|
|
||||||
if [[ $nodes -eq 2 ]]; then
|
|
||||||
echo "Wazuh manager nodes: ${nodes}"
|
|
||||||
else
|
|
||||||
echo "Wazuh manager nodes: ${nodes}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
env:
|
|
||||||
TOKEN: $(curl -s -u wazuh-wui:MyS3cr37P450r.*- -k -X GET "https://0.0.0.0:55000/security/user/authenticate?raw=true")
|
|
||||||
|
|
||||||
- name: Check Wazuh dashboard service URL
|
|
||||||
run: |
|
|
||||||
status=$(curl -XGET --silent https://0.0.0.0:443/app/status -k -u admin:SecretPassword -I | grep -E "^HTTP" | awk '{print $2}')
|
|
||||||
if [[ $status -eq 200 ]]; then
|
|
||||||
echo "Wazuh dashboard status: ${status}"
|
|
||||||
else
|
|
||||||
echo "Wazuh dashboard status: ${status}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Modify Docker endpoint into Wazuh agent docker-compose.yml file
|
|
||||||
run: sed -i "s/<WAZUH_MANAGER_IP>/$(ip addr show docker0 | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1)/g" wazuh-agent/docker-compose.yml
|
|
||||||
|
|
||||||
- name: Start Wazuh agent
|
|
||||||
run: docker compose -f wazuh-agent/docker-compose.yml up -d
|
|
||||||
|
|
||||||
- name: Check Wazuh agent enrollment
|
|
||||||
run: |
|
|
||||||
sleep 20
|
|
||||||
curl -k -s -X GET "https://localhost:55000/agents?pretty=true" -H "Authorization: Bearer ${{env.TOKEN}}"
|
|
||||||
env:
|
|
||||||
TOKEN: $(curl -s -u wazuh-wui:MyS3cr37P450r.*- -k -X GET "https://0.0.0.0:55000/security/user/authenticate?raw=true")
|
|
||||||
|
|
||||||
- name: Check errors in ossec.log for Wazuh manager
|
|
||||||
run: ./.github/multi-node-log-check.sh
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
# This workflow uses actions that are not certified by GitHub.
|
|
||||||
# They are provided by a third-party and are governed by
|
|
||||||
# separate terms of service, privacy policy, and support
|
|
||||||
# documentation.
|
|
||||||
|
|
||||||
name: Trivy scan Wazuh dashboard
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types:
|
|
||||||
- published
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
schedule:
|
|
||||||
- cron: '34 2 * * 1'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
permissions:
|
|
||||||
contents: read # for actions/checkout to fetch code
|
|
||||||
security-events: write # for github/codeql-action/upload-sarif to upload SARIF results
|
|
||||||
|
|
||||||
name: Build images and upload Trivy results
|
|
||||||
runs-on: "ubuntu-22.04"
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Installing dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y jq
|
|
||||||
|
|
||||||
- name: Checkout latest tag
|
|
||||||
run: |
|
|
||||||
latest=$(curl -s "https://api.github.com/repos/wazuh/wazuh-docker/releases/latest" | jq -r '.tag_name')
|
|
||||||
git fetch origin
|
|
||||||
git checkout $latest
|
|
||||||
|
|
||||||
- name: Build Wazuh images
|
|
||||||
run: build-docker-images/build-images.sh
|
|
||||||
|
|
||||||
- name: Create enviroment variables
|
|
||||||
run: |
|
|
||||||
cat .env > $GITHUB_ENV
|
|
||||||
echo "GITHUB_REF_NAME="${GITHUB_REF_NAME%/*} >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Run Trivy vulnerability scanner for Wazuh dashboard
|
|
||||||
uses: aquasecurity/trivy-action@2a2157eb22c08c9a1fac99263430307b8d1bc7a2
|
|
||||||
with:
|
|
||||||
image-ref: 'wazuh/wazuh-dashboard:${{env.WAZUH_IMAGE_VERSION}}'
|
|
||||||
format: 'template'
|
|
||||||
template: '@/contrib/sarif.tpl'
|
|
||||||
output: 'trivy-results-dashboard.sarif'
|
|
||||||
severity: 'LOW,MEDIUM,CRITICAL,HIGH'
|
|
||||||
|
|
||||||
- name: Upload Trivy scan results to GitHub Security tab
|
|
||||||
uses: github/codeql-action/upload-sarif@v2
|
|
||||||
with:
|
|
||||||
sarif_file: 'trivy-results-dashboard.sarif'
|
|
||||||
|
|
||||||
- name: Slack notification
|
|
||||||
uses: rtCamp/action-slack-notify@v2
|
|
||||||
env:
|
|
||||||
SLACK_CHANNEL: cicd-monitoring
|
|
||||||
SLACK_COLOR: ${{ job.status }} # or a specific color like 'good' or '#ff00ff'
|
|
||||||
#SLACK_ICON: https://github.com/rtCamp.png?size=48
|
|
||||||
SLACK_MESSAGE: "Check the results: https://github.com/wazuh/wazuh-docker/security/code-scanning?query=is%3Aopen+branch%3A${{ env.GITHUB_REF_NAME }}"
|
|
||||||
SLACK_TITLE: Wazuh docker Trivy vulnerability scan finished.
|
|
||||||
SLACK_USERNAME: github_actions
|
|
||||||
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
# This workflow uses actions that are not certified by GitHub.
|
|
||||||
# They are provided by a third-party and are governed by
|
|
||||||
# separate terms of service, privacy policy, and support
|
|
||||||
# documentation.
|
|
||||||
|
|
||||||
name: Trivy scan Wazuh indexer
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types:
|
|
||||||
- published
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
schedule:
|
|
||||||
- cron: '34 2 * * 1'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
permissions:
|
|
||||||
contents: read # for actions/checkout to fetch code
|
|
||||||
security-events: write # for github/codeql-action/upload-sarif to upload SARIF results
|
|
||||||
|
|
||||||
name: Build images and upload Trivy results
|
|
||||||
runs-on: "ubuntu-22.04"
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Installing dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y jq
|
|
||||||
|
|
||||||
- name: Checkout latest tag
|
|
||||||
run: |
|
|
||||||
latest=$(curl -s "https://api.github.com/repos/wazuh/wazuh-docker/releases/latest" | jq -r '.tag_name')
|
|
||||||
git fetch origin
|
|
||||||
git checkout $latest
|
|
||||||
|
|
||||||
- name: Build Wazuh images
|
|
||||||
run: build-docker-images/build-images.sh
|
|
||||||
|
|
||||||
- name: Create enviroment variables
|
|
||||||
run: |
|
|
||||||
cat .env > $GITHUB_ENV
|
|
||||||
echo "GITHUB_REF_NAME="${GITHUB_REF_NAME%/*} >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Run Trivy vulnerability scanner for Wazuh indexer
|
|
||||||
uses: aquasecurity/trivy-action@2a2157eb22c08c9a1fac99263430307b8d1bc7a2
|
|
||||||
with:
|
|
||||||
image-ref: 'wazuh/wazuh-indexer:${{env.WAZUH_IMAGE_VERSION}}'
|
|
||||||
format: 'template'
|
|
||||||
template: '@/contrib/sarif.tpl'
|
|
||||||
output: 'trivy-results-indexer.sarif'
|
|
||||||
severity: 'LOW,MEDIUM,CRITICAL,HIGH'
|
|
||||||
|
|
||||||
- name: Upload Trivy scan results to GitHub Security tab
|
|
||||||
uses: github/codeql-action/upload-sarif@v2
|
|
||||||
with:
|
|
||||||
sarif_file: 'trivy-results-indexer.sarif'
|
|
||||||
|
|
||||||
- name: Slack notification
|
|
||||||
uses: rtCamp/action-slack-notify@v2
|
|
||||||
env:
|
|
||||||
SLACK_CHANNEL: cicd-monitoring
|
|
||||||
SLACK_COLOR: ${{ job.status }} # or a specific color like 'good' or '#ff00ff'
|
|
||||||
#SLACK_ICON: https://github.com/rtCamp.png?size=48
|
|
||||||
SLACK_MESSAGE: "Check the results: https://github.com/wazuh/wazuh-docker/security/code-scanning?query=is%3Aopen+branch%3A${{ env.GITHUB_REF_NAME }}"
|
|
||||||
SLACK_TITLE: Wazuh docker Trivy vulnerability scan finished.
|
|
||||||
SLACK_USERNAME: github_actions
|
|
||||||
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
# This workflow uses actions that are not certified by GitHub.
|
|
||||||
# They are provided by a third-party and are governed by
|
|
||||||
# separate terms of service, privacy policy, and support
|
|
||||||
# documentation.
|
|
||||||
|
|
||||||
name: Trivy scan Wazuh manager
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types:
|
|
||||||
- published
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
schedule:
|
|
||||||
- cron: '34 2 * * 1'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
permissions:
|
|
||||||
contents: read # for actions/checkout to fetch code
|
|
||||||
security-events: write # for github/codeql-action/upload-sarif to upload SARIF results
|
|
||||||
|
|
||||||
name: Build images and upload Trivy results
|
|
||||||
runs-on: "ubuntu-22.04"
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Installing dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y jq
|
|
||||||
|
|
||||||
- name: Checkout latest tag
|
|
||||||
run: |
|
|
||||||
latest=$(curl -s "https://api.github.com/repos/wazuh/wazuh-docker/releases/latest" | jq -r '.tag_name')
|
|
||||||
git fetch origin
|
|
||||||
git checkout $latest
|
|
||||||
|
|
||||||
- name: Build Wazuh images
|
|
||||||
run: build-docker-images/build-images.sh
|
|
||||||
|
|
||||||
- name: Create enviroment variables
|
|
||||||
run: |
|
|
||||||
cat .env > $GITHUB_ENV
|
|
||||||
echo "GITHUB_REF_NAME="${GITHUB_REF_NAME%/*} >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Run Trivy vulnerability scanner for Wazuh manager
|
|
||||||
uses: aquasecurity/trivy-action@2a2157eb22c08c9a1fac99263430307b8d1bc7a2
|
|
||||||
with:
|
|
||||||
image-ref: 'wazuh/wazuh-manager:${{env.WAZUH_IMAGE_VERSION}}'
|
|
||||||
format: 'template'
|
|
||||||
template: '@/contrib/sarif.tpl'
|
|
||||||
output: 'trivy-results-manager.sarif'
|
|
||||||
severity: 'LOW,MEDIUM,CRITICAL,HIGH'
|
|
||||||
|
|
||||||
- name: Upload Trivy scan results to GitHub Security tab
|
|
||||||
uses: github/codeql-action/upload-sarif@v2
|
|
||||||
with:
|
|
||||||
sarif_file: 'trivy-results-manager.sarif'
|
|
||||||
|
|
||||||
- name: Slack notification
|
|
||||||
uses: rtCamp/action-slack-notify@v2
|
|
||||||
env:
|
|
||||||
SLACK_CHANNEL: cicd-monitoring
|
|
||||||
SLACK_COLOR: ${{ job.status }} # or a specific color like 'good' or '#ff00ff'
|
|
||||||
#SLACK_ICON: https://github.com/rtCamp.png?size=48
|
|
||||||
SLACK_MESSAGE: "Check the results: https://github.com/wazuh/wazuh-docker/security/code-scanning?query=is%3Aopen+branch%3A${{ env.GITHUB_REF_NAME }}"
|
|
||||||
SLACK_TITLE: Wazuh docker Trivy vulnerability scan finished.
|
|
||||||
SLACK_USERNAME: github_actions
|
|
||||||
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
|
|
||||||
@@ -9,6 +9,7 @@ All notable changes to this project will be documented in this file.
|
|||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
|
- Modify docker build image process ([#2131](https://github.com/wazuh/wazuh-docker/issues/2131))
|
||||||
- Update documentation for Wazuh Docker image builder and workflow usage ([#2136](https://github.com/wazuh/wazuh-docker/issues/2136))
|
- Update documentation for Wazuh Docker image builder and workflow usage ([#2136](https://github.com/wazuh/wazuh-docker/issues/2136))
|
||||||
- Configure deployment with environment variables ([#2081](https://github.com/wazuh/wazuh-docker/pull/2081))
|
- Configure deployment with environment variables ([#2081](https://github.com/wazuh/wazuh-docker/pull/2081))
|
||||||
- Modify Wazuh components install method ([#2058](https://github.com/wazuh/wazuh-docker/pull/2058))
|
- Modify Wazuh components install method ([#2058](https://github.com/wazuh/wazuh-docker/pull/2058))
|
||||||
|
|||||||
@@ -23,12 +23,13 @@ RUN URL_VAR="wazuh_agent_url_${TARGETARCH}_rpm" && \
|
|||||||
rm -rf /wazuh-agent.rpm && \
|
rm -rf /wazuh-agent.rpm && \
|
||||||
dnf clean all && \
|
dnf clean all && \
|
||||||
sed -i '/<authorization_pass_path>/d' /var/ossec/etc/ossec.conf && \
|
sed -i '/<authorization_pass_path>/d' /var/ossec/etc/ossec.conf && \
|
||||||
curl --fail --silent -L https://github.com/just-containers/s6-overlay/releases/download/${S6_VERSION}/s6-overlay-amd64.tar.gz \
|
S6_ARCH="amd64" && \
|
||||||
-o /tmp/s6-overlay-amd64.tar.gz && \
|
if [ "${TARGETARCH}" = "arm64" ]; then S6_ARCH="aarch64"; fi && \
|
||||||
tar xzf /tmp/s6-overlay-amd64.tar.gz -C / --exclude="./bin" && \
|
curl --fail --silent -L https://github.com/just-containers/s6-overlay/releases/download/${S6_VERSION}/s6-overlay-${S6_ARCH}.tar.gz \
|
||||||
tar xzf /tmp/s6-overlay-amd64.tar.gz -C /usr ./bin && \
|
-o /tmp/s6-overlay-${S6_ARCH}.tar.gz && \
|
||||||
rm /tmp/s6-overlay-amd64.tar.gz
|
tar xzf /tmp/s6-overlay-${S6_ARCH}.tar.gz -C / --exclude="./bin" && \
|
||||||
|
tar xzf /tmp/s6-overlay-${S6_ARCH}.tar.gz -C /usr ./bin && \
|
||||||
|
rm /tmp/s6-overlay-${S6_ARCH}.tar.gz
|
||||||
COPY config/etc/ /etc/
|
COPY config/etc/ /etc/
|
||||||
|
|
||||||
ENTRYPOINT [ "/init" ]
|
ENTRYPOINT [ "/init" ]
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ services:
|
|||||||
wazuh.master:
|
wazuh.master:
|
||||||
image: wazuh/wazuh-manager:5.0.0
|
image: wazuh/wazuh-manager:5.0.0
|
||||||
hostname: wazuh.master
|
hostname: wazuh.master
|
||||||
|
container_name: multi-node-wazuh.master
|
||||||
restart: always
|
restart: always
|
||||||
ulimits:
|
ulimits:
|
||||||
memlock:
|
memlock:
|
||||||
@@ -39,6 +40,7 @@ services:
|
|||||||
wazuh.worker:
|
wazuh.worker:
|
||||||
image: wazuh/wazuh-manager:5.0.0
|
image: wazuh/wazuh-manager:5.0.0
|
||||||
hostname: wazuh.worker
|
hostname: wazuh.worker
|
||||||
|
container_name: multi-node-wazuh.worker
|
||||||
restart: always
|
restart: always
|
||||||
ulimits:
|
ulimits:
|
||||||
memlock:
|
memlock:
|
||||||
@@ -72,6 +74,7 @@ services:
|
|||||||
wazuh1.indexer:
|
wazuh1.indexer:
|
||||||
image: wazuh/wazuh-indexer:5.0.0
|
image: wazuh/wazuh-indexer:5.0.0
|
||||||
hostname: wazuh1.indexer
|
hostname: wazuh1.indexer
|
||||||
|
container_name: multi-node-wazuh1.indexer
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "9200:9200"
|
- "9200:9200"
|
||||||
@@ -103,6 +106,7 @@ services:
|
|||||||
wazuh2.indexer:
|
wazuh2.indexer:
|
||||||
image: wazuh/wazuh-indexer:5.0.0
|
image: wazuh/wazuh-indexer:5.0.0
|
||||||
hostname: wazuh2.indexer
|
hostname: wazuh2.indexer
|
||||||
|
container_name: multi-node-wazuh2.indexer
|
||||||
restart: always
|
restart: always
|
||||||
environment:
|
environment:
|
||||||
- OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g
|
- OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g
|
||||||
@@ -130,6 +134,7 @@ services:
|
|||||||
wazuh3.indexer:
|
wazuh3.indexer:
|
||||||
image: wazuh/wazuh-indexer:5.0.0
|
image: wazuh/wazuh-indexer:5.0.0
|
||||||
hostname: wazuh3.indexer
|
hostname: wazuh3.indexer
|
||||||
|
container_name: multi-node-wazuh3.indexer
|
||||||
restart: always
|
restart: always
|
||||||
environment:
|
environment:
|
||||||
- OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g
|
- OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g
|
||||||
@@ -157,6 +162,7 @@ services:
|
|||||||
wazuh.dashboard:
|
wazuh.dashboard:
|
||||||
image: wazuh/wazuh-dashboard:5.0.0
|
image: wazuh/wazuh-dashboard:5.0.0
|
||||||
hostname: wazuh.dashboard
|
hostname: wazuh.dashboard
|
||||||
|
container_name: multi-node-wazuh.dashboard
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- 443:5601
|
- 443:5601
|
||||||
@@ -190,6 +196,7 @@ services:
|
|||||||
nginx:
|
nginx:
|
||||||
image: nginx:stable
|
image: nginx:stable
|
||||||
hostname: nginx
|
hostname: nginx
|
||||||
|
container_name: multi-node-nginx
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "1514:1514"
|
- "1514:1514"
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ services:
|
|||||||
wazuh.manager:
|
wazuh.manager:
|
||||||
image: wazuh/wazuh-manager:5.0.0
|
image: wazuh/wazuh-manager:5.0.0
|
||||||
hostname: wazuh.manager
|
hostname: wazuh.manager
|
||||||
|
container_name: single-node-wazuh.manager
|
||||||
restart: always
|
restart: always
|
||||||
ulimits:
|
ulimits:
|
||||||
memlock:
|
memlock:
|
||||||
@@ -40,6 +41,7 @@ services:
|
|||||||
wazuh.indexer:
|
wazuh.indexer:
|
||||||
image: wazuh/wazuh-indexer:5.0.0
|
image: wazuh/wazuh-indexer:5.0.0
|
||||||
hostname: wazuh.indexer
|
hostname: wazuh.indexer
|
||||||
|
container_name: single-node-wazuh.indexer
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "9200:9200"
|
- "9200:9200"
|
||||||
@@ -70,10 +72,12 @@ services:
|
|||||||
wazuh.dashboard:
|
wazuh.dashboard:
|
||||||
image: wazuh/wazuh-dashboard:5.0.0
|
image: wazuh/wazuh-dashboard:5.0.0
|
||||||
hostname: wazuh.dashboard
|
hostname: wazuh.dashboard
|
||||||
|
container_name: single-node-wazuh.dashboard
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- 443:443
|
- 443:5601
|
||||||
environment:
|
environment:
|
||||||
|
- SERVER_PORT=5601
|
||||||
- SERVER_HOST=0.0.0.0
|
- SERVER_HOST=0.0.0.0
|
||||||
- OPENSEARCH_HOSTS=https://wazuh.indexer:9200
|
- OPENSEARCH_HOSTS=https://wazuh.indexer:9200
|
||||||
- INDEXER_USERNAME=admin
|
- INDEXER_USERNAME=admin
|
||||||
|
|||||||
Reference in New Issue
Block a user