curl -sL https://deb.nodesource.com/setup_22.x | sudo -E bash -
IT
- Raspberry Pi (legacy 32bit) Node.js 설치 2024.12.24
- 아키텍처 2024.11.27
- Aurora RDS Mysql 8 Timezone 변경 2024.11.21
- Rocky Linux 방화벽 - Firewalld 2024.09.11
- GITLAB RUNNER 500 에러 2024.03.18
- RDS DB 유저 권한 2024.02.20
- eksctl delete fail 2024.02.07
- YAML 2024.02.06
- [raspberrypi] apache, php 로 exec 실행 2019.03.27
- api 서버 추가 2016.09.13
Raspberry Pi (legacy 32bit) Node.js 설치
아키텍처
Monolith
Microservice
Monolith
1.명사 단일 암체, (특히 고대의) 거대한 돌 기둥[거석]2.명사 (변화가 느리고 개개인에게 무관심한) 거대한 단일 조직[사회]
Microservice
[Noun] (computing) A small independent process that communicates with other processes, used to break down a complex task into many simpler components.
모놀로식, MSA... 아키텍처 설계 관련해서 정해야 할때가 되면,
서로 경험해온 방식이 달라서 그런지 다양한 의견이 나온다.
사실 정답은 없지만,
누군가는 정해야지, 배가 산으로 가질 않는다.
개발자로, 스타트업에서 CTO 로 경험해 본 입장에서,
어떤 것이 좋은지(?) 생각해 보면,
사업할 수 있도록 결과물이 나와주기만 하면 되기에,
결과적으로는 빨리 나올 수 있는게 좋은 거라고 생각이 된다.
개발자 입장으로 보면,
먼저.. 중복되는 걸 싫어하고, 자꾸 쪼개고 싶어한다..
이후에 운영하면서 유지보수 할 생각에 코드를 더 간결하게 짜고 싶어진다..
그리고 뭔가 새로 나온 기술들을 경험하고 싶어하고..
아무래도 모놀리식은 기존 방식이고 Microservice는 트렌드이니,
후자쪽으로 하고 싶어한다.
관리자 입장에서 보면,
사실 서비스가 빨리 나와서 돌아가는게 중요하지,
뭐가 쪼개져있어서, 서로 독립적으로 돌아가던지 말던지,
별 중요하지 않다...
서비스가 성공해야 이후에 기능이 더 추가되고 개선할 게 생기지 않겠는가..
결론은,,,
그냥 빨리 만들 수 있는 걸로 만들어서,
서비스 오픈부터 하자...
그게 내가 생각하는 최고의 개발자다...
Aurora RDS Mysql 8 Timezone 변경
DB를 AWS Aurora RDS로 옮겼더니,
문자메시지 발송이 안되는 현상을 발견,,,
혹시나 싶어서 발송예정시간을 -9 로 당겨보니,
문자 발송이 되네..
timezone 문제라고 생각해서,
AWS Aurora RDS 쿼리날려보니,
UTC 로 되어있음...
아래대로 파라미터 그룹을 생성후 (클러스터 파라미터 그룹)
DB 구성에서 파라미터 그룹을 해당 그룹으로 변경하고 적용해주면 됨
SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
Rocky Linux 방화벽 - Firewalld
Rocky Linux와 같은 리눅스 배포판에서 firewalld와 iptables는 모두 방화벽을 관리하는 도구이지만, 그 작동 방식과 관리 방법에 차이가 있습니다. 두 도구는 주로 네트워크 트래픽을 필터링하고 방화벽 규칙을 설정하는 데 사용됩니다.
1. firewalld
- 동적 방화벽 관리 도구로, 시스템이 동작 중일 때도 방화벽 규칙을 즉시 적용할 수 있습니다. 이를 통해 연결을 끊거나 네트워크 서비스에 영향을 주지 않고도 방화벽 규칙을 수정할 수 있습니다.
- firewalld는 영역(zone) 개념을 도입하여 네트워크 인터페이스를 다양한 보안 수준으로 그룹화할 수 있습니다. 각 영역에는 다른 방화벽 규칙 세트가 적용될 수 있습니다.
- 설정 파일이 XML 형식으로 구성되어 있으며, 명령어는 직관적입니다.
- 추상화 레이어를 제공하여 고급 설정을 보다 쉽게 관리할 수 있습니다.
- 주로 nftables 백엔드를 사용합니다. 이는 iptables와 유사한 역할을 하지만 더 최신의 방화벽 기술입니다.
장점:
- 동적인 설정 변경이 가능.
- 직관적인 영역 기반 관리.
- 복잡한 설정을 간단하게 할 수 있음.
2. iptables
- 전통적인 방화벽 도구로, 네트워크 패킷 필터링을 위한 명령 줄 도구입니다.
- iptables는 stateless 및 stateful 패킷 필터링을 지원합니다.
- 규칙을 설정할 때 실시간으로 즉각 적용이 가능하지만, 규칙을 수정하려면 보통 전체 규칙 세트를 다시 로드해야 합니다.
- 사전 정의된 체인과 테이블을 사용하여 트래픽을 필터링합니다. 체인은 INPUT, FORWARD, OUTPUT 등이고, 테이블은 필터, NAT, Mangle 등으로 나뉩니다.
- iptables는 리눅스 방화벽 관리에서 오랫동안 표준으로 사용되어 왔지만, 최근에는 nftables로 대체되고 있습니다.
장점:
- 고도로 세밀한 설정 가능.
- 방화벽의 동작 방식을 매우 구체적으로 제어할 수 있음.
- 오랜 시간 동안 많은 리눅스 배포판에서 사용되어 온 안정적인 도구.
주요 차이점
- 관리 방식: firewalld는 iptables보다 더 높은 수준의 추상화와 유연한 관리 인터페이스를 제공합니다. 반면, iptables는 더 세밀하고 구체적인 제어가 가능하지만, 설정이 복잡할 수 있습니다.
- 동적 vs 정적: firewalld는 시스템을 재시작하거나 네트워크 연결을 끊지 않고도 규칙을 실시간으로 변경할 수 있습니다. iptables는 규칙을 변경할 때 일부 영향을 미칠 수 있습니다.
- 백엔드: firewalld는 최신 리눅스 배포판에서 nftables를 기본 백엔드로 사용하지만, iptables는 오래된 방화벽 관리 도구로 iptables 프레임워크 자체를 사용합니다.
따라서, 보다 간편하고 동적인 방화벽 관리를 원한다면 firewalld를, 더 세밀한 규칙 제어를 원한다면 iptables를 사용할 수 있습니다.
라고 Chat GPT 에서 얘기해준다.,
기존 Centos 에서 iptables로 방화벽 관리를 주로 했었는데,
Rocky Linux 에서는 firewalld를 사용해서 방화벽 관리를 하고 있다.
커맨드 라인으로 일일이 추가/관리하는게 번거로워서..
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>gitlab</short>
<description>Grafana is an open platform for beautiful analytics and monitoring</description>
<port protocol="tcp" port="4963"/>
<port protocol="tcp" port="4922"/>
</service>
/usr/lib/firewalld/services/gitlab.xml
이렇게 서비스 파일을 만들고,
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<service name="cockpit"/>
<service name="logstash"/>
<service name="kibana"/>
<service name="grafana"/>
<service name="elasticsearch"/>
<service name="prometheus"/>
<service name="sonarqube"/>
<service name="registry"/>
<service name="gitlab"/>
</zone>
/etc/firewalld/zones/public.xml
여기에 서비스를 등록한다.
그리고 나서,
sudo systemctl start firewalld
자동재시작 등록은
sudo systemctl enable firewalld
GITLAB RUNNER 500 에러
root@gitlab:/# gitlab-psql
psql (12.7)
Type "help" for help.
gitlabhq_production=# UPDATE projects SET runners_token = null, runners_token_encrypted = null;
UPDATE 346
gitlabhq_production=# UPDATE namespaces SET runners_token = null, runners_token_encrypted = null;
UPDATE 129
gitlabhq_production=# UPDATE application_settings SET runners_registration_token_encrypted = null;
UPDATE 1
gitlabhq_production=# UPDATE application_settings SET encrypted_ci_jwt_signing_key = null;
UPDATE 1
gitlabhq_production=# UPDATE ci_runners SET token = null, token_encrypted = null;
UPDATE 3
gitlabhq_production=# UPDATE ci_builds SET token_encrypted = null;
UPDATE 4039
RDS DB 유저 권한
Mysql 8 버전 기준
CREATE USER 'josungwoo'@'%' IDENTIFIED BY '패스워드';
GRANT ALL PRIVILEGES ON `sungwoodb`.* TO 'josungwoo'@'%';
flush privileges;
읽기 권한만 주고싶다..
CREATE USER 'josungwoo'@'%' IDENTIFIED BY '패스워드';
GRANTSELECT ON `sungwoodb`.* TO 'josungwoo'@'%';
flush privileges;
RDS Aurora로 생성하고 파라미터 그룹 생성하고 편집에서
charater set 과 time zone 세팅
eksctl delete fail
admin@josungwoo-MBP eks % eksctl delete cluster --name eks-tutorial
2024-02-07 09:54:57 [ℹ] deleting EKS cluster "eks-tutorial"
2024-02-07 09:54:57 [ℹ] will drain 1 unmanaged nodegroup(s) in cluster "eks-tutorial"
2024-02-07 09:54:57 [ℹ] starting parallel draining, max in-flight of 1
2024-02-07 09:55:58 [!] 1 pods are unevictable from node ip-192-168-9-219.ap-northeast-2.compute.internal
2024-02-07 09:56:58 [!] 1 pods are unevictable from node ip-192-168-9-219.ap-northeast-2.compute.internal
계속 펜딩 상태...
아래 옵션을 주어서 삭제
eksctl delete cluster --name eks-tutorial --disable-nodegroup-eviction
admin@josungwoo-MBP eks % eksctl delete cluster --name eks-tutorial --disable-nodegroup-eviction
2024-02-07 09:59:45 [ℹ] deleting EKS cluster "eks-tutorial"
2024-02-07 09:59:45 [ℹ] will drain 1 unmanaged nodegroup(s) in cluster "eks-tutorial"
2024-02-07 09:59:45 [ℹ] starting parallel draining, max in-flight of 1
2024-02-07 10:00:01 [✔] drained all nodes: [ip-192-168-85-198.ap-northeast-2.compute.internal ip-192-168-22-84.ap-northeast-2.compute.internal ip-192-168-9-219.ap-northeast-2.compute.internal]
2024-02-07 10:00:02 [ℹ] deleted 0 Fargate profile(s)
2024-02-07 10:00:02 [✔] kubeconfig has been updated
2024-02-07 10:00:02 [ℹ] cleaning up AWS load balancers created by Kubernetes objects of Kind Service or Ingress
2024-02-07 10:00:04 [ℹ]
2 sequential tasks: { delete nodegroup "ng-1", delete cluster control plane "eks-tutorial" [async]
}
2024-02-07 10:00:04 [ℹ] will delete stack "eksctl-eks-tutorial-nodegroup-ng-1"
2024-02-07 10:00:04 [ℹ] waiting for stack "eksctl-eks-tutorial-nodegroup-ng-1" to get deleted
2024-02-07 10:00:04 [ℹ] waiting for CloudFormation stack "eksctl-eks-tutorial-nodegroup-ng-1"
2024-02-07 10:00:34 [ℹ] waiting for CloudFormation stack "eksctl-eks-tutorial-nodegroup-ng-1"
2024-02-07 10:01:32 [ℹ] waiting for CloudFormation stack "eksctl-eks-tutorial-nodegroup-ng-1"
2024-02-07 10:03:11 [ℹ] waiting for CloudFormation stack "eksctl-eks-tutorial-nodegroup-ng-1"
2024-02-07 10:03:11 [ℹ] will delete stack "eksctl-eks-tutorial-cluster"
2024-02-07 10:03:11 [✔] all cluster resources were deleted
YAML
https://www.arthurkoziel.com/setting-up-vim-for-yaml/
YAML 파일을 VI, VIM 으로 다루다 보니, Tab 이 들어가면서 나오는 에러,
error: error parsing deployment.yml: error converting YAML to JSON: yaml: line 10: found character that cannot start any token
근데 VIM 으로 보면 Tab 표시가 안나타나서 Mac에서는 위와 같이 Vim 에디터에다가 YAML 유효성을 검증할 수 있는 플러그인을 설치하면 좋다.
[raspberrypi] apache, php 로 exec 실행
php로 exec 실행하면 잘되는데,
apache 로 세팅해서 rest 로 호출하면 exec가 실행이 되지 않는다.
권한문제로,
apache로 실행되면 user가 다르기 때문
php 소스상에
echo system('whoami');
라고 코드를 넣어보면 수행하는 유저를 알 수가 있다.
그 유저에게 권한을 부여해주면됨
sudo nano /etc/sudoers
www-data ALL=(ALL) NOPASSWD:ALL
이라고 추가하면 완료
api 서버 추가
대상 OS
CentOS release 6.8 (Final)
1. 패키지 파일 복사
2. 방화벽 설정
3. 아파치 설정
4. php56 설치
yum list php56-*
yum 리스트에 뜨질않는다면 repository 변경
rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm
yum clean all
yum install php-pear php-devel gcc make
yum clean all
yum list php56*
기존에 깔았던 php제거
yum -y remove php php-*
yum install php56w-devel php56w-pecl php56w-common php56w-mysql php56w-pear php56w-mbstring php56w-opcache php56w
5. Predis 설치
yum install php-pear
pear channel-discover pear.nrk.io
pear install nrk/Predis
6. 레디스 클러스터 설정
./redis-server ../7000/redis.conf
./redis-server ../7001/redis.conf
./redis-server ../7002/redis.conf
./redis-trib.rb create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002