Certbot을 이용한 SSL 인증서 발급+갱신

최근 인터넷 환경이 http에서 https로 넘어가면서 Chrome을 필두로 SSL 인증서를 요구하는 브라우저가 많아졌다.

따라서 운영하는 웹사이트에도 죄다 SSL 적용하고는 있는데, 보통은 유료이고 다행히 Let’s encrypt에서 무료로 인증서를 발급하고 있으므로 이것을 이용하고 있다. 단점은 상용 인증서와 달리 유효기간이 3개월이기 때문에 이 기간마다 연장을 해주어야 한다는 점이 있다.

Certbot은 이것을 자동으로 갱신해줄 수 있으며 또한 와일드 카드 인증서 (예 : *.xeriars.com)를 발급받을 수도 있다.

따라서 오늘은 이 과정을 어떻게 진행해야 하는지 글로 남겨본다.

설치 기준은 Ubuntu 20.04.01 TLS, apache2, cloudflare를 DNS로 사용하는 것을 기준으로 한다.

1. 일단 간단하게 시스템 업데이트부터 진행한다.

$ sudo apt update && sudo apt upgrade -y

2. snap을 설치한다.

$ sudo snap install core; sudo snap refresh core


mariadb 리포지터리에 오류가 난 것 같으나 일단 무시하고, snap을 설치했다.

3. snap으로 설치 할 예정이니, 기존에 certbot을 apt (데비안, 우분투), yum(centOS) 등으로 설치했다면 제거토록 한다.

$ sudo apt-get remove certbot (우분투)
$ sudo yum remove certbot (centOS)

4. certbot을 설치한다.

$ sudo snap install --classic certbot
$ sudo snap set certbot trust-plugin-with-root=ok


5. certbot을 구동할 수 있도록 심볼릭 링크를 생성한다.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot


6-1. 분기점. 간단히 1개 도메인만 (예 : xeriars.com, blog.xeriars.com) 인증서를 설치하려면 다음의 명령어를 입력한다.

$ sudo certbot --apache

xeriars.com/260 글 중간에도 자세히 설명되어있으므로 이 부분은 해당글을 참조하며, 별도 자세한 설정방법은 생략

6-2. 와일드 카드 인증서로 여러 서브 도메인(예 : xeriars.com, *.xeriars.com)을 한꺼번에 인증받으려면 다음의 명령어로 DNS 플러그인을 설치한다.

cloudflare를 DNS로 사용하는 기준이며, 다른 DNS는 s.xeriars.com/XTuA를 참조하여 DNS에 맞는 플러그인을 설치한다.

$ sudo snap install certbot-dns-cloudflare


7-1. 아마 설치가 끝났을테니 여기서 분기점 종료.

7-2. cloudflare에서 Global API key를 얻어온다.

접속후 My profile → API Tokens → Global API key에서 View를 클릭하면 볼 수 있다.

또는 로그인 후 s.xeriars.com/iyvT 로 바로 접속해도 된다.

8. 적당한 위치에 API키 정보를 저장해야한다. 아래와 같이 폴더를 하나 만들고 거기에 API키를 저장한다.

$ cd ~
$ mkdir secret
$ cd secret
$ nano secret_key.ini


9. API key 정보를 입력한다.

dns_cloudflare_email = "cloudflare 계정명"
dns_cloudflare_api_key = "Global API 키"

10. DNS에 도메인이 잘 물려있는지 확인한다.

DNS가 cloudflare로 설정되어있는 경우에는 Proxied connection으로 진행해도 문제없이 인증이 가능하다.

보통의 경우에는 도메인의 DNS 레코드와 서버 IP가 일치해야 진행이 되는데, Proxied connection이 되어있는 경우에는 일치되지 않아 인증서 발급 간 오류가 발생한다.

11. API key가 담긴 파일의 파일 권한을 설정한다.

$ chmod 700 ~/secret
$ chmod 400 ~/secret/secret_key.ini

12. 이제 거의 마지막 단계까지 왔다. 인증서를 발급받을 차례다.

$ certbot certonly
여기서 2번을 선택한다.


인증서를 발급할 도메인을 묻는다. 네이키드 도메인과 와일드카드 도메인을 입력해준다.

(예 : xeriars.com,*.xeriars.com)



조금 전에 저장해둔 Cloudflare의 API 정보를 요구한다. 파일이 저장된 경로를 입력하고 엔터.

11번 항의 chmod로 퍼미션 설정을 건너뛰면 이 단계에서 보안에 문제가 있을 수 있다고 경고문이 나온다.

인증서 발급이 완료되었다. 하지만 두가지 단계가 더 남았다.

13. 일단 발급된 인증서 정보를 확인해보자.

$ sudo certbot certificates


발급된 인증서는 89일이 남았고 도메인은 xeriars.com과 *.xeriars.com임이 확인된다.

도메인은 만료일이 20일 정도 남으면 메일이 오긴 하는데, 이게 매번 연장하기도 귀찮고 하니 crontab에 등록해두면 하루에 한 번씩 renew를 실행하고, 유효기간이 충분하면 skipping, 유효기간이 다가오면 renewal 작업을 수행하게 된다.

14. crontab으로 작업을 등록해둔다.

sudo crontab -e


아마 이렇게 파일 편집기를 뭐로 쓸지 물어보기도 하는데, 개인적으로는 nano가 편하므로 nano를 선택해주었다.

그리고 인증서 발급 시 루트권한 (또는 sudo)을 요구하므로 crontab도 루트 권한으로 실행시켜주어야 한다.

만약 crontab -e 입력 시 “Command not found”가 뜬다면 아래 명령어를 입력해 cron을 설치해주어야 한다.

sudo apt-get install cron

15. crontab에 아래의 구문을 추가한다.

* 4 * * * /usr/local/bin/certbot renew --quiet --post-hook "/usr/sbin/service apache2 restart" > /dev/null 2>&1

대략 새벽 4시쯤 certbot renew를 실행하며, 이후 service apache2 restart를 실행하므로

매일 renew와 아파치 서버가 재시작되는 명령어를 반복한다.



16. 마지막 단계까지 왔다. 아까 분기점에서 1번으로 했으면 안해도 되는 작업이긴 한데, 분기점에서 2번으로 왔다면 꼭 해주어야 하는 명령이 있다. 아파치 서버 설정 파일에 인증서 경로를 넣어주어야 한다.

$ cd /etc/apache2/sites-available
$ ls -al


서버 설정파일이 몇가지 있을텐데, 이미 사용중인 서버설정파일이 있다면 그것을 열어주고, 아니면 아무거나 하나 복사한 뒤 거기에 인증서 경로를 넣어주어야 한다.

sudo cp 000-default.conf xeriars.conf
sudo nano xeriars.conf

조금전에 인증서 정보를 조회한 이유가 있다. 인증서 경로가 출력되는데, 아래 스샷과 같이 해당 경로를 넣어준다.

