coolify 를 써보다 보니 재밌다.

처음이라 좀 헤맨 부분이 있지만 ... 익숙해지면 정말 편해질 것 같다

세팅하려는 대략적인 흐름도는 아래와 같다

 

# Docker - nestJS 부분

projects 메뉴에서 새프로젝트를 만들어 준다.

적당한 이름을 입력하고, continue ( New Resource )

여러 방법이 있지만, Dockerfile 방법으로 하도록 한다.

중간 부분의 git clone 본인의 프로젝트소스를 가져오도록 한다.

# 베이스 이미지로 Node.js 사용
FROM node:22

# 작업 디렉토리 설정
WORKDIR /usr/src/app

# git clone
RUN apt-get update && apt-get install -y git

RUN git clone https://github.com/your-account/nestjs-practice-netflix .

# pnpm 설치
RUN npm install -g pnpm

# 의존성 설치
RUN pnpm install

# 앱 빌드
RUN pnpm run build

# 프로덕션 모드로 실행
CMD ["pnpm", "run", "start:prod"]

# 포트 설정 (NestJS 기본 포트는 3000)
EXPOSE 3000

프로젝트에 접속할 주소를 적절하게 적어준다.

저장(Save) 한 후 deploy 하면 도커이미지를 만들어주고, 앱이 실행된다.

반응형

# 디비 postgres 부분

내가 테스트 한 프로젝트는 postgres 를 사용하기에 DB도 세팅해준다.

프로젝트에서 ( New Resource ) 로

PostgreSQL 을 선택해준다.

PostgreSQL 16 을 선택해줬다.

세팅에 암호를 정해준다.

중간 부분의 Postgres URL (internal) 으로 접속할 것이니, 해당 값을 nestjs 에서 사용할 것이다.
DB 를 Start 해준다.

 

그리고, 다시 nestJS 설정으로 와서.

위 처럼 설정값을 적어준다.
(DB_HOST 부분의 값이 - Postgres URL (internal) 에 있던 주소)

프로젝트에 따라 저 환경변수 값이 다를 수 있으니, 본인의 프로젝트에 맞게 수정해준다.

프로젝트를 Deploy 한다. 이미 프로젝트를 Deploy 했다면, Restart 해주면 입력한 설정값이 적용된다.

이제 프로젝트가 동작하는지 확인해본다. (정상적으로 응답된다)

 

아마도 다음 단계는 프로젝트 수정하고 git push 하면
자동으로 coolify 에서 자동 빌드 + 재배포 하는 프로세스를 만들어 봐야 겠다.

 

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

지난글에 설치를 해봤다. https://blog.1day1.org/717

 

coolify + n8n 으로 자동화해보자 - 설치편 (feat. vultr)

최근 재미있는 것을 봐서 시도해보려고 한다.coolify 는 vercel / netlify 비슷한 서비스를 만들어주는 오픈소스라고 보면 된다. - 서비스로도 사용할 수 있지만, 셀프 호스팅으로 설치해보려 한다. -

blog.1day1.org

설치는 비교적 큰 이슈 없이 완료했다.

이제 본격적인 n8n 사용을 해보려고 하는데.

처음부터 장벽을 만났다. 흔한 예제인 youtube transcript 를 해보려는데.

에러를 만나 버렸다.

[YoutubeTranscript] 🚨 Transcript is disabled on this video ....

 

당장 에러 붙들고 있을 여유는 없어, 다음 기회에 다시 봐야 겠다.

대신 Coolify 를 사용한 자동 배포 쪽을 더 파봐야 겠다.
(현재 nestJS 공부중인데, 관련 배포를 사용해보려 한다 - docker 배포)

 

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

최근 재미있는 것을 봐서 시도해보려고 한다.

coolify 는 vercel / netlify 비슷한 서비스를 만들어주는 오픈소스라고 보면 된다.
 - 서비스로도 사용할 수 있지만, 셀프 호스팅으로 설치해보려 한다.
 - https://coolify.io/self-hosted

n8n 은 자동화(노코드 툴?)에서 자주 언급되는 make / zapier 같은 서비스를 만들어 주는 오픈소스
 - 역시 이것도 셀프 호스팅으로 https://docs.n8n.io/hosting/

일단 목표는 n8n 으로 블로그 자동포스팅에 적용해보고자 한다.
이 블로그에 글을 올릴지, 별도의 다른 블로그로 할지는 모르겠다.

설치 자체는 가이드 따라서 하면 그리 어렵지는 않아 보이지만,
어느 정도 사양이면 제대로 사용할 수 있을지 실제로 돌려봐야 겠다.(coolify 는 최소 2G / 2 CPUs 정도면 된다고 하지만...)

