Apache, Tomcat, DB 설치

곽동규·2024년 4월 13일

Rocky9.2 / apache 2.4.52 / tomcat 10.0 / mariaDB10.6 설치 과정 (error를 최대한 제거한 설치)
전통적인 WEB service 3-tier 구성

WEB

1. 컴파일 사전 준비

yum install -y gcc gcc-c++ pcre-devel expat-devel openssl-devel
  • apr-1.7.0 / apr-util-1.6.1 / httpd-2.4.52 파일 준비
    /usr/local/src 에 설치 파일 다운로드
# ll 
합계 65184 
drwxr-x---.  6 root   root       4096  1월 18  2021 Sys-Statistics-Linux-0.66 
-rw-r--r--.  1 root   root      49987  1월 18  2021 Sys-Statistics-Linux-0.66.tar.gz 
-r--r--r--.  1 root   root   55595906  1월 18  2021 VMwareTools-10.2.1-8267844.tar.gz 
drwxr-xr-x  27 root root     4096  4월  2  2019 apr-1.7.0 
-rw-r--r--   1 root   root    1093896  5월 23 10:36 apr-1.7.0.tar.gz 
drwxr-xr-x  20 root root     4096 10월 18  2017 apr-util-1.6.1 
-rw-r--r--   1 root   root     554301  5월 23 10:37 apr-util-1.6.1.tar.gz 
drwxr-xr-x  12 root root     4096  5월 18  2021 httpd-2.4.52 
-rw-r--r--   1 root   root    9418226  5월 23 10:37 httpd-2.4.52.tar.gz 
drwxr-xr-x.  9 root   root       4096  4월 15  2018 vmware-tools-distrib

2. apr 설치

apr과 apr-util은 Apache Portable Runtime (APR) 라이브러리의 일부입니다.

APR (Apache Portable Runtime): Apache 웹 서버와 함께 제공되는 라이브러리로, 여러 플랫폼에서 일반적인 운영체제 기능에 대한 인터페이스를 제공합니다. 이는 Apache HTTP Server 및 기타 Apache 프로젝트에서 사용되는 코어 라이브러리입니다. APR은 다양한 운영 체제에서 동작하는 이식성 높은 코드를 작성할 수 있도록 도와줍니다.

apr-util: APR을 확장하여 데이터베이스 연동, 암호화, XML 파싱 등과 같은 기능을 제공하는 유틸리티 라이브러리입니다. Apache에서는 데이터베이스와 같은 다양한 기능을 사용할 때 이러한 유틸리티를 통해 이러한 기능들을 쉽게 활용할 수 있습니다.

따라서 Apache를 소스로 설치할 때에는 일반적으로 APR 및 apr-util 라이브러리도 함께 설치하여 Apache가 필요로 하는 기능을 완전히 지원할 수 있도록 합니다.

[root@WEB apr-1.7.0]# ./configure --prefix=/usr/local/apr-1.7.0

[root@WEB apr-1.7.0]# cp -arp libtool libtoolT

[root@WEB apr-1.7.0]# ./configure --prefix=/usr/local/apr-1.7.0
[root@WEB apr-1.7.0]# make
[root@WEB apr-1.7.0]# make install

3. apr-util 설치