Header always set Strict-Transport-Security "max-age=63072000"

Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/xeriars.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/xeriars.com/privkey.pem


추가적으로 VirtualHost의 포트가 443인지도 확인한 후 저장 후 다시 빠져나온다.

17. 아파치가 해당 환경파일을 인식할 수 있도록 a2ensite로 등록한다.

$ sudo a2ensite xeriars.conf
$ sudo a2enmod headers
$ sudo a2enmod ssl
$ sudo a2enmod rewrite


설정 파일에 header를 등록했으므로 활성화되어있지 않다면 아파치 재시작 시 오류가 발생한다. 혹시 모르니 ssl도 활성화해주면 좋다. 밑져야 본전이니 일단 실행해보고 이미 활성화 되있으면 이미 활성화되어있다고 메시지만 뜨고 끝이지만, 활성화를 안해둔 상태로 아파치를 재시작하면 에러가 난다. 그리곤 원인을 찾느라 머리를 쥐어뜯겠지…

혹시 설정파일이 맘에 들지 않아 비활성화 하고 싶으면 a2dissite를 사용하고 설정 파일을 삭제하거나 수정할 수 있다.



a2ensite로 적용하고 나면 sites-enabled 디렉터리에 위와 같이 해당 설정파일이 심볼릭 링크로 적용되고 웹서버는 이 심볼릭 링크를 읽어서 모든 작업을 처리하게 된다.

여기까지 왔으면 이제 모든 작업이 끝났다.

이제 SSL 관련해서 갱신은 알아서 진행될 테니 신경쓰지 말고 살면 된다.

새 도메인 등록

흔히들 사용하는 국가도메인 (ccTLD, Country Code Top-Level Domain)을 이용한 *도메인 핵으로 블로그에서 사용 할 단축 URL 주소를 만들었다.

*도메인 핵(Domain hack) : 거창하게 해킹같은건 아니고, 우리나라의 국가도메인이 .kr인 것 처럼 .rs는 원래 세르비아의 국가도메인으로 사용하라고 만들어진 것이지만 이렇게 조건이 맞으면 다른 용도로 사용할 수 있다. 원래 목적은 이러라고 만들어진게 아닌데, 원 제작자/단체가 생각치 못한 방법으로 사용되었기 때문에 Hack으로 불리게 되었다. 유명한 도메인 핵으로는 goo.gl 과 youtu.be가 있는데, 이것 또한 도메인 핵을 적용한 단축 URL이다.

현재 이 블로그도 필명과 동일한 https://xeriars.com 을 사용중이므로, 앞으로 블로그 글 링크 (https://xeriars.com/글번호)를 제외한 모든 외부링크는 https://xeria.rs 로 사용할 계획이며, 실제로 지난 글들 중 일부는 이미 적용한 상태이다. 

도메인을 Naked로 접속하면 이 블로그로 리디렉션되며, 단축 URL은 지정한데로 작동하도록 설정.

https://s.xeriars.com  으로 변경하였다. (2022.02.04)

연 $27라는 어마무시한 등록비가 기다리고 있지만 뭐.. 나만 좋으면 됐다.

phpMyAdmin 설치

mysql로 그간 CUI로 열심히 관리해왔지만, 사실 그럴 필요는 없다. GUI로 나온 툴들도 많고 오픈소스도 있으니.. 게다가 CUI로는 DB가 조금 커졌을땐 내용 확인하기도 좀 애매해서 직관적으로 파악하기가 어려운 점도 있다.

그래서 오늘은 시놀로지 NAS에서도 쓰고 있는 phpMyAdmin을 GCP에 설치해볼까 한다.

무료이기도 하고 사용도 간단하고 꽤 많은 이들에게 검증된 애플리케이션이라 개인용으로 쓰기엔 매우 적합하다.



#cd /tmp
#sudo wget https://files.phpmyadmin.net/phpMyAdmin/5.0.4/phpMyAdmin-5.0.4-all-languages.zip

/tmp 폴더에 간단하게 최신 phpMyAdmin을 다운로드 해두었다. 구버전이 필요하거나 이 글을 쓰는 시점보다 미래에는 더 최신 버전이 나올테니 그때는 s.xeriars.com/QhfE 에서 다운로드 받을 수도 있다.



#sudo apt-get install zip
#unzip phpMyAdmin-5.0.4-all-languages.zip

압축을 풀려니 zip을 안받아놨네… 일단 zip부터 설치한다.



#sudo mv phpMyAdmin-5.0.4-all-languages /var/www/phpmyadmin
#sudo rm phpMyAdmin-5.0.4-all-languages.zip

압축을 풀고 /var/www/phpmyadmin 디렉터리로 파일들을 이동해주었다.

다운로드 받았던 .zip 파일은 용량도 아낄겸 삭제.

#sudo ln -s /var/www/phpmyadmin /var/www/html/xeriars

아파치 웹서버의 DocumentRoot 기본값은 /var/www/html이므로 전 단계인 /var/www에 저장을 해두면 외부에서 접근할 수가 없게 된다. 다만 구동을 하려면 무언가 있어야하니 심볼릭 링크를 생성해준다.

윈도우로 치면 단축아이콘을 만들어주는 것이므로, 외부에서 접근을 시도했을 때 원본파일에 뭘(!?) 건드리려고 해도 보안상 안전하게 된다.

이제 외부에서 접속할 수 있는 주소가 생겼다. https://자신의도메인또는IP주소/xeriars 로 접속하면 되며, 심볼릭링크는 자유롭게 설정하면 된다. 기본값을 쓰면 웹봇이나 누군가 찝적거리므로 phpmyadmin은 피하는게 좋다.



심볼릭 링크를 xeriars로 설정하였으므로 도메인 뒤에 /xeriars를 붙여서 접속.

사용자명과 암호는 mysql의 root계정을 사용하므로 사용자명에 root / 암호는 root 계정 암호를 입력하면 된다.



이렇게 루트 계정으로 접속이 안된다면, 계정을 하나 생성해서 그 계정으로 접속을 해야한다.



#sudo mysql -u root -p
#create user '아이디'@'%' identified by '비밀번호';
#grant all privileges on *.* to '아이디'@'%';
#quit;

계정을 적절히 생성해준 후 해당 계정으로 접속을 시도한다.



접속은 잘 되었으나 스크롤을 좀 내려보면 에러메시지가 떠있다.

필연적인 것이니까 걱정할 필요는 없다.



일단 빨간색 네모박스친 “여기”를 클릭.



“Create”를 클릭.



이런식으로 전부 OK가 뜨면 성공. 이제 다시 홈으로 돌아간다.



그래도 메시지가 떠있다. 다시 터미널로 돌아간다.



#sudo cp config.sample.inc.php config.inc.php
#sudo nano config.inc.php

