Arch Linux는 유연한 최신 시스템 환경을 제공하며, 소형 비중요 시스템에서 웹 애플리케이션을 개발하기에 가장 적합한 솔루션이며, 완전한 오픈 소스이며 서버 및 데이터베이스용 최신 커널 및 웹 소프트웨어 릴리스를 제공하는 것이 특징입니다.

이 튜토리얼의 주요 목표는 완전한 단계별 지침을 통해 웹 개발에서 가장 많이 사용되는 소프트웨어 조합 중 하나를 설치하는 데 이르는 것입니다: LAMP (Linux, Apache, MySQL/MariaDB 및 PHP/PhpMyAdmin) 및 Arch Linux 시스템에는 없지만 여러 가상 호스트를 만드는 작업을 쉽게 할 수 있는 몇 가지 좋은 기능 (빠르고 더러운 Bash 스크립트)와 SSL 인증서를 생성하고 안전한 HTTS 트랜잭션에 필요한 키를 생성합니다.
요구 사항
- 이전 Arch Linux 설치 프로세스 – DHCP와 관련된 마지막 부분은 건너뛰세요.
- 이전 Arch Linux에 LEMP 설치 – 정적 IP 주소 구성 및 원격 SSH 액세스에 대한 부분만 수행합니다.
단계 1: 기본 소프트웨어 LAMP 설치
1. 정적 IP 주소 및 원격 시스템 액세스 기능이 있는 최소한의 시스템 설치 후, pacman 유틸리티를 사용하여 Arch Linux 상자를 업그레이드합니다.
$ sudo pacman -Syu
2. 업그레이드 프로세스가 완료되면 조각으로부터 LAMP를 설치하십시오. 먼저 아파치 웹 서버를 설치하고 모든 서버 프로세스 데몬을 시작/확인하십시오.
$ sudo pacman -S apache $ sudo systemctl start httpd $ sudo systemctl status httpd

3. PHP 동적 서버 사이드 스크립팅 언어와 해당 아파치 모듈을 설치하십시오.
$ sudo pacman -S php php-apache
4. 마지막 단계로 MySQL 데이터베이스를 설치하십시오. 1(MariaDB) 커뮤니티 데이터베이스 포크를 선택한 다음 데몬 상태를 확인하고 시작하십시오.
$ sudo pacman -S mysql $ sudo systemctl start mysqld $ sudo systemctl status mysqld


이제 기본 LAMP 소프트웨어가 설치되어 기본 구성으로 시작되었습니다.
단계 2: MySQL 데이터베이스 보안 설정
5. 다음 단계는 루트 계정에 암호를 설정하여 MySQL 데이터베이스를 안전하게 보호하는 것입니다. 익명 사용자 계정을 제거하고 테스트 데이터베이스를 제거하며 사용자 루트에 대한 원격 로그인을 허용하지 않습니다(루트 계정의 현재 암호를 위해 [Enter] 키를 누르고 모든 보안 질문에 예로 응답하십시오).
$ sudo mysql_secure_installation


6. 다음 명령을 실행하여 MySQL 데이터베이스 연결성을 확인한 다음 데이터베이스 쉘을 quit 또는 exit으로 나가십시오.
$ mysql -u root -p

