본문 바로가기
IT(Tip)

cafe24 가상서버호스팅 우분투 20.04에 파이썬 3.x, MariaDB 10.4 설치

by good4me 2024. 5. 7.

goodthings4me.tistory.com

cafe24 가상서버호스팅 우분투 20.04에 파이썬 3, MariaDB 10.4 설치

 

카페24(cafe24) 가상서버호스팅(Ubuntu 20.04) 파이썬 환경에서 장고(Django) 웹 서비스를 하기 위한 환경 설정(Gunicorn, NginX, Let's Encrypt SSL 설치 포함)을 수행해 보고 그 절차를 정리해서 올려봅니다.

 

개발자도 엔지니어도 아닌 아마추어 수준에서 각 항목의 설치 절차를 찾아가며 수행한 내역을 정리한 것으로 다음과 같은 순서를 따라서 여러 번 수행한 결과를 토대로 작성한 것입니다.

 

  1. 우분투 20.04 패키지 관리자를 통해 필요한 소프트웨어(MariaDB 포함)를 설치합니다.
  2. Python 가상 환경을 생성합니다.
  3. 가상 환경 내에 Django 4.2 설치와 프로젝트를 생성합니다.
  4. 가상 환경 내에 Gunicorn을 설치하고 Django 애플리케이션을 실행합니다.
  5. Nginx를 설치(정적 파일 제공 설정 포함)하고 Gunicorn 연동 프록시 서버로 설정합니다.
  6. 무료 SSL을 설정하기 위해 Let's Encript SSL을 설치합니다.

 

본 포스팅 글에서는 위 내용 중 1번과 관련된 것들로,

 

먼저, 'cafe24 가상서버호스팅 서비스 신청' 내역을 확인하고,

서버 접속을 위한 PuTTY 설정과 각종 패키지를 설치하는 절차를 설명합니다. 

  • 우분투 패키지 관리자로 필요한 소프트웨어 설치
  • 현재 설치된 파이썬 버전 및 위치(경로) 확인하기
  • 파이썬 관련 표준 라이브러리(venv) 모듈 설치
  • Ubuntu 20.04 : MariaDB 설치
  • MariaDB 사용 명령 알아보기

그리고, MariaDB 관리 툴 HeidiSQL 접속 및 문제 발생 시 해결하는 방법을 올립니다.

 

이후 2, 3, 4번 포스팅 : https://goodthings4me.tistory.com/1013

 

cafe24 우분투 20.04에 파이썬 가상환경, Django, Gunicorn 설치

이전 포스팅(cafe24 가상서버호스팅 우분투 20.04에 파이썬 3.x, MariaDB 10.4 설치)에 이어서 파이썬 가상환경을 설치하고 그 위에서 웹 서비스를 하기 위한 장고(Django)와 Gunicorn 설치 절차를 정리해 봅

goodthings4me.tistory.com

 

5, 6번 포스팅 : https://goodthings4me.tistory.com/1014

 

우분투 파이썬에 Nginx 설치, Gunicorn 연동, Let's Encript SSL 설치

이전 포스팅에 이어서 카페24 우분투 20.04, 파이썬 가상환경(Django) 하에서 Nginx를 설치하고, Gunicorn과의 연동 설정과 무료 SSL인 Let's Encript SSL을 설치하는 절차를 마지막으로 정리해서 올려 봅니다.

goodthings4me.tistory.com

 

cafe24 가상서버호스팅 서비스 신청

cafe24의 가상서버호스팅 리눅스 상품 중 부담없이 시작할 수 있는 '일반형'을 선택하여 12개월 신청, 결제했습니다.

 

 

고성능 SSD가 장착된 카페24 가상서버호스팅
카페24 가상서버호스팅 상품들

  • 서비스명: SSD 가상서버 일반형
  • OS: Ubuntu 20.04
  • HDD 용량: 30G
  • 트래픽 용량: 300G
  • RAM 용량: 1G
  • IP: 211.xx.xxx.xx
  • 대표 도메인: borame.co.kr
  • 연결 도메인: xxxx.cafe24.com

위 상품은 OS만 설치되었기 때문에 나머지 부분은 직접 설치를 해야 합니다.

 

서버 접속을 위한 PuTTy 설정과 패키지 등 설치

Putty 초기 화면
Putty 초기 화면

 

  • Host Name (or IP address) : xxx.xxx.xxx.xxx IP 입력
  • Port : 22
  • Connection type : SSH 체크, Telnet (디폴트) 선택 확인
  • Saved Sessions : 해당 접속 건에 대한 저장 이름 입력 후 Save 버튼 클릭
  • Open 버튼 클릭

 

▶ PuTTy 실행 후 login 계정과 패스워드 입력

login as: xxxxxx
root@xxx.xxx.xxx.xxx's password:
Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-131-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Fri 19 Apr 2024 10:04:14 AM KST

  System load:  0.0                Processes:             132
  Usage of /:   11.2% of 25.22GB   Users logged in:       0
  Memory usage: 18%                IPv4 address for eth0: xxx.xxx.xxx.xxx
  Swap usage:   0%


328 updates can be installed immediately.
252 of these updates are security updates.
To see these additional updates run: apt list --upgradable

New release '22.04.3 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

*** System restart required ***
Last login: Sun Jan  7 13:18:49 2024 from xxx.xxx.xxx.xxx
root@xxxx:~#

 

putty를 실행하고 login as: 접속 ID 입력과 패스워드를 입력하면 putty 접속이 되고 위 이미지와 같이 패키지 업데이트와 시스템 업그레이드에 관한 정보를 보여줍니다.

 

이후 우분투 리눅스 프롬프트(root@xxxx:~# )에 명령어를 줍니다. 여기서 xxxx는 본인의 cafe24 신청 id가 표시됩니다.

 

우분투 패키지 관리자로 필요한 소프트웨어 설치

터미널 진입 후 아래와 같은 명령어 입력으로 각종 패키지 업데이트, 보안 업데이트, 파이썬 버전 확인, 웹 서버 관련 설정, 장고 설치 등을 진행합니다.

root@xxxx:~# ls
root@xxxx:~# ls -al
total 52
drwx------  5 root root  4096 Dec 29  2022 .
drwxr-xr-x 22 root root  4096 Dec 29  2022 ..
-rw-------  1 root root  2681 Dec 29  2022 .bash_history
-rw-r--r--  1 root root  3106 Feb 20  2014 .bashrc
drwx------  2 root root  4096 Jan 18  2018 .cache
drwx------  3 root root  4096 Jul 25  2018 .gnupg
-rw-------  1 root root    28 Jul 20  2020 .lesshst
-rw-r--r--  1 root root   161 Dec  5  2019 .profile
drwxr-xr-x  2 root root  4096 Jul 25  2018 .vim
-rw-------  1 root root 10660 Dec 29  2022 .viminfo
-rw-r--r--  1 root root   168 Jul 25  2018 .wget-hsts
root@xxxx:~#

 

[참고] 리눅스 명령어 설명
ls : 이 명령은 디렉터리(폴더) 내의 파일 목록을 보여줍니다
ls -al : 파일 전체 목록을 보여줍니다.

 

먼저, 다음 명령으로 보안 관련 업데이트를 합니다.

root@xxxx:~# sudo apt update && sudo apt upgrade

root@xxxx:~# sudo apt update
root@xxxx:~# apt list --upgradable
root@xxxx:~# sudo apt upgrade

 

위 명령은 시스템에 설치 가능한 패키지 업그레이드 목록을 업데이트하고 보안 업데이트를 합니다.
시간이 좀 걸리며, 중간에 [y/n]이 나오면 y 입력합니다.
추가 업그레이드 가능한 패키지 목록을 보려면 아래 명령어를 실행합니다.

root@xxxx:~# apt list --upgradable
Listing... Done
root@xxxx:~#

 

현재 설치된 파이썬 버전 및 위치(경로) 확인하기

root@xxxx:~# python -V
Python 2.7.18
root@xxxx:~# python3 -V
Python 3.8.10
root@xxxx:~# django-admin --version

Command 'django-admin' not found, but can be installed with:
apt install python3-django

root@xxxx:~# which python3
/usr/bin/python3
root@xxxx:~#
root@xxxx:~# ls /usr/bin/|grep python
dh_python2
dh_python3
fail2ban-python
python
python2
python2.7
python3
python3.8
root@xxxx:~#

root@xxxx:~# whereis python
python: /usr/bin/python /usr/bin/python3.8 /usr/bin/python2.7 /usr/lib/python3.9 /usr/lib/python3.8 /usr/lib/python2.7 /etc/python /etc/python3.8 /etc/python2.7 /etc/python3.4 /usr/local/lib/python3.8 /usr/local/lib/python2.7 /usr/share/python
root@xxxx:~#

root@xxxx:~# ls /usr/lib/python3.9
distutils  lib2to3  lib-dynload
root@xxxx:~# ls /usr/lib/python3.8
abc.py                       heapq.py           selectors.py
aifc.py                      hmac.py            shelve.py
antigravity.py               html               shlex.py
....

 

python3.9 폴더가 있지만, 파일이 없음 확인. 3.8 버전으로 진행해야 함

 

[참고] 리눅스 명령어 설명

  • which python3 : 현재 시스템에서 실행 가능한 python3 인터프리터의 경로를 찾아주는 명령입니다.
  • ls /usr/bin/ : ls 명령에 대상 디렉터리를 지정합니다. 여기서 /usr/bin/는 일반적으로 리눅스 시스템에서 실행 파일이 위치하는 디렉터리입니다
  • | : 이 기호는 "파이프(pipe)"라고 부르며, 하나의 명령 출력을 다른 명령의 입력으로 보냅니다.
  • grep python : grep은 텍스트에서 패턴을 찾는 명령입니다. 여기서는 ls 명령의 출력 중 "python"이라는 문자열을 포함하는 행을 필터링합니다.

 

IT, 전자제품 선물

 

 

▶ 파이썬 경로인 usr/bin/python3로 이동하여 확인을 하려면,

root@xxxx:~# pwd
/root
root@xxxx:~# cd ..
root@xxxx:/# pwd
/
root@xxxx:/# ls
bin   dev  home        initrd.img.old  lib64       media  opt   root  sbin  sys  usr  vmlinuz
boot  etc  initrd.img  lib             lost+found  mnt    proc  run   srv   tmp  var  vmlinuz.old
root@xxxx:/# 
root@xxxx:/# cd usr
root@xxxx:/usr# ls
bin  games  include  lib  libexec  local  sbin  share  src
root@xxxx:/usr# cd bin
root@xxxx:/usr/bin# ls py*
py3clean     pybuild    pydoc2    pydoc3.8      pygettext3    pyjwt3   python2.7  pyversions
py3compile   pyclean    pydoc2.7  pygettext2    pygettext3.8  python   python3
py3versions  pycompile  pydoc3    pygettext2.7  pyhtmlizer3   python2  python3.8
root@xxxx:/usr/bin#
root@xxxx:/usr/bin# cd ~
root@xxxx:~#

root@xxxx:/# cd ~
root@xxxx:~# pwd
/root
root@xxxx:~# ls -a
.   .bash_history  .cache   .gnupg    .profile  .viminfo        .wget-hsts
..  .bashrc        .dotnet  .lesshst  .vim      .vscode-server
root@xxxx:~# pwd
/root
root@xxxx:~#

 

[참고] 리눅스 명령어 설명

  • cd .. : 이 명령은 현재 작업 중인 디렉터리에서 한 단계 상위 디렉터리로 이동하는 명령입니다. 이 명령을 실행하면 현재 디렉토리의 부모 디렉토리로 이동합니다.
  • pwd : "print working directory"의 약자로, 현재 작업 중인 디렉터리의 경로를 출력합니다. 즉, 어떤 디렉터리에 현재 위치해 있는지를 알려줍니다.
  • cd ~ : 이 명령은 사용자의 홈 디렉터리로 이동하는 것을 의미합니다. '~' 기호는 사용자의 홈 디렉터리를 나타내며, 'cd'는 'change directory'의 약자입니다. 따라서 'cd ~' 명령은 사용자의 홈 디렉터리로 이동하겠다는 것입니다.

 

파이썬 관련 표준 라이브러리(venv) 모듈 설치

distutils는 Python의 표준 빌드 및 배포 도구, gdbm은 GNU 데이터베이스 관리 시스템의 일종으로 Ubuntu 20.04에서는 기본적으로 2개 라이브러리가 설치되어 있다고 합니다. (설치되어 있는지 확인하고 싶으면 which 또는 whereis 명령으로 찾아보면 됨)

 

그래서 pip와 venv만 sudo apt install python3-pip python3-venv 명령만 진행합니다.

 

※ python 별칭 설정 명령

alias python='python3'
alias pip='python3 -m pip'

 

※ 파이썬 버전 확인

root@xxxx:~# python --version
Python 3.8.10
root@xxxx:~# pip -V
pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
root@xxxx:~#

 

※ VS Code에서 원격 접속하기

  • F1 > Remote-SSH: 호스트에 연결… > + 새 호스트에 추가…
  • F1 > 또는 Remote-SSH: 새 호스트에 추가…
  • ssh root@xxx.xxx.xxx.xxx 입력
  • 비밀번호 입력

 

Ubuntu 20.04 : MariaDB 설치

설치 전에 먼저 해줘야 할 것은 cafe24에서 방화벽 설정이 되어있기 때문에 mariadb 설치 시 이에 대한 보안 정책을 추가해야 합니다.

 

※ 방화벽 정책(Rule) 추가

접근 정책에 따라 서비스 이름, 프로토콜, 포트 등 정책(Rule) 추가

 

접근 정책에서 익명접속(모든 IP) 선택하고 아래와 같이 설정 후 확인 클릭함

  • 서비스 이름 필수: mariadb
  • 프로토콜 필수: TCP
  • 목적지 포트 필수 : 3306
  • 접근차단 IP: xxx.xxx.xxx.xxx

 

※ mariaDB 설치 명령

root@xxxx:~# sudo apt install mariadb-server
root@xxxx:~#

 

※ mariaDB  버전 확인

root@xxxx:~# mariadb -V
mariadb  Ver 15.1 Distrib 10.3.39-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
root@xxxx:~#

 

설치가 완료되면 MariaDB 서비스가 자동으로 시작됩니다.


데이터베이스 서버가 실행 중인지 확인하려면 다음을 입력합니다

root@xxxx:~# sudo systemctl status mariadb
● mariadb.service - MariaDB 10.3.39 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-04-19 12:39:49 KST; 1min 21s ago
       Docs: man:mysqld(8)
             https://mariadb.com/kb/en/library/systemd/
   Main PID: 58393 (mysqld)
     Status: "Taking your SQL requests now..."
      Tasks: 31 (limit: 1125)
     Memory: 67.3M
     CGroup: /system.slice/mariadb.service
             └─58393 /usr/sbin/mysqld

Apr 19 12:39:49 jeje.cafe24.com systemd[1]: Starting MariaDB 10.3.39 database server...
Apr 19 12:39:49 jeje.cafe24.com systemd[1]: Started MariaDB 10.3.39 database server.
root@xxxx:~#

 

Active: active(running) 부분이 녹색으로 표시되면 실행 중입니다.

 

장고 4.2에 MariaDB 설치 시 참고 및 주의사항

Django 4.2에서는 mariaDB 10.4 버전을 권장합니다.

Django 4.2 release notes에 보면 
Django 4.2 supports MariaDB 10.4 and higher ~
즉, 장고 4.2의 경우 mariadb 10.4 이상이 필요하다는데...

 

MariaDB 10.4를 Ubuntu에 설치하는 방법은 다음과 같습니다.

 

MariaDB 저장소를 시스템에 추가합니다. 

root@xxxx:~/jejedj# sudo apt-get install software-properties-common
root@xxxx:~/jejedj# sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
root@xxxx:~/jejedj# sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://mariadb.mirror.globo.tech/repo/10.4/ubuntu focal main'

 

 

저장소를 추가한 후에는 패키지 목록을 업데이트하고 MariaDB를 설치합니다.

root@xxxx:~/jejedj# sudo apt-get update
root@xxxx:~/jejedj# sudo apt-get install mariadb-server

 

설치 중에 MariaDB의 루트 암호를 설정하라는 메시지가 표시되면 암호를 입력하고 확인합니다.

 

 

설치가 완료되면 MariaDB 서비스를 시작하고 부팅 시 자동으로 시작되도록 설정합니다.

root@xxxx:~/jejedj# sudo systemctl start mariadb
root@xxxx:~/jejedj# sudo systemctl enable mariadb

 

MariaDB 10.4가 시스템에 잘 설치되었는지 sudo systemctl status mariadb 명령으로 다시 확인하고, 버전은 아래 명령으로 확인합니다.

root@xxxx:~/jejedj# mariadb -V
mariadb  Ver 15.1 Distrib 10.4.33-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
root@xxxx:~/jejedj#

 

MariaDB 사용 명령 알아보기

▶ MariaDB 진입(실행 명령)

root@xxxx:~# sudo mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 36
Server version: 10.3.39-MariaDB-0ubuntu0.20.04.2 Ubuntu 20.04

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)]>

 

