J-한솔넷

그누보드 6 설치하기, 삽질기 본문

프로그래밍/Python

그누보드 6 설치하기, 삽질기

jhansol 2024. 6. 21. 02:21

참! 요즘 다양하게 시도해봅니다. 오늘은 저의 주종목이 아닌 Python과 관련된 내용입니다. 오늘 저의 지인분이 마무리하지 못한 프로젝트를 받아 마무리하는 것으로 협의가 되었습니다. 그누보드로 되어 있다고 해서 덥석 받았더니만, URL 형식이 그누보드 5의 형식이 아닌 것을 확인하고 사이트에 들어 가보니 그누보드 6이 올아와 있네요. 그런데, 이건 Python으로 되어 있네요. ㅠㅠ. 아직 소스는 받아보지 못했는데 밤이 늦어 내일 확인하고 받아봐야 할 것 같습니다. 그누보드 6여야 하는데....
그러면 받지 않았을 텐데

~ 아

받았으니 마무리를 지어야 하겠죠?

그래서 일단 설치를해서 사용해보려고 합니다.

그누보드 설치

그누보드 6는 아직 안정화 버전이 아니고, 공부하는 사람에게 추천한다고 되어 있습니다. 그래서인지 Github 저장소에서 받아 설치하도록 되어 있습니다.

git clone https://github.com/gnuboard/g6.git

내려받은 폴더로 이동한 후 가상환경에서 실행하도록 하고 있습니다. 그런데 Ubuntu에서는 가상환경을 생성할 수 없다고 하네요. 그래서 가상환경을 생성하기 전에 필요한 패키지를 먼저 설채해줘야 합니다.

cd g6
apt install python3.12-venv
python3 -m venv venv

가상환경을 생성했으면 아래의 명령으로 가상환경을 활성화해줍니다. 그리고 필요한 패키지를 설치합니다.

source venv/bin/activate
pip3 install -r requirements.txt

데이터베이스 준비

노트북에는 MySQL 8.0이 설치되어 있습니다. 그누보드용 데이터베이스를 준비해두겠습니다. 현재 개발용으로 dbadmin이라는 계정이 있으므로 데이터베이스만 생성했습니다.

create database test_gnu;

그누보드 실행

uvicorn을 이용하여 그누보드 어플리케이션을 실행합니다. 저의 Ubuntu 노트북에는 이미 nginx가 80번 포트로 실행되고 있기 때문에 uvicorn 의 기본 포트인 8000 포트로 실행을 해줍니다. 이 경우 포트부분은 생략해도 됩니다. 하지만 그누보드 문서에는 이렇게 되어 있어 그냥 적어뒀습니다.

uvicorn main:app --reload --host 0.0.0.0 --port 8000

브라우즈로 접속하여 설치 마무리

아래 그림과 같이 브라우즈로 접속하면 env 파일이 없습니다. 설치를 진행주세요 라고 메시지가 출력됩니다. 확인클릭하여 다음 화면으로 진행합니다.

그러면 아래 그림과 같이 그누보드 6 안내 페이지가 표시됩니다. 아래의 설치하기 버튼을 클릭하여 설치를 진행합니다.

라이센스 안내 페이지에서 동의합니다에 체크한 후 다음 버튼을 클릭합니다.

설치의 마지막 단계로 데이터베이스 설정을 해야합니다. 저의 경우 MySQL, 계정은 dbadmin, 비밀번호는 xxxx, 데이터베이스 이름은 test_gnu, 그리고 사이트 관리자 계정의 비밀번호를 지정하고 다음 버튼을 클릭했습니다.

데이터베이스 설정을 마무리하면 설치를 마무리하는 화면이 출력되고, 이어 매인으로 이동 버튼이 표시됩니다. 설치가 완료되었으니 버튼을 클릭하여 매인 화면으로 이동합니다.

그러면 아래 그림과 같이 매인화면이 출력됩니다.

관리자 계정으로 로그인한 후 우측 상단의 사용자 아이콘을 클릭하면 관리자 메뉴가 보입니다. 이 메뉴를 클릭하면 관리자용 페이지로 접근할 수 있습니다.

관리자 화면은 기존 그누보드 5와는 차이가 많아 보이고, 아직 개발중이라는 느낌이 듭니다.

마치며...

