0. 웨..?
- 원래는 AWS로 사이드 프로젝트 배포를 해보려고 했는데, 비용 문제로 어떻게 유지할 지 궁금해서 멘토님께 여쭤봤더니 redis는 따로 올리는 게 보편적이고(ElastiCache), ec2 하나로 서버랑 redis랑.. 등등을 한꺼번에 배포 하려면 메모리 사용량 초과해서 과금이 될 수도..ㅎ라고 답변을 주셨다... 개인 PC 메모리 충분하면 virtualBox로 vm 만들어서 배포해보는 것도 네트워크나 리눅스 공부가 될 것 같다고 추천해주셔서, 도전해본다. chatGPT와 함께하는... 여행...ㅋ
- PC 메모리가 16G, 프로젝트 띄우기만 하면 메모리 6G 정도가 필요하고, 기본적으로 2G를 사용하고 있으니.. 8G 정도 남는데... 안되면 노트북도 있으니 어떻게든 되지 않을지,,?ㅋ
1. 환경 구성
- VM은 VirtualBox라고 지정을 해주셨으니, 난 여기에 따를 것이고
- OS는 지금까지는 CentOS만 써봐서 CentOS로 할까 했는데.. 찾아보니 최근에는 Ubuntu를 많이 사용하고 커뮤니티도 더 잘 활성화 되어 있다고 해서 Ubuntu를 선택한다
기본 설정
DB 서버 (MySQL)
- 기본 메모리 : 5G
- 프로세서 : 3개
- 디스크 크기 : 35G
API (Application, Kafka)
- 기본 메모리 : 4G
- 프로세서 : 2개
- 디스크 크기 : 35G
Ubuntu에 Docker 및 Docker-compose 설치
# apt-get 업데이트
$ sudo apt-get update
# https 관련 패키지 설치
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
# Docker GPG 키 추가
$ curl -fsSL [https://download.docker.com/linux/ubuntu/gpg](https://download.docker.com/linux/ubuntu/gpg) | sudo apt-key add
# Docker apt 저장소 추가
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 시스템 패키지 업데이트
$ sudo apt-get update
# Docker 설치
$ sudo apt install docker.io
$ sudo snap install docker
# Docker 설치 확인
$ docker --version
# docker group 생성 (기본적으로 생성됨)
$ sudo groupadd docker
# docker group에 해당 유저 추가
$ sudo usermod -aG docker $USER
# docker-compose 설치 (최신 버전 확인 : https://github.com/docker/compose/releases)
$ sudo curl -L "https://github.com/docker/compose/releases/download/v[version]/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 권한 부여
$ sudo chmod +x /usr/local/bin/docker-compose
# 심볼릭 링크(바로가기?) 설정
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose# Docker 로그 확인
$ docker logs --tail 50 --follow --timestamps [container]
MySQL 무한 재실행 에러 발생
- 에러문
2024-07-02 13:26:04+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.4.0-1.el9 started.
2024-07-02 13:26:05+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2024-07-02 13:26:05+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.4.0-1.el9 started.
2024-07-02 13:26:05+00:00 [Note] [Entrypoint]: Initializing database files mysqld: Can't create directory '/var/lib/mysql/' (OS errno 17 - File exists)
2024-07-02T13:26:05.414556Z 0 [System] [MY-015017] [Server] MySQL Server Initialization - start.
2024-07-02T13:26:05.415590Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.4.0) initializing of server in progress as process 81
2024-07-02T13:26:05.416958Z 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
2024-07-02T13:26:05.416974Z 0 [ERROR] [MY-010119] [Server] Aborting
2024-07-02T13:26:05.417371Z 0 [System] [MY-015018] [Server] MySQL Server Initialization - end.- 문제 발생
ㅎㅎ 개발할 때 작성한 docker-compose 그대로 사용해서 한 번에 될 거라 생각 안했지만.. MySQL 컨테이너가 제대로 시작되지 않고 위의 에러를 뿜어내며 계속 재실행이 되풀이 됐다.. - 해결 방법
docker-compose.yml
services:
mysql:
image: mysql:8.4.0
container_name: mungstore-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mungstore
ports:
- 3306:3306
volumes:
- /home/db_data:/var/lib/mysql # 1. /home/db_data 부분이 원래는 공유 폴더 였는데, 경로를 바꿔줌
# 2. 도커를 실행 중인 사용자에게 /bome/db_data의 접근권한을 줌(아래 명령어 실행)
networks:
- mungstore아래 명령어 실행
$ sudo chown $(whoami) /home/db_data
$ sudo chgrp $(whoami) /home/db_data
docker-compose down 시 permission denied 에러 발생
- 에러문
Error response from daemon: cannot stop container: CONTAINER ID: permission denied- 해결 방법
아래 명령어 실행
$ sudo aa-remove-unknown
외부에서 vm MySQL 접속하기
- 기본적인 접속은 아래 글들을 참고했다.
ERROR :: Can't connect to server on '192.168.137.1' (10061)
- 접속이 안되는 것.. mysql이 꺼져있거나(설마)
- ip가 틀렸거나
- port가 틀렸거나
ERROR :: Lost connection to server at 'handshake': reading initial communication packet', system error: 0
- GG..
- bind-address 추가 건에 대하여..............
- my.cnf를 수정해야 하는데... vi, vim도 안먹힘
- apt, apt-get, yum도 안먹힘ㅠㅠ
- docker bash apt-get, yum, dnf command not found 참고해서 vim 깔기 성공 !
$ microdnf install -y vim - 대부분의 글에서는
/etc/mysql/mysql.conf.d/mysqld.cnf에bind-address = 0.0.0.0를 추가하라고 설명해 주는데 - 나는
/etc/my.cnf였음 (mysql 8.4.0) - 그리고 당연히 vm 터미널이 아니라 docker에 실행 중인 mysql 터미널에 있다는 것을.. ㅎㅎ(몰랐음)
docker-compose.yml
services:
mysql:
image: mysql:8.4.0
container_name: mungstore-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mungstore
ports:
- 13306:3306 # [vm docker에서 mysql에 할당해 줄 port] : [접속할 때 사용할 port]
volumes:
- /home/mysql/db_data:/var/lib/mysql
networks:
- mungstore가상 머신 포트 포워딩 설정
- 머신 > 설정 > 네트워크 > 고급 > 포트 포워딩(P)