[root@WEB src]# cd apr-util-1.6.1
[root@WEB apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util-1.6.1 --with-apr=/usr/local/apr-1.7.0/

make && make install

4. httpd-2.4.48 설치

[root@WEB httpd-2.4.52]# ./configure --prefix=/data/apache2.4.48 --enable-module=all --enable-mods-shared=all --enable-so --with-mpm=worker --enable-rewrite --enable-file-cache --enable-cache --enable-disk-cache --enable-headers --enable-expires --enable-mem-cache--enable-mime-magic --enable-cern-meta --enable-ssl --enable-isapi --with-ldap --with-apr=/usr/local/apr-1.7.0/ --with-apr-util=/usr/local/apr-util-1.6.1/

make && make install

5. cronolog 설치

  • apache log 설정 구성 시에 필요
[root@WEB src]# wget http://pkgs.fedoraproject.org/repo/pkgs/cronolog/cronolog-1.6.2.tar.gz/\a44564fd5a5b061a5691b9a837d04979/cronolog-1.6.2.tar.gz 
[root@WEB src]# tar zxvf cronolog-1.6.2.tar.gz 
[root@WEB src]# cd cronolog-1.6.2/ 
[root@WEB src]# ./configure 
[root@WEB src]# make && make install

6. tomcat connector 설치

  • Tomcat connector를 설치시에는 apxs 명령어가 있는지 확인한다. apache를 source설치했을 경우 apache설치 경로의 bin 하위에 위치해 있다.
[root@WEB native]# pwd
/usr/local/src/tomcat-connectors-1.2.46-src/native

[root@WEB native]# ./configure --with-apxs=/data/apache2.4.48/bin/apxs
[root@WEB native]# make && make install

[root@WEB modules]# pwd
/usr/local/apache2-ssl/modules
[root@WEB modules]# ls -al | grep jk
-rwxr-xr-x  1 root root 1666400 12월  2 03:35 mod_jk.so

7. workers.properties 생성

[root@WEB conf]# vi workers.properties
worker.list=jkstatus,corn

worker.jkstatus.type=status
worker.jkstatus.mount=/jkmanager

worker.corn.type=ajp13
worker.corn.host=톰캣 서버 IP
worker.corn.port=톰캣 연동 port
worker.corn.lbfactor=1
worker.corn.socket_keepalive=True
worker.corn.connection_pool_timeout=3600

8. httpd.conf 파일 설정

[root@WEB conf]# vi httpd.conf
# <LoadModule> 쪽에 아래 줄 추가 

LoadModule jk_module modules/mod_jk.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so 주석해제
LoadModule vhost_alias_module modules/mod_vhost_alias.so 주석해제
LoadModule ssl_module modules/mod_ssl.so 주석해제

# 맨 아래에 jk_module 연동 부분 설정

<IfModule jk_module>
JkWorkersFile /data/apache2.4.52/conf/workers.properties
JkLogFile "|/usr/local/sbin/cronolog /data/apache2.4.52/logs/%Y/%m%d_mod_jk.log"
JkShmFile /data/apache2.4.52/logs/mod_jk.shm

JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkRequestLogFormat "%w %V %T %B %H %m %p %q %r %s %U %v"
JkMount /jkmanager/* jkstatus
</IfModule>

<Directory /data/bizgo>
        AllowOverride none
        Require all granted
</Directory>

ServerSignature Off
ServerTokens Prod
LimitRequestBody 50000000
TraceEnable Off
# (php 설치 시) AddType 검색하면 
<IfModule mime_module>
</IfModule>   이부분 안에 아래 2줄 추가 
AddType application/x-httpd-php .php .html .htm .inc .pia
AddType application/x-httpd-php-source .phps

9. apache 실행

[root@WEB bin]# ./apachectl configtest
Syntax OK

[root@WEB bin]# ./apachectl start

10. 서비스 ssl 도메인 설정

[root@WEB extra]# pwd
/data/apache2.4.52/conf/extra
[root@WEB extra]# vi httpd-ssl.conf

설정하고 재시작
여기서는 설치만 적도록 한다.

WAS

1. tomcat 10.0.6 바이너리 파일 다운로드

[root@WAS ~]#wget http://archive.apache.org/dist/tomcat/tomcat-10/v10.0.6/bin/apache-tomcat-10.0.6.tar.gz

압축해제 및 원하는 경로로 mv

2. tomcat server.xml 설정

[root@WAS config]# vi server.xml

  <!-- Define an AJP 1.3 Connector on port 8009 -->
    <!--  주석해제 (이부분 삭제)
    <Connector protocol="AJP/1.3"
               address="0.0.0.0"
               port="19050"
               redirectPort="8443"
               secretRequired="false" />    -> 이부분 추가해줘야됨!!!!
    -->   주석해제 (이부분 삭제)

3. openjdk17 (java) 설치

[root@WAS ]# dnf update
[root@WAS ]# dnf install java-17-openjdk-devel

[root@WAS ]#java -version
openjdk version "17.0.8" 2023-07-18 LTS
OpenJDK Runtime Environment (Red_Hat-17.0.8.0.7-1) (build 17.0.8+7-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.8.0.7-1) (build 17.0.8+7-LTS, mixed mode, sharing)
  • apache - tomcat 연동 테스트

톰캣 연동 tomcat-connectors 에서 에러 발생 시

  • 에러 : could not find /data/apache2.4.52/bin/apxs
    perl을 찾을 수 없어서 발생
[root@WEB native]# yum install -y perl
[root@WEB native]# vi /data/apache2.4.52/bin/apxs
#!/replace/with/path/to/perl/interpreter -w  => #! /usr/bin/perl -w

-->첫 줄 수정
https://victorydntmd.tistory.com/225 참고

DB

1. MySQL 사용자 생성

[root@DB1]# groupadd mysql
[root@DB1]# useradd -M -c "MySQL" -d /data/ -g mysql -s /sbin/nologin mysql

2. 바이너리 파일 올려두기 / 압축 해제

[root@DB1]# mkdir -p /data/mysql

[root@DB1]# tar zxvf mariadb-10.6.4-linux-systemd-x86_64.tar.gz 
[root@DB1]# mv mariadb-10.6.4-linux-systemd-x86_64 mysql

3. my.cnf 설정

[root@DB1]# vi /etc/my.cnf

[client]
port  = 3306
socket  = /tmp/mysql.sock

[mysqld]
port  = 3306
socket  = /tmp/mysql.sock
datadir  = /data/mysql/data
basedir = /usr/local/mysql

#character-set-client-handshake=FALSE

character-set-server    = utf8mb4
collation_server        = utf8mb4_general_ci
init_connect="SET collation_connection = utf8mb4_general_ci"
init_connect="SET NAMES utf8mb4 COLLATE utf8mb4_general_ci"

### SQL mode
sql-mode=

transaction-isolation = READ-COMMITTED
skip-character-set-client-handshake
#collation_connection = @@collation_database

# store procedure privileges
log_bin_trust_function_creators=1
#init-connect='SET NAMES utf8'

back_log = 50
max_connections = 1024
max_connect_errors = 10
table_open_cache = 2048

max_allowed_packet = 1024M
binlog_cache_size = 1M
max_heap_table_size = 64M
read_buffer_size = 2M
read_rnd_buffer_size = 16M
sort_buffer_size = 8M
join_buffer_size = 8M
thread_cache_size = 8
#thread_concurrency = 8
#query_cache_size = 64M
#query_cache_limit = 2M
ft_min_word_len = 4
event_scheduler = ON

#default-storage-engine = innoDB
tmp_table_size = 64M

key_buffer_size = 32M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
#myisam_recover

#innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 50G
innodb_data_file_path = ibdata1:10M:autoextend
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_thread_concurrency = 8
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 2G
innodb_buffer_pool_size= 2G
innodb_log_file_size = 512MB
#innodb_locks_unsafe_for_binlog = 1
innodb_file_per_table = 1
lower_case_table_names = 1

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
prompt = "mysql [\\d] > "
#default-character-set = utf8
#init_connect='SET GLOBAL collation_connection = utf8_unicode_ci'
#init_connect='SET NAMES utf8'
#SET collation_connection = @@collation_database

[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M

[mysqlhotcopy]
interactive-timeout

[mysqld_safe]
open-files-limit = 8192

4. 데이터베이스 초기화

mysql_install_db는 MySQL 바이너리 설치 후 데이터베이스를 초기화하고 시스템 테이블을 생성하는 스크립트입니다. 이 스크립트는 MySQL 데이터베이스 서버를 처음 설치하거나 업그레이드할 때 사용됩니다.

mysql_install_db를 실행하는 이유는 다음과 같습니다:

데이터베이스 초기화: MySQL 데이터베이스 서버를 처음 설치하면 데이터베이스 파일이나 디렉터리가 생성되지 않습니다. mysql_install_db를 실행하면 MySQL 데이터베이스 서버를 위한 초기 데이터베이스를 생성하고 필요한 시스템 테이블을 포함하여 초기 데이터베이스를 초기화합니다.

권한 및 소유권 설정: mysql_install_db는 데이터베이스 디렉터리와 파일에 대한 적절한 권한 및 소유권을 설정합니다. 이를 통해 MySQL 서버가 데이터베이스에 쓰기 및 읽기 권한을 가지고 있는지 확인할 수 있습니다.

사용자 및 그룹 설정: --user=mysql 옵션은 MySQL 프로세스를 시작하는 데 사용할 사용자를 지정합니다. 일반적으로 MySQL은 mysql 사용자로 실행됩니다. mysql_install_db는 데이터베이스 디렉터리 및 파일을 mysql 사용자의 소유권으로 생성하여 보안을 강화합니다.

따라서 mysql_install_db를 실행함으로써 MySQL 데이터베이스 서버를 초기화하고 사용할 준비가 된 상태로 만들 수 있습니다.

[root@DB1 mysql]# ./scripts/mysql_install_db --user=mysql

4. 심볼릭 링크 걸어서 사용

[root@DB1 mysql]# ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
[root@DB1 mysql]# ln -s /usr/local/mysql/bin/mysqldump /usr/sbin/mysqldump
[root@DB1 mysql]# ln -s /usr/local/mysql/bin/mysql_config /usr/sbin/mysql_config
[root@DB1 mysql]# ln -s /usr/local/mysql/bin/mysqladmin /usr/sbin/mysqladmin

5. DB 백그라운드로 실행

[root@DB1 mysql]# /usr/local/mysql/bin/mysqld_safe --user=mysql &

DB 시작 시 에러 발생 해결

[root@DB1 mysql]# ln -s /usr/lib64/libncurses.so.6 /usr/lib64/libncurses.so.5
[root@DB1 mysql]# ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5

0개의 댓글