• 프로젝트 생성
npx @nestjs/cli new app-name
  • 생성된 프로젝트 내부 Dockerfile 생성
# 베이스 이미지 선택
FROM node:14-alpine

# 앱 디렉토리 생성 및 작업 디렉토리로 설정
WORKDIR /usr/src/app

# 앱 종속성 설치
COPY package*.json ./
RUN npm install

# 소스 코드 복사
COPY . .

# 앱 빌드
RUN npm run build

# 컨테이너 실행 시 실행할 명령어
CMD ["npm", "run", "start:prod"]
  • Dockerfile로 이미지 빌드
# (.)은 Dockerfile이 해당 디렉토리에 있다는 것을 의미

docker build -t app-name .
  • 컨테이너 실행
docker run -p 3000:3000 app-name

 

  • vscode extension에서 dev containers 설치

  • vscode 좌측에 아래와 똑같이 생긴 아이콘 클릭 후 DEV CONTAINERS에서 생성한 nest 프로젝트 선택

 

  • 우클릭 후 둘 중 하나 선택

 

'docker' 카테고리의 다른 글

[docker] mysql 생성  (1) 2024.01.24
  • MySQL 이미지 다운로드
docker pull mysql
  • 도커 컨테이너 생성
docker run -d -p 6666:3306 -e MYSQL_ROOT_PASSWORD=secret-pw --name container-name mysql

# -d : 백그라운드 모드
# -p 6666:3306 : 포트 설정 [6666포트를 해당 컨테이너 3306포트와 연결]
# -e mysql_root_password=pw : root 계정 패스워드 설정
# --name : 컨테이너 이름
  • MySQL 컨테이너 접속
docker exec -it container-name mysql -u root -p

# -it : 컨테이너 내부에서 대화형으로 작업 가능
# mysql -u root -p : mysql에서 root 계정으로 접속할 때 사용

'docker' 카테고리의 다른 글

[docker] nestjs vscode 접속  (0) 2024.01.24
리스트의 양쪽 끝에 포인터를 두어 비교하면서 찾는 방식

 

  • 두 값의 합이 0인 것을 찾는 문제
function sumZero(lst) {
    let start = 0;
    let end = lst.length - 1;

    while(start !== end){
        if(lst[start] + lst[end] === 0){
            return [lst[start], lst[end]];
        }
        lst[start] + lst[end] > 0 ? end -= 1 : start += 1;
    }
}

console.log(sumZero([-3, -2, -1, 0, 1, 2, 3]))
console.log(sumZero([1, 2, 3]))

 

  • 리스트에서 유니크한 값 찾는 문제
function countUniqueValues(lst){
    if(lst.length === 0){
        return 0;
    }
    
    let i = 0;
    for(let j = 1; j < lst.length; j++){
        if(lst[i] !== lst[j]){
            i++;
            lst[i] = lst[j];
        }
    }
    return i + 1;
}

countUniqueValues([1,1,1,1,1,2]) // 2
countUniqueValues([1,2,3,4,4,4,7,7,12,12,13]) // 7
countUniqueValues([]) // 0
countUniqueValues([-2,-1,-1,0,1]) // 4

 

'알고리즘' 카테고리의 다른 글

Frequency Counter(빈도 카운터)  (0) 2024.01.23
Frequency Counter는 주어진 리스트 속 요소의 빈도를 확인하는 문제

 

  • 정수로 이루어진 두 리스트 빈도 체크
function same(arr1, arr2){
    if(arr1.length !== arr2.length){
        return false;
    }
    
    let frequencyCounter1 = {}
    let frequencyCounter2 = {}
    for(let val of arr1){
        frequencyCounter1[val] = (frequencyCounter1[val] || 0) + 1
    }
    for(let val of arr2){
        frequencyCounter2[val] = (frequencyCounter2[val] || 0) + 1        
    }

    for(let key in frequencyCounter1){
        if(!(key ** 2 in frequencyCounter2)){
            return false
        }
        if(frequencyCounter2[key ** 2] !== frequencyCounter1[key]){
            return false
        }
    }
    return true
}

 

  • 소문자 문자열로 이루어진 두 리스트 빈도 체크