환경설정파일이 없기 때문에 에러가 난 것이며, sample 파일을 복사해주면 된다.

다음은 config.inc.php 파일을 파일 에디터로 열어준다. 여기서는 nano를 사용하였다.



빨간색 네모 친 부분을 보면 blowfish_secret을 설정하는 부분이 있다. 이 부분에 해시코드를 넣어주면 된다.

s.xeriars.com/9h7-에 접속해서 간단하게 생성할 수 있다.



Encrypt 란에 아무 글자나 넣고 Hash! 를 클릭하면 위와 같이 해시코드가 생성된다. 이걸 복사해서 붙이면 된다.



이런식으로 ‘이 안에’ 넣어주고 저장해주면 끝. 이제 다시 웹브라우저로 돌아가서 홈으로 가려고 하면 다시 로그인을 하라고 나오므로 로그인을 해준다.



에러가 말끔히 해결되었다.

하지만 이것 말고도 에러가 뜨는 경우가 한가지 더 있다.



이런식으로 임시 디렉터리에 엑세스를 할 수 없는경우에 에러가 발생한다. 이 에러도 해결은 가능하다.

일단 터미널로 돌아가서 다음과 같이 진행한다.



sudo mkdir tmp
sudo chown www-data:www-data tmp -R
sudo chmod 774 tmp

tmp 디렉터리를 생성해주고 소유자는 www-data로, 권한은 774로 주면 끝.

이 글을 쭉 따라왔다면 왠만하면 잘 설치되겠지만 안되면 뭐.. 구글에서 찾아야 하겠지.

대부분의 외국친구들도 비슷한 문제를 겪기 때문에 찾기가 어렵진 않다.

이상 phpMyAdmin 설치법에 대해서 써보았다.

미디어 위키 파일 업로드 오류



비공개로 업로드할 수 없습니다 (UploadStashFileException): “”mwstore:local-backend/local-temp/a/ab” 디렉터리를 만들 수 없습니다.”.

관리하고 있는 개인 위키에 그간 파일업로드를 안했었기 때문에 모르고 있었는데, 오늘 좀 쓸일이 있어서 업로드를 했더니만 위 스샷처럼 오류가 발생했다.

뭔가 설정이 잘못되었겠거니 하고 찾아보니 역시 미디어위키 공식 페이지에 답이 있다. (s.xeriars.com/1Ol3 참조)

몇가지 해결방법이 있는데, 다음과 같다.

1. php.ini에 파일업로드 옵션이 켜져있는지 확인.

우분투 기준 /etc/php/php버전명/fpm 경로에 위치하고 있으며 nano 같은 편집기로 열어 확인이 가능하다.



file_uploads = On

디폴트 설정은 On 일테니 크게 문제는 없을 것 같다만 일단 확인해볼 필요는 있으니까.

php.ini 열어 본 김에, 업로드 사이즈도 확인해본다. 20MB 정도면 충분할 듯 한데, 너무 작다면 조절해준다.

2. 미디어위키 설치 디렉터리 내 images 폴더의 파일소유자를 확인한다.



<만일 스샷처럼 www-data 로 설정되어 있지 않다면 다음과 같이 설정.

sudo chown -R www-data:www-data images/

또한 images 폴더의 퍼미션도 755로 설정해준다.

sudo chmod 755 images

3. LocalSettings.php 파일을 확인한다.



$wgEnableUploads = true; 가 아니라 false; 라면 업로드가 되지 않으므로 확인.

파일을 연 김에 업로드 확장자 제한도 같이 설정해준다.

$wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'doc',
    'xls', 'mpp', 'pdf', 'ppt', 'tiff', 'bmp', 'docx', 'xlsx',
    'pptx', 'ps', 'odt', 'ods', 'odp', 'odg'
);

또는

$wgFileExtensions = array_merge( $wgFileExtensions,
    array( 'doc', 'xls', 'mpp', 'pdf', 'ppt', 'xlsx', 'jpg', 
        'tiff', 'odt', 'odg', 'ods', 'odp'
    )
);

또는

$wgFileExtensions[] = 'docx';
$wgFileExtensions[] = 'xls';
$wgFileExtensions[] = 'pdf';
$wgFileExtensions[] = 'mpp';
$wgFileExtensions[] = 'odt';
$wgFileExtensions[] = 'ods';

위와 같이 설정해줄 수 있으며, 미디어위키에도 나오는 예시방법이다.

여기까지 설정했더니 일단 문제점은 해결되었다.

이정도까지 설정하면 왠만한 경우는 모두 해결 될 듯 한데, 그 이외에도 안된다면 그땐 상기 언급한 것과 같이 미디어위키 공식페이지 글을 정독해야 할 듯 싶다.

스마트폰 카메라 셔터음 비활성화 하기

내용추가 2022.08.24.

안드로이드 12 이상은 https://xeriars.com/302 를 참고. (adb 적용불가)

최근에 갤럭시 노트20 울트라를 사용하다가, 안드로이드 11 베타 테스트에 참가했다.

왠걸.. 무음모드 앱을 사용하고 있던게 죄다 먹통이다. 별로 남에게 사진 찍고 있는 것을 알리고 싶지 않은데 찰칵 하고 강제로 소리나는 것은 극혐이다. 굳이 알려야 할 이유도 없고, 사무실에서 일하다가 찰칵 소리가 나면 괜히 쳐다보게 되고.. 어떤 사람들은 동물이나 애기사진 찍을때도 많이 이용되고 있는데 이걸 굳이 왜 법적으로 규제를 해놓았는지…

피쳐폰 시절부터 우리나라에는 법적으로 셔터음을 강제하도록 규제사항이 있고, 해외에 나가면 이 기능은 자동으로 비활성화 되지만 어찌되었든 짜증나는 것도 사실.

그래서 이래저래 찾아보다가 비활성화 할 수 있는 방법을 찾았다.

준비물 : adb (인터넷에 많다.)



1. 설정 → 휴대전화 정보에 들어간 후 스크린샷의 빌드번호 부분을 연타한다.

“개발자 모드가 활성화 되었습니다” 라고 나올때까지 연타하면 되며 보통 5~6회 하면 가능하다.



2. USB 디버깅 옵션을 켠 후 스마트폰과 PC를 USB 케이블로 연결한다.

3. adb를 설치후 시작 → 실행 → cmd를 켠 후 adb를 설치해둔 경로로 이동한다.



다음의 명령어를 입력한다.

adb devices

연결된 장치를 확인하는 명령어이며, 이때 휴대전화 화면에는 “RSA 어쩌고 저쩌고 인증을 #(O*&$#” 나오면 확인을 누른다.

무작위 알파벳 과 device 라고 나오면 연결이 성공된 것이다.

이제 다음의 명령어를 입력하면 완료.

adb shell settings put system csc_pref_camera_forced_shuttersound_key 0

마지막 값은 다음과 같다

