본문 바로가기

리눅스

[draft] 우분투에서 Keycloak을 설치하고 설정하여 사용할 수 있는 방법

728x90

우분투에서 Keycloak을 설치하고 설정하여 사용할 수 있는 방법

Keycloak은 강력한 오픈소스 인증 및 권한 부여 솔루션으로 다양한 인증 및 SSO 기능을 제공합니다.

1. MySQL 설치

wget https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.33-1_all.deb
sudo apt update
sudo apt install mysql-server
mysqld -V
$ mysqld -V
/usr/sbin/mysqld  Ver 8.4.3 for Linux on x86_64 (MySQL Community Server - GPL)

2. Java 설치

Keycloak을 설치하기 위해서는 Java 11 이상의 버전이 필요합니다.

sudo apt update
sudo apt install -y openjdk-17-jdk
java --version
$ java --version
openjdk 17.0.12 2024-07-16
OpenJDK Runtime Environment (build 17.0.12+7-Ubuntu-1ubuntu222.04)
OpenJDK 64-Bit Server VM (build 17.0.12+7-Ubuntu-1ubuntu222.04, mixed mode, sharing)

3. Keycloak 설치

작업 디렉토리로 이동

cd /usr/local/src

/opt 디렉토리 생성

sudo mkdir -p /opt
sudo mkdir -p mkdir /opt/keycloak/log

3.1 Keycloack 사용자 계정 생성

sudo useradd -r -s /sbin/nologin keycloak

3.2 Keycloak 다운로드(최신 버전)

