기록을 합시다.
[docker] Apache+Spring Boot(jar)+Oracle docker-compose로 띄우기 본문
전체적인 디렉토리 구조
📦project-dockerfile
┣ 📂Apache
┃ ┣ 📜Dockerfile
┃ ┣ 📜httpd-vhosts.conf
┃ ┗ 📜httpd.conf
┣ 📂Oracle
┃ ┣ 📜001_projectDB.sql
┃ ┗ 📜Dockerfile
┣ 📂Wahwah
┃ ┣ 📜Dockerfile
┃ ┗ 📜wah-wah-0.0.1-SNAPSHOT.jar
┗ 📜docker-compose.yml
Spring Boot 설정
application.properties에 아래와 같은 설정 추가
# DB 설정
spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
spring.datasource.url=jdbc:oracle:thin:@172.20.0.4:1521/xe
spring.datasource.username=
spring.datasource.password=
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
# 톰켓 설정
tomcat.ajp.address=0.0.0.0
tomcat.ajp.allowedRequestAttributesPattern=.*
tomcat.ajp.protocol=AJP/1.3
tomcat.ajp.port=8009
tomcat.ajp.enabled=true
jar파일 생성(gradlew 파일 있는 곳에서 해야함)
gradlew --debug build
Apache 설정
나는 도커 컨테이너에서 파일 수정하기 귀찮아서 그냥 파일들을 만들고, 도커 파일 안으로 파일들을 이동시켜줬다.
httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/usr/local/apache2/htdocs"
ServerName wahwah.com
ServerAlias www.wahwah.com
ErrorLog "logs/www.wahwah.com-error.log"
CustomLog "logs/www.wahwah.com-access.log" combined
# Forward Proxy : On / Reverse Proxy : Off
ProxyRequests Off
# 호스트가 받은 HTTP 요청을 Proxy 요청시 사용. Reverse : On
ProxyPreserveHost On
ProxyPass / ajp://172.20.0.3:8009/
ProxyPassReverse / ajp://172.20.0.3:8009/
</VirtualHost>
httpd.conf 설정(아래 얘들 주석 해제)
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
Dockerfile
FROM httpd
#귀찮으니 안에서 설정 안 하기 위해서 conf파일을 아예 옮겨준다.
ADD httpd.conf /usr/local/apache2/conf
ADD httpd-vhosts.conf /usr/local/apache2/conf/extra
WORKDIR /usr/local/apache2
EXPOSE 80
Spring Boot용 도커파일 설정
FROM openjdk:17-alpine
ARG JAR_FILE=wah-wah-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} wahwah.jar
ENTRYPOINT ["java","-jar","/wahwah.jar"]
참고로 jar파일은 도커 파일이랑 같은 위치에 있어야함
Oracle 도커파일 설정
FROM gvenzl/oracle-xe
ENV ORACLE_PASSWORD=1234
RUN mkdir files
VOLUME [ "/oradata:/opt/oracle/oradata/gvenzl/oracle-xe" ]
COPY 001_projectDB.sql /container-entrypoint-initdb.d
EXPOSE 1521
참고로 내가 옮겨준 sql문은 아래와 같다.
create tablespace wahwahdev
datafile '/opt/oracle/files/wahwahdev.dbf' size 500m
autoextend on next 100m maxsize unlimited
default storage(initial 128k next 64k pctincrease 10);
alter session set "_ORACLE_SCRIPT" = true;
create user wahwahmaster identified by "1234"
default tablespace wahwahdev
temporary tablespace temp;
grant connect, resource, dba to wahwahmaster;
docker-compose.yml 설정
version: "1.0"
services:
apache2:
build: ./Apache
networks:
myboard:
ipv4_address: 172.20.0.2
restart: always
environment:
- VIRTUAL_HOST=www.wahwah.com
ports:
- "80:80"
wahwah:
build: ./Wahwah
networks:
myboard:
ipv4_address: 172.20.0.3
restart: always
environment:
- VIRTUAL_HOST=www.wahwah.com
expose:
- "8009"
oracledb:
build: ./Oracle
networks:
myboard:
ipv4_address: 172.20.0.4
restart: always
ports:
- "1521:1521"
networks:
myboard:
driver: bridge
ipam:
driver: default
config:
- subnet: "172.20.0.0/24"
gateway: "172.20.0.1"
결과물
후기
apache랑 spring boot의 내장 톰캣을 연결하는 포스트는 별로 없었고, apache랑 톰캣을 연결하는 포스트만 많아서 힘들었다. ㄱ= 특히나 다들 mod_jk를 사용하고 있어서 미칠 뻔했는데(그걸 왜 쓰는 거임?), 검색에 검색을 거듭하여 mod_proxy_ajp 사용하는 방법을 찾을 수 있었다. 그런데 또 이 두 개를 docker-compose하는 문서도 없어서 다 하나 하나 설정 바꿔줘 가면서 실험해보면서 하니 시간이 너무 걸렸다.. (약 12시간?)
아무튼 정말 좋은 경험이었다.
'공부 > Java' 카테고리의 다른 글
[Spring] 개인프로젝트-1- 자체 회원가입 구현하기 (1) | 2023.05.18 |
---|---|
[Spring] Hibernate를 사용하여 사용자 모델 및 레포지토리 만들기 (0) | 2023.05.16 |
[Spring] Spring security로 비밀번호 암호화 (0) | 2023.05.15 |
[Spring] Foreign Key 오류 (0) | 2023.05.15 |
[Spring] IntelliJ에서 Auto-Reloading 하기 (0) | 2023.05.13 |
Comments