function validAnagram(str1='', str2='') {// true
    if (str1.length !== str2.length){
        return false;
    }
    
    const letters = {};
    
    for (let letter of str1){
        letters[letter] ? letters[letter] += 1 : letters[letter] = 1;
    }
    
    for(let letter of str2) {
        if(!letters[letter]){
            return false;
        }
        letters[letter] -= 1;
    }
    return true;
}


console.log(validAnagram('', '')); // true
console.log(validAnagram('aaz', 'zza')); // false
console.log(validAnagram('anagram', 'nagaram')); // true

'알고리즘' 카테고리의 다른 글

투 포인터  (1) 2024.01.23

해당 버킷의 정책 편집 -> 아래 코드 적용

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PutObj Deny",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:PutObject",
            "NotResource": [
                "arn:aws:s3:::<버킷이름>/*.jpeg",
                "arn:aws:s3:::<버킷이름>/*.jpg",
                "arn:aws:s3:::<버킷이름>/*.png"
            ]
        }
    ]
}

 

 

/**
 * @param {string} haystack
 * @param {string} needle
 * @return {number}
 */
let strStr = function(haystack, needle) {
  return haystack.indexOf(needle)
};

https://leetcode.com/problems/implement-strstr

 

Implement strStr() - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

 

'알고리즘 문제' 카테고리의 다른 글

[백준] 두 수의 합  (0) 2021.02.01
[백준] 정열적인 정렬  (0) 2021.02.01
[백준] 수 정렬하기4  (0) 2021.02.01
[백준] 카드  (0) 2021.02.01
[백준] 배열 합치기  (0) 2021.02.01

설치할 APM 버전

Apache : 2.4.6

PHP : 7.4

MySQL : 5.7

 

설치 전 필요한 패키지 설치

yum -y install curl-devel libpng \
libpng-devel libjpeg libjpeg-devel libwebp \
libwebp-devel libXpm libXpm-devel openssl \
openssl-devel autoconf curl zlib zlib-devel \
freetype freetype-devel gd gd-devel \
libjpeg libjpeg-devel libmcrypt libmcrypt-devel \
libtool-ltdl-devel libzip libzip-devel \
oniguruma-devel cmake gcc-c++ gcc \
libxml2-devel libxml2 libcurl libcurl-devel \
bzip2-devel sqlite-devel

Apache 설치

[jinhyeok@localhost ~]$ yum install -y httpd

PHP 설치

[jinhyeok@localhost ~]$ sudo yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
[jinhyeok@localhost ~]$ sudo yum -y install epel-release yum-utils
// 저장소 변경
[jinhyeok@localhost ~]$ sudo yum-config-manager --disable remi-php54
[jinhyeok@localhost ~]$ sudo yum-config-manager --enable remi-php74
// php 설치
[jinhyeok@localhost ~]$ sudo yum install -y php
[jinhyeok@localhost ~]$ sudo yum -y install php-fpm

// 다시 세팅해보니 이게 필요하네요
[jinhyeok@localhost ~]$ sudo yum install php-common php-opcache php-mcrypt php-cli php-gd php-curl php-mysql -y
// php에 필요한 라이브러리 설치 이건 길어서 코드만 올려두겠습니다.
yum -y install php-fpm
um -y install  \
php-cli  \
php-redis  \
php-brotli \
php-intl \
php-gd \
php-gmp \
php-imap \
php-bcmath \
php-interbase \
php-json \
php-mbstring \
php-mysqlnd \
php-odbc \
php-opcache \
php-memcached \
php-tidy \
php-pdo \
php-pdo-dblib \
php-pear \
php-pgsql \
php-process \
php-pecl-apcu \
php-pecl-geoip \
php-pecl-imagick \
php-pecl-hrtime \
php-pecl-json \
php-pecl-memcache \
php-pecl-mongodb \
php-pecl-rar \
php-pecl-pq \
php-pecl-redis4 \
php-pecl-yaml \
php-pecl-zip


// Apache 재시작
[jinhyeok@localhost ~]$ systemctl restart httpd

// php-fpm 자동시작 등록
[jinhyeok@localhost ~]$ systemctl enable php-fpm