KEYCLOAK_VERSION=$(curl -s https://api.github.com/repos/keycloak/keycloak/releases/latest | grep '"tag_name"' | awk -F '"' '{print $4}')
echo ${KEYCLOAK_VERSION}
curl -fsSL https://github.com/keycloak/keycloak/releases/download/${KEYCLOAK_VERSION}/keycloak-${KEYCLOAK_VERSION}.tar.gz \
    -o keycloak-${KEYCLOAK_VERSION}.tar.gz

3.3 압축 해제

tar -xzf keycloak-${KEYCLOAK_VERSION}.tar.gz
mv keycloak-${KEYCLOAK_VERSION} /opt/keycloak
sudo chown -R keycloak:keycloak /opt/keycloak

3.4 데이터베이스 구성

Keycloak 데이터베이스를 MySQL에 생성하고 사용자 권한을 부여합니다.

 

MySQL 데이터베이스 및 사용자 생성

  • 데이터베이스 이름 : keycloak_db
  • 사용자 이름 : keycloak_user
  • 사용자 비밀번호 : keycloak_password
sudo mysql -u root -p
CREATE DATABASE keycloak_db;
CREATE USER 'keycloak_user'@'localhost' IDENTIFIED BY 'keycloak_password';
GRANT ALL PRIVILEGES ON keycloak_db.* TO 'keycloak_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

3.5 MySQL JDBC 드라이버 설치

MySQL 데이터베이스에 연결하려면 MySQL JDBC 드라이버를 Keycloak에 추가해야 합니다.

wget -q https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j_9.1.0-1ubuntu22.04_all.deb
sudo dpkg -i mysql-connector-j_9.1.0-1ubuntu22.04_all.deb

드라이버 복사

  • .jar 파일을 Keycloak의 providers 디렉터리에 복사합니다.
sudo cp /usr/share/java/mysql-connector-j-9.1.0.jar /opt/keycloak/providers/
ls -l /opt/keycloak/providers/mysql-connector-j-9.1.0.jar

3.6 Keycloak 설정

Keycloak의 설정 파일에서 MySQL을 데이터베이스로 사용하도록 설정합니다.

sudo vim /opt/keycloak/conf/keycloak.conf
더보기

---

cat /opt/keycloak/conf/keycloak.conf
# Basic settings for running in production. Change accordingly before deploying the server.

# Database

# The database vendor.
#db=postgres

# The username of the database user.
#db-username=keycloak

# The password of the database user.
#db-password=password

# The full database JDBC URL. If not provided, a default URL is set based on the selected database vendor.
#db-url=jdbc:postgresql://localhost/keycloak

# Observability

# If the server should expose healthcheck endpoints.
#health-enabled=true

# If the server should expose metrics endpoints.
#metrics-enabled=true

# HTTP

# The file path to a server certificate or certificate chain in PEM format.
#https-certificate-file=${kc.home.dir}conf/server.crt.pem

# The file path to a private key in PEM format.
#https-certificate-key-file=${kc.home.dir}conf/server.key.pem

# The proxy address forwarding mode if the server is behind a reverse proxy.
#proxy=reencrypt

# Do not attach route to cookies and rely on the session affinity capabilities from reverse proxy
#spi-sticky-session-encoder-infinispan-should-attach-route=false

# Hostname for the Keycloak server.
#hostname=myhostname

---

db=mysql
db-username=keycloak_user
db-password=keycloak_password
db-url=jdbc:mysql://localhost:3306/keycloak_db?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC

3.7 Keycloak 서버 시작

Keycloak은 두 가지 실행 모드를 지원합니다.

 

디렉터리로 이동

cd /opt/keycloak

초기화 및 시작

export KC_HOSTNAME=192.168.0.111
export KC_BOOTSTRAP_ADMIN_USERNAME=admin
export KC_BOOTSTRAP_ADMIN_PASSWORD=adminpassword
./bin/kc.sh show-config
Current Mode: production
Current Configuration:
        kc.bootstrap-admin-password =  ******* (ENV)
        kc.bootstrap-admin-username =  admin (ENV)
        kc.config.args =  show-config (SysPropConfigSource)
        kc.config.built =  true (SysPropConfigSource)
        kc.db =  mysql (keycloak.conf)
        kc.db-password =  ******* (keycloak.conf)
        kc.db-url =  jdbc:mysql://localhost:3306/keycloak_db?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC (keycloak.conf)
        kc.db-username =  keycloak_user (keycloak.conf)
        kc.hostname =  192.168.0.111 (ENV)
        kc.log-console-output =  default (classpath keycloak.conf)
        kc.provider.file.mysql-connector-j-9.1.0.jar.last-modified =  1731386904968 (Persisted)
        kc.spi-hostname-v2-hostname =  192.168.0.111 (ENV)
        kc.version =  26.0.5 (SysPropConfigSource)

Keycloak 실행

bin/kc.sh start-dev

Keycloak 초기 설정

  • 웹 브라우저를 열고 **http://localhost:8080**에 접속합니다.
http://localhost:8080

keycloak

3.8 Keycloak 서비스 등록 및 자동 시작 설정

Keycloak 서비스 파일 생성

sudo tee /etc/systemd/system/keycloak.service > /dev/null <<EOF
[Unit]
Description=Keycloak Server
After=network.target

[Service]
User=root
WorkingDirectory=/opt/keycloak
ExecStart=/opt/keycloak/bin/kc.sh start
StandardOutput=append:/opt/keycloak/log/keycloak.log
StandardError=append:/opt/keycloak/log/keycloak.log
Restart=always
LimitNOFILE=102642

[Install]
WantedBy=multi-user.target
EOF

서비스 등록 및 시작

sudo systemctl daemon-reload
sudo systemctl enable --now keycloak
sudo systemctl restart keycloak
sudo systemctl status keycloak
sudo journalctl -xeu keycloak.service
sudo journalctl -u keycloak.service -b

관리자 콘솔 로그인

realm 생성

  • Realm name : T20241112

Users 생성(Users > Create user)

  • Required user actions : -
  • Username : ktest
  • Email : ktest@localhost
  • First name : test
  • Last name : kim

Set password(Users > User details > Credentials)

  • Password : ktest
  • Password confirmation : ktest

Clients 생성(Clients > Create client)

  • Client type : OpenID Connect
  • Client ID : test-client
  • Name : TEST Client
  • Description : TEST Client
  • Root URL: http://192.168.0.111
  • Home URL : http://www.sangchul.kr/
  • Valid redirect URIs
    • http://www.sangchul.kr/*
    • http://192.168.0.111/*

간단한 테스트

로그인

http://192.168.0.111:8080/realms/T20241112/protocol/openid-connect/auth?client_id=test-client&response_type=code&state=12345

keycloak

  • Username : ktest
  • Password : ktest

keycloak

Sessions 확인(Users > User details)

keycloak

 

참고URL

- Keycloak GitHub : keycloak

- Keycloak Tutorials : Installing & Configuring Keycloak

- Keycloak Documentation : Server Administration Guide

 

728x90