vultr 에 설치해서 돌려봐야 겠다.
뜬금 광고 시간.(아래 링크로 최초 가입하시면 300$의 크레딧 -30일내사용- 을 받아서 사용해 볼 수 있습니다.)

30일동안 사용해보고 괜찮으면 연장해서 사용하면 좋을 듯 하다.

 

coolify + n8n 의 설치까지는 별 무리는 없어 보이지만, n8n 실제 사용은 또 다른 영역(노코드툴)이니 좀 헤맬지도 모르겠다.

#이제 본격적인 설치시간

월 비용은 대략 22달러 정도 될 듯 하다.

OS를 뭘로 할까? 기본 ubuntu 를 할까, Docker(on ubuntu) 로 할까 등등 살펴 보다보니, 어!

기본 설치되어 있는 이미지가 있네요.(유명해서 그런지. 이미 있군.)

살짝 고민, 설치부터 해볼까. 그냥 설치된 거 쓸까...
고민좀 해보고 다시 찾아오겠습니다.


[추가]

다시 돌아왔다, 그냥 설치된 버전으로 해보기로 했다.

vultr 관련 선택하고 Deploy 한 후 기다리면, 접속할 수 있다.

1. 기본 {서버IP}:8000 로 접속하면 된다.
2. 처음 접속하면 관리계정 등록을 하면 된다.
3. 그러면 coolify 관리화면으로 접속된다.

그냥 아이피로 접속해서 해도 되지만, 뭔가 세련되지 않은 듯 하다.

도메인을 연결해본다.

본인이 가지고 있는 도메인을 연결하면 된다.

SSL 인증서는 어디서 세팅하나 했는데, 자동으로 세팅해주는 듯 하다. (letsencrypt 를 사용한다)

Save 하고 설정한 도메인으로 재접속해서 사용하면 된다.

.

.

이제 n8n 을 설치해보자.

Projects 의 메뉴에서 +Add 로 적당한 이름을 적어준다.(다음 다음 넘어가면 된다)

production 클릭

+Add New Resource 클릭

이제 본격적인 패키지 선택

git 소스를 가져올 수도 있고 / Dockerfile 등 도커이미지를 사용할 수도 있고 / 데이터베이스를 설치할 수도 있다.

아래 부분에 Services 에서 검색한다. N8N 을 선택한다.( 그외 여러가지 유명한 서비스들이 있다)
최근 관심중인 supabase 도 보인다(이것도 해볼 예정)

n8n 을 선택한 후 다음 처럼 세팅한다.(도메인 세팅만 하면 된다)

적당한 서비스 이름 너히고, 도메인 넣고, Deploy 해준다 (좀 시간이 걸린 후 )
deploy 가 완료되면 다음처럼 바뀐다.

메뉴의 Links 에 설정한 도메인을 클릭해서 들어간다.

짠! (여기도 처음 접속시 관리계정 설정 하고 들어가면 된다)


[참고]

처음 에 다음 세팅을 How big is your company? 를 20 이하로 하면, 아래 설정창이 계속 나온다.
(뭔가 버그인 듯 하다. 아래처럼 20-99 로 해줬다)

 

이제 본격적인 n8n - 노코드 자동화를 설정해봐야 겠다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

예전에는 개발자 행사 자주(?) 다니곤 했는데, 그동안 안가본지 꽤 오래된 것 같다.

토스에서 간만에 재밌는 행사를 한다.
https://toss.im/slash-24

 

토스 개발자 컨퍼런스 SLASH24

참가 신청 8.23-9.2 / 본 행사 9.12 COEX

toss.im

근데, 모르는 부분도 많네. 재밌어 보이는 것도 많고.

일단 관심있어 보이는 거 뽑아봤다.

체력이 안되서 저 세션 모두 볼수 있을지도 모르겠지만, 최선을 다해서 ...

 

뽑기 운이 없는 난 - 과연 볼 수 있을까?

 

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

certbot 을 주기적으로 renew 한 후 , 인증서가 갱신되면 post_hook 으로
새로운 SSL 인증서 .pem 을 Spring Project 의 .pfx 로 변환하고, 스프링 프로젝트를 재실행 해주는 코드가 필요하다.

지난글의 https://blog.1day1.org/712 에서 언급한 pem => pfx 변환 코드를 좀더 개선했다.

 

스프링 프로젝트에 letsencrypt 인증서를 사용해보자 ( feat. pfx / PCKS12)

