- Ansible(앤서블) - 활용(3계층구현)2023년 03월 29일 17시 56분 40초에 업로드 된 글입니다.작성자: 각수짱728x90반응형SMALL
2023.02.14 - [서버 관리/WEB 서버] - 1. 웹 서버와 웹 애플리케이션과 DB 서버 연동
이것을 참고하여 Ansible로 작성
hosts 파일
vi hosts [web] 192.168.52.165 [was] 192.168.52.166 [db] 192.168.52.167
playbook 파일 (was&web)
vi plqybook - hosts: ["was"] tasks: - name: JDK 설치 yum: name: java-1.8.0-openjdk-devel.x86_64 state: latest - name: Tomcat 다운로드 get_url: url: https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.73/bin/apache-tomcat-9.0.73.tar.gz dest: /root/apache-tomcat-9.0.73.tar.gz become: yes - name: Tomcat 압축 해제 unarchive: src: "/root/apache-tomcat-9.0.73.tar.gz" dest: "/usr/local" remote_src: yes become: yes - name: Tomcat 이동 command: mv /usr/local/apache-tomcat-9.0.73 /usr/local/tomcat9 - name: 설정 파일 template: src: /root/test/server.xml.j2 dest: /usr/local/tomcat9/conf/server.xml remote_src: no become: yes - name: 디렉터리 생성 file: path: /usr/local/tomcat9/webapps/cyk state: directory mode: '0755' - name: index.jsp 파일 복사 copy: src: /root/test/index.jsp dest: /usr/local/tomcat9/webapps/cyk/index.jsp remote_src: no become: yes - name: SELinux 정지 command: setenforce 0 become: yes - name: 방화벽 정지 systemd: name: firewalld state: stopped become: yes - name: Tomcat 시작 shell: | /usr/local/tomcat9/bin/shutdown.sh sleep 5 nohup /usr/local/tomcat9/bin/startup.sh & become: yes - hosts: ["web"] tasks: - name: httpd 설치 yum: name: httpd state: latest - name: mod_jk.so 복사 copy: src: /root/test/mod_jk.so dest: /usr/lib64/httpd/modules/mod_jk.so remote_src: no become: yes - name: 권한 변경 file: path: "/usr/lib64/httpd/modules/mod_jk.so" mode: 0755 become: yes - name: 복사 template: src: /root/test/{{ item }}.j2 dest: /etc/httpd/conf/{{ item }} remote_src: no with_items: - httpd.conf - workers.properties become: yes - name: 방화벽 정지 systemd: name: firewalld state: stopped become: yes - name: SELinux 정지 command: setenforce 0 become: yes - name: 아파치 웹 서버 시작 systemd: name: httpd state: restarted become: yes
server.xml.js
httpd.conf.j2
worker.properties.j2 (앤서블용)worker.list=worker1 worker.worker1.type=ajp13 worker.worker1.host={{ hostvars[groups['was'][0]]['inventory_hostname'] }} worker.worker1.port=8009
mod_jk.so
index.jsp파일은 control의 /root/test에 미리 저장해놔야 한다.
web IP로 접속 시 apache 가 잘 작동되는 것을 확인
web IP/index.jsp 접속 시 출력되면 tomcat과 apache가 연결된 것을 확인
db_playbook파일 (DB)
- hosts: ["db"] tasks: - name: MySQL 설치 yum: name: mysql-server state: latest - name: Python3 설치 yum: name: - python3 - python3-pip state: latest - name: pymysql 설치 pip: name: pymysql - name: 방화벽 정지 systemd: name: firewalld state: stopped become: yes - name: SELinux 정지 command: setenforce 0 become: yes - name: MySQL 서버 시작 systemd: name: mysqld state: restarted become: yes - name: MySQL 사용자 생성 mysql_user: login_user: root login_password: '' name: test password: qwer1234 host: '%' priv: '*.*:ALL'
실행
db서버에서 생성한 user로 로그인
룰 적용
룰 생성
playbook 파일
[web] 192.168.52.165 [was] 192.168.52.166 [db] 192.168.52.167
작성한 모듈들 각 task/main.yml 파일로 붙여 넣기
필요한 파일들 각 디렉토리에 옮기기각 tasks/main.yml에 절대경로로 되어있는 파일을 파일로 바꾸기
(파일을 디렉토리에 알맞게 넣어놓으면 알아서 지정해 준다)was
web
수정 후 실행
WAS - DB 연동(3계층 구현)
db/tasks/main.ymi 내용 추가
vi db/tasks/main.ymi ... - name: Create Database mysql_db: login_user: root login_password: '' name: was_db state: present - name: Create Table shell: | echo "CREATE TABLE was_db.student (sname VARCHAR(10), sage int)" | mysql -u test -pqwer1234 become: yes - name: Insert Data shell: | echo "INSERT INTO was_db.student (sname, sage) VALUES('kim', 10)" | mysql -u test -pqwer1234 echo "INSERT INTO was_db.student (sname, sage) VALUES('lee', 20)" | mysql -u test -pqwer1234 echo "INSERT INTO was_db.student (sname, sage) VALUES('park', 30)" | mysql -u test -pqwer1234 echo "INSERT INTO was_db.student (sname, sage) VALUES('choi', 40)" | mysql -u test -pqwer1234 become: yes
was/tasks/main.ymi 수정
... #수정된 내용 - name: index.jsp 파일 복사 copy: src: "{{ item }}" dest: /usr/local/tomcat9/webapps/test/{{ item }} remote_src: no with_items: - index.jsp become: yes #추가된 내용 - name: db.jsp 파일 배포 template: src: db.jsp.j2 dest: /usr/local/tomcat9/webapps/test/db.jsp remote_src: no become: yes - name: Copy mysql-connector-java-8.0.19.jar File copy: src: mysql-connector-java-8.0.19.jar dest: /usr/local/tomcat9/lib/mysql-connector-java-8.0.19.jar remote_src: no become: yes ...
mysql-connector-java-8.0.19.jar 파일 다운로드
ansible galaxy를 위해 ansible 2.8 버전을 설치했기에
2.8 버전에 맞는 mysql를 설치해야 한다.
https://downloads.mysql.com/archives/c-j/필자는 wget으로 설치 후 압축 풀면 jar파일이 나옴
db.jsp.js 작성
vi was/templates/db.jsp.j2 <%@page import="java.sql.*"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% Connection conn = null; ResultSet rs = null; String url = "jdbc:mysql://{{ hostvars[groups['db'][0]]['inventory_hostname'] }}:3306/was_db?serverTimezone=UTC"; String id = "test"; String pwd = "qwer1234"; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, id, pwd); Statement stmt = conn.createStatement(); String sql = "SELECT sname FROM student"; rs = stmt.executeQuery(sql); while(rs.next()) { out.println(rs.getString("sname")); } conn.close(); } catch (Exception e) { e.printStackTrace(); } %> </body> </html>
mysql-connector-java-8.0.19.jar 은 was/files에 이동
db.jsp.j2는 was/templates로 이동web, was, db 서버 다 초기화한뒤 실행
web IP/db.jsp 접속 확인
*tip 이런 오류가 나타난다면 디렉토리 중복이나 table 중복으로 인해 작동이 불가한 것.
만들려는 디렉토리를 삭제 후 다시 시작728x90반응형LIST'IaC' 카테고리의 다른 글
4. Terraform(테라폼) - 실습 (0) 2023.03.30 4. Terraform(테라폼) (0) 2023.03.30 3. Ansible(앤서블) (0) 2023.03.29 쉘 프로그래밍 - 활용 (0) 2023.03.29 2. 쉘 프로그래밍 (0) 2023.03.29 이전글이 없습니다.댓글