{"id":33566881,"url":"https://github.com/gnuboard/g6","last_synced_at":"2025-11-28T04:04:38.099Z","repository":{"id":217441348,"uuid":"691933728","full_name":"gnuboard/g6","owner":"gnuboard","description":"파이썬 게시판 그누보드6 : GNUBOARD6 is Python CMS with fastapi","archived":false,"fork":false,"pushed_at":"2024-07-12T06:31:08.000Z","size":14393,"stargazers_count":277,"open_issues_count":26,"forks_count":97,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-09-18T04:54:58.523Z","etag":null,"topics":["cms","fastapi","gnuboard","jinja2","korea","orm","pydantic","python","sqlalchemy"],"latest_commit_sha":null,"homepage":"https://sir.kr","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gnuboard.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-09-15T07:43:43.000Z","updated_at":"2025-09-15T17:38:47.000Z","dependencies_parsed_at":"2024-02-26T01:46:22.438Z","dependency_job_id":"70442cd3-e95b-46a5-be4b-01c841ef5866","html_url":"https://github.com/gnuboard/g6","commit_stats":null,"previous_names":["gnuboard/g6","gnuboard/gnu6"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/gnuboard/g6","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnuboard%2Fg6","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnuboard%2Fg6/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnuboard%2Fg6/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnuboard%2Fg6/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gnuboard","download_url":"https://codeload.github.com/gnuboard/g6/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnuboard%2Fg6/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27282337,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-26T02:00:06.075Z","response_time":193,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cms","fastapi","gnuboard","jinja2","korea","orm","pydantic","python","sqlalchemy"],"created_at":"2025-11-28T04:04:32.602Z","updated_at":"2025-11-28T04:04:33.175Z","avatar_url":"https://github.com/gnuboard.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# GNUBOARD6 is Python CMS with fastapi\n\u003cp align=\"center\"\u003e\n   \u003cimg alt=\"PyPI - Python Version\" src=\"https://img.shields.io/pypi/pyversions/fastapi?logo=python\u0026color=%233776AB\"\u003e\n   \u003ca href='https://g6.demo.sir.kr/' target='_blank'\u003e\n      \u003cimg alt=\"Static Badge\" src=\"https://img.shields.io/badge/G6%20Demo-%234d0585\"\u003e\n   \u003c/a\u003e\n\u003c/p\u003e\n\n## 데모 사이트\n- [https://g6.demo.sir.kr/](https://g6.demo.sir.kr/)\n\n## 커뮤니티\n### 그누보드6 커뮤니티\n- [https://sir.kr/main/g6](https://sir.kr/main/g6)\n\n### 그누보드 유튜브 채널\n- [https://www.youtube.com/@gnuboard-official](https://www.youtube.com/@gnuboard-official)\n\n## 시작하기\n### 1. 설치\n- Git을 사용한 설치를 권장합니다.\n- 루트 디렉토리에 `.env` 파일이 없다면 설치를 자동으로 진행합니다.\n\n#### 설치 방법\n```bash\n# Github에서 그누보드6 복사 및 설치합니다.\ngit clone https://github.com/gnuboard/g6.git\n```\n\n```bash\n# cd 명령어를 이용하여 g6 디렉토리로 이동합니다.\ncd g6\n```\n\n```bash\n# 가상환경을 만듭니다. 필수 설치 요소는 아닙니다.\npython -m venv venv\n# 또는\npython3 -m venv venv\n\n# Linux\nsource venv/bin/activate\n\n# Windows\nsource venv\\Scripts\\activate\n# 또는\nsource venv/Scripts/activate\n```\n\n```bash\n# 실행에 필요한 파이썬 패키지들을 설치합니다.\npip install -r requirements.txt\n# 또는\npip3 install -r requirements.txt\n```\n\n```bash\n# uvicorn을 이용하여 그누보드6을 실행합니다.\n# 기본으로 8000번 포트를 사용합니다.\n\n# Linux\nuvicorn main:app --reload --host 0.0.0.0 --port 8000\n\n# Windows\nuvicorn main:app --reload\n```\n\n#### 그누보드6 데이터베이스 설정 방법\n1. 웹브라우저를 열고 **http://127.0.0.1:8000** 로 접속합니다.\n   - Windows의 경우: 브라우저에서 http://127.0.0.1:8000 또는 http://localhost:8000 으로 접속\n   - Linux의 경우: 브라우저에서 http://IP주소:8000 으로 접속\n      - 외부서버의 아이피가 49.247.14.5 인 경우 http://49.247.14.5:8000 으로 접속하세요.\n\n2. `.env 파일이 없습니다. 설치를 진행해 주세요.` 라는 경고창과 함께 설치 페이지로 이동합니다.\n\n3. 설치 메인페이지에서 설치할 그누보드버전, 파이썬버전, FastAPI버전 및 안내 사항을 확인할 수 있습니다.\n\n4. 그누보드6 라이센스를 확인하고 동의합니다.\n\n5. 데이터베이스 설정을 진행합니다.\n   - **MySQL, PostgreSQL, SQLite** 중 하나의 데이터베이스를 선택하여 설정할 수 있습니다.\n      - MySQL, PostgreSQL : 연결에 필요한 정보들을 입력합니다.\n      - SQLite : 연결정보가 필요 없으며, 설치 시 루트 디렉토리에 `sqlite3.db` 데이터베이스 파일이 생성됩니다.\n   - 접두사를 입력합니다. \n      - `{영문+숫자}_` 형식으로 입력해야 합니다.\n      - 기본값은 `g6_` 입니다(예: gnuboard6_)\n   - 재설치 여부를 체크합니다. (선택)\n      \u003e **Warning**  \n      \u003e 재설치는 테이블을 삭제 후 재생성합니다. 기존 데이터가 사라질 수 있으니 주의하시기 바랍니다.\n\n6. 관리자 정보를 입력합니다. 입력한 정보를 바탕으로 관리자 계정이 생성됩니다.\n\n7. 설치를 진행합니다. 설치가 완료되면 설치완료 문구가 출력됩니다.\n\n8. 이제부터 자유롭게 그누보드6를 사용할 수 있습니다.\n\n### 2. 디렉토리 구조\n#### admin\n관리자 관련 파일들이 포함되어 있습니다.  \nrouter, template 파일 및 관리자 메뉴를 설정하는 .json 파일이 속해 있습니다.\n\n#### bbs\n사용자 관련 router가 위치합니다. 요청에 따라 여러가지 기능들을 수행합니다.\n\n#### core\n프로젝트의 **핵심 코드**가 위치합니다. 데이터베이스 연결, 미들웨어 실행, 템플릿 엔진 설정 등 기본적인 실행에 필요한 코드를 포함하고 있습니다.\n```\ncore\n├─ database.py  # 데이터베이스 연결 및 세션 관리\n├─ exception.py  # 예외 처리설정 클래스 \u0026 함수\n├─ formclass.py  # @dataclass를 이용한 폼 클래스 모음\n├─ middleware.py  # 미들웨어 설정\n├─ models.py  # 데이터베이스 모델\n├─ plugin.py  # 플러그인 관련 함수\n└─ template.py  # 템플릿 엔진 설정\n```\n\n#### data\ndata 디렉토리는 이미지 및 파일을 저장하기 위한 디렉토리 입니다.  \n초기에는 존재하지 않으며, 설치 진행 시 자동으로 생성됩니다.\n\n#### install\n설치 관련 파일들이 포함되어 있습니다.\n\n#### lib\n프로젝트에서 사용되는 여러 함수들을 포함한 디렉토리, 파일들이 속해 있습니다.\n```\nlib\n├─ captcha  # 캡차 관련 함수, 템플릿 (Google reCAPTCHA v2, v2 invisible)\n├─ editor  # 에디터 관련 함수, 템플릿 (ckeditor4)\n├─ social  # 소셜 로그인 관련 함수 (naver, kakao, google, facebook, twitter)\n├─ board_lib.py  # 게시판 관련 함수\n├─ common.py  # 공통 함수\n├─ dependencies.py  # 종속성 함수\n├─ member_lib.py  # 회원 관련 함수\n├─ pbkdf2.py  # 암호화 라이브러리\n├─ point.py  # 포인트 함수\n├─ template_filters.py  # 템플릿 필터 함수\n├─ template_functions.py  # 템플릿 출력 관련 함수 모음\n└─ token.py  # 토큰 함수\n```\n#### plugin\n사용자가 만든 독립된 기능을 저장하는 디렉토리 입니다.\n1. 플러그인 제작\n   - `/plugin` 폴더에 제작할 플러그인 디렉토리를 추가합니다.\n   - 다른 플러그인과 겹치지 않도록 고유한 이름으로 지어주세요.\n   - 아래 파일 구성과 `plugin/demo_plugin`디렉토리를 참고하여 플러그인을 제작합니다.\n```\nplugin\n├─ {플러그인1}\n   └─ admin  # 관리자 라우터\u0026메뉴 설정\n      ├─ __init__.py \n      └─ admin_router.py\n   ├─ static  # css, js, image 등 정적 파일\n   ├─ templates  # 템플릿 파일\n   ├─ user  # 사용자 라우터 설정\n   ├─ __init__.py  # 플러그인 초기화 파일\n   ├─ models.py  # 데이터베이스 모델\n   ├─ plugin_config.py  # 플러그인 설정 파일\n   ├─ readme.txt  # 플러그인 상세정보\n   ├─ screenshot.png 또는 webp  # 대표 이미지\n├─ {플러그인2}\n...\n└─ plugin_states.json  # 전체 플러그인 정보 파일\n```\n2. 관리자 메뉴 주소등록\n   - `plugin_config.py` \u003e `admin_menu` 딕셔너리에 추가할 url, name을 등록합니다.\n      - 등록한 메뉴는 `admin \u003e __init__.py \u003e register_admin_menu()` 함수를 통해 관리자메뉴에 등록됩니다.\n\n#### static\ncss, js, image 등 정적 파일을 저장하는 디렉토리 입니다.\n\n#### templates\n템플릿 파일을 저장하는 디렉토리 입니다.   \n여러개의 템플릿으로 구성할 수 있으며 **관리자페이지 \u003e 템플릿관리** 메뉴에서 템플릿을 변경할 수 있습니다.\n```\ntemplates\n├─ {템플릿1}\n   └─ ...\n├─ {템플릿2}\n   └─ ...\n...\n```\n- 반응형/적응형\n   - `.env`파일의 `IS_RESPONSIVE` 설정 값에 따라 반응형/적응형 웹사이트로 표시됩니다. 적응형일 경우에만 `templates/{템플릿}/moblile` 디렉토리를 생성하여 모바일 화면을 따로 구성할 수 있습니다. \n   - 모바일 화면이 없을경우 자동으로 반응형(PC) 웹사이트로 표시됩니다.\n\n#### .env(.example.env)\n사용자 설정에 필요한 파일입니다. 설치 진행 시, `.example.env`을 복사해서 `.env`파일을 자동으로 생성합니다.\n   - `.example.env`는 `.env`파일을 생성하기 위한 예제 파일이므로 삭제하지 않는 것을 추천합니다.\n\n입니다. 설치 진행 시, \n\n#### main.py\n프로젝트의 시작점입니다. `uvicorn`을 이용하여 서버를 실행합니다.\n```bash\n# Linux\nuvicorn main:app --reload --host 0.0.0.0 --port 8000\n\n# Windows\nuvicorn main:app --reload\n```\n\n#### requirements.txt\n프로젝트에 필요한 라이브러리를 기록한 파일입니다. 명령어를 통해 자동으로 설치할 수 있습니다.\n```bash\npip install -r requirements.txt\n```\n\n### 3. 설정\n설치 후 생성된 `.env`파일을 수정하여 사용자 설정을 변경할 수 있습니다.\n- True/False 는 반드시 문자열로 입력해야 합니다.\n- 전체 설정은 `.env.example` 파일을 참고하세요.\n\u003e **Note**  \n\u003e 설정을 변경하면 서버를 재시작해야 정상 적용됩니다.\n\n#### 데이터베이스 설정\n```bash\n# sqlite는 접속정보관련 설정값은 무시됩니다.\n# (DB_PASSWORD, DB_HOST, DB_PORT, DB_NAME)\n\n# 테이블 이름 접두사 설정\nDB_TABLE_PREFIX = \"g6_\"\n# mysql, postgresql, sqlite\nDB_ENGINE = \"\"\nDB_USER = \"username\"\nDB_PASSWORD = \"\"\nDB_HOST = \"\"\nDB_PORT = \"\"\nDB_NAME = \"\"\nDB_CHARSET = \"utf8\"\n```\n#### 이메일 발송 설정\n```bash\nSMTP_SERVER=\"localhost\"\nSMTP_PORT=25\n# 메일 테스트시 보내는 사용자 이름 및 이메일 주소 반드시 넣어야 합니다.\nSMTP_USERNAME=\"account@your-domain.com\"\nSMTP_PASSWORD=\"\"\n\n# 예) 네이버 메일 설정 \n# SMTP_SERVER=\"smtp.naver.com\"\n# SMTP_PORT=465 # 보안 연결(SSL) 필요\n# SMTP_USERNAME=\"네이버 로그인 아이디\"\n# SMTP_PASSWORD=\"네이버 로그인 비밀번호\"\n```\n\n#### 관리자 테마 설정\n```bash\n# 관리자 테마 설정\n# 관리자 테마는 /admin/templates/{테마} 에 위치해야 합니다.\n# 테마 이름을 입력하지 않으면 기본 테마(basic)가 적용됩니다.\nADMIN_THEME = \"basic\"\n```\n\n#### 이미지 설정\n```bash\n# 이미지 크기변환 여부\nUPLOAD_IMAGE_RESIZE = \"False\"\n# MB 이미지 업로드 용량 (기본값 20MB)\nUPLOAD_IMAGE_SIZE_LIMIT = 20\n# (0~100) default 80 이미지 업로드 퀄리티(jpg)\nUPLOAD_IMAGE_QUALITY = 80\n\n# UPLOAD_IMAGE_RESIZE 가 True 이고 설정된값보다 크면 크기를 변환합니다.\n# px 이미지 업로드 크기변환 가로 크기\nUPLOAD_IMAGE_RESIZE_WIDTH = 1200\n# px 이미지 업로드 크기변환 세로 크기\nUPLOAD_IMAGE_RESIZE_HEIGHT = 2800\n```\n\n#### 기타 설정들\n```bash\n# 디버그 모드 설정 (True/False)\nAPP_IS_DEBUG = \"False\"\n\n# 웹사이트 표시 방법 (True/False)\n# \"True\" (기본값) : 반응형 웹사이트 (참고: 반응형 템플릿만 제공합니다.)\n# \"False\" : 적응형 웹사이트\nIS_RESPONSIVE = \"True\"\n\n# www.gnuboard.com 과 gnuboard.com 도메인은 서로 다른 도메인으로 인식합니다. \n# 쿠키를 공유하려면 .gnuboard.com 과 같이 입력하세요.\n# 이곳에 입력하지 않으면 www 붙은 도메인과 그렇지 않은 도메인은 쿠키를 공유하지 못하므로 \n# 로그인이 풀릴 수 있습니다.\nCOOKIE_DOMAIN = \"\"\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgnuboard%2Fg6","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgnuboard%2Fg6","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgnuboard%2Fg6/lists"}