이 문서 내용은 좀 낡았습니다.
60일이나 편집 안된 오래된 망한 문서니 개발 문서인 경우 참고할 때 조심하세요. 최신 정보를 알고 싶으면 게시판에 글 써주세요


목차

1. 서론
2. 읽기 전에...
3. Windows
3.1. 일반적인 방법
3.2. git bash를 이용하는 방법
3.2.1. IIS 연계
3.3. WSL을 이용한 방법
4. Linux
4.1. Ubuntu or Debian
4.2. openSUSE
4.3. CentOS
4.3.1. 설치전 준비
4.3.2. 접속이 안돼요
4.3.3. 유지
4.3.4. 포트 포워딩
4.3.5. 업데이트
4.4. Android
4.4.1. Pydroid3
4.4.2. Termux
5. 호스팅
5.1. Pythonanywhere
5.2. Glitch
5.3. Heroku
5.4. AWS
6. 기타 팁
6.1. 이머전시 툴
6.2. pip 리스트
6.3. Git Clone 명령어
6.4. 초기 설정
6.5. 업데이트 방법
6.6. 리버스 프록시
6.6.1. Nginx
6.6.2. Apache
6.6.3. IIS
6.7. 포트포워딩
6.7.1. 공유기를 이용한 방법
6.7.1.1. iptime
6.7.2. iptables
6.8. HTTPS 설정
6.8.1. Apache
6.8.2. Nginx
6.8.3. IIS
6.9. 사용 방법별 설정 방법
6.10. 스킨 설치
7. 특정 오류가 나는 경우
7.1. 라이브러리 설치 문제
7.1.1. Pillow 설치 문제
7.2. 퍼미션 거부 문제
7.3. 바이너리 관련 오류가 나는 경우 (리눅스)

1. 서론

이 문서는 오픈나무 설치 방법을 제공합니다

2. 읽기 전에...

모든 설치 법의 공통적인 내용은
  • 파이썬이랑 pip를 설치한다
  • 오픈나무를 받는다
  • app.py를 실행한다

이 문서는 해당 과정을 더 쉽게 OS별로 쉽게 풀어 쓴 문서이다.

3. Windows

3.1. 일반적인 방법

  • 여기로 가서 파이썬을 받는다
  • 주의. 오픈나무 최소 지원 버전 이상으로 받아야한다. (현재 3.8)
  • 설치한다
  • 주의. 설치할 때 밑에 PATH 어쩌고 하는 부분을 꼭 체크해야 한다
  • 여기서 오픈나무를 받고 압축을 푼다
  • 오픈나무 폴더에서 명령프롬프트를 킨다
  • 주의. 여기서 파이썬을 컴퓨터에 처음으로 설치했다면 모듈 설치를 위해 관리자 권한으로 실행해야 한다.
  • python -m pip upgrade -U pip를 친다(1)
  • python app.py를 친다

3.2. git bash를 이용하는 방법

  • 여기로 가서 파이썬을 받는다
  • 주의. 오픈나무 최소 지원 버전 이상으로 받아야 한다.
  • 설치한다
  • 주의. 설치할 때 밑에 PATH 어쩌고 하는 부분을 꼭 체크해야 한다
  • git을 깐다(2)
  • git bash를 관리자 권한으로 켠다
  • 아래 리눅스 공통 과정으로 넘어가면 된다

3.2.1. IIS 연계

3.3. WSL을 이용한 방법

  • WSL 설치 가이드를 참고해 Ubuntu나 Debian을 설치하자.
  • 만약 WSL 설치를 완료했다면 그 뒤 과정은 아래 리눅스(3) 과정과 동일하다

4. Linux

  • 모든 리눅스 과정은 root라는 전제하에 적혀 있다. 그러므로 root가 아니면 모든 명령어에 sudo를 붙여주자.
아래는 공통 부분을 서술한 것이다.
  • python3 -m pip upgrade -U pip를 입력한다(4)
  • git clone --depth=1 -b stable https://github.com/opennamu/openNAMU.git을 입력한다
  • cd openNAMU를 입력한다(5)
  • python3 app.py를 입력한다(6)

4.1. Ubuntu or Debian

  • Ubuntu 18.04 이상 기준, 최신 버전에서도 이용 가능하다.

  • 터미널을 켠다.
  • apt-get install -y git python3 python3-pip을 입력한다(7)

4.2. openSUSE

  • 터미널을 킨다
  • zypper install python3을 친다.
  • zypper install python3-pip를 친다.
  • zypper install git을 친다.

4.3. CentOS

CentOS9에 설치하는 법이다.

root 계정이 아니면 명령어 앞에 sudo를 붙여주자.

4.3.1. 설치전 준비

오픈나무를 가져온다.
git clone -b stable https://github.com/openNAMU/openNAMU.git

오픈나무를 설치하기전에 파이썬을 설치해야 한다. 파이썬을 설치하자. (기본적으로)
yum install python
PiP를 설치하자
yum install python3-pip

그리고 이 명령어를 입력하면 오픈나무가 실행된다.
python app.py

