목표
- 서버 설정방법을 자꾸 잊어버려 기록을 위해 정리 시작
- 목표를 세분화하고 목적을 해결하는 방식으로 진행
- 명령형으로 작성하고 내용을 시간순서로 추가하되 되도록 수정하지 않음
- 결과가 잘못될 수 있으니, 꼭 마지막을 확인 바람
환경
- DigitalOcean droplet (2 vCPUs, 4GB, 80GB ssd, $20/mo)
- CentOS 7.4 x64
설정 목표
- admin, adminsu 등록
- nginx 컴파일
- jenkins 설치
- gitlab gitpush 등록
/resource path에 static 연동- static build ci 적용
- /index.html에 hello world 노출
서버 생성
- 2 vCPUs, 4GB, 80GB ssd, $20/mo, Singapore
- CentOS 7.4 x64
- root 로그인 (pw 메일로 전송받음) 후 비밀번호 변경
- sudo yum update -y
- prm, yum 차이
- http://blackub.tistory.com/15
CentOS7
- systemd 이해
- http://linux.systemv.pe.kr/centos-7-systemd-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/
- centos6와 차이
- http://signpen.kr/sp_view.php?cat=D02&fid=155&sk=LHDS
admin, adminsu 계정 등록
- 목적
- admin은 일반 사용계정
- adminsu는 sudo 권한 제공
- 참고
- http://kit2013.tistory.com/187
- http://blog.freezner.com/archives/1094
- adduser, useradd 차이는 debian 계열 linux만 차이가 있음
- adduser admin, passwd admin
- 일반사용자 su 권한 제한
- http://klero.tistory.com/entry/root-%EA%B3%84%EC%A0%95-su-%EC%A0%9C%ED%95%9C
- vi /etc/pam.d/su
- adduser adminsu, passwd adminsu
- su사용자 sudoer 권한 제공
- https://slobell.com/blogs/40
- usermod -aG wheel adminsu
- adminsu에 wheel 그룹 추가
- /etc/sudoers
## Same thing without a password %wheel ALL=(ALL) NOPASSWD: ALL // 주석제거
Nginx 컴파일
- 참고
- https://www.vultr.com/docs/how-to-compile-nginx-from-source-on-centos-7
- 준비, 추가패키지, 의존 패키지 설치
- sudo yum groupinstall -y 'Development Tools'
- sudo yum install -y vim
- sudo yum install -y epel-release
- sudo yum install -y wget
- nginx 다운 및 압축해제
- wget http://nginx.org/download/nginx-1.13.8.tar.gz
- tar -zxvf nginx-1.13.8.tar.gz
- nginx package 다운
- pcre
- wget https://ftp.pcre.org/pub/pcre/pcre-8.41.tar.gz
- tar xzvf pcre-8.41.tar.gz
- zlib
- wget https://www.zlib.net/zlib-1.2.11.tar.gz
- tar xzvf zlib-1.2.11.tar.gz
- openssl
- wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz
- tar xzvf openssl-1.1.0g.tar.gz
- nginx configuration
./configure --prefix=/etc/nginx \ --sbin-path=/usr/sbin/nginx \ --modules-path=/usr/lib64/nginx/modules \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/run/nginx.lock \ --user=nginx \ --group=nginx \ --build=CentOS \ --builddir=nginx-1.13.8 \ --with-select_module \ --with-poll_module \ --with-threads \ --with-file-aio \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_xslt_module=dynamic \ --with-http_image_filter_module=dynamic \ --with-http_geoip_module=dynamic \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_auth_request_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_degradation_module \ --with-http_slice_module \ --with-http_stub_status_module \ --http-log-path=/var/log/nginx/access.log \ --http-client-body-temp-path=/var/cache/nginx/client_temp \ --http-proxy-temp-path=/var/cache/nginx/proxy_temp \ --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \ --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \ --http-scgi-temp-path=/var/cache/nginx/scgi_temp \ --with-mail=dynamic \ --with-mail_ssl_module \ --with-stream=dynamic \ --with-stream_ssl_module \ --with-stream_realip_module \ --with-stream_geoip_module=dynamic \ --with-stream_ssl_preread_module \ --with-compat \ --with-pcre=../packages/pcre-8.41 \ --with-pcre-jit \ --with-zlib=../packages/zlib-1.2.11 \ --with-openssl=../packages/openssl-1.1.0g \ --with-openssl-opt=no-nextprotoneg \ --with-debug
- nginx modules 링크
- sudo ln -s /usr/lib64/nginx/modules /etc/nginx/modules
- nginx system 유저 및 그룹 등록
- sudo useradd --system --home /var/cache/nginx --shell /sbin/nologin --comment "nginx user" --user-group nginx
- nginx-t
- 실패시 sudo mkdir -p /var/cache/nginx 생성후 다시 테스트
- nginx server 시작 및 활성화
- sudo systemctl start nginx.service
- sudo systemctl enable nginx.service
- sudo systemctl is-enabled nginx.service
- sudo systemctl status nginx.service
- 초기 파일 삭제
- sudo rm /etc/nginx/koi-utf /etc/nginx/koi-win /etc/nginx/win-utf
- nginx syntax highlighting
- mkdir ~/.vim/
- sudo cp -r ~/nginx-1.13.8/contrib/vim/* ~/.vim/
- (cp -R /home/admin/apps/nginx-1.13.8/contrib/vim/* /home/adminsu/.vim/)
Jenkins 설치
- JDK 설치가 먼저 필요하단걸 깜박함-_-
JDK 설치
- 참조
- https://tecadmin.net/install-java-8-on-centos-rhel-and-fedora/#
- JDK 다운
- wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/jdk-8u161-linux-x64.tar.gz"
- /opt 로 이동 후 압축하제
- cd /opt
- tar xzf jdk-8u161-linux-x64.tar.gz
- alternatives 명령어
- https://skyoo2003.github.io/post/2017/03/17/what-is-alternatives-command
- https://donghwi-kim.github.io/jekyll/update/2015/04/17/update-alternatives.html
- alternatives 명령어로 심볼릭 링크 생성
- alternatives --install /usr/bin/java java /opt/jdk1.8.0_161/bin/java 2
- alternatives --config java
- alternatives --install /usr/bin/jar jar /opt/jdk1.8.0_161/bin/jar 2
- alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_161/bin/javac 2
- alternatives --set jar /opt/jdk1.8.0_161/bin/jar
- alternatives --set javac /opt/jdk1.8.0_161/bin/javac
- 확인
- java -version
Tomcat 멀티 인스턴스 설치
- 멀티 인스턴스를 시도하는 특별한 이유는 없음
- 그냥, 예전 기억을 되살리기 위해 시도함
- Jenkins용 서버와 SpringBatch용 서버로 활용할 예정
- 추후 서비스가 커지는 경우 외부 장비로 이동할 예정 (그럴일이 없을수도 있음)
- 참고
- https://cocagolau.blogspot.kr/2014/03/blog-post_4571.html
- 하려다가, 뭐 귀찮게 할 필요가 있나란 생각이 들어 포기함
Tomcat 설치
- 톰켓8을 다운받으려 했으나, 9.0.4 버전이 나옴. 잠시 고민했지만, 8버전을 다운받기로 함
- 참고
- https://gs.saro.me/#!m=elec&jn=768
- 다운
- wget http://apache.tt.co.kr/tomcat/tomcat-8/v8.5.27/bin/apache-tomcat-8.5.27.tar.gz
- 설정 변경
- 포트번호 수정, ajp 포트 주석처리
- 서버 실행 후 서버 접근
- 방화벽에 막혀 있으므로 해당포트 방화벽 제거 (digitalocean)
- 그래도 ERR_CONNECTION_REFUSED 발생
- SeLinux
- https://ko.wikipedia.org/wiki/%EB%B3%B4%EC%95%88_%EA%B0%95%ED%99%94_%EB%A6%AC%EB%88%85%EC%8A%A4
- https://lesstif.gitbooks.io/web-service-hardening/content/selinux.html
- http://navs.tistory.com/entry/SELinux-%EC%99%80-httpd-%ED%8F%AC%ED%8A%B8-%EB%B0%94%EC%9D%B8%EB%94%A9-%ED%95%98%EA%B8%B0
- 설정된 포트를 SeLinux에 추가
- semanage port -l | grep http
- semanage port -a -t http_port_t -p tcp 포트번호
.. 서버는 뜨지만, 접근이 안됨. 이유를 모르겠음. 좀더 찾아보겠음바로 다시 됨. 이놈 세계는 알수 없다.- Tomcat context 설정
- https://ohjongsung.io/2017/06/24/tomcat-8%EC%97%90-root%EB%A1%9C-%EA%B2%8C%EC%8B%9C%ED%95%98%EA%B8%B0
Jenkins 설치
- 다운로드
- wget http://mirrors.jenkins.io/war/2.103/jenkins.war
- 톰켓 배포 후 시작
- 설정에서 역방향 프록시 설정이 잘못되었다고 나올 때
http://www.comsvc.kr/xe/comsvc_tip02/3846sudo getsebool -asudo setsebool -P httpd_can_network_connect on- https://www.lesstif.com/pages/viewpage.action?pageId=22053077
- '해제' 버튼을 눌러서 끝냄.
Gitlab push event 적용
- 참고
- http://yg-park.github.io/2015/03/10/gitlab-jenkins/
- https://github.com/jenkinsci/gitlab-plugin/issues/375
- 설치목록
- Credentials Plugin, GIT plugin, GitLab Plugin, embeddable-build-status
- 내용
- jenkins 설정에서 secret key 꼭 설정
Nginx 와 Jenkins 연동
- 목표
- jenkins 의 endpoint를 nginx를 사용하도록 수정
- 참조
- https://nginx.org/en/docs/
- https://www.nginx.com/resources/wiki/start/topics/examples/full/
- https://www.digitalocean.com/community/tutorials/understanding-the-nginx-configuration-file-structure-and-configuration-contexts
- https://blog.lael.be/demo-generator/nginx/default.conf.php
- http://nginx.org/en/docs/example.html
- https://www.digitalocean.com/community/tutorials/understanding-nginx-http-proxying-load-balancing-buffering-and-caching
- http://nginx.org/en/docs/http/server_names.html
- http://nginx.org/en/docs/http/request_processing.html
- http://sarc.io/index.php/nginx/61-nginx-nginx-conf
- https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms
static build ci 적용
- 목포
- jenkins 2.0 파이프라인 기능을 사용하여 배포를 자동화 설정
- 참고
- http://kingbbode.tistory.com/42
- https://jenkins.io/doc/book/pipeline/getting-started/
- https://jenkins.io/doc/book/pipeline/syntax/
Index.html을 root로 변경
- 참고
- https://www.nginx.com/resources/admin-guide/serving-static-content/
- Nginx conf중 user
- https://opentutorials.org/module/384/4530
- 마스터 프로세스는 root로
- conf의 user는 워커 프로세스의 실행권한
댓글 없음:
댓글 쓰기