단계 3: 아파치 주 구성 파일 수정
7. 다음 구성은 대부분 아파치 웹 서버와 관련이 있으며 PHP 스크립팅 언어로 가상 호스팅을 제공하고, SSL 또는 비-SSL 가상 호스트를 제공하기 위해 httpd 서비스 파일 구성을 수정하여 수행할 수 있습니다.
먼저 선호하는 텍스트 편집기로 주요 아파치 파일 구성을 엽니다.
$ sudo nano /etc/httpd/conf/httpd.conf
파일 가장 아래에 다음 두 줄을 추가하십시오.
IncludeOptional conf/sites-enabled/*.conf IncludeOptional conf/mods-enabled/*.conf

포함문은 이제부터 아파치에게 가상 호스팅에 대한 모든 파일이 위치한 /etc/httpd/conf/sites-enabled/ (및 활성화된 서버 모듈에 대한 /etc/httpd/conf/mods-enabled/ 시스템 경로에서 .conf 확장자로 끝나는 추가 구성을 읽어야 함을 알려줍니다.
8.이 두 지시문으로 아파치에 지시한 후, 다음 명령을 사용하여 필요한 시스템 디렉토리를 만듭니다.
$ sudo mkdir /etc/httpd/conf/sites-available $ sudo mkdir /etc/httpd/conf/sites-enabled $ sudo mkdir /etc/httpd/conf/mods-enabled
사이트 가능 경로에는 아파치에서 활성화되지 않은 모든 가상 호스트 구성 파일이 포함되어 있지만 다음 Bash 스크립트에서 이 디렉토리를 사용하여 해당 위치에있는 웹 사이트를 링크하고 활성화합니다.
단계 4: a2eniste 및 a2diste 아파치 명령 생성
9.a2ensite 및 a2dissite 아파치 스크립트를 만드는 시간입니다. 이 스크립트는 가상 호스트 구성 파일을 활성화 또는 비활성화하는 명령으로 사용됩니다. 홈 사용자 경로인 $HOME로 돌아가기 위해 cd 명령을 입력하고 좋아하는 편집기를 사용하여 bash a2eniste 및 a2dissite 스크립트를 만듭니다.
$ sudo nano a2ensite
이 파일에 다음 내용을 추가하십시오.
#!/bin/bash if test -d /etc/httpd/conf/sites-available && test -d /etc/httpd/conf/sites-enabled ; then echo "-------------------------------" else mkdir /etc/httpd/conf/sites-available mkdir /etc/httpd/conf/sites-enabled fi avail=/etc/httpd/conf/sites-available/$1.conf enabled=/etc/httpd/conf/sites-enabled site=`ls /etc/httpd/conf/sites-available/` if [ "$#" != "1" ]; then echo "Use script: n2ensite virtual_site" echo -e "\nAvailable virtual hosts:\n$site" exit 0 else if test -e $avail; then sudo ln -s $avail $enabled else echo -e "$avail virtual host does not exist! Please create one!\n$site" exit 0 fi if test -e $enabled/$1.conf; then echo "Success!! Now restart Apache server: sudo systemctl restart httpd" else echo -e "Virtual host $avail does not exist!\nPlease see avail virtual hosts:\n$site" exit 0 fi fi

이제 a2dissite bash 스크립트 파일을 만듭니다.
$ sudo nano a2dissite
다음 내용을 추가하십시오.
#!/bin/bash avail=/etc/httpd/conf/sites-enabled/$1.conf enabled=/etc/httpd/conf/sites-enabled site=`ls /etc/httpd/conf/sites-enabled` if [ "$#" != "1" ]; then echo "Use script: n2dissite virtual_site" echo -e "\nAvailable virtual hosts: \n$site" exit 0 else if test -e $avail; then sudo rm $avail else echo -e "$avail virtual host does not exist! Exiting" exit 0 fi if test -e $enabled/$1.conf; then echo "Error!! Could not remove $avail virtual host!" else echo -e "Success! $avail has been removed!\nsudo systemctl restart httpd" exit 0 fi fi

10. 파일을 생성한 후 실행 권한을 할당하고 시스템 전역으로 사용 가능하도록 하기 위해 해당 파일을 $PATH 실행 가능 디렉터리에 복사합니다.
$ sudo chmod +x a2ensite a2dissite $ sudo cp a2ensite a2dissite /usr/local/bin/

단계 5: 아파치에 가상 호스트 생성
11. 아치 리눅스의 Apache 웹 서버에 대한 가상 호스트 기본 구성 파일은 httpd-vhosts.conf 파일로 제공되며 /etc/httpd/conf/extra/ 경로에 위치합니다. 그러나 가상 호스트를 많이 사용하는 시스템의 경우 활성화된 웹 사이트가 무엇인지 추적하기가 매우 어려울 수 있습니다. 웹 사이트를 비활성화하려면 해당 지시문을 모두 주석 처리하거나 삭제해야하며, 시스템이 많은 웹 사이트를 제공하고 웹 사이트에 구성 지시문이 더 많은 경우 이는 어려운 임무가 될 수 있습니다.
sites-available 및 sites-enabled 경로를 사용하면 웹 사이트를 활성화 또는 비활성화하는 작업이 크게 단순화되며, 활성화되거나 되지 않더라도 모든 웹 사이트 구성 파일이 보존됩니다.
다음 단계에서는 첫 번째 가상 호스트를 생성하여 기본 로컬호스트를 가리키도록하고 웹 사이트 파일을 제공하는 기본 DocumentRoot 경로를 설정합니다 (/srv/http).
$ sudo nano /etc/httpd/conf/sites-available/localhost.conf
다음 Apache 지시문을 여기에 추가하십시오.
<VirtualHost *:80> DocumentRoot "/srv/http" ServerName localhost ServerAdmin [email protected] ErrorLog "/var/log/httpd/localhost-error_log" TransferLog "/var/log/httpd/localhost-access_log" <Directory /> Options +Indexes +FollowSymLinks +ExecCGI AllowOverride All Order deny,allow Allow from all Require all granted </Directory> </VirtualHost>

여기서 가장 중요한 문은 Apache가 포트 80에서 네트워크 연결을 열고 localhost 이름을 가진 모든 쿼리를 /srv/http/ 경로에 위치한 파일로 리디렉션하는 Port 및 ServerName 지시문입니다.
12. localhost 파일이 생성되면 활성화하고 변경 사항을 확인하려면 httpd 데몬을 다시 시작하십시오.
$ sudo a2ensite localhost $ sudo systemctl restart httpd

13. 그런 다음 브라우저를 http://localhost로 이동하십시오(Arch 시스템에서 실행하는 경우) 또는 원격 시스템을 사용하는 경우 http://Arch_IP로 이동하십시오.

LAMP에서 가상 호스팅으로 SSL 활성화하기
SSL (Secure Sockets Layer)은 네트워크나 인터넷 상의 HTTP 연결을 암호화하는 프로토콜로, 대칭/비대칭 암호화 키를 사용하여 데이터 흐름을 안전한 채널을 통해 전송되도록 만들어줍니다. 이는 Arch Linux에서 OpenSSL 패키지로 제공됩니다.
14. Arch Linux의 Apache에서는 기본적으로 SSL 모듈이 활성화되어 있지 않으며, 주요 httpd.conf 구성 파일에서 mod_ssl.so 모듈의 주석 처리를 해제하고 추가 httpd 경로에 있는 Include httpd-ssl.conf 파일을 활성화하여 활성화할 수 있습니다.
그러나 간단하게 하기 위해 SSL 모듈을 위한 새로운 모듈 파일을 mods-enabled 경로에 만들고 원본 Apache 구성 파일은 그대로 두겠습니다. SSL 모듈을 위한 다음 파일을 만들고 아래 내용을 추가하세요.
$ sudo nano /etc/httpd/conf/mods-enabled/ssl.conf
다음 내용을 추가하세요.
LoadModule ssl_module modules/mod_ssl.so LoadModule socache_shmcb_module modules/mod_socache_shmcb.so Listen 443 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 SSLPassPhraseDialog builtin SSLSessionCache "shmcb:/run/httpd/ssl_scache(512000)" SSLSessionCacheTimeout 300

15. 이제 동일한 localhost 이름을 가리키는 Virtual Host 파일을 만들되 이번에는 SSL 서버 구성을 사용하여 파일 이름을 약간 변경하여 localhost에 SSL이 있는 것을 상기시키도록 하겠습니다.
$ sudo nano /etc/httpd/conf/sites-available/localhost-ssl.conf
이 파일에 다음 내용을 추가하세요.
<VirtualHost *:443> DocumentRoot "/srv/http" ServerName localhost ServerAdmin [email protected] ErrorLog "/var/log/httpd/localhost-ssl-error_log" TransferLog "/var/log/httpd/localhost-ssl-access_log" SSLEngine on SSLCertificateFile "/etc/httpd/conf/ssl/localhost.crt" SSLCertificateKeyFile "/etc/httpd/conf/ssl/localhost.key" <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/srv/http/cgi-bin"> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-5]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog "/var/log/httpd/ssl_request_log" \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" <Directory /> Options +Indexes +FollowSymLinks +ExecCGI AllowOverride All Order deny,allow Allow from all Require all granted </Directory> </VirtualHost>

Port 및 ServerName 지시문 외에 여기서 중요한 지시문은 아직 생성되지 않은 SSL 인증서 파일 및 SSL 키 파일을 가리키는 지시문입니다. Apache 웹 서버를 다시 시작하지 마세요. 그렇지 않으면 오류가 발생합니다.
16. 필요한 SSL 인증서 파일 및 키를 만들기 위해 아래 명령을 사용하여 OpenSSL 패키지를 설치하세요.
$ sudo pacman -S openssl
17. 그런 다음 다음 Bash 스크립트를 만들어서 모든 Apache 인증서와 키를 자동으로 생성하고 저장하고 /etc/httpd/conf/ssl/ 시스템 경로에 저장하세요.
$ sudo nano apache_gen_ssl
다음 파일 내용을 추가한 다음 저장하고 실행 가능하게 만드세요.
#!/bin/bash mkdir /etc/httpd/conf/ssl cd /etc/httpd/conf/ssl echo -e "Enter your virtual host FQDN: \nThis will generate the default name for Nginx SSL certificate!" read cert openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out $cert.key chmod 600 $cert.key openssl req -new -key $cert.key -out $cert.csr openssl x509 -req -days 365 -in $cert.csr -signkey $cert.key -out $cert.crt echo -e " The certificate "$cert" has been generated!\nPlease link it to Apache SSL available website!" ls -all /etc/httpd/conf/ssl exit 0

$ sudo chmod +x apache_gen_ssl
시스템 전체에서 스크립트를 사용할 수 있게 하려면 실행 가능한 $PATH로 복사하세요.
$ sudo cp /apache_gen_ssl /usr/local/bin/
18. 이제 스크립트를 실행하여 인증서와 키를 생성하세요. SSL 옵션을 제공하고 공식 도메인 (FQDN)과 일치하는 인증서 이름과 공통 이름을 잊지 마세요.
$ sudo ./apache_gen_ssl


인증서와 키가 생성된 후 SSL 가상 호스트 인증서와 키 구성을 이 인증서 이름과 일치하도록 수정하는 것을 잊지 마세요.
19. 마지막 단계는 새로운 SSL 가상 호스트를 활성화하고 설정을 적용하려면 서버를 다시 시작하면 됩니다.
$ sudo a2ensite localhost-ssl $ sudo systemctl restart httpd

이것으로 끝났습니다! 확인하려면 브라우저를 열고 HTTPS 프로토콜을 사용하여 Arch IP의 URL에 추가하세요: https://localhost 또는 https://system_IP.

단계 7: Apache에서 PHP 활성화
20. Arch Linux에서는 기본적으로 Apache가 동적 스크립팅 언어를 지원하지 않는 HTML 정적 파일 내용만 제공합니다. PHP를 활성화하려면 먼저 Apache 주 구성 파일을 열고 다음과 같이 LoadModule 문을 검색하고 주석 처리하세요 (php-apache가 Arch Linux의 mod_mpm_event와 함께 작동하지 않습니다).
$ sudo nano /etc/httpd/conf/httpd.conf
[Ctrl]+[w]를 사용하여 검색한 다음 다음 줄을 다음과 같이 변경하세요.
#LoadModule mpm_event_module modules/mod_mpm_event.so

21. 그런 다음, 다음 내용으로 mods-enabled 경로에 PHP 모듈을 위한 새 파일을 만듭니다.
$ sudo nano /etc/httpd/conf/mods-enabled/php.conf
다음 내용을 정확히 추가하십시오 (mod_mpm_prefork을 사용해야 합니다).
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so LoadModule php5_module modules/libphp5.so Include conf/extra/php5_module.conf

22. 설정을 확인하려면 DocumnetRoot(/srv/http/)에 info.php라는 PHP 파일을 만든 다음 Apache를 재시작하고 브라우저를 info.php 파일로 이동하십시오: https://localhost/info.php.
<?php phpinfo(); ?>
$ sudo systemctl restart httpd

여기까지입니다! 모든 것이 위의 이미지와 같이 보인다면, 이제 Apache에서 PHP 동적 서버 측 스크립팅 언어가 활성화되어 있고 WordPress와 같은 오픈 소스 CMS를 사용하여 웹 사이트를 개발할 수 있습니다.
Apache 구문 구성을 확인하고 httpd 데몬 재시작 없이 로드된 모듈 목록을 보려면 다음 명령을 실행하십시오.
$ sudo apachectl configtest $ sudo apachectl -M
단계 8: PhpMyAdmin 설치 및 구성
23. MySQL 명령 줄을 완전히 이해하지 못하고 웹 인터페이스를 통해 제공되는 MySQL 데이터베이스에 간단한 원격 액세스를 원한다면 Arch 상자에 PhpMyAdmin 패키지를 설치해야 합니다.
$ sudo pacman -S phpmyadmin php-mcrypt
24. 패키지를 설치한 후에는 일부 PHP 확장 기능(mysqli.so, 내부 인증용 mcrypt.so 포함)을 활성화해야 하며 openssl.so, imap.so, iconv.so 등의 다른 모듈을 필요에 따라 활성화할 수도 있습니다.
$ sudo nano /etc/php/php.ini
위의 확장 기능을 찾아 주석 처리합니다.
extension=mcrypt.so extension=mssql.so extension=mysqli.so extension=openssl.so extension=iconv.so extension=imap.so extension=zip.so extension=bz2.so

동일한 파일에서 open_basedir 문을 찾아 PhpMyAdmin 시스템 경로를 추가하고 (/etc/webapps/ 및 /usr/share/webapps/) 이러한 디렉토리 아래의 파일에 PHP가 액세스하고 읽을 수 있도록합니다 (또한 가상 호스트 DocumentRoot 경로를 /srv/http/에서 다른 위치로 변경하는 경우 새 경로를 여기에 추가해야 함).

25. PhpMyAdmin 웹 인터페이스에 액세스하려면 추가해야 하는 마지막 단계는 가상 호스트에 PhpMyAdmin Apache 문을 추가하는 것입니다. 보안 조치로 인해 PhpMyAdmin 웹 인터페이스가 로컬호스트 (또는 시스템 IP 주소)를 통해서만 HTTPS 프로토콜을 사용하여 접근 가능하고 다른 다른 가상 호스트로부터는 접근할 수 없도록합니다. 따라서 localhost-ssl.conf Apache 파일을 열고 아래에 마지막 문 전에 다음 내용을 추가하십시오.
$ sudo nano /etc/httpd/conf/sites-enabled/localhost-ssl.conf
Alias /phpmyadmin "/usr/share/webapps/phpMyAdmin" <Directory "/usr/share/webapps/phpMyAdmin"> DirectoryIndex index.html index.php AllowOverride All Options FollowSymlinks Require all granted </Directory>

26. 그런 다음 Apache 데몬을 재시작하고 브라우저를 다음 주소로 지정하여 PhpMyAdmin 웹 인터페이스에 액세스 할 수 있어야 합니다: https://localhost/phpmyadmin 또는 https://system_IP/phpmyadmin.

27. PhpMyAdmin에 로그인한 후 blowfish_secret와 관련된 하단 오류가 표시되면 /etc/webapps/phpmyadmin/config.inc.php 파일을 열고 특정 문자열을 다음 명령문과 같이 삽입한 다음 페이지를 새로 고쳐주세요.
$cfg['blowfish_secret'] = ‘{^QP+-(3mlHy+Gd~FE3mN{gIATs^1lX+T=KVYv{ubK*U0V’ ;

단계 9: LAMP 시스템 전역 활성화
28. 시스템 재부팅 후 LAMP 스택을 자동으로 시작하려면 다음 명령을 실행하세요.
$ sudo systemctl enable httpd mysqld

이것은 소규모 비비상 환경을 위한 강력하고 빠르며 견고한 웹 플랫폼으로 변환하기 위해 LAMP에서 필요한 주요 구성 설정 중 일부입니다. 그러나 대규모 프로덕션 환경에서 계속 사용하고 싶다면 패키지 업데이트에 특히 주의를 기울이고 시스템 장애 발생 시 빠른 시스템 복원을 위해 정기적으로 시스템 백업 이미지를 만들어야 합니다.