Podman 으로 Zoomoney 프로젝트 배포하기
2025. 3. 22. 20:50

1. 준비사항

 

터미널 접속도구(Putty,xShell,cmd 등등) 

FTP 프로그램(파일질라)

리눅스 명령어 

컨테이너 와 POD 개념 


결과물(Zoomoney 기준)
> Front-End(리액트 프로젝트)

> Back-End(SpingBoot 프로젝트)

> mariadb SQL 스키마 및 데이터 파일 (.sql)

 

1.MariaDB SQL DUMP 받는법

여기서 DUMP 란???

SQL DUMP는 데이터베이스의 백업 또는 복구를 위한 SQL 파일을 의미함,
데이터베이스의 테이블 구조, 데이터, 인덱스, 뷰, 트리거 등을 SQL 문 형태로 저장한 파일

 

MaraiaDB cmd 접속

 

1. MariaDB 접속방법

//mariadb 접속 방법
mysql -h zoomoney.c3msoiki2c17.ap-northeast-2.rds.amazonaws.com -P 3306 -u root -p


Setting environment for MariaDB 11.5 (x64)

C:\Windows\System32>mysql -h zoomoney.c3msoiki2c17.ap-northeast-2.rds.amazonaws.com -P 3306 -u root -p
Enter password: **************** //공유된 RDS 비밀번호
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 151821
Server version: 11.4.4-MariaDB-log managed by https://aws.amazon.com/rds/

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use zoomoney
Database changed
MariaDB [zoomoney]> show tabels;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'tabels' at line 1
MariaDB [zoomoney]> show tabels;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'tabels' at line 1
MariaDB [zoomoney]> show tables;
+----------------------+
| Tables_in_zoomoney   |
+----------------------+
| account              |
| card                 |
| category             |
| contract             |
| daily                |
| member               |
| money_plan           |
| notify               |
| plan_detail          |
| quiz                 |
| quiz_keyword         |
| stock                |
| stock_history        |
| stock_history_backup |
| stock_info           |
| stock_money          |
| stock_result         |
| use_history          |
+----------------------+
18 rows in set (0.010 sec)

MariaDB [zoomoney]>

 

 

2. Zoomoney DB dump 하는법

//DB DUMP 하는방법
mysqldump -h zoomoney.c3msoiki2c17.ap-northeast-2.rds.amazonaws.com -P 3306 -u root -p --databases zoomoney > C:/Users/dydqj/Downloads/zoomoney_dump.sql

옵션 설명
-h : 접속하려는 DB 의 엔드포인트
-P : DB 의 포트번호
-u : user 이름
-p : 비밀번호 문의 유무
--database: db 이름 
> C:/Users/dydqj/Downloads/zoomoney_dump.sql : dump 명령어의 결과물을 해당디렉토리의 파일이름.sql로 export 하겠다

 

DUMP 수행

Setting environment for MariaDB 11.5 (x64)

C:\Windows\System32>mysqldump -h zoomoney.c3msoiki2c17.ap-northeast-2.rds.amazonaws.com -P 3306 -u root -p --databases zoomoney > C:/Users/dydqj/Downloads/zoomoney_dump.sql
Enter password: ****************

C:\Windows\System32>

 

.sql 파일 Export 확인

 

<디렉토리 구조>

[root@zoomoney ~]# tree
.
├── anaconda-ks.cfg
├── backend
│   ├── Containerfile
│   └── ZooMoney_BackEnd_LocalDB.jar
├── contract_pdf
│   ├── fonts
│   │   └── malgun.ttf
│   └── signature
├── database
│   ├── Containerfile
│   └── zoomoney_dump.sql
├── frontend
│   ├── asset-manifest.json
│   ├── build
│   ├── build.tar
│   ├── Containerfile
│   ├── favicon.ico
│   ├── index.html
│   ├── logo192.png
│   ├── logo512.png
│   ├── manifest.json
│   ├── pdf.worker.min.js
│   ├── pdf.worker.min.mjs
│   ├── robots.txt
│   └── static

 


<Front-End 빌드 파일 셋팅>

1.Front-End 파일 빌드하기

 .env 에 설정추가(VsCode)

