2. 읽기 전에... ✎ ⊖
모든 설치 법의 공통적인 내용은
- 파이썬이랑 pip를 설치한다
- 오픈나무를 받는다
- app.py를 실행한다
이 문서는 해당 과정을 더 쉽게 OS별로 쉽게 풀어 쓴 문서이다.
3. Windows ✎ ⊖
- 여기로 가서 파이썬을 받는다
- 주의. 오픈나무 최소 지원 버전 이상으로 받아야한다. (현재 3.8)
- 설치한다
- 주의. 설치할 때 밑에 PATH 어쩌고 하는 부분을 꼭 체크해야 한다
- 여기서 오픈나무를 받고 압축을 푼다
- 오픈나무 폴더에서 명령프롬프트를 킨다
- 주의. 여기서 파이썬을 컴퓨터에 처음으로 설치했다면 모듈 설치를 위해 관리자 권한으로 실행해야 한다.
- python -m pip upgrade -U pip를 친다(1)
- python app.py를 친다
3.2. git bash를 이용하는 방법 ✎ ⊖
- 여기로 가서 파이썬을 받는다
- 주의. 오픈나무 최소 지원 버전 이상으로 받아야 한다.
- 설치한다
- 주의. 설치할 때 밑에 PATH 어쩌고 하는 부분을 꼭 체크해야 한다
- git을 깐다(2)
- git bash를 관리자 권한으로 켠다
- 아래 리눅스 공통 과정으로 넘어가면 된다
3.3. WSL을 이용한 방법 ✎ ⊖
- WSL 설치 가이드를 참고해 Ubuntu나 Debian을 설치하자.
- 만약 WSL 설치를 완료했다면 그 뒤 과정은 아래 리눅스(3) 과정과 동일하다
- 모든 리눅스 과정은 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)
- 터미널을 킨다
- zypper install python3을 친다.
- zypper install python3-pip를 친다.
- zypper install git을 친다.
CentOS9에 설치하는 법이다.
root 계정이 아니면 명령어 앞에 sudo를 붙여주자.
오픈나무를 가져온다.
git clone -b stable https://github.com/openNAMU/openNAMU.git
오픈나무를 설치하기전에 파이썬을 설치해야 한다. 파이썬을 설치하자.
(기본적으로)yum install python
PiP를 설치하자
yum install python3-pip
그리고 이 명령어를 입력하면 오픈나무가 실행된다.
python app.py
설치과정에 따라 설치하고 (자신의_아이피:포트)로 접속해서 접속되는지 확인한다. 안 되면 아래 확인
방화벽을 열어줘야한다. 다음과 같이 쳐주자
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-port=3000/tcp
그리고 리로드하자
firewall-cmd --reload
접속되는지 확인
그냥 app.py를 실행하면 터미널창이 꺼지면 같이 꺼진다. 지속적으로 실행시키려면 다음과 같이 실행하자.
nohup python3.6 app.py
포트를 붙이지 않고 그냥 접속할 수 있도록 해보자
아래와 같이 친다.
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=3000 --permanent
그리고 리로드 하자
firewall-cmd --reload
그냥 ip나 연결한 도메인으로 접속되는지 확인하자.
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
- 플레이스토어에서 PyDroid 3을 받아서 설치한다.
- 오픈나무를 받는다.
- 앱을 킨다.
- PyDroid 3 앱에서 app.py를 연다.
- 플레이 버튼을 눌러서 실행한다.
- Termux 앱을 설치한다.
- 주의. 플레이스토어의 앱은 구 버전으로 지원이 안될 수도 있다.
- 그 이후는 우분투에서 설치법과 동일하다.
- 주의. termux 앱에서 핸드폰 내부 저장소(storage)를 사용하는 경우 termux 앱 자체 한계로 권한이 부족하므로 앱 내부 저장소로 이동 바랍니다
5.1. Pythonanywhere ✎ ⊖
만약 오픈나무에 꼬인 게 있다면 쓰는 도구이다.
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
- 내용이 이해되지 않는다면 단순하게 오픈나무 리스닝 포트를 80으로 설정하면 된다.
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;
}
}
모두 윈도우 서버 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. 사진처럼 설정한다
끝
대부분의 공유기는 포트포워딩 기능을 제공한다
- 주의 : OS 차원에서 하는 포트포워딩은 공유기에서 막히지 않아야 가능하다
- iptables -t nat -A PREROUTING -p tcp --dport 3000 -j REDIRECT --to-port 80
- 이 방법을 사용하기 위해서는 위의 리버스 프록시 과정을 완료해야 한다.
6.9. 사용 방법별 설정 방법 ✎ ⊖
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인 경우)
설치가 성공했을 시에는 재시작을 해서 정상 실행이 되는 지 확인해보고 안되면 파이썬 버전을 다시 확인해보고 그래도 안되면 버그 리포트로 올려주세요
특정 환경
(9)에서 Pillow 라이브러리가 오류로 설치되지 않는 경우 아래 명령어로 해결하면 됩니다
apt-get install python-pillow
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)으로 실행 권한을 부여해주면 됩니다