0 : 셔터음 비활성화

1 : 셔터음 활성화

명령어가 올바르게 입력되면 스크린샷처럼 아무런 응답이 없고, 오타 등등 오류가 있다면 에러메시지가 출력된다.

이제 무음모드 또는 진동모드에서는 셔터음이 울리지 않으며, 벨소리를 켜두면 셔터음이 출력된다.

갤럭시 노트20 울트라 안드로이드 11 베타버전에서 작동 확인하였으며, 대부분의 스마트폰에서 작동 할 것으로 기대된다. 다만 베타버전의 경우 추가 업데이트 되면 셔터음은 다시 활성화되므로 업데이트 후 비활성화 작업을 또 해주어야 한다.

** 2020.12.23 내용추가. 갤럭시 노트 20 울트라 안드로이드 11 정식버전 릴리즈 적용 후에도 셔터음 비활성화 적용이 가능한 것을 확인. **

GCP 이용 워드프레스 설치

현재 블로그는 티스토리를 이용하고는 있으나, 개인 홈페이지 및 개인 블로그는 설치형 워드프레스를 사용중이다. 초심자가 접근하기엔 역시 티스토리나 네이버 블로그가 편하지만, 편의성이나 자유도는 압도적으로 워드프레스가 좋다. 플러그인 지원도 그렇고 이래저래 좋은 점이 많지만 역시, 단점은 설치형이다 보니 범접하기가 힘든 것도 사실이다.

설치 시 꽤나 귀찮은 점이 많아서 오늘은 추후 재설치 시 까먹을 것을 대비해서 워드프레스 설치방법을 써보려고 한다.

무료로 제공되는 가상 서버 중에는 여러가지가 있지만, 제목에 떡하니 GCP(Google Cloud Platform)라고 적어둔건 딱히 GCP가 좋아서 그런 것 보단 현재 오라클 클라우드는 이미 다른 용도로 잘 사용중이라 남는 자리가 없어서, 남는 서버를 고르다보니 GCP가 선택되었다. (개인 홈페이지, 개인용 블로그는 오라클 클라우드를 사용중이다.)

준비물 : 구글계정, GCP 가입. 이건 인터넷에 많이 있으니 이 과정은 생략한다.

1. 먼저 GCP로 접속한다. (s.xeriars.com/U71-)



2. 메뉴버튼 → Compute Engine → VM 인스턴스 클릭



3. 만들기 클릭



3. 무료 사용을 위해서는 f1-micro 머신을 골라야 하는데, 다음의 리전만 무료로 이용가능하므로 주의.

us-west1(오리건), us-central1(아이오와) us-east1(사우스캐롤라이나)

사용조건 : 1GB 트래픽, 서버용량 월 30GB, 서버 사용시간 월 744시간 (31일 * 24시간 = 744시간/월)

인스턴스를 2개 만들게되더라도 서버시간은 합산 계산되므로 두개를 같이 돌리게 되면 744시간 / 2 = 372시간으로 줄어드므로 주의한다.



4. 원하는 부팅디스크를 고른다. 개인 취향에 맞춰 CentOS를 써도 되고 Debian을 써도 되고, 그건 자유.

인스턴스는 1개만 사용할 것이므로 처음부터 30GB로 잡아준다.



5. 나중에 포트를 열려면 메뉴버튼 → VPC 네트워크 → VM 인스턴스에 가서 열면 되지만, 귀찮으니 미리 여기서 http와 https의 트래픽을 허용으로 체크 후 만들기 클릭



6. SSH로 서버에 접근 할 수 있도록 SSH키를 생성해서 붙여준다. 메뉴버튼 → Compute Engine → 메타데이터 → SSH키



7. 인스턴스 생성이 완료되면 서버 IP(외부 IP)를 이용해서 접속한다. 고정 IP는 참고로 유료기능이다.

서버 내에서 shutdown -r 명령으로는 상관이 없지만 GCP 메뉴에서 서버를 중지했다가 재시작하는 경우에는 IP가 변경되므로 나중에 도메인과 연결하기 위해 DNS를 설정하게 되면 주의해야 한다.



8. PuTTY 등으로 SSH 접속을 진행하면 되며, 무사히 완료되면 다음의 명령을 실행한다.

$sudo apt update && sudo apt upgrade -y

9. APM (Apache, PHP, MariaDB) 패키지를 설치해준다.

$sudo apt install apache2 php7.4 php7.4-fpm mariadb-server
$sudo apt install php7.4-json libapache2-mod-php7.4 php7.4-mysql
$sudo apt install php7.4-gd php7.4-mbstring php7.4-bz2 php7.4-zip
$sudo apt install php7.4-opcache php7.4-readline php7.4-curl php7.4-xml

10. mysql (MariaDB)를 설정한다.

먼저 root계정 패스워드를 설정한다.

$sudo mysqladmin -uroot -proot password 1q2w3e4r!@

그 다음 워드프레스용 데이터베이스와 계정을 생성해준다.



$sudo mysql -u root -p
create database wordpress;
use mysql;
CREATE USER 'wordpress'@'%' IDENTIFIED BY '1q2w3e4r!@';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'%'; 
FLUSH PRIVILEGES;
quit;

11. 워드프레스 설치파일을 다운로드 한 뒤, 압축을 풀어 apache2 웹서버 루트로 이동시켜준다.

$cd /tmp
$wget https://wordpress.org/latest.tar.gz
$tar zxvf latest.tar.gz
$sudo mv wordpress /var/www/html

12. 웹서버 루트로 이동 후 wp-config.php를 수정해주어야 한다. nano가 없으면 설치한다.

$cd /var/www/html/wordpress
$sudo cp wp-config-sample.php wp-config.php
$sudo apt install nano
$sudo nano wp-config.php

13. wp-config.php를 다음과 같이 수정한다.


// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );

/** MySQL database username */
define( 'DB_USER', 'wordpress' );

/** MySQL database password */
define( 'DB_PASSWORD', '1q2w3e4r!@' );

/** MySQL hostname */
define( 'DB_HOST', 'localhost' );

/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );

define( 'AUTH_KEY',         'put your unique phrase here' );
define( 'SECURE_AUTH_KEY',  'put your unique phrase here' );
define( 'LOGGED_IN_KEY',    'put your unique phrase here' );
define( 'NONCE_KEY',        'put your unique phrase here' );
define( 'AUTH_SALT',        'put your unique phrase here' );
define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
define( 'LOGGED_IN_SALT',   'put your unique phrase here' );
define( 'NONCE_SALT',       'put your unique phrase here' );

다른 부분은 위에서 설정한 DB 설정대로 해주면 되고 AUTH_KEY 부분의 ‘put your unique phrase here’ 부분은 s.xeriars.com/73yL를 방문해서 나온 정보를 입력하면 된다.

14. 파일 및 디렉터리 소요권을 부여한다.