GENERATE_SOURCEMAP=false

 

 VsCode 터미널창에서  npm run build 명령어 수행

C:\Users\dydqj\git\ZooMoney_FrontEnd>npm run build

> zoomoney@0.1.0 build
> react-scripts build

Creating an optimized production build...
Compiled with warnings.

[eslint] 
src\card\CardHistory.jsx
  Line 9:8:  'cardimage' is defined but never used  no-unused-vars

src\moneyPlan\SelectChart.jsx
  Line 100:6:  React Hook useEffect has a missing dependency: 'findPlanNumByDate'. Either include it or remove the dependency array  react-hooks/exhaustive-deps

Search for the keywords to learn more about each warning.
To ignore, add // eslint-disable-next-line to the line before.

File sizes after gzip:

  484 kB (+139 B)  build\static\js\main.e1b819db.js
  394.29 kB        build\static\js\380.80d869ba.chunk.js
  44.64 kB (+6 B)  build\static\css\main.2584c086.css
  1.73 kB          build\static\js\206.34ec3213.chunk.js

The project was built assuming it is hosted at /.
You can control this with the homepage field in your package.json.

The build folder is ready to be deployed.
You may serve it with a static server:

  serve -s build

Find out more about deployment here:

  https://cra.link/deployment

 

2.빌드파일 확인(프로젝트 폴더 경로 이동)

경고:>>>build 폴더를 통째로 파일질라로 업로드시 업로드는 가능하나.. 크기에 따라서 시간이 오래걸리면 

시간초과로 업로드가 중지될수도있으니,, .tar 나 gzip 파일 처럼 압축해서 올리는것을 권장함 

 

3.파일질라(FileZilla) 로 Front-End 빌드파일 업로드(계정에따라 디렉토리 다를수도있음)

 

업로드후 압축된 build 파일 해체(tar 로 압축했기때문에 tar 명령어로 압축해제)

[root@zoomoney frontend]# ll
total 13012
-rw-r--r--. 1 zoomoney zoomoney 13317120 Mar 24 20:16 build.tar
-rw-r--r--. 1 root     root          105 Mar 24 16:48 Containerfile
[root@zoomoney frontend]# tar -xvf build.tar

압축해제 확인 후 build 디렉토리로 이동하여 모든파일 frontend 디렉토리 이동(mv 명령어 사용)

[root@zoomoney frontend]# ls
build  build.tar  Containerfile
[root@zoomoney frontend]# cd build/
[root@zoomoney build]# ls
asset-manifest.json  favicon.ico  index.html  logo192.png  logo512.png  manifest.json  pdf.worker.min.js  pdf.worker.min.mjs  robots.txt  static
[root@zoomoney build]# mv * ../
[root@zoomoney build]# ls ../
asset-manifest.json  build  build.tar  Containerfile  favicon.ico  index.html  logo192.png  logo512.png  manifest.json  pdf.worker.min.js  pdf.worker.min.mjs  robots.txt  static
[root@zoomoney build]#
[root@zoomoney frontend]# pwd
/root/frontend
[root@zoomoney frontend]# cat Containerfile
FROM docker.io/library/nginx:1.26.3
COPY * /usr/share/nginx/html
ADD static /usr/share/nginx/html/static
[root@zoomoney frontend]# ls -al
total 15616
drwxr-xr-x. 4 zoomoney zoomoney     4096 Mar 24 20:18 .
dr-xr-x---. 8 root     root         4096 Mar 24 20:19 ..
-rwxr-xr-x. 1 root     root         3388 Mar 24 20:14 asset-manifest.json
drwxr-xr-x. 2 root     root            6 Mar 24 20:18 build
-rw-r--r--. 1 zoomoney zoomoney 13317120 Mar 24 20:16 build.tar
-rw-r--r--. 1 root     root          105 Mar 24 16:48 Containerfile
-rwxr-xr-x. 1 root     root       165662 Mar 18 15:20 favicon.ico
-rwxr-xr-x. 1 root     root          643 Mar 24 20:14 index.html
-rwxr-xr-x. 1 root     root         5347 Mar 12 10:34 logo192.png
-rwxr-xr-x. 1 root     root         9664 Mar 12 10:34 logo512.png
-rwxr-xr-x. 1 root     root          517 Mar 12 10:34 manifest.json
-rwxr-xr-x. 1 root     root      1074786 Mar 17 18:40 pdf.worker.min.js
-rwxr-xr-x. 1 root     root      1375858 Mar 12 10:34 pdf.worker.min.mjs
-rwxr-xr-x. 1 root     root           70 Mar 12 10:34 robots.txt
drwxr-xr-x. 5 root     root           40 Mar 24 20:14 static
[root@zoomoney frontend]#

 