IP 주소 설정
- 파일 > 도구 > 네트워크 관리자

가상 머신 간 통신하기
- 여기 참고 했음 (역시,, 최신 글 찾아 봐야 함)
- Virtualbox의 가상머신들 끼리 통신하기 설정
- Ubuntu 웹서버를 호스트에서 접속하기
EEROR : Table 'db.table' doesn't exist. But it does (or it should)
- 여러 이유로 발생할 수 있지만(권한..등)
- 나는 테이블명은 대문자인데, flyway의 생성문에서 테이블명이 소문자인 게 문제였음ㅋ
- MySQL > Table doesn't exist. But it does (or it should)
ERROR : Error Code : 1030 Got error 168 - 'Unknown (generic) error from engine' from storage engine
- DB 파일 꼬이거나 권한이 없거나 할 때 발생하는 듯
- 파일 따로 생성해줘서 해결
2024-07-04 16:56:13 SQL State : HY000
2024-07-04 16:56:13 Error Code : 1030
2024-07-04 16:56:13 Message : Got error 168 - 'Unknown (generic) error from engine' from storage engine
2024-07-04 16:56:13 Location : db/migration/V2__alter_table_member.sql (/deploy/nested:/deploy/api.jar/!BOOT-INF/classes/!/db/migration/V2__alter_table_member.sql)
2024-07-04 16:56:13 Line : 1
2024-07-04 16:56:13 Statement : ALTER TABLE MEMBER
2024-07-04 16:56:13 MODIFY LOGIN_FAIL_COUNT INTEGER NOT NULL DEFAULT 0접속 성공~

- 기동은 됐는데 ㅠ 테이블명 대소문자 때문에 db 작동이 원활하지 않음.. to be continued....
- 리눅스 환경에서 MySQL 대소문자 구분을 하지 않기 위한 설정 방법 알아보기
- 이유는 알았는데... docker 재실행 할 때 마다 설정이 밀림 ㅎ
- lower_case_table_names Settings in MySQL 8.0.12
- mysql 첫 세팅 시에만 적용된다고! docker-compose.yml에
--lower_case_table_names=1커맨드 추가해서 mysql 새로 띄움!!! 해결!!!
'프로그래밍' 카테고리의 다른 글
| 정규표현식(Regular Expression) (0) | 2021.07.09 |
|---|