아들과 파이썬을 공부하면서 익숙하지 않은 언어로 PHP 만큼 개발할 수 있을까하는 막연함으로 입문정도만 하고 말았었는데, 설치 과정에서 공부의 목적으로 해보는 것으로눈 좋을 것 같습니다. 오늘의 일을 계기로 파이선을 활용하는 시발점이 대기를 기대해봅니다. 그리고 파이선 웹 서비스 서버 실행환경 설정을 맛볼 수 있는 좋은 계기였습니다.

그리고 한 가지 더!!!

가상환경을 생성하고 활성화는 했는데, 비활성화하는 명령(deactive)이 없다고 나오네요. 구글링, ChatGPT를 이용해 확인해보니 해당 명령으로 비활성화한다고 되어 있으나 해당 명령이 없다고 나옵니다. 혹 이 부분 아시는 분 있을까요?

자라보고 놀란 가슴 솥뚜껑보고 놀란다.

아놔~
포스팅하고 그누보드 5의 클린 URL(그누보드 환경설정에는 짧은주소라고 표현됨) 설정에 관련된 내용을 구글링하니 내용이 있군요. 그누보드를 많이 사용해보지 않은 티가 팍팍 납니다. 우리 속담에 자라보고 놀란 가슴 솥뚜껑보고 날란다. 이 있는데, 제가 딱 그짝이네요.

아래 링크를 클릭하면 해당 설정에 대한 메뉴얼을 볼 수 있습니다.

짤은주소

저의 노트북에는 Nginx가 설치되어 있어 숫자에 체크한 후 Nginx 설정 코드 보기를 클릭하여 내용을 복사한 후 서버 설정에 적용한 후 Nginx를 재실행했습니다. 설정 전체 내용은 아래와 같습니다.

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;

        index index.php index.html index.htm index.nginx-debian.html;

        server_name localhost admin.sites.wd;

        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

        location = /favicon.ico { access_log off; log_not_found off; }
        location = /robots.txt { access_log off; log_not_found off; }

        location ~ \.php$ {
                fastcgi_pass unix:/run/php/php8.2-fpm.sock;
                fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
                include fastcgi_params;
                fastcgi_hide_header X-Powered-By;
        }

        location ~ /\.(?!well-known).* {
                deny all;
        }
}

server {
        listen 80;
        listen [::]:80;

        listen 443;
        listen [::]:443;

        ssl_certificate /etc/ssl/private/dev.crt;
        ssl_certificate_key /etc/ssl/private/dev.key;

        index index.php index.html index.htm index.nginx-debian.html;

        server_name ~^(?<host_name>[\w\-]+)\.(?<organization>[\w\-]+)\.wd$;

        set $site /home/jhansol/sites/$organization/$host_name;
        root $site;

        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

        location = /favicon.ico { access_log off; log_not_found off; }
        location = /robots.txt { access_log off; log_not_found off; }

        location ~ \.php$ {
                fastcgi_pass unix:/run/php/php8.2-fpm.sock;
                fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
                include fastcgi_params;
                fastcgi_hide_header X-Powered-By;
        }

        if (!-e $request_filename) {
                rewrite ^/shop/list-([0-9a-z]+)$ /shop/list.php?ca_id=$1&rewrite=1 break;
                rewrite ^/shop/type-([0-9a-z]+)$ /shop/listtype.php?type=$1&rewrite=1 break;
                rewrite ^/shop/([0-9a-zA-Z_\-]+)$ /shop/item.php?it_id=$1&rewrite=1 break;
                rewrite ^/shop/([^/]+)/$ /shop/item.php?it_seo_title=$1&rewrite=1 break;
                rewrite ^/content/([0-9a-zA-Z_]+)$ /bbs/content.php?co_id=$1&rewrite=1 break;
                rewrite ^/content/([^/]+)/$ /bbs/content.php?co_seo_title=$1&rewrite=1 break;
                rewrite ^/rss/([0-9a-zA-Z_]+)$ /bbs/rss.php?bo_table=$1 break;
                rewrite ^/([0-9a-zA-Z_]+)$ /bbs/board.php?bo_table=$1&rewrite=1 break;
                rewrite ^/([0-9a-zA-Z_]+)/write$ /bbs/write.php?bo_table=$1&rewrite=1 break;
                rewrite ^/([0-9a-zA-Z_]+)/([^/]+)/$ /bbs/board.php?bo_table=$1&wr_seo_title=$2&rewrite=1 break;
                rewrite ^/([0-9a-zA-Z_]+)/([0-9]+)$ /bbs/board.php?bo_table=$1&wr_id=$2&rewrite=1 break;
        }
}