메뉴 건너뛰기

IT지혜

최근에는 APM(Apache+PHP+Mysql) 의 Apache 와 Nginx, litespeed 등 많은 종류의 웹서버들이 있는데 그중에 Caddy 라는 것을 소개하고자 합니다.

간단히 Caddy 는 Golang 기반의 HTTP/2 를 지원하는 Web Server 입니다. 최근에 들어서는 HTTP/3 까지 실험적으로 지원을 하고 있습니다. Caddy 는 Reverse  Proxy 기능을 내장하고 있는 웹서버로 개인 정보를 취급하는 사이트에 있어서 필수인 SSL 인증서 또한 자동으로 등록하여 주기 때문에 관리에 있어서 좀더 수월할 것으로 생각됩니다. 그리고 80포트(HTTP_로 접근하는 주소를 자동으로 443포트(HTTPS)로 자동으로 전환해주기도 합니다.

Apple 에서 2020년 출시된  Silicon M1 시리즈에서 로컬에 웹서버 구축을 해보겠습니다.

 

시스템 : Mac mini (M1, 2020) 16GB, 256GB

OS : macOS Big Sur 11.2.3

 

1. Homebrew 설치 (Homebrew 를 이용해서 Apple 에서 제공하지 않는 유용한 패키지들을 설치관리자)

iTerm 등 터미널 창을 열어서 아래의 명령어를 실행합니다. sudo 를 실행하기 때문에 시스템 계정의 패스워드를 물어보게 됩니다. 입력하여 주시면 됩니다.

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

m1-homebrew_install.png

/opt/homebrew 아래에 구성파일들이 설치되며 설치를 계속하기 위해 엔터키를 한번 더 눌러주세요. 1~3분 이내에 설치가 완료됩니다.

m1-homebrew_install2.png

설치가 완료되었습니다. 추가적으로 아래의 명령어를 통해 Homebrew를 PATH 에 추가해줍니다. jhlove 는 자신의 계정이름으로 변경하여 실행하여 주세요.

echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/jhlove/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

아래의 명령어를 통해 Homebrew 가 정상적으로 설치되었는지 확인 하실 수 있습니다.

brew help

m1-homebrew_help.png

 

2. MariaDB 10.5.9 설치하기

- Homebrew 를 이용해 아래의 명령어로 간단하게 설치가 가능합니다.

brew install mariadb

 

- 설치된 mariadb 를 아래의 명령어로 기동합니다.

brew services start mariadb

m1-mariadb_ps.png

- mariadb(mysql) root 패스워드를 아래와 같이 명령어를 실행하여 변경합니다. sudo 로 명령어를 실행하면 바로 Password 를 물어보는데 여기에서는 Mac OS 계정의 패스워드를 입력하면 됩니다. 그리고 그 다음에 "Enter current password for root (enter for none):" 여기는 mysql 의 root 패스워드인데 아직 설정한게 없으므로 그냥 엔터를 누르시고 그 아래의 " Change the root password" 에서 root 패스워드를 변경하여 주시면 됩니다.

sudo mysql_secure_installation

m1-mariadb_root.png

- mysql root 계정이 정상적으로 접속되는지 아래의 명령어를 사용하여 확인합니다.

mysql -u root -p

m1-mariadb_root_check.png

 

3. PHP 8.0.3 설치

- 설치는 역시 Homebrew 를 사용해서 아래와 같이 간단하게 설치할 수 있습니다. (설치 시간은 조금 오래 걸립니다.)

brew install php

- 설치가 완료되면 간단하게 php 의 timezone, upload 용량을 수정합니다.

perl -p -i -e 's/upload_max_filesize = 2M/upload_max_filesize = 50M/g' /opt/homebrew/etc/php/8.0/php.ini
perl -p -i -e 's/post_max_size = 8M/post_max_size = 50M/g' /opt/homebrew/etc/php/8.0/php.ini
perl -p -i -e 's/;date.timezone =/date.timezone = Asia\/Seoul/g' /opt/homebrew/etc/php/8.0/php.ini

- 기존의 www.conf 설정을 삭제하고  임의로 pool 을 생성하겠습니다.

rm -f /opt/homebrew/etc/php/8.0/php-fpm.d/www.conf
vi /opt/homebrew/etc/php/8.0/php-fpm.d/zzori.conf

- zzori.conf 에는 아래의 내용을 추가합니다. (jhlove 는 Mac OS 사용자 계정입니다.)

[zzori]
user = jhlove
group = admin

listen = /tmp/zzori.sock

listen.owner = jhlove
listen.group = admin

pm = dynamic
pm.max_children = 9
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4

php_admin_value[session.cookie_httponly] = 1

;php_flag[display_errors] = off
;php_admin_value[error_log] = /var/log/fpm-php.www.log
;php_admin_flag[log_errors] = on

;catch_workers_output = yes

;php_admin_value[memory_limit] = 128M
;php_admin_value[max_execution_time] = 120
;php_admin_value[max_input_time] = 300

;php_admin_value[post_max_size] = 25M
;php_admin_value[upload_max_filesize] = 25M

- 그리고 이제 php-fpm 을 중지했다가 다시 기동하겠습니다.

brew services stop php
brew services start php

m1-php_start.png

 

4. caddy 2.3.0 설치

-  마찬가지로 설치는 Homebrew 를 이용해서 아래의 명령어로 간단히 설치가 가능합니다.

brew install caddy

 

- 웹서비스를 띄우기 전에 먼저 도메인의 A레코들 설정을 먼저 진행하도록 하겠습니다.(서버를 시작하게 되면 SSL인증서를 자동으로 발급해주게 되는데 올바른 DNS 구성이 되어 있어야 합니다.) 아래와 같이 클라우드 플레어에서 A 레코드를 설정하였습니다. 사용할 도메인은 jihye.pw 입니다.

m1-caddy-dns.png

- 그리고 Mac OS 홈계정의 경로에 web 이라는 디렉토리를 만들고 그 아래에 db.jihye.pw 라는 폴더를 생성하고 phpmyadmin 을 업로드 하였고, jihye.pw 에는 phpinfo 를 보여주는 index.php 파일을 미리 생성해두었습니다.

m1-caddy_home.png

 

- caddy서버의 설정파일인 Caddyfile 을 생성하고 아래 내용을 추가합니다. 홈경로 및 도메인 설정은 자신의 환경에 맞게 변경합니다.

vi /opt/homebrew/etc/Caddyfile

 

{
        servers {
                protocol {
                        experimental_http3
                }
        }
}

db.jihye.pw {
        header {
                Strict-Transport-Security "max-age=31536000; includeSubdomains; preload"
                X-Content-Type-Options "nosniff"
                X-Frame-Options "DENY"
                Referrer-Policy "no-referrer-when-downgrade"
        }

        root * /Users/jhlove/web/db.jihye.pw
        file_server
        encode zstd gzip
        php_fastcgi unix//tmp/zzori.sock
}

jihye.pw, www.jihye.pw {
        header {
                Strict-Transport-Security "max-age=31536000; includeSubdomains; preload"
                X-Content-Type-Options "nosniff"
                X-Frame-Options "DENY"
                Referrer-Policy "no-referrer-when-downgrade"
        }

        root * /Users/jhlove/web/jihye.pw
        file_server
        encode zstd gzip
        php_fastcgi unix//tmp/zzori.sock
}

 

- 이제 모든 설정이 완료되었고 caddy 서비스를 재기동 하겠습니다.

brew services restart caddy

m1-caddy_start.png

 

- caddy 관련 로그는 아래의 위치의 로그파일로 확인 가능합니다.

tail -f /opt/homebrew/var/log/caddy.log

m1-caddy_log.png

- 마지막으로 확인을 위해서 크롬으로 사이트 주소에 접속하면 아래와 같이 웹페이지를 확인하실 수 있습니다. HTTP/3, SSL 인증서가 정상적으로 확인됩니다.

m1-caddy_jihye.pw.png

 

m1-caddy_db.jihye.pw.png

- 기본적인 설정만으로도 SSL Labs 에서 A+ 등급을 확인할 수 있습니다.

m1-caddy_ssllabs.png

 

수정한 이유 :