'(none)'은 현재 작업 중인 데이터베이스를 가리키는 것으로 'none'은 현재 선택된 데이터베이스가 없다는 것을 의미합니다.

 

MariaDB [(none)]> 콘솔에서 나갈 때는 exit

MariaDB [(none)]> exit

 

 

MariaDB 설치 시 root 사용자는 암호 없는 상태로 설치가 됩니다. 보안을 위해 루트 사용자의 암호를 설정해 줍니다.

MariaDB [(none)]> GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '패스워드' WITH GRANT OPTION;

Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> exit
root@xxxx:~# sudo systemctl restart mariadb

 

권한 부여 후 재시작해야 합니다.

sudo systemctl restart mariadb

 

그리고, 특정 데이터베이스인 경우, 다음과 같이 명령을 주어 실행합니다.

GRANT ALL PRIVILEGES ON your_database.* TO 'your_username'@'%' IDENTIFIED BY 'your_password';
MariaDB [(none)]> FLUSH PRIVILEGES;

 

다시 db에 접속하는 명령은 sudo mysql 또는 sudo mysql -u root -p 를 통해서 패스워드를 입력할 수 있습니다.

# 루트 사용자로 MariaDB 서버에 로그인하려면
root@xxxx:~# sudo mysql

# root 사용자가 아닌 경우, 패스워드 입력 필요
root@xxxx:~# sudo mysql -u root -p
Enter password:

