Type Here to Get Search Results !

[파이썬] deta 무료 웹 호스팅 - 평생 무료 flask 웹 서비스

이 글에서는 무료 웹 호스팅을 찾은 과정과 이용 후기에 대해서 설명합니다. 

  • Deta를 시도하게 된 이유
  • Deta 시작

Deta를 시도하게 된 이유


내용은 여기에 적습니다. 구글 클라우드를 무료로 사용한 지 벌써 두 달이 넘어갑니다. 구글 클라우드는 3개월까지 무료가 된다고 하여 홈페이지 이전을 고민해야 합니다. 

이것저것 알아보던 중 heroku가 괜찮을 것 같았지만, '22년부터 유료로 전환했다고 합니다. 

여튼 그래서 무료 호스팅을 알아보던 중 Deta라는 곳을 알게 되었습니다. 

구글에서 관련 블로그를 찾아봐도 아직 실제로 이용해 본 사용자는 없는것 같습니다. 

일단 선구자 적인 마음가짐으로 시도해 보기로 하였습니다. 

Deta가 무료라고 써있는 이미지

Deta는 Python 및 Node.js 애플리케이션을 지원하는 웹 서비스 호스팅을 위한 무료 클라우드 플랫폼입니다. 

계정 당 128MB RAM이 있는 내장 API 키 인증 및 cron이 있습니다. 또한 10GB 스토리지와 무제한 스토리지가 포함된 사용하기 쉬운 프로덕션 등급 NoSQL 데이터베이스를 제공한다고 합니다. 

다른 Heroku 대안과 달리 Deta에는 유료 등급이 없습니다.그들에 따르면 그들의 서비스는 영원히 무료입니다. <-- 여기서 끌렸습니다. 


Deta 시작


로그인 하고 시작하니 아래와 같이 Canvas라는 것이 나타납니다. 그리고 설명이 있습니다. 

Canvas 설명


Canvas는 개인용 클라우드의 홈 화면이라고 생각하세요. 개인용 클라우드 앱의 구축, 실행 및 사용을 관리하는 데 도움이 됩니다.

이미 몇 가지 앱이 설치되어 있습니다:

빌더

빌더는 Deta 스페이스로 나만의 앱을 개발, 테스트 및 출시할 수 있는 도구입니다.


문서

문서에서는 Deta 스페이스로 앱을 빌드하는 방법에 대한 지침을 제공합니다.


Discovery

Discovery는 다른 개발자가 Deta 스페이스로 빌드한 앱을 찾아서 설치할 수 있는 포털입니다.


Builder로 컴퓨팅 시작


일단 위에 설치된 앱들 중에 웹 호스팅을 하려는 저에게 필요한 것은 빌더 입니다. 

빌더가 컴퓨터라고 보시면 됩니다. 

빌더에 들어가면 아래와 같은 설명이 나타납니다. 

1,2,3 순으로 수행해야합니다. 


놀라운 무언가를 만들어 보세요

빌더 프로젝트에는 Space로 앱을 빌드, 테스트 및 릴리스하는 데 필요한 모든 리소스가 포함되어 있습니다. 아래 지침에 따라 첫 번째 프로젝트를 만드세요.


MacOS Windows Linux 중 저는 Windows를 선택하여 설치합니다. 

1.

Setup Space CLI

Installation

The Space CLI is a command-line utility that helps you build apps for Space from your local machine. To install the Space CLI on Windows, open PowerShell and enter:

iwr https://get.deta.dev/space-cli.ps1 -useb | iex
Copy code

파워쉘을 열고 위의 내용을 실행합니다. iwr이 뭘까요? 설치 완료하니 아래와 같이 나옵니다.

PS C:\Users\lsw00> iwr https://get.deta.dev/space-cli.ps1 -useb | iex                                                   Space was installed successfully to C:\Users\lsw00\.detaspace\bin\space.exe
Space was installed successfully to C:\Users\lsw00\.detaspace\bin\space.exe
Run 'space --help' to get started

Follow the instructions output by the install script to export the space command to your path.

그 다음에는 PATH에다가 추가하라고 합니다. 윈도우 11기준으로 아래와 같이 찾아 들어가야 합니다. 앗.. 찾아 들어가니 이미 PATH에 추가되어있습니다. 

 '설정-시스템' 클릭 '정보'에서 '고급 시스템 설정' 클릭 '환경 변수' 클릭 'Path' 선택 후, 편집 클릭 환경변수 적용할 폴더 경로 추가 / 입력 후 시스템 속성 창까지 '확인' 필수

인증

Space CLI는 '액세스 토큰'으로 자신을 인증합니다. 설정에서 생성할 수 있습니다.

액세스 토큰을 생성한 후 다음 명령을 실행합니다:

Authentication