$sudo chown www-data.www-data /var/www/html/wordpress/* -R

15. php.ini를 값을 수정한다.

$sudo nano /etc/php/7.4/fpm/php.ini

최하단에 다음의 값을 넣어준다.

file_uploads = On
max_execution_time = 300
memory_limit = 256M
post_max_size = 32M
max_input_time = 60
max_input_vars = 4440

저장 후 php를 재시작한다.

$sudo service php7.4-fpm restart

15. apache2를 재시작한다.

$sudo service apache2 restart

16. https로 접속을 원하는 경우 반드시 도메인이 필요하며, 도메인의 DNS를 설정한 후 certbot으로 인증서를 발급받으면 된다. 그 관련 절차는 xeriars.com/260 를 참조한다.

17. 웹브라우저를 열고 http://본인의서버IP주소/wordpress 로 접속한다.



만약 설치화면이 아니라 php소스가 출력된다면 다음과 같이 수정해 줄 필요가 있다.

$sudo nano /etc/apache2/apache2.conf


스크린샷과 같이 맨 밑줄에 다음의 설정을 삽입 후 저장.

AddType application/x-httpd-php .php .htm .html .inc
AddType application/x-httpd-php-source .phps

apache2를 재시작해준다.

$sudo service apache2 restart


위와 같이 나온다면 99% 완성이다.

블로그 이름, 아이디, 비밀번호를 설정해준 뒤 install WordPress를 클릭해주면 설치가 완료된다.

검색엔진에 블로그가 노출되기 원한다면 Search engine visibility에 체크해준다. 나는 개인 홈페이지를 만들때는 체크를 안하고 만들었다.



18. 아이디와 패스워드까지 생성되었으면 완료된 것이다. 이제 다시 http://본인의서버IP주소/wordpress 로 접속하면 다음과 같은 화면을 볼 수 있다.



19. 개설된 블로그가 이렇게 뜬다면 완성.

이제 관리자 페이지에 들어가 이런저런 설정을 해주면 된다.

잘 꾸미고 운영하는 일만 남았으며, 다음번 글에는 이런저런 꼼수를 조금 더 담아볼까 생각중.

블로그 도메인 변경 및 이동작업

기존에 블로그 도메인에 사용하던 llf.io는 다른 용도로 사용할 일이 생겨서 기존에 미리 보유하고 있던 xeriars.com으로 도메인을 변경하였다.

단순히 티스토리에서 도메인 변경만 하는 것이라면 상관은 없지만, SEO (Search Engine Optimization)까지 신경쓴다면 검색엔진쪽도 건드려줘야한다.

기왕 변경한 것이니 오늘은 블로그 도메인 변경 및 이동작업에 대해서 글을 써본다.

주의사항 : 블로그 주소 변경 시 당분간 방문자 감소는 피할 수 없는 리스크임을 감수하고 진행해야한다.

1. 변경 할 도메인의 DNS 설정



CNAME내용은 blog.tistory.com 또는 host.tistory.io로 설정하면 된다.

Naked domain으로 설정하는 경우 cloudflare는 CNAME Flattening 기술이 적용되어있어 www없이 그냥 입력해도 되지만, 원칙적으로는 비표준이므로 DNS 설정이 상기와 같이 안될 수 있어 이럴때는 아래와 같이 입력하여 해결한다.

Record : A / Name : @

Content : 27.0.236.139 (IP가 변경되는 경우에는 티스토리에서 별도 공지예정이라고 한다. 출처)

A레코드가 싫으면 xeriars.comwww.xeriars.com 으로 301 리디렉션 처리를 해도 된다.

다만 Naked domain이 아닌 www가 붙는게 단점이라면 단점. 크게 상관은 없어보인다.

2. 티스토리 블로그 도메인 변경작업

티스토리 블로그 관리페이지 → 관리 → 블로그 → 개인 도메인



사용중인 도메인을 무시하고 변경할 도메인을 입력하고 “변경사항 저장”을 클릭하면 되며, 티스토리는 https접속만 가능하게 변경되었으므로, 인증서 발급도 진행된다. (티스토리 도메인 연결/적용 방법 xeriars.com/240 참조)

3. 검색엔진 수정 전 301 리디렉션 처리

티스토리 자체 기능만으로는 불가능한게 있어 DNS또는 별도 서버에서 처리해줄 필요가 있다.

앞전에 남긴 글 (xeriars.com/238)을 참조하거나 하기와 같이 별도 서버에서 301 리디렉션 처리를 할 수 있다.

서버가 없다면 Google Cloud Platform 또는 Oracle Cloud에서 계정을 하나 만들어서 VM Instance로 생성하여 서버를 가지고 작업하면 된다. (계정 생성의 경우는 인터넷에 검색해보면 널렸으므로 여기서는 다루지 않는다.)



서버 IP를 A레코드로 DNS에 물려주면 DocumetRoot에 지정된 경로로 접속하게 되는데, 경로에 있는 index.html 또는 index.php를 읽게 되므로, 위 스샷처럼 간단하게 리디렉션 처리를 해주면 된다.

<?php
	header("Location: https://xeriars.com", true, 301);
	exit();
?>

다만 경로 전달을 위해서는 아래와 같이 .htaccess까지 건드려줄 필요가 있다.



RewriteEngine on
RewriteRule ^(.*)$ https://xeriars.com/$1 [R=301,L]

.htaccess까지 건드려주면 https://llf.io/111로 접속했을 때 https://xeriars.com/111 로 리다이렉트 해주므로 검색엔진에서 유입되는 케이스까지 생각한다면 설정해주는게 좋다.

4. 선호 URL (Canonical URL) 설정

<link rel="canonical" href="https://xeriars.com">

현재 나눠져 있는 도메인은 femto.me, llf.io, xeriars.tistory.com, xeriars.com 총 4가지이므로 대표적 도메인을 검색엔진에 알려 줄 필요가 있다.

이것을 설정해주지 않으면 검색엔진이 표준 URL로 선언되지 않은 URL로 판단되어 색인생성이 제대로 되지 않으므로 여러개의 도메인으로 나누어져 있는 검색결과를 병합하기 위해서는 반드시 필요한 조치 중 하나이다.

5. 검색엔진 사이트 이동조치

사이트 맵 및 robots.txt 반영에 관련해서는 티스토리에서 다음과 같이 지원하고 있으므로 필요 시 반영/제출하면 된다.

사이트 맵 : https://자신의도메인/sitemap.xml (예 : https://xeriars.com/sitemap.xml)

robots.txt : https://자신의도메인/robots.txt (예 : https://xeriars.com/robots.txt)

검색엔진에 노출되도록 Google Search Console이나 bing 웹마스터 도구 등을 수정할 수 있다.

1) Google Search Console (s.xeriars.com/fers) 에서는 다음과 같이 이동시킬 수 있다.

구글 서치콘솔 접속 → 설정 → 주소변경



이미 앞서 301 리디렉션 처리를 해둔 상태이므로 “유효성 검사 및 업데이트”를 누르면 유효성 검증이 진행 된 후 이동이 가능하다. 단, *.tistory.com에서 검색결과의 이동은 301 리디렉션 처리를 할 수 없으므로 불가능.


예전에 쓰던 femto.me도 하는김에 같이 이동시켜주었다. 이렇게 설정해주고 몇 달 기다리면 구글검색결과가 모두 xeriars.com으로 이동되므로 fork된 검색결과가 모두 병합된다. 구글에서 권장하는 301 리디렉션 유지기간은 기본 6개월이라고 명시되어 있다. 기존 도메인의 검색결과가 악용되지 않게 도메인을 최소 1년 간 유지하는 것도 권장하고 있다.

(출처 : s.xeriars.com/ZGHI)

2) bing.com (s.xeriars.com/scJs)은 새버전에서는 사이트 이전 메뉴를 찾지 못해 구버전에서 진행하였다. 사이트 주소를 둘 다 (llf.io, xeriars.com) 추가 후 다음과 같이 진행한다.

이동할 도메인(llf.io)을 선택 후 진단 및 도구 → 사이트 이동 으로 접속한다.


구글의 경우는 301 리디렉션 처리 후 유효성검증까지 마쳐야 이동할 수 있는 것에 반해, bing은 특별한 검증없이 이동이 가능하므로 크게 신경 쓸 필요는 없다.

3) 네이버 서치어드바이저(웹사이트 도구)는 s.xeriars.com/F9LV를 참조하면 되며 기본적인 절차는 다음과 같다.

먼저 기존 사이트에 robots.txt로 다음과 같이 수집이 거부되도록 한다.

User-agent: *
Disallow: /

301 리디렉션은 이미 설정되어있을테니 이 부분은 앞 내용을 건너뛰지 않았다면 크게 신경 쓸 필요는 없다.

다음으로는 이동할 사이트 (xeriars.com)을 등록한 후 사이트맵을 제출하여 주고 기다리면 해결된다.

4) 다음 검색등록(s.xeriars.com/Uzle)은 티스토리 도메인을 변경하면, 바로 변경된 주소가 다음 검색결과에 반영되나 때로는 검색엔진 내부 로직에 의해 삭제될 수 있는데, 이때는 검색등록을 별도로 신청해주어야 하며, 그래도 노출이 안된다면 검색엔진 내부에서 스팸 등으로 제외처리 된 것이므로 고객센터에 문의해서 풀어주어야 한다.



검색엔진의 검색결과까지 반영하는 몇 가지를 다루었으니, 그 외의 검색엔진에 대한 것은 이 글을 읽는다면 큰 어려움 없이 응용 할 수 있으리라 판단되며, 나중에 변동사항에 대해서는 이 글에 추가적으로 내용을 기입할 생각이다.

개인 도메인 이용 단축 URL 만들기 (YOURLS 이용)

전에 ushort.io에서 개인 도메인을 통한 단축 URL만들기에 대한 글을 썼었는데 (xeriars.com/246)

최근에 오라클 클라우드와 GCP (Google Cloud Platform) VM 인스턴스를 통한 평생무료서버가 몇 개 생겨서

뭘 설치할까 고민하다가 설치형 단축 URL 애플리케이션(오픈소스)으로 유명한 YOURLS를 설치하기로 했다.

일단 기본적으로 GCP에 VM 인스턴스 생성하는 방법은 인터넷에 널려있으니 이건 넘어가도록하고,

APM 설치 후 YOURLS(Your Own URL Shortener)를 설치해서 운영하는 방법이다.

여러가지 리눅스 배포판이 있지만 무난한 우분투 리눅스 20.04.01 LTS 기준으로 설명한다.



일단 GCP 생성 후 SSH로 접속후에는 APM부터 설치해주어야 한다. 다음의 명령을 입력한다.

$apt update && apt -y upgrade
$apt -y install software-properties-common
$add-apt-repository ppa:ondrej/php
$apt update
$apt -y install php7.4 php7.4-mysql
$apt -y install apache2
$apt -y install software-properties-common
$apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
$add-apt-repository 'deb [arch=amd64,arm64,ppc64el] https://ftp.harukasan.org/mariadb/repo/10.5/ubuntu focal main'
$apt update
$apt -y install mariadb-server
$apt -y install nano git

MariaDB 대신 mysql을 사용해도 되는데, 개량판인 MariaDB가 더 나은 것 같아 이것으로 설치했다.

다음으로는 git과 nano를 설치해준다. nano 대신 다른 편집기를 사용해도 된다만, 개인적으론 이게 더 편했다.

여기까지 설치했으면 일단 기본 준비는 끝.

이제 YOURLS를 다운로드하고 설치할 차례다.

$cd /tmp
$wget https://github.com/YOURLS/YOURLS/archive/1.7.9.tar.gz
$tar zxvf 1.7.9.tar.gz

/tmp에 YOURLS를 다운로드 받는다. git에 올라온 최신버전은 1.7.10이나 어쩐지 공지에는 이 내용이 없고 공식적인 최신버전은 여전히 1.7.9이므로 일단 저것으로 진행한다.



압축까지 풀었으면 apache2 웹서버 경로로 파일을 이동시켜 줄 차례.

$mv YOURLS-1.7.9 /var/www/html/urls
$cd /var/www/html/urls/user

YOURLS-1.7.9 폴더를 urls로 이름을 바꿔 이동하나, 이건 자유롭게 해줘도 무방하다.

이제 데이터베이스를 생성할 차례.

$mysql -u root -p

데이터 베이스에 루트계정으로 접속한다. 아직 루트계정에 암호가 설정되지 않았을테니 암호를 물어보면 엔터를 친다.

$create database yourls;
$use mysql;
$CREATE USER '아이디'@'localhost' IDENTIFIED BY '패스워드';
$GRANT ALL PRIVILEGES ON 데이터베이스.* TO '아이디'@'localhost';
$FLUSH PRIVILEGES;
$quit;

만일 MySQL 루트 계정 패스워드를 변경하고 싶다면 다음과 같이 입력한다.

$mysqladmin -u아이디 -p기존패스워드 password 신규패스워드
예시 $mysqladmin -uroot -proot password 1q2w3e4r!@

설정파일을 만들기 전에, 한글패치를 만드신 분이 있으니 한글패치를 적용한다.

$cd /var/www/html/urls/user/languages
$git clone https://github.com/at4am/YOURLS-ko_KR.git
$mv YOURLS-ko_KR/ko_KR.po ./
$mv YOURLS-ko_KR/ko_KR.mo ./

이제 YOURLS 설정파일을 만들 차례다. 다음과 같이 입력한다.

$cd /var/www/html/urls/user
$cp config-sample.php config.php
$nano config.php

자신있으면 mv로 해도 무방하긴 한데, 그래도 혹시 몰라 cp로 했다.



nano로 config.php를 열어주면 여러가지 설정파일이 나오는데, 이 글에서는 필요한 것만 세팅한다.

상세 설명은 공식홈페이지의 내용을 참조 (https://s.xeriars.com/KJIg)

/** MySQL database 아이디 */ 
define( 'YOURLS_DB_USER', 'yourls' ); 