※ sudo mysql -u root -p 명령에 패스워드 입력 시, 기존 비밀번호는 공백이기 때문에 그냥 엔터키를 누르면 됨

 

MariaDB 콘솔에 접속하면 기본적으로 어떤 데이터베이스에도 연결되어 있지 않으며, MariaDB [(none)]> 프롬프트에서 사용자는 직접 데이터베이스를 선택해서 사용할 수 있습니다.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.000 sec)

MariaDB [(none)]>

 

※ user 테이블 조회, 데이터베이스 선택 후 테이블 조회 명령

#-- user 테이블을 조회 --#
MariaDB [(none)]> SELECT * FROM mysql.user;

#-- database 선택 후 테이블 조회 --#
MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [mysql]> SELECT * FROM user;

 

 

▶ 다음은 MariaDB 기본 명령어들입니다.

# MariaDB 상태 확인
systemctl status mariadb

# MariaDB 시작
systemctl start mariadb

# MariaDB 활성화
systemctl enable mariadb

# MariaDB 중지
sudo systemctl stop mysql

# MariaDB 재시작
sudo systemctl restart mysql

#systemctl를 못 쓰는 상황이라면 service 명령어로 해주시면 됩니다
sudo service mariadb start

##-- DB 만들기, User 추가 등의 명령어 모음입니다. --##

