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)"
/opt/homebrew 아래에 구성파일들이 설치되며 설치를 계속하기 위해 엔터키를 한번 더 눌러주세요. 1~3분 이내에 설치가 완료됩니다.
설치가 완료되었습니다. 추가적으로 아래의 명령어를 통해 Homebrew를 PATH 에 추가해줍니다. jhlove 는 자신의 계정이름으로 변경하여 실행하여 주세요.
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/jhlove/.zprofile eval "$(/opt/homebrew/bin/brew shellenv)"
아래의 명령어를 통해 Homebrew 가 정상적으로 설치되었는지 확인 하실 수 있습니다.
brew help
2. MariaDB 10.5.9 설치하기
- Homebrew 를 이용해 아래의 명령어로 간단하게 설치가 가능합니다.
brew install mariadb
- 설치된 mariadb 를 아래의 명령어로 기동합니다.
brew services start mariadb
- 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
- mysql root 계정이 정상적으로 접속되는지 아래의 명령어를 사용하여 확인합니다.
mysql -u root -p
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
- 그리고 이제 php-fpm 을 중지했다가 다시 기동하겠습니다.
brew services stop php brew services start php
4. 도메인의 A레코드 설정하기
- 웹서비스를 띄우기 전에 먼저 도메인의 A레코들 설정을 먼저 진행하도록 하겠습니다.(SSL인증서를 발급시 올바른 DNS 구성이 되어 있어야 합니다.) 아래와 같이 클라우드 플레어에서 A 레코드를 설정하였습니다. 사용할 도메인은 jihye.pw 입니다.
- certbot 설치(무료 SSL 인증서를 받기 위하여)
brew install certbot
- 그리고 아래의 명령어에서 이메일 주소를 자신의 메일주소로 변경, 도메인도 사용할 도메인으로 변경하여 실행합니다.
sudo certbot certonly --manual --preferred-challenges=dns --email 메일주소 --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d '*.도메인' -d '도메인' --rsa-key-size 4096
위의 명령어에 따라 와일드카드 인증서 발급을 진행하면 위와 같은 화면대로 진행이 됩니다. _acme-challenge.jihye.pw 에 대한 TXT 레코드를 아래의 값을 설정하여 줍니다. 클라우드플레어에서 아래와 같이 설정해주면 됩니다. 그리고 1-2 분후 엔터를 눌러 진행합니다.
- 그러면 한번 더 아래와 같은 화면이 나오고, 조금전에 한것처럼 클라우드플레어에서 동일한 TXT 레코드를 새롭게 추가하여 줍니다. 위에서 추가한 레코드를 변경하는게 아니라 하나 더 추가해 주는것입니다.
- 1-2분정도 시간이 지난 후에 다시 엔터를 누르게 되면 아래와 같이 인증서 발급이 정상적으로 완료됩니다.
인증서 설치 경로 : /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 파일을 미리 생성해두었습니다.
5. Apache 설치하기
- 마찬가지로 Homebrew 를 이용해 아래의 명령어로 간단히 설치가 가능합니다.
brew install httpd
기본 설정 - 초기 웹페이지 경로 : /opt/homebrew/var/www - 포트(HTTP) : 8080 - 포트(HTTPS) : 8443 - 시작명령어 : brew services start http
- httpd.conf 설정하기
+ DirectoryIndex 설정 : httpd.conf 에서 DirectoryIndex 에 index.php 추가
perl -p -i -e 's/DirectoryIndex index.html/DirectoryIndex index.php index.html/g' /opt/homebrew/etc/httpd/httpd.conf
+ 다음으로 <Files ".ht*"> ... 중략 ... </Files> 아래에 아래 내용을 추가합니다.
# deny file, folder start with dot <DirectoryMatch "^\.|\/\."> Require all denied </DirectoryMatch> # deny (log file, binary, certificate, shell script, sql dump file) access. <FilesMatch "\.(?i:log|binary|pem|enc|crt|conf|cnf|sql|sh|key|yml|lock|gitignore)$"> Require all denied </FilesMatch> # deny access. <FilesMatch "(?i:composer\.json|contributing\.md|license\.txt|readme\.rst|readme\.md|readme\.txt|copyright|artisan|gulpfile\.js|package\.json|phpunit\.xml|access_log|error_log|gruntfile\.js|bower\.json|changelog\.md|console|legalnotice|license|security\.md|privacy\.md)$"> Require all denied </FilesMatch> # Allow Lets Encrypt Domain Validation Program <DirectoryMatch "\.well-known/acme-challenge/"> Require all granted </DirectoryMatch>
+ 버츄얼 호스팅(conf 파일 각각 도메인별로 하기 위해) 환경설정파일 디렉토리 생성
echo '# Virtual hosts' >> /opt/homebrew/etc/httpd/httpd.conf echo 'Include /opt/homebrew/etc/httpd/vhost/*.conf' >> /opt/homebrew/etc/httpd/httpd.conf mkdir /opt/homebrew/etc/httpd/vhost
+ PHP 및 아파치 모듈 설정 및 SSL관련 기본설정
perl -p -i -e 's/Listen 8080/Listen 80\nListen 443/g' /opt/homebrew/etc/httpd/httpd.conf perl -p -i -e 's/#LoadModule rewrite_module/LoadModule rewrite_module/g' /opt/homebrew/etc/httpd/httpd.conf perl -p -i -e 's/#LoadModule vhost_alias_module/LoadModule vhost_alias_module/g' /opt/homebrew/etc/httpd/httpd.conf perl -p -i -e 's/#LoadModule http2_module/LoadModule http2_module/g' /opt/homebrew/etc/httpd/httpd.conf perl -p -i -e 's/#LoadModule ssl_module/LoadModule ssl_module/g' /opt/homebrew/etc/httpd/httpd.conf perl -p -i -e 's/#LoadModule unique_id_module/LoadModule unique_id_module/g' /opt/homebrew/etc/httpd/httpd.conf perl -p -i -e 's/#LoadModule expires_module/LoadModule expires_module/g' /opt/homebrew/etc/httpd/httpd.conf perl -p -i -e 's/#LoadModule deflate_module/LoadModule deflate_module/g' /opt/homebrew/etc/httpd/httpd.conf perl -p -i -e 's/#LoadModule socache_shmcb_module/LoadModule socache_shmcb_module/g' /opt/homebrew/etc/httpd/httpd.conf echo ' #SSLSessionCache "dbm:/opt/homebrew/var/run/httpd/ssl_scache"' > /opt/homebrew/etc/httpd/vhost/base.conf echo ' SSLSessionCache "shmcb:/opt/homebrew/var/run/httpd/ssl_scache(512000)"' >> /opt/homebrew/etc/httpd/vhost/base.conf echo ' SSLSessionCacheTimeout 300' >> /opt/homebrew/etc/httpd/vhost/base.conf echo '' >> /opt/homebrew/etc/httpd/vhost/base.conf echo 'LoadModule php_module $(brew --prefix)/opt/php/lib/httpd/modules/libphp.so' >> /opt/homebrew/etc/httpd/vhost/base.conf echo '' >> /opt/homebrew/etc/httpd/vhost/base.conf echo ' <FilesMatch \.php$>' >> /opt/homebrew/etc/httpd/vhost/base.conf echo ' SetHandler application/x-httpd-php' >> /opt/homebrew/etc/httpd/vhost/base.conf echo ' </FilesMatch>' >> /opt/homebrew/etc/httpd/vhost/base.conf
+ jihye.pw 도메인 버츄얼 호스트 설정파일 생성
vi /opt/homebrew/etc/httpd/vhost/jihye.pw.conf
내용은 아래 내용을 추가합니다.
<VirtualHost *:80> ServerName jihye.pw ServerAlias www.jihye.pw <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^ - [E=protossl] RewriteCond %{HTTPS} on RewriteRule ^ - [E=protossl:s] RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] </IfModule> </VirtualHost> # Specify the SSL cache directory. If possible, use shmcb, otherwise use the provided path. SSLStaplingCache shmcb:/opt/homebrew/var/run/ocsp(128000) <VirtualHost *:443> ServerName jihye.pw ServerAlias www.jihye.pw DocumentRoot /Users/jhlove/web/jihye.pw <Directory /Users/jhlove/web/jihye.pw> Options FollowSymLinks MultiViews AllowOverride All require all granted </Directory> ErrorLog /opt/homebrew/var/log/httpd/jihye.pw-error.log CustomLog /opt/homebrew/var/log/httpd/jihye.pw-access.log combined Header always set Strict-Transport-Security "max-age=31536000" SSLEngine on SSLProtocol all -TLSv1 -TLSv1.1 -SSLv3 SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS" SSLHonorCipherOrder on SSLCertificateFile "/etc/letsencrypt/live/jihye.pw/cert.pem" SSLCertificateKeyFile "/etc/letsencrypt/live/jihye.pw/privkey.pem" SSLCertificateChainFile "/etc/letsencrypt/live/jihye.pw/chain.pem" # Turn on OCSP stapling SSLUseStapling on SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off </VirtualHost>
+ 이제 아파치(httpd) 웹서버를 시작합니다.
sudo brew services start httpd
- 마지막으로 확인을 위해서 크롬으로 사이트 주소에 접속하면 아래와 같이 웹페이지를 확인하실 수 있습니다.
- SSL Labs 에서 A+ 등급을 확인할 수 있습니다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
» |
Apache 2.4.46 + PHP 8.0.3 + MariaDB 10.5.9 웹서버 설치하기(Mac Apple Silicon M1)
![]() | 지혜바보 | 2021.03.21 | 3386 |