// php-fpm 시작
[jinhyeok@localhost ~]$ systemctl start php-fpm



MySQL 

// mysql 5.7 저장소에서 다운
[jinhyeok@localhost ~]$ sudo yum -y install http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

// mysql server 다운
[jinhyeok@localhost ~]$ sudo yum -y install mysql-community-server

 

설치 후 나오는 화면

 

[jinhyeok@localhost home]$ ifconfig

 

sudo vi /etc/httpd/conf/httpd.conf

// ESC -> : -> set number 치고 엔터



=====================  httpd.conf  =====================
// 95번째 라인 주석 해제 후 이전 사진에 있는 할당된 ip 입력
95Line -> ServerName 192.168.10.129

119Line -> DocumentRoot "웹 서버로 사용할 디렉터리"
ex		-> DocumentRoot "/home/www/lab"

124Line -> <Directory "웹 서버로 사용할 이전 디렉터리?">
ex		-> <Directory "/home/www">

131Line -> <Directory "웹 서버로 사용할 디렉터리">
ex		-> <Directory "/home/www/lab">

164Line -> DirectoryIndex index.php index.html

// ESC -> : -> wq 치고 엔터

//아래 httpd 재시작 명령어는 해당 디렉터리가 없거나 디렉터리 안에 파일이 없으면 에러남
sudo systemctl restart httpd
sudo systemctl restart php-fpm

 

여기서 403이 뜨는 경우에는 selinux 체크를 해볼 것

 

Composer 설치

[jinhyeok@localhost ~]$ curl -sS https://getcomposer.org/installer | php
[jinhyeok@localhost ~]$ sudo mv composer.phar /usr/local/bin/composer
[jinhyeok@localhost ~]$ composer -v

// composer -v가 안될때
[jinhyeok@localhost ~]$ sudo PATH=$PATH:/usr/local/bin/


[jinhyeok@localhost ~]$ cd /home/www/
[jinhyeok@localhost www]$ sudo rm -rf ./lab

// 라라벨 인스톨러 다운로드
[jinhyeok@localhost www]$ sudo composer global require laravel/installer

[jinhyeok@localhost www]$ composer create-project --prefer-dist laravel/laravel lab

// 권한 확인
[jinhyeok@localhost www]$ ll

// 저같은 경우는 jinhyeok이라는 계정으로 설치를 했기 때문에 그룹권한을 apache로 바꿔주겠습니다
[jinhyeok@localhost www]$ sudo chown -R apache:apache ./lab
// storage와 bootstrap/cache디렉터리의 읽기쓰기 권한도 바꿔주겠습니다.
[jinhyeok@localhost www]$ sudo chmod -R 775 ./lab/storage/
[jinhyeok@localhost www]$ sudo chmod -R 775 ./lab/bootstrap/cache/

// httpd.conf에 가서 디렉토리 경로를 바꿔줍니다
// 프레임워크를 받은 디렉토리 안으로 들어가면 public 폴더가 있습니다.
[jinhyeok@localhost www]$ sudo vi /etc/httpd/conf/ httpd.conf

================== httpd.conf ==================
// 라인 넘버를 보기 위해 치는 명령어?
ESC -> : -> set number -> 엔터

119Line -> DocumnetRoot "디렉토리 경로/프로젝트이름/public"
ex 		-> DocumentRoot "/home/www/lab/public"

131Line -> <Directory "/디렉토리 경로/프로젝트이름/public">
ex		-> <Directory "/home/www/lab/public">

 

SSH를 이용해 원격 접속이 가능하도록 셋팅해보자 :D

우선 SSH를 설치하기 전에 yum에 ssh가 있는지 확인해본다.

 

터미널을 열고 다음과 같은 명령어를 입력한다

[root@localhost ~]# yum list | grep ssh

!14는 history명령어를 입력했을 때 나오는 해당 번호를 실행시켜주는 명령어(?)다

저기서 나는 openssh-server를 사용할 생각이라 아래에 있는 명령어로 설치해준다.

[root@localhost ~]# yum install -y openssh-server

이유는 모르겠는데 자동으로 설치되어 있었다..

