Lukaid-me Server 작업 시작

Lukaid·2024년 4월 20일

최근에 포트폴리오 정리 겸 포폴과 내 블로그를 포스팅 하기위한 서비스를 기획하고 만들고있다. lukaid.me

아직 한창 작업중이라 지금은 별게 없다. 오늘은 서버 작업 내용을 정리해볼건데, 클라이언트 작업 내용은 조금 정리 후에 포스팅 예정.

server setting

오늘 서버pc의 청소, 써멀재도포, ssd교체 작업을 마무리하고, 새롭게 ubuntu pc를 부팅했다. ubuntu 22.04가 나올즈음 구매한 pc이니 대략 2년정도 되어서 먼지도 많고 써멀도 딱딱해져 있었다. 무뽑에 조심하며 작업했는데, 다른건 다 괜찮은데 바이오스 넘어가서 부팅 후 화면 출력이 되지 않았다. 진짜 별짓을 다했는데, 다 안되어서 마더보드의 건전지를 빼고 한시간 가량 방치했다가 다시 켜니까 또 잘 되었다... 컴퓨터의 세계는 너무나 어렵다...

Dependencies

서버는 django 4.2.11와 python3.12.3를 사용할 예정이고, docker를 이용할 것이다. 이를 위한 설치부터 진행해줬다.

pyenv

나는 pyenv로 python 버전관리를 한다.

경험상 아래의 dependency들은 거의 필요했다.

sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

zsh 사용을 기준으로, pyenv를 설치 후 zsh세팅까지

curl https://pyenv.run | bash

echo -e 'export PYENV_ROOT="$HOME/.pyenv"\nexport PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo -e 'eval "$(pyenv init --path)"\neval "$(pyenv init -)"' >> ~/.zshrc

그 후

exec "$SHELL"

셸을 refresh해주면

pyenv --version

pyenv 설치 완료

pyenv install 3.12.3
pyenv global 3.12.3
python --version

3.12.3 설치 후 글로벌로 설정

docker

도커 설치는 오랜만이라 공식문서를 보면서 천천히 따라했다.

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
 sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world

설치 굿

docker-compose vs docker compose

나는 그동안 docker-compose만을 사용해왔는데, 이번에 알아보니 docker-compose는 1버전이고 2버전이 docker cli로 통합되어 docker compose로 composing 할 수 있는 모양이다. 뭐 1버전은 python으로 작성되고 2버전은 go로 작성되어 더 빠르다는 말도 있고, 엔진은 같아서 아니라는 말도 있는 것 같은데, docker-compose를 따로 설치 안하고도 쓸 수 있다고 하니 그냥 docker compose로 사용하자.

django project

나는 보통 docker로 작업을 하긴 하는데, 일단 플젝을 만드는건 로컬환경에서 한다.

mkdir lukaid-me-server

python -m venv venv

source venv/bin/activate

python -m pip install Django==4.2.11

django-admin startproject config .

이 후, 여기(내 깃헙 ㅎ)를 참고해 docker file과 compose를 작성해주면 되는데, docker 권한 문제 발생 시

sudo usermod -aG docker $USER
newgrp docker

요렇게 user를 docker 그룹에 넣어주면 된다.

django app 구조

나는 보통 settings를 포함하는 app을 config로 선언하고, 나머지 app들은 apps 폴더로 묶어서 선언하다. 그래서 폴더구조가

lukaid-me-server
│
├─ config
├─ apps
│   ├─ commons
│   ├─ users
│   ├─ posts

이런식이다.

app을 생성하고 싶으면, apps 디렉토리에 먼저 원하는 app 이름의 폴더를 만들어두고, (예를들면 posts)

python manage.py startapp posts apps/posts

그 후 생성된 app의 apps.py의 name변수를 다음과 같이 변경

# before
name = "posts"
# after
name = "apps.posts"

마지막으로 settings.py의 app등록

"apps.posts.apps.PostsConfig",

해주면 된다. app들 간에 참조할때는 반드시 app.으로 시작해야한다. 예를들면

from django.db import models
from apps.commons.models.common_model import CommonModel


class Post(CommonModel):
    """Post Model Definition"""
    title = models.CharField(max_length=140)
    content = models.TextField()
    user = models.ForeignKey("users.User", on_delete=models.CASCADE)

    def __str__(self):
        return self.title

이렇게 하는 이유는, 프로젝트가 커질수록 app들이 root폴더에 흩어져있는게 너무 꼴보기 싫어서 방법을 찾다가 발견한 방법이다.

암튼 이제 본격적으로 서버 만들러 가야지~~

profile
풀스택 지향 웹개발자 이성우입니다.

0개의 댓글