# 데이터베이스 확인
show databases;

# database 접속은 use db명; 으로 합니다.
use mysql;

# DB 만들기
CREATE DATABASE 데이터베이스명;

# DB 삭제하기
DROP DATABASE 데이터베이스명;

##-- 사용자 생성 --##
# 로컬접속용
CREATE USER '사용자명'@'localhost' IDENTIFIED BY '비밀번호';

# 외부접속용
CREATE USER '사용자명'@'%' IDENTIFIED BY '비밀번호';

# 사용자 확인
SELECT HOST, USER, PASSWORD FROM USER;

##-- 사용자 삭제 --##
# 로컬접속용
DROP USER '사용자명'@'localhost';

# 외부접속용
DROP USER '사용자명'@'%';

##-- 권한 부여 --##
# 로컬접속용
GRANT ALL PRIVILEGES ON 데이터베이스명.* TO '사용자명'@'localhost';

# 외부접속용
GRANT ALL PRIVILEGES ON 데이터베이스명.* TO '사용자명'@'%';

# 갱신
FLUSH PRIVILEGES;

# 패스워드 변경
SET PASSWORD FOR '사용자명'@'%' = PASSWORD('비밀번호');

 

 

MariaDB 관리 툴 HeidiSQL 접속 및 문제 발생 시 해결