지난글에 이어 https://blog.1day1.org/711 스프링 프로젝트에 .pem 인증서를 사용해보자. letsencrypt 를 좀더 활용해보자. (feat. post_hook)letsencrypt 를 잘 사용하고 있는데, 주로 개발용으로 사용했다.간단한

blog.1day1.org

개선한 코드는 letsencrypt의 pem 인증서의 날짜와 변환한 pfx 날짜를 비교해서 변환할지 체크하는 코드를 추가했다.

# cat lets-pem2pfx.sh 
#!/bin/bash

if [ "$2" == "" ]; then
	echo "Usage) $0 {domain} {out-dir/out-file.pfx} {convert-now}";
	exit;
fi

out_dir=$PWD
domain=$1
out_file=$2
convert=$3

password=124345

######
lets_dir=/etc/letsencrypt/live

if [ "$convert" == "convert-now" ]; then
	echo 
else
	certbot certificates --cert-name $domain
fi
ls -al $lets_dir

cd $lets_dir/$domain

# file mtime check.
echo 
echo -n "Origin: "
echo `date +%s%N --reference cert.pem`
echo " "`date  --reference cert.pem`
echo 
echo -n "Target: "
echo `date +%s%N --reference $out_dir/$out_file`
echo " "`date  --reference $out_dir/$out_file`
echo 
if [ "cert.pem" -nt "$out_dir/$out_file" ]; then
	printf '%s\n' "cert.pem is newer than $out_dir/$out_file : need to update new"
else
	printf '%s\n' "cert.pem is older than $out_dir/$out_file"
	echo "No action";
	echo
	exit 122 # fail code ( 0~256 )
fi


if [ "$convert" == "convert-now" ]; then
	openssl pkcs12 -export \
	 -out $out_dir/$out_file \
	 -inkey privkey.pem -in cert.pem -certfile chain.pem \
	 -passin pass:$password -passout pass:$password
	echo "Convert Done";
	ls -al $out_dir/$out_file;
fi

exit 200;
# end file

위 코드를 기반으로 renew 시에 post_hook 에서 처리할 스크립트는 다음과 같다.

# cat renewal-ssl-restart.sh 
#!/bin/bash

readlink=$(readlink -f $0)
dirpath=$(dirname $readlink)


echo 
echo `date`
echo $dirpath;
cd $dirpath;

# convert pem 2 pfx - renewal pem
bash lets-pem2pfx.sh your-domain.com ssl/your-domain.com.pfx convert-now
retCode=$?

if [ "$retCode" == "200" ]; then
	echo "convert-done - do action"

	# restart - tomcat
	echo "Shutdown..."
	shutdown.sh
	sleep 5

	echo "Start up..."
	startup.sh
fi

letsencrypt 의 인증서가 갱신이 되면 post_hook 으로 해당 코드를 실행하여,
pem => pfx 변환 / 스프링프로젝트 재실행 해준다. 위 프로젝트 재실행 코드는 본인에 맞게 수정하여 쓴다.

해당 코드를 콘솔에서 실행까지 테스트 한 후에 /etc/letsencrypt/renewal/yourdomain.conf 의 post_hook 에 넣어준다.

# Options used in the renewal process
[renewalparams]
authenticator = nginx
installer = nginx
account = af93d65834vadv37436bddsfh092ad2a
manual_public_ip_logging_ok = None
#pre_hook = systemctl stop nginx
post_hook = systemctl restart nginx ; bash /root/bin/renewal-ssl-restart.sh >> /var/log/nginx/renewal_ssl_restart-$(date +\%Y-\%m-\%d).log
server = https://acme-v02.api.letsencrypt.org/directory

다음 명령으로 테스트 해본다.

certbot renew --cert-name your-domain.com --dry-run

테스트 명령 후에 혹시 이런 에러가 보일 수 있다.

renewal-ssl-restart.sh >> /var/log/nginx/renewal_ssl_restart-$(date +\%Y-\%m-\%d).log
Error output from post-hook command systemctl:
Another instance of Certbot is already running.

해당 bash 코드에 certbot 확인하는 코드가 있었는데, 해당 코드를 post_hook 에서 실행되지 않게 고쳐줬다.(아래 부분이 고친 코드)

if [ "$convert" == "convert-now" ]; then
	echo 
else
	certbot certificates --cert-name $domain
fi

위 코드는 인증서 확인용 코드인데, 없어도 무방하니 해당 부분 지워도 된다.

테스트 까지 완료했다면, 이제 기다리면 된다.

 

내가 쓰고 있는 인증서는 30일정도 후에 업데이트 될 듯 하다(잘 되길...)

 

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,