설치과정에 따라 설치하고 (자신의_아이피:포트)로 접속해서 접속되는지 확인한다. 안 되면 아래 확인

4.3.2. 접속이 안돼요

방화벽을 열어줘야한다. 다음과 같이 쳐주자
firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-port=3000/tcp

그리고 리로드하자
firewall-cmd --reload

접속되는지 확인

4.3.3. 유지

그냥 app.py를 실행하면 터미널창이 꺼지면 같이 꺼진다. 지속적으로 실행시키려면 다음과 같이 실행하자.

nohup python3.6 app.py

4.3.4. 포트 포워딩

포트를 붙이지 않고 그냥 접속할 수 있도록 해보자

아래와 같이 친다.
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=3000 --permanent

그리고 리로드 하자
firewall-cmd --reload

그냥 ip나 연결한 도메인으로 접속되는지 확인하자.

4.3.5. 업데이트

git 2.x여야 내장 업데이트 기능이 제대로 동작한다.

일단 아래처럼 친다.
rpm -Uvh http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm

그 다음에 git을 설치한다.
yum install git

버전을 확인한다.
git --version

4.4. Android

4.4.1. Pydroid3

  • 주의 : 현재도 작동하는 지 검토를 안해봤다
  • 플레이스토어에서 PyDroid 3을 받아서 설치한다.
  • 오픈나무를 받는다.
  • 앱을 킨다.
  • PyDroid 3 앱에서 app.py를 연다.
  • 플레이 버튼을 눌러서 실행한다.

4.4.2. Termux

  • Termux 앱을 설치한다.
  • 주의. 플레이스토어의 앱은 구 버전으로 지원이 안될 수도 있다.
  • 그 이후는 우분투에서 설치법과 동일하다.
  • 주의. termux 앱에서 핸드폰 내부 저장소(storage)를 사용하는 경우 termux 앱 자체 한계로 권한이 부족하므로 앱 내부 저장소로 이동 바랍니다

5. 호스팅

5.1. Pythonanywhere

5.2. Glitch

5.3. Heroku

5.4. AWS

6. 기타 팁

6.1. 이머전시 툴

만약 오픈나무에 꼬인 게 있다면 쓰는 도구이다.

6.2. pip 리스트

6.3. Git Clone 명령어

git clone --depth=1 -b stable https://github.com/opennamu/opennamu.git git clone --depth=1 -b beta https://github.com/opennamu/opennamu.git git clone --depth=1 -b dev https://github.com/opennamu/opennamu.git

6.4. 초기 설정

6.5. 업데이트 방법

파이썬 애니웨어의 경우

6.6. 리버스 프록시

  • 내용이 이해되지 않는다면 단순하게 오픈나무 리스닝 포트를 80으로 설정하면 된다.

6.6.1. Nginx

server {
    listen  80;
    server_name 도메인;

    location / {
        proxy_redirect off;

        proxy_pass_header Server;

        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;

        proxy_pass http://localhost:3000;
    }
}

6.6.2. Apache

6.6.3. IIS

모두 윈도우 서버 2019의 IIS10 기준이다.
  • 1. ARR을 웹 플랫폼 설치 관리자에 검색 하여 "Application Request Routing"를 아무버전이나 설치한다
  • 2. 메인 페이지의 "Application Request Routing"에 들어가서 우측 "Server Proxy Settings...."를 클릭한다
  • 3. "Enable proxy" 체크박스에 체크한다
  • 4. "Time-out"을 적당히 늘려준다
  • 5. Custom Headers에서 Include TCP port from client IP"에 체크가 되어 있다면 체크를 해제한다
  • 6. "Preeserve client IP in the fllowing header:"을 "X-Forwarded" 이렇게 설정한다
  • 7. "사이트"에서 우측 "웹 가이트 추가..."을 눌러 호스트 이름, 프로토콜등을 지정한다 "실제 경로"는 상관없다.
  • 8. 생성한 사이트 홈에 들어가서 "URL 재작성"에 들어간다.
  • 9. 우측 "규칙 추가..."을 클릭한다
  • 10. "역방향 프록시"를 선택한다
  • 11. 사진처럼 설정한다
외부:https://i.imgur.com/EGsCKdh.png


6.7. 포트포워딩

6.7.1. 공유기를 이용한 방법

대부분의 공유기는 포트포워딩 기능을 제공한다
6.7.1.1. iptime

6.7.2. iptables

  • 주의 : OS 차원에서 하는 포트포워딩은 공유기에서 막히지 않아야 가능하다
  • iptables -t nat -A PREROUTING -p tcp --dport 3000 -j REDIRECT --to-port 80

6.8. HTTPS 설정

  • 이 방법을 사용하기 위해서는 위의 리버스 프록시 과정을 완료해야 한다.

6.8.1. Apache

6.8.2. Nginx

6.8.3. IIS

6.9. 사용 방법별 설정 방법

6.10. 스킨 설치

7. 특정 오류가 나는 경우