HeidiSQL 등의 관리 툴에서 외부 접속 시,

'Access denied for user 'root'@'localhost' (using password: YES) 연결 실패함' 오류창

또는 Host 'ip' is not allowed to connect to this MariaDB server 메시지창이 뜨는 경우,

이는 원격 접속 권한(모든 원격지에서 DB에 접속)을 부여하지 않아서 발생하는 경고 메시지입니다.

 

HeidiSQL 사용 시 나타날 수 있는 문제로 다음 4가지 형태가 있을 수 있습니다.

 

※ HeidiSQL을 실행하여 접근하는 방법 

  • 네트워크 유형 : MariaDB (TCP/IP)
  • Library : libmariadb.dll
  • 호스트 / IP : 서버 IP
  • 사용자 : root
  • 암호 : db 암호 입력
  • 포트 : 3306

그런 후 열기 클릭 시, Can't connect to server on 'IP'(10061) 연결 실패 오류창이 뜰 경우, 확인해봐야 할 사항으로 다음과 같습니다.

  1. MariaDB가 실행 중인지 아닌지
  2. 잘못된 서버 IP 주소 또는 호스트 이름 설정 여부
  3. 방화벽 설정 - 해당 포트(기본적으로 3306)로의 연결이 허용되었는 확인
  4. MariaDB의 구성(설정) 파일인 my.cnf에서 특정 IP 주소나 호스트 이름에서의 외부 연결을
    허용하는 옵션이 활성화되어 있는지 확인

