본문 바로가기
Works/Web

[Web] 서버 이사: 라즈베리파이 Ubuntu Server 설치

by Vader87 2021. 1. 28.
반응형

원했던 기능을 구현은 했지만 구동을 위해 노트북을 계속 켜 놓을 순 없습니다. 방치중인 라즈베리 파이에 환경을 옮겨 봅니다.

이쪽 전문이 아니라서 용어나 설명은 미흡할 수 있습니다. 이해 부탁드리고, 잘못된 부분은 지적해 주시면 감사하겠습니다~^^

1. OS 설치

일단 OS 는 Ubuntu Server 를 사용하기로 합니다.

ubuntu.com/download/raspberry-pi

 

Install Ubuntu on a Raspberry Pi 2, 3 or 4 | Ubuntu

Ubuntu is an open-source operating system for cross platform development, there's no better place to get started than with Ubuntu on a Raspberry Pi.

ubuntu.com

자신의 Pi 기기에 맞는 OS 를 선택합니다.

ubuntu.com/tutorials/how-to-install-ubuntu-on-your-raspberry-pi#1-overview

 

How to install Ubuntu Server on your Raspberry Pi | Ubuntu

Ubuntu is an open source software operating system that runs from the desktop, to the cloud, to all your internet connected things.

ubuntu.com

가이드대로 Raspberry Pi Imager 를 다운받아 설치하고 진행하면 됩니다.

단, 마지막에 추천해 주는 다음 두가지는 저는 추천하지 않습니다.

sudo apt install xubuntu-desktop

sudo apt install lubuntu-desktop

Visual OS 인데, 설치해 봤는데 제 경우 매우 느려지는 단점을 경험 했습니다.

 

2. Node js 설치 (NVM, NPM)

구현해 둔 기능은 Node js 기반으로 돌아갑니다.

설치한 Ubuntu OS 에 Node js 환경을 구성해 줍시다.

우선 NVM 을 설치해 줍니다.

github.com/nvm-sh/nvm

 

nvm-sh/nvm

Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions - nvm-sh/nvm

github.com

위 페이지의 README.md 에 나와 있는 대로 설치를 진행해 봅시다.

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash

설치가 끝나면 환경 변수 값을 업데이트 해 줍니다.

$ source ~/.bashrc

NVM 이 정상적으로 설치 되었는지 확인해 봅니다.

$ nvm --version

개발환경과 같은 버전의 Node js 를 설치해 줍니다.

$ nvm install --lts

Node js 가 정상적으로 설치 되었는지 확인해 봅니다.

$ node -v

NPM 을 설치해 줍니다.

$ sudo apt-get install npm

 

3. Git 설치 및 프로젝트 클론

이제 작업한 파일들을 Ubuntu Server 에 복사해 주어야 합니다.

저는 Git 을 이용해 작업해 왔었기 때문에 Ubuntu Server 에 Git Clone 을 생성하겠습니다.

Git 은 기본적으로 설치가 되어 있습니다.

 

4. MariaDB 복사

로컬 -> 원격

준비

1. 로컬, 원격 같은 혹은 호환되는 버전의 MariaDB 가 설치되어 있어야 함.

2. 원격으로 접근 가능한 계정 추가

3. DB 데이터 복제

$ mysqldump -h [주소] -u [계정] -p [패스워드] [DB명] > [파일명].sql

$ mysql -h [주소] -u [계정] -p [패스워드] [DB명] < [파일명].sql

예)

로컬에 정의된 loaclDB 를 192.168.0.1 원격에 remoteDB 로 복사

$ mysqldump -u local -p local localDB > dump.sql

$ mysql -h 192.168.0.1 -u remote -p remote remoteDB < dump.sql

 

5. Ubuntu Deamon 설정

www.axllent.org/docs/nodejs-service-with-systemd/

 

Run node.js service with systemd - Axllent.org

Automatically starting a node.js service is easy and reliable with systemd. There is now no need to install additional node.js modules (such as ‘forever’).

www.axllent.org

 

로컬에서 했듯이 SSH 접속을 통해 Ubuntu 에서 Node js 프로젝트를 실행시키면 잘 돌아 갑니다.

근데 SSH 접속한 PC 가 꺼지면 서버도 같이 내려가는 듯 합니다.

원인을 찾아보니 제가 실행시킨 방법은 SSH 연결이 되있는 동안 살아있는 프로세스를 만든 것 입니다.

진짜 서버 처럼 구동하기 위해서는 Ubuntu Deamon 설정을 해 백그라운드로 돌아가게 해 주어야 한다고 합니다.

 

실행중인 Node js 의 로그는 다음 방법으로 확인할 수 있습니다.

$ journalctl -u [서비스 명].service

위의 명령어를 실행시켰을 때에는 기록된 모든 로그가 나와 보기 힘듭니다.

필요한 옵션을 확인해 조절 해서 사용하면 편리합니다.

추가 적으로 로그양이 너무 많아 용량이 문제가 되는 케이스도 위 명령어를 통해 해결 가능하다고 합니다.

www.lesstif.com/system-admin/linux-journalctl-82215080.html

 

Linux journalctl 사용법

 

www.lesstif.com

 

이사하고 나서 텔레그램의 Webhook 이 되지 않습니다.

개발 노트북에서 테스트 해보니 SSL 을 막으면 Webhook 이 작동하지 않는 것 같습니다.

SSL 인증서를 Ubuntu 로 옮기던가, 새로 SSL 인증을 받아야 할 것 같습니다..

community.letsencrypt.org/t/moving-and-merging-certs-from-server-a-to-b/19015

 

Moving and merging certs from Server A to B

I have 2 AWS Ubuntu servers. Each are running a single site. Each have Let’s Encrypt certs installed and are redirecting to https and have nginx in front of them. Let’s encrypt is setup to auto-renew - a setting in crontab. I’m moving one of the site

community.letsencrypt.org

ivanderevianko.com/2019/03/migrate-letsencrypt-certificates-certbot-to-new-server

 

$ certbot renew --dry-run

Certbot 버전이 달라 에러가 납니다. Ubuntu 버전은 0.40.0 이고 원래 버전은 1.10.1 이라 문제가 있다고 합니다.

구글링으로 찾아서 설치해 줬던걸, Certbot 가이드 대로 다시 설치 해 줍니다.

$ sudo apt install snapd

$ sudo snap install core; sudo snap refresh core

$ sudo apt-get remove certbot

$ sudo snap install --classic certbot

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

 

다른 에러로 바뀌었습니다.

'An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.'

darkstart.tistory.com/109?category=871909

 

lets encrypt 인증서 갱신 실패

crontab을 이용해서 인증서를 자동 갱신하도록 만들어놨는데.. 오늘 확인해보니 인증서가 갱신이 되지 않았습니다. sudo certbot renew --renew-hook "sudo /opt/bitnami/ctlscript.sh restart apache" 위와 같이..

darkstart.tistory.com

blog.realsangil.net/2018/10/letsencrypt-wildcard-certification-renew/

 

Let's Encrypt 와일드카드 인증서 갱신해보기

 

blog.realsangil.net

$ certbot renew

테스트가 아닌 갱신을 해봤더니 아직 시간이 남아서 갱신되지 않는다고 합니다.

반응형

댓글