Docker 및 PostgreSQL을 사용하여 KeyClope 설정
이런 설정은 주로 개발 환경에서 사용하기 위해 설계된 것이지만 마이크로 서비스 체계 구조를 사용하는 생산 환경에 있어 좋은 출발점이다.
이 설정을 자신의 시스템에서 사용하려면 Docker와 Docker compose가 필요합니다.문서를 보고 가장 좋아하는 운영체제https://docs.docker.com/get-docker/에 docker를 설치하는 방법을 알아보세요.
PostgreSQL 데이터베이스 설정부터 시작하겠습니다.
docker를 사용하여 PostgreSQL 설치
Google 설정에서 Google은 PostgreSQL을 Key 망토의 데이터베이스로 사용하여 사용자, 클라이언트 또는 영역 등의 데이터를 영구화하고 기본적으로 제공하는 H2 데이터베이스를 대체합니다.
Docker Hub에서 제공하는 공식 PostgreSQL 이미지를 사용하여 Docker 컨테이너에서 PostgreSQL 실례를 실행합니다.
우리는 Docker compose를 사용합니다. Docker compose에서 PostgreSQL 실례를 정의함으로써 다중 용기 설정을 간소화합니다.yml 파일.
version: "3.9"
services:
postgres:
container_name: postgres_blog
image: "postgres:13.2"
volumes:
- ./db-data:/var/lib/postgresql/data/
- ./sql:/docker-entrypoint-initdb.d/:ro
env_file:
- ./database.dev.env
networks:
- backend
ports:
- "5432:5432"
pgadmin:
container_name: pgadmin_blog
image: "dpage/pgadmin4:5.1"
env_file:
- ./database.dev.env
ports:
- "5050:80"
networks:
- backend
이곳에서 몇 가지 일이 발생했다.하나씩 설명해 봅시다.먼저 볼륨을 정의하여 컨테이너에 데이터를 마운트하고 호스트에 데이터를 저장합니다.
여기서는 볼륨을 바인딩하여 마운트할 수 있도록 소스 경로와 대상 경로를 제공합니다.이런 종류의 볼륨은 개발 환경에 적합하지만, 생산 환경에 대해서는 파일 시스템을 완전히 제어하고 docker 이외에 수정을 적용하지 않으려면, 명칭 볼륨을 사용하거나 용기에서 파일을 직접 복사하는 것을 권장합니다.
컨테이너가 정지되었더라도 데이터를 저장하기 위한 첫 번째 귀속 마운트입니다.두 번째 마운트 파일은 KeyClope 및 애플리케이션 데이터베이스를 초기화합니다.
처음 두 스크립트는 응용 프로그램과 관련된 데이터를 KeyClope 스크립트와 같은 데이터베이스에 저장하려는 경우에만 필요합니다.
#!/bin/bash
psql -U dev -tc "SELECT 1 FROM pg_database WHERE datname = 'app'" \
| grep -q 1 || psql -U dev -c "CREATE DATABASE app"
MySQL과 유사한 데이터베이스와 달리 PostgreSQL에는 CREATE DATABASE IF EXIST 문이 없습니다.해결 방법으로, 우리는 bash 스크립트를 사용하여 psql 명령을 실행합니다. 만약 데이터베이스가 존재하지 않는다면, 이 명령은 데이터베이스를 만들 것입니다.여기서 이중 파이프는 grep 명령이 성공하지 않을 때만 CREATE DATABASE psql 명령을 실행할 수 있음을 의미합니다.
\c app;
DROP TABLE IF EXISTS Member;
CREATE TABLE Member (
id VARCHAR(50) NOT NULL PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL,
createdAt TIMESTAMP DEFAULT NOW()
);
DROP TABLE IF EXISTS Post;
CREATE TABLE Post (
id SERIAL NOT NULL PRIMARY KEY,
title VARCHAR(50) NOT NULL,
scientificName VARCHAR(50) NOT NULL,
family VARCHAR(32) NOT NULL,
rating NUMERIC(3,2) DEFAULT 0.5,
authorId VARCHAR(50),
createdAt TIMESTAMP DEFAULT NOW(),
CONSTRAINT fk_member FOREIGN KEY(authorId) REFERENCES Member(id)
ON DELETE SET NULL ON UPDATE CASCADE
);
두 번째 스크립트가 더 간단해.그것은 단지 응용 프로그램 데이터베이스 모델을 초기화할 뿐이다.#!/bin/bash
psql -U dev -tc "SELECT 1 FROM pg_database WHERE datname = 'keycloak'" \
| grep -q 1 || psql -U dev -c "CREATE DATABASE keycloak"
psql -U dev -c "CREATE USER keycloak WITH PASSWORD 'kc'"
마지막 예에서는 응용 프로그램 데이터베이스와 유사한 방식으로 KeyClope 데이터베이스를 만듭니다.KeyClope에서 데이터베이스에 액세스하기 위해 사용하는 새 사용자도 만들었습니다.특정 용도에 대한 전용 사용자를 정의하고 기본 슈퍼유저를 사용하지 않는 것은 좋은 안전 실천이다.
이거.env 파일은 docker hub 페이지에 나열된 환경 변수를 정의하여 기본적으로 만들 사용자를 이전 스크립트에서 정의한 다음
POSTGRES_USER="dev"
POSTGRES_PASSWORD="pwd"
또한 pgadmin 서비스도 정의했습니다.그것은 사용하기 쉬운 사용자 인터페이스를 제공하고 용기 사용 명령행 조회 데이터베이스에 직접 들어가는 것을 방지한다.새 환경 변수를 두 개만 추가하여 UI에 액세스하는 기본 로그인 이름을 정의할 수 있습니다.
POSTGRES_USER="dev"
POSTGRES_PASSWORD="pwd"
PGADMIN_DEFAULT_EMAIL="[email protected]"
PGADMIN_DEFAULT_PASSWORD="admin"
docker를 사용하여 KeyClock 설정
키 케이프는 레드하트가 개발한 오픈소스 신원과 관리 솔루션이다.이것은 auth0 등 SaaS 제품이나Firebase 또는 AWS Cognito 등 클라우드 서비스의 강력한 대체품으로 귀하의 거의 모든 권한 수여나 신분 검증 수요를 만족시킬 것입니다.만약 기본적으로 포함되지 않은 특정한 수요를 실현하고 있다면, KeyClope은 많은 서비스 공급자 인터페이스를 제공하여 사용자 정의 공급자를 삽입할 것입니다.
KeyClope에 대해 더 알고 싶으면 공식 문서를 보십시오 https://www.keycloak.org/
첫 번째 단계는 KeyClope 서비스를 추가하여 docker compose 파일을 완성하는 것입니다
version: "3.9"
services:
postgres:
container_name: postgres_blog
image: "postgres:13.2"
env_file:
- ./database.dev.env
networks:
- backend
volumes:
- ./db-data:/var/lib/postgresql/data/
- ./sql:/docker-entrypoint-initdb.d/:ro
ports:
- "127.0.0.1:5432:5432"
pgadmin:
container_name: pgadmin_blog
image: "dpage/pgadmin4:5.1"
env_file:
- ./database.dev.env
ports:
- "127.0.0.1:5050:80"
networks:
- backend
keycloak:
container_name: keycloak_blog
image: "jboss/keycloak:15.0.2"
depends_on:
- "postgres"
env_file:
- ./keycloak.dev.env
ports:
- "127.0.0.1:8180:8080"
- "127.0.0.1:8787:8787" # debug port
networks:
- backend
networks:
backend:
name: backend
driver: bridge
여기에는 새로운 볼륨을 정의할 필요가 없습니다. 호스트에서 KeyClope에 액세스하기 위해 8080 포트를 매핑하고, IDE에서 원격 디버거를 연결하지 않도록 디버깅 포트를 사용해야 합니다.PostgreSQL 설정과 유사하게 사용됩니다.env 파일에서 필요한 환경 변수를 설정합니다.
KEYCLOAK_USER=admin
KEYCLOAK_PASSWORD=password
DEBUG=true
DEBUG_PORT='*:8787'
DB_VENDOR=POSTGRES
DB_ADDR=postgres
DB_PORT=5432
DB_DATABASE=keycloak
DB_USER=keycloak
DB_PASSWORD=kc
TZ=Europe/Paris
사용 가능한 모든 환경 변수는 KeyClope 이미지https://hub.docker.com/r/jboss/keycloak/의 docker hub 페이지에 나열됩니다.KeyClope 사용자와 데이터베이스를 만들기 위한 새 스크립트도 만들었습니다.
우리는 모든 용기가 서로 통신할 수 있도록 같은 네트워크의 모든 서비스를 정의했다.
여기에서 우리는 브리지 모드를 사용하는데, 왜냐하면 통신은 같은 호스트에서만 발생하기 때문이다.
마지막으로, 우리는 키drope 서비스가 PostgreSQL 서비스에 의존하도록 지정합니다. 그렇지 않으면 키drope 용기의 안내 단계에서 데이터베이스 연결 오류가 발생할 수 있습니다.
이 모든 것을 함께 놓아라
현재 우리는 필요한 모든 성명을 만들었으니, 우리의 설정을 실행할 때가 되었다.
Docker compose는 모든 서비스를 안내하는 명령을 사용하여 조작을 간소화합니다
docker-compose up -d
시동이 끝난 후, 우리는 모든 용기가 실행 중인지 검사할 수 있다docker ps
이제 docker compose에서 매핑된 포트를 통해 Key Clope 백엔드에 액세스할 수 있습니다.yml 파일을 사용하고 사용하기 전에 저희의 파일을 사용하십시오.환경 파일.로그인 후, 우리는 사용자, 클라이언트, 그리고 많은 다른 조작을 만들어서 우리의 영역을 맞춤형으로 만들 수 있습니다.키맵이 제공하는 모든 기능을 알아보기 위해 키맵의 공식 문서를 보여 드리겠습니다.
또한 pgadmin을 사용하여 PostgreSQL 데이터베이스에 액세스할 수 있습니다.
그런 다음 PostgreSQL 데이터베이스에 연결해야 합니다.
마지막으로 우리는 우리의 응용 프로그램 구조에 접근할 수 있다.
모든 구성 파일이 들어 있는 저장소는 다음 위치에 있습니다.https://github.com/Mozenn/setup-keycloak-with-docker-and-postgresql
리소스
Reference
이 문제에 관하여(Docker 및 PostgreSQL을 사용하여 KeyClope 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mozenn/how-to-set-up-keycloak-with-docker-and-postgresql-3ca9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)