메뉴 건너뛰기

IT지혜

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

 

구성 : Apache + PHP + MariaDB(MySQL)

시스템 : 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

 

5. 도메인의 A레코드 설정하기

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

m1-caddy-dns.png

- certbot 설치(무료 SSL 인증서를 받기 위하여)

brew install certbot

m1-certbot_install.png

 

- 그리고 아래의 명령어에서 이메일 주소를 자신의 메일주소로 변경, 도메인도 사용할 도메인으로 변경하여 실행합니다.

sudo certbot certonly --manual --preferred-challenges=dns --email 메일주소 --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d '*.도메인' -d '도메인' --rsa-key-size 4096

m1-cerbot_progress1.png

위의 명령어에 따라 와일드카드 인증서 발급을 진행하면 위와 같은 화면대로 진행이 됩니다. _acme-challenge.jihye.pw 에 대한 TXT 레코드를 아래의 값을 설정하여 줍니다. 클라우드플레어에서 아래와 같이 설정해주면 됩니다. 그리고 1-2 분후 엔터를 눌러 진행합니다.

m1-certbot_progress2.png

- 그러면 한번 더 아래와 같은 화면이 나오고, 조금전에 한것처럼 클라우드플레어에서 동일한 TXT 레코드를 새롭게 추가하여 줍니다. 위에서 추가한 레코드를 변경하는게 아니라 하나 더 추가해 주는것입니다.

m1-certbot_progress4.png

- 1-2분정도 시간이 지난 후에 다시 엔터를 누르게 되면 아래와 같이 인증서 발급이 정상적으로 완료됩니다.

m1-certbot_progress5.png

인증서 설치 경로 : /etc/letsencrypt/live/jihye.pw/fullchain.pem

priv key 설치 경로 : /etc/letsencrypt/live/jihye.pw/privkey.pem

 

- 그리고 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

수정한 이유 :