<Back-End 빌드 파일 셋팅>

 

1.BackEnd 프로젝트 .jar 로 빌드하기

GradleTasks > build  >bootJar 클릭

 

빌드성공시

프로젝트 폴더 이동후 빌드된 .jar 파일 확인후 미리 작성된 Container 파일 내용안에 ZooMoney_BackEnd_LocalDB.jar

이름으로 해당파일을 이미지를 만들기때문에 .jar 파일 이름을 맞춰줘야함 

 

파일질라로 backend .jar 파일 업로드

 

[root@zoomoney backend]# pwd
/root/backend
[root@zoomoney backend]# cat Containerfile
FROM docker.io/library/openjdk:24-ea-21-jdk-slim
COPY ZooMoney_BackEnd_LocalDB.jar /usr/local/zoomoney/app.jar
EXPOSE 7777
CMD ["java", "-jar","/usr/local/zoomoney/app.jar"]

[root@zoomoney backend]# ls -al
total 116880
drwxr-xr-x. 2 zoomoney zoomoney        63 Mar 24 20:19 .
dr-xr-x---. 8 root     root          4096 Mar 24 20:19 ..
-rw-r--r--. 1 root     root       175 Mar 24 20:19 Containerfile
-rw-r--r--. 1 zoomoney zoomoney 119673486 Mar 24 20:17 ZooMoney_BackEnd_LocalDB.jar
[root@zoomoney backend]#

 

<DataBase 빌드 파일 셋팅>

파일질라로 .sql 파일 database 디렉토리 업로드

[root@zoomoney database]# pwd
/root/database
[root@zoomoney database]# cat Containerfile
FROM docker.io/library/mariadb:11.4.5-ubi
ENV MARIADB_ROOT_PASSWORD=1234
ENV MARIADB_DATABASE=zoomoney
COPY zoomoney_dump.sql /docker-entrypoint-initdb.d/initdb.sql

[root@zoomoney database]# ls -al
total 56
drwxr-xr-x. 2 zoomoney zoomoney    52 Mar 24 20:17 .
dr-xr-x---. 8 root     root      4096 Mar 24 20:19 ..
-rw-r--r--. 1 root     root       166 Mar 24 16:48 Containerfile
-rw-r--r--. 1 zoomoney zoomoney 49053 Mar 24 20:17 zoomoney_dump.sql
[root@zoomoney database]#

 

<Front-End 컨테이너 이미지 빌드>

1.frontend 디렉토리 이동후

 buildah bud -t frontend:v2 . 명령어 수행

[root@zoomoney frontend]# buildah bud -t frontend:v2 .
STEP 1/3: FROM docker.io/library/nginx:1.26.3
STEP 2/3: COPY * /usr/share/nginx/html
STEP 3/3: ADD static /usr/share/nginx/html/static
COMMIT frontend:v2
Getting image source signatures
Copying blob 1287fbecdfcc skipped: already exists
Copying blob 1fc3fb77f66c skipped: already exists
Copying blob 6e5156a205f6 skipped: already exists
Copying blob d0f4c4ff4232 skipped: already exists
Copying blob 391db6a7e7d3 skipped: already exists
Copying blob 58ed31f4db9b skipped: already exists
Copying blob b9a57c4b9f8f skipped: already exists
Copying blob 44c156affad4 done   |
Copying config e86184a14c done   |
Writing manifest to image destination
--> e86184a14c0c
Successfully tagged localhost/frontend:v2
e86184a14c0c083b71ddec62d9f3d636790abf30c8b1ae48b8db192b90e6c132

 

 

