FossID Workbench Container 배포
Workbench Containerized 애플리케이션 배포 가이드
[목차]
[소개]
이 가이드는 컨테이너 환경에서 FossID Workbench를 배포하는 방법에 대한 자세한 지침을 제공합니다. 애플리케이션은 컨테이너 이미지로 배포되며 요구 사항에 따라 Docker, Podman 또는 Docker Compose를 사용하여 배포할 수 있습니다. 이 가이드에서는 필수 구성 요소, 구성, 배포 옵션, 문제 해결 및 모범 사례를 다룹니다.
응용 프로그램 개요
등록 위치 :
quay.io/fossid기본 이미지 :
workbench노출된 포트 :
80필수 환경 변수 : multiple
보관 요구 사항 :
fossid.conf
backup
intake
logs
uploads
scan-path
네트워크 구성 : bridge
[필수 조건]
FossID Workbench를 컨테이너로 배포하려면 필수 소프트웨어 중 하나를 사용할 수 있습니다.
소프트웨어가 올바르게 설치되고 최신 버전으로 업데이트되었는지 확인하세요.
필수 소프트웨어
Docker 설치 확인
docker --versionPodman을 사용하는 경우 설치를 확인하세요.
podman --versionDocker Compose를 사용하는 경우
docker-compose --version인증
Quay.io의 FossID 개인 저장소 에 연결하려면 배달 포털에 제공된 사용자 이름과 비밀번호를 사용하세요 .
docker login quay.io[구성 관리]
환경 변수
로컬 개발을 위한
.env파일 사용외부 비밀 관리 솔루션(예: HashiCorp Vault, AWS Secrets Manager) 사용을 고려하세요.
.env 파일 의 예 :
PROJECT_NAME=deployment
# FOSSID Release configuration
# RELEASE=25.1.0
RELEASE=FOSSID_VERSION
# Database server environment configuration
MYSQL_ROOT_PASSWORD=root123
MYSQL_USER=fossiduser
MYSQL_PASSWORD=fossidpassword
MYSQL_HOST=db
FOSSID_MYSQL_DATABASE=fossid
# Web Server Configuration
# change only if default HTTP is modified or HTTPS is configured
# HTTPS_PORT=
HTTP_PORT=8081
# FossID Shinobi service configuration
FOSSID_SHINOBI_JAVA_ARGS="-Xms8g -Xmx8g -XX:NewSize=5g -XX:MaxNewSize=5g -XX:SurvivorRatio=8"
FOSSID_SHINOBI_ARGS="-threads 8 -timeout 275 -socket 127.0.0.1:9900"
# FossID Workbench
# The initial password for the `fossid` user.
FOSSID_INITIAL_PASSWORD=fossidloginFossID Workbench 구성
FossID Workbench 구성은 fossid.conf 파일을 통해 수행됩니다. 이미지에는 예제 파일(fossid.conf.dist)이 포함되어 있으며, 디렉토리는 /fossid/etc/ 입니다.
다음 명령을 실행하여 압축을 풀 수 있습니다.
: docker cp <container id>:/fossid/etc/fossid.conf.dist /path/on/host/fossid.conf.dist.
필요한 최소 구성은 다음과 같습니다.
[CLI]
cli_server_host = FOSSID_HOST
cli_token = FOSSID_TOKEN
cli_strip_tags = .html
[WebApp]
webapp_db_server = MYSQL_HOST
webapp_db_database = MYSQL_DATABASE
webapp_db_username = MYSQL_USER
webapp_db_password = FOSSID_MYSQL_PASSWORD
webapp_db_port = 3306
webapp_server_name = fossid-workbench
webapp_timezone = Europe/Berlin
webapp_intake_repository =/fossid/intake/
webapp_backups=/fossid/backup/
webapp_base_url=https://fossid-workbench/index.php예를 들어, docker 또는 podman 명령에 다음 옵션을 추가하여 파일을 컨테이너에 마운트할 수 있습니다.
--volume ./fossid.conf:/fossid/etc/fossid.conf:Z또는 다음과 같이 compose.yaml 파일에 볼륨으로 추가합니다.
...
fossid-workbench-service:
...
volumes:
- ./fossid.conf:/fossid/etc/fossid.conf:Z
...포트 매핑
애플리케이션은 80번 포트에 노출되어 있으며 , 이는 모든 수신 HTTP 트래픽이 컨테이너로 전달됨을 의미합니다. Docker Compose 에서는 다음과 같이 구성됩니다.
ports:
- "80:80"볼륨 관리
다음 디렉토리는 컨테이너 외부에서 데이터를 지속시키기 위해 볼륨이나 바인드 마운트로 구성할 수 있습니다.
# Create volumes
docker volume create fossid-wb-backup
docker volume create fossid-wb-intake
docker volume create fossid-wb-logs
docker volume create fossid-wb-uploads
# Inspect volumes
docker volume inspect fossid-wb-backup
docker volume inspect fossid-wb-intake
docker volume inspect fossid-wb-logs
docker volume inspect fossid-wb-uploadsFossID Workbench 에서 target path 옵션을 사용하려면 바인드 마운트된 볼륨을 사용하는 것이 좋습니다. Docker 또는 Podman에서 --volume 플래그를 사용하거나 --mount 플래그를 사용할 수 있습니다.
다음은 몇 가지 예입니다.
# Create directory on the host
mkdir /path/to/target-path-directory다음 옵션 중 하나를 사용하세요.
--volume /path/to/target-path-directory:/target-path:rw,Z또는
--mount type=bind,source=/path/to/target-path-directory,target=/target-path[이미지 관리]
이미지 끌어오기
FossID 개인 저장소 quay.io에서 이미지를 가져옵니다.
docker pull quay.io/fossid/workbench:latest또는 특정 버전
docker pull quay.io/fossid/workbench:25.1.0특정 플랫폼 사용(필요한 경우)
docker pull --platform linux/amd64 quay.io/fossid/workbench:latest이미지 검증
# Verify image presence
docker images | grep workbench
# Inspect image details
docker inspect --format='{{.RepoDigests}}' quay.io/fossid/workbench:25.1.0[배포 옵션]
기본 Docker 배포
docker network create --driver=bridge wb-network
docker run -d \
--name db \
--platform linux/amd64 \
--env-file .env \
--health-cmd 'mysqladmin -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" -h127.0.0.1 ping' \
--health-interval 5s \
--health-timeout 5s \
--health-retries 60 \
--network wb-network \
-v ./db/db-persist:/var/lib/mysql \
docker.io/library/mysql:8.0
docker run -d \
--name fossid-workbench \
--platform linux/amd64 \
--memory-reservation 8g \
--tty \
--env-file .env \
--cap-add=CAP_AUDIT_WRITE \
--health-cmd 'curl --silent --fail localhost:80/health-check' \
--health-interval 5s \
--health-timeout 5s \
--health-retries 60 \
--network wb-network \
-p 8080:80 \
-v ./fossid.conf:/fossid/etc/fossid.conf:Z \
-v ./backup:/fossid/backup:Z \
-v ./intake:/fossid/intake:Z \
-v ./logs:/fossid/logs:Z \
-v ./uploads:/fossid/uploads:Z \
-v ./scan-path:/fossid/scan-path:Z \
--restart unless-stopped \
quay.io/fossid/workbench:latestDocker Compose 배포
docker-compose.yml 생성:
services:
fossid-workbench:
image: quay.io/fossid/workbench:${RELEASE}
platform: linux/amd64
mem_reservation: 8g
container_name: fossid-workbench
ports:
- "8081:80"
tty: true
env_file:
- .env
depends_on:
- fossid-mysql
healthcheck:
test: curl --silent --fail localhost:80/health-check
interval: 5s
timeout: 5s
retries: 60
volumes:
- ./fossid.conf:/fossid/etc/fossid.conf:Z
- ./backup:/fossid/backup:Z
- ./intake:/fossid/intake:Z
- ./logs:/fossid/logs:Z
- ./uploads:/fossid/uploads:Z
- ./scan-path:/fossid/scan-path:Z
networks:
- wb-network
cap_add:
- CAP_AUDIT_WRITE
fossid-mysql:
image: docker.io/library/mysql:8.0
platform: linux/amd64
container_name: db
env_file:
- .env
healthcheck:
test: mysqladmin -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" -h127.0.0.1 ping
interval: 5s
timeout: 5s
retries: 60
networks:
- wb-network
volumes:
- ./db/db-persist:/var/lib/mysql
networks:
wb-network:
driver: bridge다음과 함께 배포:
docker-compose up -dPodman Pod 배치
podman create network --driver=bridge wb-network
podman pod create --name fossid-workbench-pod --publish 8080:80 --network wb-network
podman run -d \
--name db \
--platform linux/amd64 \
--pod fossid-workbench-pod \
--env-file .env \
--health-cmd 'mysqladmin -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" -h127.0.0.1 ping' \
--health-interval 5s \
--health-timeout 5s \
--health-retries 60 \
-v ./db/db-persist:/var/lib/mysql \
docker.io/library/mysql:8.0
podman run -d \
--name fossid-workbench \
--platform linux/amd64 \
--pod fossid-workbench-pod \
--memory-reservation 8g \
--tty \
--env-file .env \
--cap-add=CAP_AUDIT_WRITE \
--health-cmd 'curl --silent --fail localhost:80/health-check' \
--health-interval 5s \
--health-timeout 5s \
--health-retries 60 \
-p 8080:80 \
-v ./fossid.conf:/fossid/etc/fossid.conf:Z \
-v ./backup:/fossid/backup:Z \
-v ./intake:/fossid/intake:Z \
-v ./logs:/fossid/logs:Z \
-v ./uploads:/fossid/uploads:Z \
-v ./scan-path:/fossid/scan-path:Z \
--restart unless-stopped \
quay.io/fossid/workbench:latest[문제 해결]
일반적인 문제
컨테이너가 시작되지 않습니다.
# Check container status
docker ps -a
# View logs
docker logs [CONTAINER_ID]
# Check resource usage
docker stats네트워크 연결 문제:
# Test network connectivity
docker network inspect [NETWORK_NAME]
# Enter container for debugging
docker exec -it [CONTAINER_ID] /bin/sh볼륨 마운팅 문제:
# Verify mount points
docker inspect -f '{{ .Mounts }}' [CONTAINER_ID]디버깅 명령
# Container shell access
docker exec -it [CONTAINER_ID] /bin/sh
# Process list in container
docker top [CONTAINER_ID]
# Resource usage
docker stats [CONTAINER_ID]
# Network information
docker network inspect [NETWORK_NAME][Production 배포]
보안 모범 사례
이미지 보안:
# Scan for vulnerabilities
docker scan workbench:latest
# Use specific tags instead of 'latest'
docker pull quay.io/fossid/workbench@sha256:[DIGEST]역방향 프록시 설정(Nginx)
Nginx 구성 예:
server {
listen 80;
client_max_body_size 50M;
location / {
proxy_pass http://[APP_NAME]:[PORT];
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-Proto $scheme;
proxy_read_timeout 10m;
proxy_buffering off;
proxy_request_buffering off;
proxy_redirect http:// $scheme://;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}[추가 자료]
Docker 문서: https://docs.docker.com
Podman 문서: https://docs.podman.io/
Docker Compose 문서: https://docs.docker.com/compose
Last updated