본문 바로가기
기타 개발관련

[라즈베리파이] 웹서버 만들기 (1)

by Minius 2023. 3. 4.
반응형

이번 프로젝트에서는 이전에 만든 파이썬 로직을 사용해야해서 파이썬 웹서버를 만드려고 했다.

 

다시 오랜만에 만지는 웹서버 세팅에 며칠을 소비했다.

하지만... 중꺽마

정말 며칠간 조금씩 시간을 내서 했다.

 

그 과정을 기록한다.

 

간단하게 해결된 부분은 간단하게 적고, 애먹은 포트포워딩 부분을 잘 기록하고 싶다.

 

1. 라즈베리파이 리셋

라즈베리파이를 이전에 사용하고 있었지만, 더 이상 사용하지 않아서 리셋을 했다.

구글링 해보면 잘 나오고, 아래 사이트에서 다운로드 받아서 진행할 수 있다.

https://www.raspberrypi.com/software/

 

Raspberry Pi OS – Raspberry Pi

From industries large and small, to the kitchen table tinkerer, to the classroom coder, we make computing accessible and affordable for everybody.

www.raspberrypi.com

 

2. Fast API 설치

아래 Fast API 홈페이지에서 볼 수 있다.

https://fastapi.tiangolo.com/ko/

 

FastAPI

FastAPI FastAPI 프레임워크, 고성능, 간편한 학습, 빠른 코드 작성, 준비된 프로덕션 문서: https://fastapi.tiangolo.com 소스 코드: https://github.com/tiangolo/fastapi FastAPI는 현대적이고, 빠르며(고성능), 파이썬

fastapi.tiangolo.com

 

설치

pip install fastapi

 

예제

from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

 

실행

uvicorn main:app --reload

이 부분에서 잘 되지 않았는데, 라즈베리 파이라서 그런가, 파이썬 내에서 실행하는 명령어라 그런지, 앞에 python3 명령어를 붙여주고 실행했다.

python3 -m uvicorn main:app --reload

실행 화면

 

3. NGINX 설치 및 설정

 

설치

sudo apt install nginx

 

설정

설정하기 위해 먼저 아래 경로로 들어간다.

여기에서 설정을 먼저 해주고, 나중에 sites-enable 폴더로 복사를 해준다.

이를 심볼릭 링크를 생성해준다고 하더라.

cd /etc/nginx/sites-available/

그리고 편집기로는 내가 사용하기 편한 nano를 사용했다. vi, vim 등 다양하다.

파일이 생성되어 있지 않더라도 아래 명령어를 통해 생성&편집을 같이 할 수 있다.

sudo nano fastapi.conf

기존 default라는 파일이 있는데, 이는 건들지 않았다.

fastapi.conf 가 생성된 모습

그리고 아래와 같이 내용을 작성했다.

listen: 내가 사용할 포트 번호, 웹의 기본 포트는 80이어서 바로 이동할 수 있도록 했다.

추가로 ssh의 기본 포트는 22, 다른 기본 포트도 있다. (접기/펼치기 참고)

그리고 server_name에는 내 도메인이나 (ex. emessell.com) IP를 넣는다.

IP 찾는 방법은 검색하기

location / 은 웹에 접속할 때 path 없이 제일 default 인 값으로 / 루트 path로 들어간다면 이동하게 될 때를 설정한다.

따라서 /write 같이 쓰면 그에 따른 설정을 할 수 있다.

그 안에는 include proxy_params; 이건 무슨 용도인지 모르고 썼다. 기본일 것 같아서.

그리고 proxy_pass는 이 IP, 도메인, PORT, location을 타고 따라 들어온 사용자를 어디로 pass 할 것인지 적는 곳이다.

이 서버의 localhost 8000번 포트로 보내겠다는 것이다.

8000번은 위에서 FAST API를 실행시킨 포트이다.

server {
        listen 80;
        server_name {내 IP};

        location / {
                include proxy_params;
                proxy_pass http://127.0.0.1:8000;
        }
}

 

그리고 심볼릭 링크 생성

sudo ln -s /etc/nginx/sites-available/fastapi.conf /etc/nginx/sites-enable/fastapi.conf

 

그리고 재실행

sudo systemctl restart nginx

 

이렇게 되면 내 컴퓨터 및 라즈베리 파이에서 할 수 있는 설정은 끝.

댓글