/** MySQL database 패스워드 */ 
define( 'YOURLS_DB_PASS', '1q2w3e4r!@' );

/** YOURLS 를 적용 할 도메인명. https를 적용하려면 https라고 써준다. */
define( 'YOURLS_SITE', 'https://s.xeriars.com' );

/** 서버 타임존 설정. 우리나라는 GMT+9 이므로 아래와 같이 입력 */
define( 'YOURLS_HOURS_OFFSET', 9 );

/** YOURLS 언어설정 */
define( 'YOURLS_LANG', 'ko_KR' );

/** 랜덤 쿠키값 입력 */
/** https://api.yourls.org/services/cookiekey/1.0/ 에 접속한 후 나온 값을 입력해주면 된다. */
define( 'YOURLS_COOKIEKEY', 'Zb0ZhUp%smJj$f#~qAEv}qnM6nZbc72w]$ZDZwF{' );

/** 로그인 시 사용할 아이디 / 패스워드 입력.  */
$yourls_user_passwords = array(
        'yourls' => '1q2w3e4r!@',
        // 아이디, 패스워드를 추가하려면 아래와 같이 입력한다.
        // 'username2' => 'password2',
        // You can have one or more 'login'=>'password' lines
        );


/** 단축URL 무작위 생성방식: 36 또는 62 입력 */
define( 'YOURLS_URL_CONVERT', 62 );
/*
 * 36: 전부 소문자로 생성 (예: 13jkm)
 * 62: 숫자,대소문자로 생성 (ie: 13jKm or 13JKm)

전부 입력해준 후에는 ctrl + o 를 눌러 저장해주고 ctrl + x로 빠져나온다.

$chmod 666 config.php

위의 설정파일에서 지정한 로그인 아이디, 패스워드 중 패스워드는 나중에 암호화가 되므로 chmod를 통해 읽기, 쓰기 권한을 지정해주어야 한다.

$cd /var/www/html/urls
$nano .htaccess

이제 .htaccess를 생성해줄 차례다. 아래 내용을 넣어주고 저장해주면 끝.

# BEGIN YOURLS
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /yourls-loader.php [L]
</IfModule>
# END YOURLS

(선택사항) 아까 config.php에서 https로 설정해주었으므로 SSL 인증서 발급이 필요하다.

certbot을 이용하면 간단하게 해결 가능한 부분이므로 이 부분을 같이 진행한다.



DNS에서 일단 서버 IP를 A record로 넣어주고 proxy 연결은 풀어준다. 인증서 발급 전에 proxy로 연결되면 클라우드 플레어 CDN으로 연결되어 정상적인 IP를 찾지 못하므로 발급 후 proxy로 해주면 된다.

이제 certbot을 설치한다.

$sudo snap install --classic certbot
$certbot --apache


중간에 물어보는건 메일주소, 약관동의, 메일링리스트 가입동의, 도메인 입력까지 4가지이므로

각각 입맛에 맞춰 입력해주면 된다.



이런식으로 에러가 난 상태면 DNS 설정이 제대로 안된 상태이거나, DNS 설정 후 아직 반영이 안된 상태이므로

조금 기다렸다가 다시 인증서 발급을 시도하면 된다.

인증서 발급이 완료되면 ssl, rewrite는 자동으로 활성화 되므로 a2enmod로 활성화 할 필요는 없다.

$cd /etc/apache2/sites-available
$ls -al
$nano 000-default-le-ssl.conf


인증서를 생성하면서 도메인에 맞는 설정파일이 생성, 등록되었으므로 이것을 기준으로 수정하면 된다.

기본으로 생성되는건 000-default-le-ssl.conf이므로 이 파일을 수정한다.

혹시 맘에 들지 않으면 a2dissite로 등록 해제 후 *.conf 이름을 변경해준 뒤 다시 a2ensite로 등록.



*.conf 를 nano로 열어 경로를 변경해준다. 빨간 박스처럼 수정해주면 된다.

저장 후 다시 빠져나온다.

이제 끝이 보이긴 하는데 아직 하나 더 수정해줄 파일이 남아있다.

$nano /etc/apache2/apache2.conf

우분투 기준이므로 다른 버전은 httpd.conf를 수정해주면 된다.



172번째줄 쯤 AllowOverride None을 ALL로 변경해준다.

이것이 수정되지 않으면 URL이 생성되도 접속이 안되는 문제가 생긴다.

이제 아파치를 재시작해준다.

$service apache2 restart
또는
$/etc/init.d/apache2 restart

이제 https://설정한도메인/admin/install.php 로 접속한다.



“YOURLS 설치하기” 클릭



.htaccess 파일이 에러가 나는 경우가 있는데, 미리 생성해서 그런것이므로 별 문제는 없다.

설치가 완료되었으므로 YOURLS 관리페이지(https://설정한도메인/admin)로 접속해보자.



아까 config.php에서 설정한 아이디와 비밀번호를 입력하고 로그인한다.



이 화면까지 보인다면 설치가 완료 된 것이다. 이제 테스트를 해보자.

구글에서 이 블로그의 도메인인 xeriars를 검색한 url은 다음과 같다.

www.google.com/search?newwindow=1&q=xeriars.com&nfpr=1&sa=X&ved=2ahUKEwja9sHBmofsAhWJd94KHbCkATUQvgUoAXoECAsQKg&biw=1536&bih=754

이 url을 입력후 “URL” 단축하기를 클릭.



생성된 URL은 s.xeriars.com/C8ZE 이며 Random ShortURLs Settings 플러그인을 사용하여

4자리로 생성되도록 했기 때문에 이런 형식으로 생성되었다.

(*서버 보안 강화 차원에서 해외 IP로는 접속이 안되게 막아둔 상태이다.)

생성 전 “사용자 정의 단축 URL”에 원하는 단어를 넣으면 https://도메인/xxxx 형식으로도 생성이 가능하다.

여기까지가 끝이면 좋겠지만, 현 상태에서는 https://사용자도메인 으로 접속하면 아래와 같이 나온다.



이렇게 된 이유는 index.html이나 index.php가 없기 때문인데,

아까 아파치 설정파일에서 루트경로를 수정해주어서 그렇다.

기본적으로는 /var/www/html이 루트경로이나 아까 설정해준 것은 /var/www/html/urls 였으니

저 파일 목록을 보면 index.html이나 index.php가 없는 것을 알 수 있다.

로그인 경로는 /var/www/html/urls/admin/index.php 이므로 이것을 심볼릭 링크로 걸어주면 된다.

심볼릭 링크는 윈도우로 치면 단축아이콘 정도로 생각하면 된다.

$ln -s /var/www/html/urls/admin/index.php /var/www/html/urls/index.php
$mv sample-robots.txt robots.txt
$service apache2 restart

하는김에 robots.txt 도 설정해줘서 웹 크롤러가 /admin 까지 크롤링 하는걸 막아준다.

아파치를 재시작해주고 나면 https://사용자도메인 으로 접속했을때

이제 저 보기 싫은 파일 탐색창 대신 로그인 화면이 바로 뜨게 된다.

이렇게 yourls 설치를 통한 개인도메인 사용 단축 URL글은 끝이 났다.

아무래도 설치형이다보니 전에 소개했던 ushort.io 보단 압도적으로 복잡하지만, 일단 무료인 점과

한번 고생해서 설치를 해두면, 구글에서 서비스를 종료하지 않는 한 지속적 이용이 가능한게 장점이다.

또한 광고에서 자유로운 점과 도메인도 맘대로 바꿔줄 수 있는 것도 장점으로 작용한다.

리눅스를 처음 접하거나 복잡해서 어려울 수도 있지만 차근차근 따라하다보면 그렇게 어려운건 아니니

필요한 사람들에게 도움이 되는 글이었으면 좋겠다.

HTTP/2 적용

기존 운영하고 있던 서버는 모두 HTTP/1.1을 사용하고 있었으나 이미 출시된지 오래된 프로토콜이고,

최근 대세가 HTTP/2인 관계로 5개 서버 모두 적용하였다.

필수조건인 https의 사용은 이미 certbot을 이용해서 let’s encrpyt에서 SSL 인증서를 받아오고 있으니 패스.

#sudo apt-get install php7.4-fpm
#sudo a2enmod proxy_fcgi
#sudo a2enconf php7.4-fpm
#sudo a2dismod php7.4
#sudo a2dismod mpm_prefork
#sudo a2enmod mpm_event

YOURLS 설치 시 mod php를 사용중이었으나, fpm으로 변경하였고,

HTTP/2에서는 prefork모듈이 지원되지 않아 dismod 처리 후 mpm으로 전환했다.

일부 명령어는 선행작업이 필요하므로, 가급적 명령어 처리시 순서를 맞추면 별 트러블 없이 처리 된다.

#sudo nano /etc/apache2/apache2.conf
또는
#sudo nano /etc/apache2/sites-available/개별-사이트-설정파일.conf

아파치 기준 위와 같이 설정파일에 접근 후 적절히 아래의 코드 한줄만 삽입해주면 된다.

첫번째 줄은 서버 내에서 여러사이트를 운영할 때, 두번째 줄은 사이트별 개별설정을 의미한다.

Protocols h2 https/1.1

위 코드 한줄 입력시 호환이 안되는 클라이언트에서는 HTTP/1.1 나머지는 HTTP/2를 지원한다.

최근에 이르러서는 거의 대부분의 인터넷 브라우저에서 HTTP/2를 지원하기에 큰 문제는 없다.

#sudo apachectl configtest
#sudo /etc/init.d/apache2 restart

설정을 확인 후 Syntax OK가 나오면 서버를 재시작해주고 적용한다.



사이트 로그를 확인하거나 https://s.xeriars.com/y58A에서 적용 여부를 확인 할 수 있다.

Gameboy micro 배터리 교체하기

오래전에 구매한 게임보이 미크로(마이크로라고 읽는게 맞으나, 발매 명칭이 ミクロ이므로 미크로로 칭함)

의 배터리 수명이 끝이났는지 신통찮다. 얼마 못가 꺼지길래 우리친구 알리익스프레스에서 주문했다.



대충 이런걸 구매했는데, 오늘 우체국에서 배송이 왔다.

8월 5일날 주문했는데, 8월 18일날 도착했으니 대충 2주 정도 걸린 셈.

배대지쪽에선 배터리는 대행하지 않으니 알리에서 주문해서 선편으로 오는게 제일 속편하다.



심플하게 배터리 달랑 하나 도착했다.

배송기사님이 집에 오셨는데, 내가 집에 없으니 우체통에 넣고 가시겠다고 하실 정도로 작다.

드라이버 하나만 있으면 되므로 교체하기 매우 간편하다.

동봉된 드라이버를 써도 무난하지만, 일단 나는 공구가 있으니 그걸 쓰는걸로.



일단 측면 볼트 한개를 풀어준다. 이거야 뭐.. 쉬우니까 더 이상의 설명은 생략.

적당히 풀어주고 커버를 밀어주면 배터리부가 열린다.



커버가 열린 모습. 배터리 팩이라고 써있는 저걸 교체하면 되는 것이다.

리튬이온 460mAh라니… 요즘 스마트폰이 4500mAh 정도 들어가니 엄청 적은 배터리 용량되겠다.



배터리를 슬쩍 밀면 쉽게 단자부분이 나타난다.

VCC (빨간색 전선)과 GND (검은색 전선) 위치를 잘 기억해두자. 새 배터리로 바꿔끼워야 하니..



단자를 뺐다. 어차피 배터리 버릴거니 대충 잡아당기면 빠진다.

물론 단자에 꼽힌상태로 잡아당겼다가, 전선만 쏙 빠져버리면 매우 난감해지겠다만…



기존건 빼버렸고, 이제 새 배터리로 교체해줄 차례다.

저 단자 끼우는게 제일 초고난이도 작업이다. 작아서 의외로 잘 안끼워진다.



어찌어찌 끼웠다. 내 손이 커서 그런건지 되게 안끼워진다.

금속재질로 끼우다가 잘못하면 단자부와 닿아서 쇼트날 수 있으니 주의.



커버를 다시 조립하기 전에 잘 작동하는지 전원을 켜본다. 다행히 잘 작동하는걸 확인했다.

GBA 시리즈 최고의 명작 중 하나인 악마성 드라큘라 ~ 효월의 원무곡을 구동시켰다.



이제 전선과 배터리를 잘 정리하고 커버를 덮어주면 끝.

군대에서 항상 나오던 “조립은 분해의 역순”을 지켜주면 된다. (라고 해봐야 볼트 하나만 조이면 끝…)



배터리 교체 후 게임보이 로고를 찍어보았다.

이정도 교체 난이도면 뭐… 쉬워도 너무 쉽다. 완료되었으니 이제 충전 ㄱㄱ 후 즐길일만 남았다.

배터리 수명이 다 되었는데, 분해할 엄두가 안나는 분들이 있다면 아주 쉬우니 도전하면 된다고 말하고 싶다.

요즘에 와선 너무 작은 화면이지만, 그래도 여전히 레트로 갬성을 자극하는 기기임은 틀림없다.