The Space CLI authenticates itself with 'Access Tokens'. You can generate one in the settings

After you have generated an Access Token, run the following command:

space login
Copy code

Enter the Access Token that was generated when prompted.

메시지가 표시되면 생성한 액세스 토큰을 입력합니다.

아래와 같이 나옵니다. 

PS C:\Users\lsw00> space login

To authenticate the Space CLI with your Space account, generate a new access token in your Space settings and paste it below:
? Enter access token (0 chars) >


생성 후 token을 입력하면 아래와 같이 나타납니다. 

? Enter access token (41 chars) > *****************************************

👍 Login Successful!

Checking for new Space CLI version...

리눅스는 아래와 같이 설명합니다. 생각해보니 vs code로 실행시킨곳은 wsl 리눅스여서 윈도우에서 하면 안될 것 같습니다. 

Installation

The Space CLI is a command-line utility that helps you build apps for Space from your local machine. To install the Space CLI on Linux, open a Terminal and enter:

curl -fsSL https://get.deta.dev/space-cli.sh | sh
Copy code

Follow the instructions output by the install script to export the space command to your path.

Authentication

The Space CLI authenticates itself with 'Access Tokens'. You can generate one in the settings

After you have generated an Access Token, run the following command:

space login
Copy code

Enter the Access Token that was generated when prompted.


lswhh@DESKTOP-NJJS3PP:~/flask$ curl -fsSL https://get.deta.dev/space-cli.sh | sh
Error: unzip is required to install space cli.

먼저 vs code를 열고 터미널에서 위의 명령을 실행하니 unzip이 없다고 에러가 납니다. 

unzip을 설치합니다. 그리고 명령을 다시 수행하니 정상적으로 설치되었다는 메시지가 나타납니다. 

$ sudo apt-get install unzip
....
$ curl -fsSL https://get.deta.dev/space-cli.sh | sh
######################################################################## 100.0%
Archive:  /tmp/tmp.T7SgJu2AnB/space.zip
  inflating: /home/lswhh/.detaspace/bin/space  
Deta Space CLI was installed successfully to /home/lswhh/.detaspace/bin
Run 'space --help' in a new shell to get started

lswhh@DESKTOP-NJJS3PP:~/flask$ /home/lswhh/.detaspace/bin/space login
To authenticate the Space CLI with your Space account, generate a new access token in your Space settings and paste it below:

? Enter access token (41 chars) > ***************************************** 
👍 Login Successful!

Checking for new Space CLI version...

설치 후에는 인증 토큰을 넣고 로그인 하였습니다. 

path가 안잡혀 있어서 .bashrc를 수정하려고 보니 이미 .detaspace/bin이 PATH에 설정하도록 들어가 있습니다. source .bahsrc를 해서 적용해 주면 space를 PATH에 넣고 사용할 수 있습니다. 

다음 단계는 프로젝트 만들고 변경사항을 푸시 하는 것입니다. 

다음 단계

2. 프로젝트 만들기는 아래와 같이 설명되어있습니다. 저는 flask 웹 서비스를 제공할 계획이므로 Use existing app을 진행합니다. 

2.

Create a Project

Space can run almost any kind of app: it supports static websites, full stack frameworks (like Next, Nuxt, & SvelteKit), and web servers (running Python, Node, Go, Rust or even custom runtimes).

The Space CLI can detect and bootstrap the configuration it needs for many kinds of apps. Run the following command inside the directory of an existing app to bootstrap your configuration:

space new
Copy code

This will generate a config file called "Spacefile", which contains information to help Space run your app.

파이썬 flask에 대한 가이드는 다음의 링크에서 찾아볼 수 있습니다. 

파이썬 flask에 대한 가이드 바로가기

이제 내 flask 루트 디렉토리에서 space 명령을 이용하여 프로젝트를 생성해 봅니다. 

space new를 누르니 프로젝트 이름을 물어보고 flask라고 쓰니 프로젝트가 생겼다고 나옵니다. 

lswhh@DESKTOP-NJJS3PP:~$ space new . 
? What is your project's name? > yt.2story.org 

Micro found in "flask"
L engine: python3.9

Micro found in "web-downloader"
L engine: static

? Do you want to setup "yt.2story.org" with this configuration? y
                                           
Project yt.2story.org created successfully!

Next steps:

 Find your project in Builder: https://deta.space/builder/c0pY9wmdrqB8
 Use the Spacefile to configure your app: https://go.deta.dev/docs/spacefile/v0
 Push your code to Space with space push 

space file이 생긴답니다.  spacefile에 대한 설명은 아래 링크에 있습니다. 

spacefile에 대한 설명

flask 뿐 아니라 nginx로 만든 웹 페이지가 하나 있었는데 자동으로 찾아서 아래와 같이 spacefile을 만들어 주었습니다. 