1, 2, 3번은 실행 여부와 설정 값들을 확인하면 되고,

3번이 Cafe24 방화벽 문제인 경우에는 위에서 설명했던 것처럼 INBOUND (외부에서 내부로 접근) 정책 추가로 해결할 수 있습니다.

 

Ubuntu에서는 기본적으로 ufw (Uncomplicated Firewall)를 사용하여 방화벽을 관리합니다.

MariaDB가 사용하는 포트인 3306번을 허용하는 방법은 위처럼 cafe24에서 방화벽 정책을 수정하는 방법과, Ubuntu에서 직접 설정하는 방법이 있습니다.

# 모든 IP 3306 허용 명령
sudo ufw allow 3306

# 특정 IP만 3306 허용 명령
sudo ufw allow from IP to any port 3306

# 변경 사항 적용
sudo ufw reload

# 방화벽이 inactive이면 허용된 상태임
root@xxxx:~# sudo ufw status
Status: inactive

 

그리고 모든 원격지에서 DB에 접속을 하도록 설정했는지 PuTTY를 열어서 아래와 같이 확인합니다.

MariaDB [(none)]> GRANT ALL PRIVILEGES ON . TO '사용자명'@'%' IDENTIFIED BY '비밀번호' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> SHOW GRANTS FOR 'root'@'%';

 