설치 후 자동 실행을 위해 서비스 등록을 해준다

[root@localhost ~]# systemctl enable sshd

Created~~~가 안뜨고 바로 입력 대기(?)를 하면 이미 연결되어 있는겁니다.

 

이후 서비스 시작을 하고 서비스가 동작하고 있는지 확인해보자

// 서비스 등록
[root@localhost ~]# systemctl start sshd
// 서비스 상태 보기
[root@localhost ~]# systemctl status sshd

22번 포트를 사용하고 있는걸 볼 수 있다. 이제 IP를 확인하고 PuTTY에서 연결해보자

 

PuTTY는 아래의 링크에서 받을 수 있다.

www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

 

Download PuTTY: latest release (0.74)

This page contains download links for the latest released version of PuTTY. Currently this is 0.74, released on 2020-06-27. When new releases come out, this page will update to contain the latest, so this is a good page to bookmark or link to. Alternativel

www.chiark.greenend.org.uk

 

IP확인을 해보자

[root@localhost ~]# ifconfig

 

 

위의 사진에 나와있는 inet 192.168.10.128이 내가 들어갈 IP주소이다

 

위처럼 IP번호와 포트를 적어주고 Open을 누르면 연결이 된다.

아이디와 패스워드를 입력하면 다음과 같은 결과가 나온다

 

포트 변경

22번 포트는 잘 알려져 있다 그래서 보안에 별로 좋지 않다고 한다

 

포트 변경할 파일은 /etc/ssh/sshd_config에 있다

 

다음과 같은 명령어를 입력하여 vi편집기로 내용을 보자

vi /etc/ssh/sshd_config

라인 번호를 보고 싶으면 esc -> : -> set number를 치고 엔터를 누르자

17번 라인에 #Port 22로 주석처리가 되어 있다

 

포트 번호를 30032로 바꿔보자

esc -> :17 엔터 후 포트 변경 -> esc -> wq(저장 및 종료)

 

vi에디터를 모르면 아래 링크를 클릭해서 보고오자

 

www.guru99.com/the-vi-editor.html

 

VI Editor with Commands in Linux/Unix Tutorial

Details Last Updated: 02 March 2021 What is the VI editor? The VI editor is the most popular and classic text editor in the Linux family. Below, are some reasons which make it a widely used editor – 1) It is available in almost all Linux Distributions 2)

www.guru99.com

 

이렇게 ssh의 포트 변경은 끝이 났고 이제 firewall의 포트를 열어줘야 한다

[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=30032/tcp // 포트 열어줌
[root@localhost ~]# firewall-cmd --reload // firewall 재시작

 

잘 열려있는지 포트를 확인해 보자

firewall-cmd --list-all

 

SSH를 재시작 해주자

[root@localhost ~]# systemctl restart sshd

만약 에러가 나면 아래와 같은 명령어를 쳐서 로그(?)를 보자

[root@localhost ~]# journalctl -xe

나 같은 경우는 이런 글이 쓰여져 있었다

SELinux를 안꺼서 생긴 일이였다 이제 SELinux를 해제해보자

[root@localhost ~]# vi /etc/selinux/config

왼쪽 라인 번호는 esc->:set number -> enter

편집기로 들어가면 위의 이미지가 나오는데 7번라인의 SELINUX=enforcing을 SELINUX=disabled로 바꿔주고 저장 후 재부팅해준다.

 

재부팅이 끝나면 sshd의 상태를 보기 위해 다음과 같은 명령어를 쳐준다

[root@localhost ~]# systemctl status sshd

우측 하단을 보면 30032포트가 열린걸 확인할 수 있다.

 

다시 PuTTY로 들어가보자

 

22번 포트로 들어갔을 경우 연결이 안되는것을 확인할 수 있다.

다음과 같이 쳐보자

Open을 누르면 다음과 같은 창이 뜨는데 예(Y)를 클릭해준다.

 

터미널(?)이 열리고 아이디와 패스워드를 입력하면 연결이 된다.

 

'Linux > RHEL-CentOS8' 카테고리의 다른 글

[RHEL/CentOS8] 방화벽(firewalld) 설정  (0) 2021.03.14

+ Recent posts