# 구축 설계 도안
# 0. 기존 가상 머신 삭제 (powershell)
vagrant destroy
# 1. 새로운 서버 구축을 위한 Vagrantfile(script 파일) 작성
: 메모장에 아래 코드 붙여넣고 Vagrantfile 이름으로 '바탕화면'에 저장(.txt 확장자 부분 삭제)
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.define "WP-LB01" do |config|
config.vm.box = "rockylinux/9"
config.vm.network "private_network", ip: "192.168.56.10"
config.vm.network "private_network", ip: "192.168.57.10"
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = 2
vb.name = "WP-LB01"
end
config.vm.hostname = "WP-LB01"
end
config.vm.define "WP-WEB01" do |config|
config.vm.box = "rockylinux/9"
config.vm.network "private_network", ip: "192.168.57.11"
config.vm.network "private_network", ip: "192.168.58.11"
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = 2
vb.name = "WP-WEB01"
end
config.vm.hostname = "WP-WEB01"
end
config.vm.define "WP-WEB02" do |config|
config.vm.box = "rockylinux/9"
config.vm.network "private_network", ip: "192.168.57.12"
config.vm.network "private_network", ip: "192.168.58.12"
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = 2
vb.name = "WP-WEB02"
end
config.vm.hostname = "WP-WEB02"
end
config.vm.define "WP-DB01" do |config|
config.vm.box = "rockylinux/9"
config.vm.network "private_network", ip: "192.168.58.13"
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = 2
vb.name = "WP-DB01"
end
config.vm.hostname = "WP-DB01"
end
end
# 2. vagrant로 가상머신 생성(powershell)
# powershell 프로그램 실행 후에
./com/desktop #경로 이동
ls # 해당경로(바탕화면)에 Vagrantfile 있는지 확인
vagrant up # vagrant 실행
vagrant up이 끝나면 virtual box에 Vagrant script로 작성한 서버 4개가 올라온 것을 확인할 수 있습니다.
# 3. 서버 IP설정 수정(virtual box)
: 파일 > 도구 > 네트워크 관리자 > 192.168.56.1 클릭 > DHCP 서버 활성화 클릭 해제 > 적용
192.168.56.1/24 는 자동으로 할당해주는 IP 이고, 192.168.57.1/24는 위에서 Vagrantfile 로 지정해준 IP 입니다.
57과 58 대역대 통신이 가능한지 확인을 미리 해줍니다.
# 4. 서버 구축(powershell)
4-1. WEB01 & 02 (Web server)
1. 필요 패키지 설치(httpd, php, php-mysqlnd)
2. httpd 서비스 활성화
3. 방화벽 설정
4. 워드프레스 설치
5. 워드프레스 권한 설정
6. 워드프레스 DB 연동
7. 가상호스트 세팅
8. Web → DB 접근 가능 selinux 설정
vagrant ssh WP-WEB01 # WP-WEB01에 접속
# 1. 필요 패키지 설치
[vagrant@WP-WEB01 ~]$ sudo dnf -y install httpd php php-mysqlnd
# 2. httpd 서비스 실행
[vagrant@WP-WEB01 ~]$ sudo systemctl enable httpd --now
# 3. 방화벽 설정
[vagrant@WP-WEB01 ~]$ sudo systemctl enable firewalld --now # 방화벽 실행
[vagrant@WP-WEB01 ~]$ sudo firewall-cmd --permanent --add-service=http # 방화벽 서비스 포트 추가
[vagrant@WP-WEB01 ~]$ sudo systemctl restart firewalld # 재시작해서 업데이트
# or sudo firewall-cmd --add-service=http (현재 창에도 업로드 시켜야하기 때문에)
# 확인
# sudo firewall-cmd --list-all
# sudo firewall-cmd --list-all --permanent
!여기서 잠깐! enable 할때 나오는 심볼릭링크!
# 심볼릭링크 사용 목적?( ls -ld /bin )
1. 바로가기 역할. 원본파일은 두고 이름을 죽이고자 할때, 혹은 의미있는 이름으로 바꾸고 사용하려고 할때
2. 파일의 경로가 복잡하게 깊숙히 있는경우 원하는 위치로 끌어내고자 할때
# 4. 워드프레스 설치
#sudo su 로 권한 바꿔줘도 됨
[vagrant@WP-WEB01 ~]$ sudo curl -o wordpress.tar.gz https://wordpress.org/wordpress-6.3.2.tar.gz # wordpress 다운
# curl -o / wget 비슷한 역할. but wget는 전체 url을 다 써줘야하고,
# curl -o 는 축약 url을 써줘도 되고, 다운로드시 파일 명도 원하는대로 지정 가능하다.
[vagrant@WP-WEB01 ~]$ sudo tar xzf wordpress.tar.gz -C /var/www/html/
# -C 옵션을 쓰면 위치를 직접 지정해서 추출 가능! # /var/www/html/ 에 압축파일을 풀어라~
# 5. 워드프레스 권한 설정 (httpd와의 원활한 연동을 위해)
[vagrant@WP-WEB01 ~]$ sudo chmod -R 775 /var/www/html/wordpress/ # 권한 변경
[vagrant@WP-WEB01 ~]$ sudo chown -R apache.apache /var/www/html/wordpress/ # 아파치의 소유권으로 변경
# apache 관리자가 관리하는 것이 root 사용자가 관리하는 것보다 더 효율적이다.
# httpd 랑 wordpress를 연결해야하니까, httpd의 관리자인 apache 관리자로 변경해주는 것이 일이 수월?하다.
[vagrant@WP-WEB01 ~]$ sudo ls -ld /var/www/html/wordpress/
[vagrant@WP-WEB01 ~]$ sudo ls /var/www/html/wordpress/
* tar 에서 -xzf 와 그냥 xzf 의 차이
# 워드프레스 DB 연동
# 설정 파일 복사
[vagrant@WP-WEB01 ~]$ sudo cp /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php
## wordpress 설정 파일 변경 - 데이터베이스 정보 입력
[vagrant@WP-WEB01 ~]$ sudo sed -i "s/define( 'DB_NAME', '.*' );/define( 'DB_NAME', 'wp' );/" /var/www/html/wordpress/wp-config.php
# sed -i : 치환 명령어, / 기준으로 앞의 내용을 뒤에 내용으로 바꿔줌, 맨끝엔 출처(위치및파일명)
# s/ : 문자열이니까, '.*' : 뭐라고 써있던지 간에
# 이걸로 DB_USER, DB_PASSWORD, DB_HOST 모두 변경해주기
# sudo sed -i "s/define( 'DB_USER', '.*' );/define( 'DB_USER', 'wp-user' );/" /var/www/html/wordpress/wp-config.php
# sudo sed -i "s/define( 'DB_PASSWORD', '.*' );/define( 'DB_PASSWORD', 'P@ssw0rd' );/" /var/www/html/wordpress/wp-config.php
# sudo sed -i "s/define( 'DB_HOST', '.*' );/define( 'DB_HOST', '192.168.58.13' );/" /var/www/html/wordpress/wp-config.php
# 가상호스팅 세팅
가상 호스트 설정은 Apache 웹 서버에서 여러 개의 웹사이트를 호스팅할 수 있도록 하는 것
#Apache 웹 서버의 설정 파일 옵션 수정
# * 설정 디렉토리 활용 : 분리해서 깔끔하게 정리
# conf/httpd.conf 가 아닌, conf.d 폴더의 wordpress.conf 설정파일에서 경로 수정
sudo tee /etc/httpd/conf.d/wordpress.conf << EOF
# EOF : EOF란 단어가 나올 때까지 입력하겠다는 의미
# 아래 텍스트 입력 후 EOF 입력, enter!
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html/wordpress
<Directory "/var/www/html/wordpress">
AllowOverride All
</Directory>
</VirtualHost>
EOF
$ sudo systemctl restart httpd
# selinux 설정
[vagrant@WP-WEB01 ~]$ sudo setsebool -P httpd_can_network_connect_db 1
# SELinux(Security-Enhanced Linux) 정책을 설정하는 것
# http가 데이터베이스로 접근할 수 있는 selinux 설정
# setsebool: SELinux 부울린 변수의 값을 설정하는 명령어
# -P: 이 옵션은 변경 사항을 현재와 영구적으로 저장을 같이하는 것. 시스템 재부팅 후에도 적용
# httpd_can_network_connect_db: 이 SELinux 부울린 변수는 Apache HTTP 서버가 데이터베이스에 네트워크로 연결할 수 있도록 허용하는 것을 의미
# 1: 이 값은 true를 의미
exit
# # wp - web01(db작업) / wp - web02(haproxy작업)
# wp - web01(db작업)
1. 필요 패키지 설치( mysql-server )
2. 서비스 활성화
3. 방화벽 실행 및 설정
4. root 비밀번호 변경 / 이름없는 사용자 제거 / 원격 root 사용자 제거
5. wp 데이터 베이스 생성
6. wp-user 사용자 생성
7. wp-user 사용자에게 모든 권한 부여
vagrant ssh WP-DB01 # WP-WEB01에 접속
# 1. 필요 패키지 설치
[vagrant@WP-WEB01 ~]$ sudo dnf -y install mysql-server
# 2. httpd 서비스 실행
[vagrant@WP-WEB01 ~]$ sudo systemctl enable mysqld --now
# 3. 방화벽 설정
[vagrant@WP-WEB01 ~]$ sudo systemctl enable firewalld --now # 방화벽 실행
[vagrant@WP-WEB01 ~]$ sudo firewall-cmd --permanent --add-service=mysql # 방화벽 서비스 포트 추가
[vagrant@WP-WEB01 ~]$ sudo firewall-cmd --reload # 재시작해서 업데이트
# = systemctl restart firewalld
# = sudo firewall-cmd --add-service=mysql (현재 창에도 업로드 시켜야하기 때문에)
# 확인
# sudo firewall-cmd --list-all
# sudo firewall-cmd --list-all --permanent
# 4. root 비밀번호 변경 / 이름없는 사용자 제거 / 원격 root 사용자 제거
# 4-1. root 사용자 비밀번호 설정
[vagrant@WP-WEB01 ~]$ mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'P@ssw0rd';"
# = mysql_secure_installation : 전문가 모드로 변경해서 설정
# -e : 다음에 오는 문자열을 MySQL 명령어로 실행하라
# 4-2. 익명 사용자 제거(이름이 없는 사용자)
# : 사용자 칸에 빈칸으로 하면, 이름 없는 사용자도 로그인이 가능하다. > 그걸 제한해줄거임
[vagrant@WP-WEB01 ~]$ mysql -u root -pP@ssw0rd -e "DELETE FROM mysql.user WHERE User='';"
# -pP@ssw0rd : -p 다음에 띄어쓰기 없이 비번 입력
# 4-3. 외부에서 접근 가능한 root 사용자 제거(원격 사용자 제한, 로컬에서만 접근 가능)
[vagrant@WP-WEB01 ~]$ mysql -u root -pP@ssw0rd -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');"
# 여기 적은 root 사용자들 빼고는 다 지울거야, root로는 다 못들어오게 할거야. 라는 뜻.
# '127.0.0.1' : IPV4의 루프백(자기자신)
# '::1' : IPV6의 루프백(자기자신)
=> root 는 원격제한해도 되는 이유, 일반 사용자한테 모든 권한을 넘겼기에 일반사용자로 원격접속하면 됨!
# 5. 데이터베이스 생성
[vagrant@WP-WEB01 ~]$ mysql -u root -pP@ssw0rd -e "CREATE DATABASE wp;"
# 6. wp-user 유저 생성 및 비번 설정
[vagrant@WP-WEB01 ~]$ mysql -u root -pP@ssw0rd -e "CREATE USER 'wp-user'@'192.168.58.0/24' identified by 'P@ssw0rd';"
# 'root' 사용자로 MySQL에 접속하여, '192.168.57.0/24' 네트워크 대역에서 접속 가능한 'wp-user'라는 새로운 사용자를 생성하라
# identified by : 사용자 생성시 사용자의 비밀번호를 설정
# 7. wp-user 유저에게 모든 권한부여
# : DB에서 SELECT, DELETE 등 사용 가능하도록 권한 부여
[vagrant@WP-WEB01 ~]$ mysql -u root -pP@ssw0rd -e "GRANT ALL PRIVILEGES ON wp.* TO 'wp-user'@'192.168.58.0/24' WITH GRANT OPTION;"
# PRIVILEGES ON : 자동 갱신
# GRANT ~ TO / REVOKE ~ FROM
# 4~7. 데이터베이스 생성 방법2
$ mysql -u root
mysql> ALTER USER 'root'@'localhost' identified with mysql_native_password by 'P@ssw0rd'; # 사용자 비밀번호 설정
mysql> DELETE FROM mysql.user WHERE User=''; # 익명사용자 제거
mysql> DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); # 원격 사용자 제거
mysql> CREATE DATABASE wp; # 데이터베이스 생성
mysql> CREATE USER 'wp-user'@'192.168.58.0/24' identified by 'P@ssw0rd'; # wp-user 유저 생성 및 비번 설정
mysql> FLUSH PRIVILEGES; # wp-user 유저에게 모든 권한부여
# wp - web02(haproxy작업)
1. 필요 패키지 설치( haproxy )
2. 서비스 활성화
3. 방화벽 실행 및 설정
4. 로드밸런서 설정 - 포트포워딩(컨테이너에서도 추후 사용됨)
vagrant ssh WP-LB01 # WP-WEB01에 접속
# 1. 필요 패키지 설치
[vagrant@WP-WEB01 ~]$ sudo dnf -y install haproxy
# 2. httpd 서비스 실행
[vagrant@WP-WEB01 ~]$ sudo systemctl enable haproxy --now
# 3. 방화벽 설정
[vagrant@WP-WEB01 ~]$ sudo systemctl enable firewalld --now # 방화벽 실행
[vagrant@WP-WEB01 ~]$ sudo firewall-cmd --permanent --add-port=80/tcp --add port=8080/tcp # 방화벽 서비스 포트 추가
[vagrant@WP-WEB01 ~]$ sudo firewall-cmd --reload # 재시작해서 업데이트
# = systemctl restart firewalld
# = sudo firewall-cmd --add-port=80/tcp --add port=8080/tcp (현재 창에도 업로드 시켜야하기 때문에)
# 확인
# sudo firewall-cmd --list-all
# sudo firewall-cmd --list-all --permanent
# 4. 로드밸런서 설정 - 포트포워딩(컨테이너에서도 추후 사용됨)
# sudo vi /etc/haproxy/haproxy.cfg
sudo tee /etc/haproxy/haproxy.cfg << EOF
# Global settings
global
log 127.0.0.1 local2
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# Default settings
defaults
mode http
log global
option httplog
retries 3
timeout http-request 10s
timeout connect 10s
timeout client 1m
timeout server 1m
maxconn 3000
# HAProxy Monitoring Config
listen haproxy3-monitoring
bind *:8080
mode http
option forwardfor
option httpclose
stats enable
stats show-legends
stats refresh 5s
stats uri /admin
stats realm Haproxy\ Statistics
stats auth admin:@dmin
stats admin if TRUE
# Frontend Configuration
frontend main
bind *:80
default_backend app
# Backend Configuration
backend app
balance roundrobin
server WEB1 192.168.57.11:80 check
server WEB2 192.168.57.12:80 check
sudo systemctl restart haproxy
문제1
오늘은 심화된 내용을 다뤄보았습니다. 감사합니다.
'Vagrant' 카테고리의 다른 글
[Vagrant] 01. Vagrant를 활용해서 자동으로 서버 생성(Virtual Box) (0) | 2024.05.09 |
---|