마지막으로 4. 번 항목에 대한 해결 방법은 좀 복잡할 수 있는데, MariaDB의 외부 연결을 허용하기 위해서 환경설정 파일을 확인하고 수정해야 합니다.

 

즉, 해당 파일에서 외부 연결을 허용하는 옵션이 활성화되었는지 확인하고 필요에 따라 수정할 수 있는데요, 환경설정 파일 내에 있는 bind-address 옵션을 찾아서 ip를 확인해 봅니다.

 

만약 이 옵션이 주석 처리되어 있다면, 기본적으로 모든 IP 주소(외부에서의 모든 연결)로부터의 연결을 허용합니다.

특정 IP로 설정되어 있다면, 외부에서의 연결은 해당 IP 주소로만 가능합니다.

 

HeidiSQL 등에서 접속하기 위해서는 주석 처리하거나 0.0.0.0 ip를 부여합니다.

 

환경설정 파일은 다음과 같이 다양한 위치에 존재할 수 있다고 하는데, 확인 결과 bind-address 옵션은 50-server.cnf 파일에 있었습니다.

/etc/mysql/my.cnf, 
/etc/mysql/mariadb.conf.d/50-server.cnf

 

수정 방법은 다음과 같이  50-server.cnf 파일 내용 중에서 bind-address를 0.0.0.0으로 수정하면 됩니다.

bind-address를 수정하려면 nano 또는 vi 에디터를 사용하는데, 아래를 cat 명령으로 내용을 확인한 것이고,

root@xxxx:~# cat /etc/mysql/mariadb.conf.d/50-server.cnf
#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql

# this is read by the standalone daemon and embedded servers
[server]

# this is only for the mysqld standalone daemon
[mysqld]

#
# * Basic Settings
#
user                    = mysql
pid-file                = /run/mysqld/mysqld.pid
socket                  = /run/mysqld/mysqld.sock
#port                   = 3306
basedir                 = /usr
datadir                 = /var/lib/mysql
tmpdir                  = /tmp
lc-messages-dir         = /usr/share/mysql
#skip-external-locking

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 127.0.0.1

 

vi 수정 명령은 다음과 같습니다.

root@xxxx:~# vi /etc/mysql/mariadb.conf.d/50-server.cnf


자판에서 i 누르고 insert 모드에서 화살표 키로 이동하여 다음과 같이 수정합니다.

기존 : bind-address = 127.0.0.1

수정 : bind-address = 0.0.0.0

 

수정 완료 후 자판에서 다음 키를 순서대로 누릅니다.
ESC
:wq! Enter

 

수정 후에는 변경 사항을 적용하기 위해 MariaDB를 재시작합니다.

sudo systemctl restart mariadb

root@xxxx:~# sudo systemctl restart mariadb

 

※ 참고) mariadb 명령

sudo systemctl stop mariadb
sudo systemctl start mariadb
sudo systemctl status mariadb

 

또는 한 번에
sudo service mysql restart

 

다음 포스팅은 파이썬 가상환경 설치, 장고(Django) 설치, Gunicorn 설치 절차에 관련 글입니다.

댓글