7.1. 라이브러리 설치 문제

023-03-10 07:45:11,014: Error running WSGI application
2023-03-10 07:45:11,014: ModuleNotFoundError: No module named 'diff_match_patch'
2023-03-10 07:45:11,015: File "/var/www/user_pythonanywhere_com_wsgi.py", line 16, in
2023-03-10 07:45:11,015: from app import app as application # noqa
2023-03-10 07:45:11,015:
2023-03-10 07:45:11,015: File "/home/user/openNAMU/app.py", line 5, in
2023-03-10 07:45:11,015: from route.tool.func import *
2023-03-10 07:45:11,015:
2023-03-10 07:45:11,016: File "/home/user/openNAMU/route/tool/func.py", line 71, in
2023-03-10 07:45:11,016: from diff_match_patch import diff_match_patch
2023-03-10 07:45:11,016: ***************************************************

이러한 버그 발생시 콘솔로 들어가서 아래와 같은 명령어로 시도해보면 됩니다

pip3 install -r requirements.txt (가장 최신 파이썬인 경우)
python(파이썬 버전) pip install -r requirements.txt (아래 예제 참조) (파이썬 버전이 최신과 다른 경우)
python3.10 pip install -r requirements.txt (파이썬 3.10인 경우)


설치가 성공했을 시에는 재시작을 해서 정상 실행이 되는 지 확인해보고 안되면 파이썬 버전을 다시 확인해보고 그래도 안되면 버그 리포트로 올려주세요

7.1.1. Pillow 설치 문제

특정 환경(9)에서 Pillow 라이브러리가 오류로 설치되지 않는 경우 아래 명령어로 해결하면 됩니다

apt-get install python-pillow

7.2. 퍼미션 거부 문제

File "/home/user/.local/lib/python3.10/site-packages/waitress/init.py", line 13, in serve
server = _server(app, **kw)
File "/home/user/.local/lib/python3.10/site-packages/waitress/server.py", line 78, in create_server
last_serv = TcpWSGIServer(
File "/home/user/.local/lib/python3.10/site-packages/waitress/server.py", line 244, in init
self.bind_server_socket()
File "/home/user/.local/lib/python3.10/site-packages/waitress/server.py", line 361, in bind_server_socket
self.bind(sockaddr)
File "/home/user/.local/lib/python3.10/site-packages/waitress/wasyncore.py", line 396, in bind
return self.socket.bind(addr)
PermissionError: [Errno 13] Permission denied


이미 해당 포트가 다른 용도로 사용 중이니 이머전시 툴로 다른 포트로 바뀌주세요

7.3. 바이너리 관련 오류가 나는 경우 (리눅스)

Traceback (most recent call last):
  File "/home/2du/.local/lib/python3.10/site-packages/flask/app.py", line 1463, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/2du/.local/lib/python3.10/site-packages/flask/app.py", line 872, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/2du/.local/lib/python3.10/site-packages/flask/app.py", line 870, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/2du/.local/lib/python3.10/site-packages/flask/app.py", line 855, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)  # type: ignore[no-any-return]
  File "/home/2du/openNAMU/route/go_api_recent_change.py", line 14, in api_recent_change
    data = subprocess.Popen([os.path.join(".", "route_go", "bin", "main.amd64.bin"), sys._getframe().f_code.co_name, db_set, other_set], stdout = subprocess.PIPE).communicate()[0]
  File "/usr/local/lib/python3.10/subprocess.py", line 969, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/local/lib/python3.10/subprocess.py", line 1845, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
PermissionError: [Errno 13] Permission denied: './route_go/bin/main.amd64.bin'

예시

이러한 버그가 나는 경우 route_go 안에 bin 폴더에 들어가서 chmod +x main.amd64.bin(10)(11)으로 실행 권한을 부여해주면 됩니다
(1) 최신 버전이 아닐 경우에 대비해 pip를 업그레이드하는 과정이다. pip 스스로는 pip를 업그레이드할 수 없으므로 python을 불러서 하는 것이다.
(2) git 홈페이지에서 받아서 깔아도 되고, 관리자 권한 powershell에서 winget install git.git 쳐도 된다. 아마 이게 더 편할 거다.
(3) 특히 Ubuntu
(4) 최신 버전이 아닐 경우에 대비해 pip를 업그레이드하는 과정이다. pip 스스로는 pip를 업그레이드할 수 없으므로 python을 호출하여 업데이트하는 것이다.
(5) 대소문자를 구분하지 않는다
(6) 처음 설치와 업데이트 이후 2번째 실행부터는 root가 아니어도 큰 문제는 없을 것이다
(7) 혹시 모르니 apt update와 apt upgrade -y를 실행하고 입력하면 오류를 방지할 수 있다.
(기본적으로) 파이썬이 설치 되있다
(9) 예를 들면 termux
(10) 다른 OS나 아키텍쳐의 경우 버그가 난 파일 이름
(11) 리눅스의 경우 chmod 권한이 부족할 수도 있으니 앞에 sudo 붙여야할 수도 있습니다