<Back-End 컨테이너 이미지 빌드>

1.backend 디렉토리 이동후

buildah bud -t backend:v2 . 명령어 수행

[root@zoomoney backend]# buildah bud -t backend:v2 .
STEP 1/4: FROM docker.io/library/openjdk:24-ea-21-jdk-slim
STEP 2/4: COPY ZooMoney_BackEnd_LocalDB.jar /usr/local/zoomoney/app.jar
STEP 3/4: EXPOSE 7777
STEP 4/4: CMD ["java", "-jar","/usr/local/zoomoney/app.jar"]
COMMIT backend:v2
Getting image source signatures
Copying blob 98b5f35ea9d3 skipped: already exists
Copying blob c98faa4eebe8 skipped: already exists
Copying blob ea8bd79626bd skipped: already exists
Copying blob 4cc6f2c5d4ae done   |
Copying config 279c9f331c done   |
Writing manifest to image destination
--> 279c9f331c11
Successfully tagged localhost/backend:v2
279c9f331c11b80d4de47fe9381414d6335ed72ce6d5a2b803a71bac65646021
[root@zoomoney backend]#

 

<Database 컨테이너 이미지 빌드>

1.database 디렉토리 이동후

buildah bud -t database:v2 . 명령어 수행

[root@zoomoney database]# buildah bud -t database:v2 .
STEP 1/4: FROM docker.io/library/mariadb:11.4.5-ubi
STEP 2/4: ENV MARIADB_ROOT_PASSWORD=1234
STEP 3/4: ENV MARIADB_DATABASE=zoomoney
STEP 4/4: COPY zoomoney_dump.sql /docker-entrypoint-initdb.d/initdb.sql
COMMIT database:v2
Getting image source signatures
Copying blob 45c00d6e135e skipped: already exists
Copying blob 92fbf195d637 skipped: already exists
Copying blob d37b349846af skipped: already exists
Copying blob c92e059fc869 skipped: already exists
Copying blob 169fbbebd80b skipped: already exists
Copying blob 09dd923221bc skipped: already exists
Copying blob 2083427d588a skipped: already exists
Copying blob 8ab90d31ccde skipped: already exists
Copying blob 7f8958a102ef skipped: already exists
Copying blob 9ae86fb5cef9 skipped: already exists
Copying blob 8ca443c97da5 done   |
Copying config 5be0615a54 done   |
Writing manifest to image destination
--> 5be0615a5483
Successfully tagged localhost/database:v2
5be0615a54839bf6f04478071885dd972ae8e959b1fed064d26d16ffd08a80d2

 

 

<빌드된 컨테이너 이미지 확인>

[root@zoomoney ~]# podman images
REPOSITORY                 TAG                IMAGE ID      CREATED             SIZE
localhost/database         v2                 5be0615a5483  About a minute ago  471 MB
localhost/backend          v2                 279c9f331c11  10 minutes ago      571 MB
localhost/frontend         v2                 e86184a14c0c  16 minutes ago      233 MB

 

<POD 생성 및 기동상태 확인>

[root@zoomoney ~]# podman pod create --publish 80:80 --publish 7777:7777 --name zoomoney1
3463429f13d138a2c6e79e6e4381c6915071f518247555c85e7aaba29980738f
[root@zoomoney ~]# podman pod ls
POD ID        NAME        STATUS      CREATED        INFRA ID      # OF CONTAINERS
3463429f13d1  zoomoney1   Created     5 seconds ago  02d5923b5723  1
77195cd53639  zoomoney    Running     16 hours ago   49bb7c151059  4
[root@zoomoney ~]#

 

<Container 이미지 기동>

podman container run -d --name frontend --pod zoomoney1 localhost/frontend:v2 
podman container run -d --name backend --pod zoomoney1 localhost/backend:v2 
podman container run -d --name database --pod zoomoney1 localhost/database:v2

'Cloud' 카테고리의 다른 글

Jenkins  (0) 2025.04.22
Docker 와 Podman 차이  (0) 2025.03.23
Skopeo  (0) 2025.01.21
Dev-Ops  (0) 2025.01.20
Cloud-Front  (0) 2025.01.15