본문 바로가기

카카오테크 부트캠프

[KTB-Final] 젠킨스 서버(private) 만들기 + nginx리버스 프록시로 연결

private 인스턴스로 젠킨스 서버를 하나 만들어줬습니다.

 

scp -i ~/Downloads/keyname.pem[키가 있는 경로] ~/Downloads/keyname.pem[선택할 키] ubuntu@ip:[서버내에서 키를 복사할 경로]

이런 명령어로 로컬에 있는 키를 퍼블릭 서버로 복사해줍니다.

 

그러면 저렇게 pem키가 복사된것이 보이시죠?

 

저 상태에서 같은 VPC내에 프라이빗 서버가 위치하기 때문에 

똑같이 

ssh -i "key.pem" ec2-user@[프라이빗ip]

로 들어가주면 프라이빗 서버에 접근이 완료됩니다!

이제 프라이빗 서버 안에 젠킨스를 설치해줄게요 

저는 아마존 리눅스를 사용해 우분투와는 명령어가 좀 다를 수 있습니다. 

sudo yum update -y
sudo yum install java-11-amazon-corretto -y

java -version

자바를 설치하고 자바 버전을 확인해줍니다.

 

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

젠킨스 GPG키를 추가해주고 

 

sudo yum upgrade
sudo yum install jenkins -y

젠킨스를 설치해줍니다.

 

근데 왜 저는 자꾸 젠킨스 설치가 제대로 안되는 걸까요..

뭘해도 안돼요.............

sudo yum install jenkins --nogpgcheck -y

그래서 GPG키 검증을 뛰는 명령어로 설치해줬씁니다.

 

sudo systemctl start jenkins
sudo systemctl enable jenkins

젠킨스를 실행시키고 

sudo systemctl status jenkins

제대로 실행되는지 확인해줍니다.

저기 초록색으로 active가 뜨면 완! ㅎㅎ

 

근데 리버스 프록시 설정하고 nginx서버에서 젠킨스로 들어가려 하니까 오류가 납니다...

404 303 다양한 에러가 나는데!!!!!!!

/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: /etc/nginx/conf.d/default.conf differs from the packaged version
/docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
211.36.146.197 - - [22/Oct/2024:07:49:20 +0000] "GET /jenkins HTTP/1.1" 403 603 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
211.36.146.197 - - [22/Oct/2024:07:49:20 +0000] "GET /static/f03032e2/scripts/redirect.js HTTP/1.1" 404 555 "http://43.201.116.12/jenkins" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
2024/10/22 07:49:20 [error] 29#29: *1 open() "/etc/nginx/html/static/f03032e2/scripts/redirect.js" failed (2: No such file or directory), client: 211.36.146.197, server: example.com, request: "GET /static/f03032e2/scripts/redirect.js HTTP/1.1", host: "43.201.116.12", referrer: "http://43.201.116.12/jenkins"
211.36.146.197 - - [22/Oct/2024:07:49:21 +0000] "GET /login?from=%2Fjenkins HTTP/1.1" 404 555 "http://43.201.116.12/jenkins" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
2024/10/22 07:49:21 [error] 29#29: *1 open() "/etc/nginx/html/login" failed (2: No such file or directory), client: 211.36.146.197, server: example.com, request: "GET /login?from=%2Fjenkins HTTP/1.1", host: "43.201.116.12", referrer: "http://43.201.116.12/jenkins"

도커 로그를 살피니 아주난리난리가 납니다...

접근 권한 문제라고 해서 nginx.conf에 퍼블릭아이피:8080하고 "/" 슬래쉬를 꼭!! 해주라길래 했는데 그래도 오류는 변함없었어요,

 

그리고 오타 때문에 오류가 나고 고쳤는데 그대로였습니다...

 

그리고 prefix설정을 해주라고 했어요!! 처음에 저는 jenkins서버에서 환경 설정만 고치고 nginx.conf에서는 수정사항이 없어서 303이 발생했던거였어요 

밑에 방법대로 하니 잘 설정이 되었습니다.

 

prefix설정을 해주니 바로 되었다 ㅎㅎㅎ

sudo nano /usr/lib/systemd/system/jenkins.service

여기서 

Environment="JENKINS_PREFIX=/jenkins"

이걸 추가해주고 젠킨스를 다시 구동시킵니다.

sudo systemctl restart jenkins

 

그리고 nginx.conf파일도 바꿔줍니다

user nginx;
worker_processes auto;

events {
    worker_connections 1024;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    sendfile on;
    keepalive_timeout 65;

    # 리버스 프록시 설정
    server {
        listen 80;
        server_name example.com;

        location /jenkins {
            proxy_pass http://[프라이빗ip주소]:8080/jenkins;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
	    proxy_set_header X-Forwarded-Host $host;
	    proxy_set_header X-Forwarded-Port $server_port;
	    proxy_redirect default;
        }

        location /elk {
            proxy_pass http://localhost:8081;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;

	    add_header Content-Type text/html;
            return 200 "This is a reverse proxy for port 8081(/elk)";
        }
	location /prometheus{
	    proxy_pass http://localhost:8082;
   	    proxy_set_header Host $host;
	    proxy_set_header X-Real-IP $remote_addr;
	    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	    proxy_set_header X-Forwarded-Proto $scheme;
	    add_header Content-Type text/html;
            return 200 "This is a reverse proxy for port 8082(/prometheus)";
    	}
    }
}

최종.... elk 와 프로메테우스도 만들면 바꿔주려고 합니다. 

이렇게 설정하니까 [퍼블릭IP주소]/jenkins로 들어가니 떠요!!

 

그럼 prefix를 설정했더니 왜 되는것일까요? prefix는 뭘까여?

그건 다음 게시물에서..