lswhh@DESKTOP-NJJS3PP:~$ cat Spacefile 
# Spacefile Docs: https://go.deta.dev/docs/spacefile/v0
v: 0
micros:
  - name: flask
    src: flask
    engine: python3.9
    primary: true
  - name: web-downloader
    src: web-downloader
    engine: static
    primary: false

이제 next step은 푸시 입니다.

3. 변경 사항 푸시하기

이제  프로젝트까지 만들었고 내 코드를 넣으면 되는 것 같습니다. 

space push를 했더니 web-downloader가 에러가 납니다. 해당 내용은 제대로 파악이 되지 않은 것 같군요, 저는 저걸 올리려고 한 것은 아니니 해당 라인을 지우고 다시 space push를 하였습니다. 

3.

Pushing Changes

After you have created a project, you can push your local code to a live Space environment with a single command:

space push
Copy code

This will package and upload all the necessary files to create a new “revision”: a complete package of your app at a single point in time.

Each push also creates a "Builder instance”: a full copy of your app, running in your Space, to test, debug and play around with.

그러자, 다음과 같이 진행이 됩니다. 

lswhh@DESKTOP-NJJS3PP:~$ space push
Validating your Spacefile...
                                                     
Your Spacefile looks good, proceeding with your push!
✓ Successfully started your build!
✓ Successfully pushed your Spacefile!

~ Pushing your code (133 files) & running build process...

2023/07/16 00:02:46 
2023/07/16 00:02:46 Parsing Spacefile...
2023/07/16 00:02:46 Scanned micros:
2023/07/16 00:02:46 └ flask
2023/07/16 00:02:46 
2023/07/16 00:02:46 Building micro flask...
2023/07/16 00:02:47 [flask] Installing dependencies with pip
2023/07/16 00:02:47 [flask] 
2023/07/16 00:02:51 [flask] Collecting Flask==2.3.2 (from -r requirements.txt (line 1))
2023/07/16 00:02:51 [flask]   Downloading Flask-2.3.2-py3-none-any.whl (96 kB)
2023/07/16 00:02:51 [flask]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.9/96.9 kB 2.4 MB/s eta 0:00:00
...... 
2023/07/16 00:03:20 All micros built successfully
2023/07/16 00:03:30 build complete...
2023/07/16 00:03:30 created revision: polliwog-zemz

i Updating your Builder instance with the new revision...

2023/07/16 00:03:53 starting installation...
2023/07/16 00:03:53 fetching release configuration...
2023/07/16 00:03:53 allocating resources..
2023/07/16 00:03:53 configuring resource 1 out of 1...
2023/07/16 00:04:19 waiting for function to be ready...
2023/07/16 00:04:19 completed...
                                                                  
✓ Successfully pushed your code and updated your Builder instance!
Builder instance: https://yt2storyorg-1-a9029548.deta.app

위와 같이 모든 관련 내용을 push 하더니 주소까지 나타내줍니다.  

부푼 마음을 갖고 접속해 보았습니다. 하지만.. 다음과 같은 에러가 납니다. 

Error Type:
ModuleNotFoundError

Error Message:
No module named 'main'

Logs:
time="2023-07-15T15:05:49Z" level=info msg="serving logs listener on sandbox.localdomain:1234" agent=logsApiAgent
TELEMETRY	Name: telemetry-extension	State: Subscribed	Types: [Function]
Stack Trace:
  File "/opt/python/detalib/debugger.py", line 131, in wrap
    return func(event, context)

  File "/var/task/_entry.py", line 12, in handler
    import main  # noqa

오늘은 늦었으니.. 다음에 해결해 보겠습니다. 기다려주세요~

자, 위와 같이 문제가 발생하는 것을 보니, 제가 구현한 flask main은 app.py에 들어있습니다. 

그런데, app.py를 읽지 못하는 것 같습니다. 

파이썬 flask에 대한 가이드 바로가기

다시 위의 링크를 눌러서 flask 가이드를 보았더니, 중간 쯤에 다음의 문구가 있습니다. 

Create a new file called main.py

그래서, app.py를 main.py로 복사한 후 space push를 다시 수행 후 접속해 보았습니다. 

그랬더니 모든 기능이 잘 동작합니다~ 

여기까지 읽느라 고생하셨습니다. 다른 분들도 괜히 비용 들이지 말고 deta에서 자신의 클라우드 서버를 만들어 보시기 바랍니다. 

💥 참고로 오라클 무료 클라우드는 트랜잭션 오류라고 하면서 안되는데, 상담 직원하고 연락해서 물어봐도 해결할 수 없다 하여 포기합니다. 아무래도 너무 많이 해서 안 해주는 것 같은데 계속 무료 인척 하고 있는 것 같아서 좀 찝찝합니다.