목차
개요
현재는 오라클 클라우드로 생성한 2개의 VM 인스턴스 중 하나는 테스트 용으로 쓰고 다른 하나는 NodeBB와 MongoDB로 PLANIT을 만들었지만, 처음에는 개인적으로 글을 남길 공간과 더불어 정보를 정리하기 위해 라이믹스와 미디어위키를 함께 설치했다.
처음 오라클 클라우드 계정을 생성할 때는 여기저기서 글을 보며 VM 인스턴스 생성까지는 쉽게 했으나, 우분투와 같은 리눅스 환경이 처음이라 뭐부터 해야 할 지 막막했으나 KoreanVlog님의 좋은 글을 발견하여 큰 도움이 되었다.
[이미지]
위의 사진은 티스토리이지만 따로 웹사이트를 생성하신 것 같아 사이트 주소로 수정했다.
약간은 다르게 진행했지만 KoreanVlog님의 글이 가장 도움이 되었는데, KoreanVlog님을 포함해서 참고한 글들이 전부 나와는 다르게 PHP 7.X를 사용했다.
미디어위키의 경우에도 대부분 LAMP 스택이라고 해서 Linux+Apache+MySQL+PHP를 사용하는데, 나는 라이믹스로 인해 Apache 대신 Nginx를 사용해서 Ubuntu+Nginx+MariaDB+PHP8.0으로 서버를 구성했다.
이로 인해 내가 참고한 모든 글들이 나와는 다른 환경으로 작성된 글이어서 그런지 오류가 많이 났지만 sendmail을 제외한 오류는 나중에 다 해결되었다.
다른 글에 따로 적겠지만 개인적으로는 앞으로 라이믹스를 다시 사용하진 않을 것 같다.
하지만 설치를 하는 과정이 NodeBB를 설치하는 과정에도 큰 도움이 되었기 때문에 글로 남긴다.
진행하기에 앞서 준비물이 몇 가지 필요하다.
그 외에는 SSH에서 바로 다운로드 할 거라 일단 위의 파일들만 먼저 다운로드하면 된다.
Nginx 서버 설치
SSH에서 아래 명령어를 입력하고 공용 IP로 접속하면 Welcome to nginx!라는 화면이 뜬다.
$ sudo apt install nginx
$ sudo iptables -F
공용 IP로 확인을 한 뒤에는 리눅스 폴더의 권한을 설정해준다.
$ sudo chown -R ubuntu /var/www
$ sudo chgrp -R ubuntu /var/www
PHP 8.0 설치
아래 명령어를 순서대로 입력해서 설치한다.
마지막에 추가로 설치하는 패키지는 미디어위키에서 사용하는 패키지이다.
$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt-get update
$ sudo apt-get install php8.0-fpm
$ sudo apt-get install php8.0-curl php8.0-gd php8.0-mysql php8.0-mbstring php8.0-xml php8.0-zip php8.0-imagick php8.0-bcmath -y zip unzip
$ sudo apt-get install php8.0-common php8.0-xmlrpc php8.0-soap php8.0-intl php8.0-cli php8.0-mcrypt php8.0-apcu mariadb-server mariadb-client
설치 뒤에는 잘 설치됐는지 확인해준다.
$ php -v
PHP 어쩌구저쩌구 copyright 어쩌구저쩌구 Zend Technology' 나오면 제대로 설치된 거다.
설치가 됐으면 fpm을 재시작해준다.
$ sudo service php8.0-fpm start
사람마다 다를지는 모르겠지만 PHP 설치 후에 기본 지역 설정이 평양으로 되어있었다.
아래 명령어로 설정 파일을 연다.
$ sudo nano /etc/php/8.0/fpm/php.ini
Ctrl+w로 date.timeline을 검색하고 아래와 같이 수정해준다.
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Seoul
Ctrl+X, y, 엔터로 나온 뒤에 아래의 명령어로 다음 파일도 똑같이 수정해준다.
$ sudo nano /etc/php/8.0/cli/php.ini
수정 후에 php를 재시작해준다.
$ sudo systemctl restart php8.0-fpm
Nginx default 파일 수정
수정하기 전에 default 파일의 권한을 변경해준다.
$ sudo chgrp ubuntu /etc/nginx/sites-available/default
$ sudo chmod 664 /etc/nginx/sites-available/default
그 뒤에 default 파일을 수정해주는데, 원래 나 같았으면 그냥 파일질라로 다운받아서 notepad++로 수정하고 다시 집어넣고 했을 거다.
다행하게도 KoreanVlog님 덕분에 좋은 프로그램을 알게 되었다.
미리 다운로드한 [pageant.exe]와 [EditPlus]를 실행한다.
[이미지]
pageant를 실행하면 바로 창이 뜨지 않고 상태표시줄에 아이콘으로 뜨니 더블클릭해서 열어준다.
[이미지]
Add Key로 키 파일을 등록하고, 어차피 pageant는 아래 남아있으니 닫아도 상관없다.
[이미지]
그 뒤에 EditPlus로 가서 FTP 설정에 들어간다.
[이미지]
- FTP 서버 = 공용 IP
- username = ubuntu
- password = 키 파일 비밀번호
차례대로 입력 후에 고급 옵션으로 들어간다.
[이미지]
암호화를 sftp로 설정하고 pageant 사용을 활성화하고 확인을 누르면 EditPlus에서 내 VM 인스턴스에 접근할 수 있게 된다.
[이미지]
추가한 ftp를 선택하고 /etc/nginx/sites-available/default 파일로 간다.
'# Add index.php to the list if you are using PHP' 아래쪽 44번째 줄 index 옆에 index.php를 추가한다.
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
'# pass PHP scripts to FastCGI server' 아래 보안코드를 추가하고 저장한다.
# pass PHP scripts to FastCGI server
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 300;
}
location ~ /\.ht {
deny all;
}
nginx 상태를 확인하기 위해 아래 명령어를 입력한다.
$ sudo nginx -t
다음과 같이 뜨면 문제가 없는 것이다.
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
이상이 없으면 nginx를 다시 시작해준다.
$ sudo systemctl reload nginx
$ sudo service nginx restart
$ sudo iptables -F
도메인 연결
Nginx와 PHP의 설치가 끝나면 내가 오라클 클라우드에서 설정한 IP로 접속했을 때 Nginx 버전이나 PHP 버전이 뜨는 화면을 볼 수 있다.
이제 이 공용 IP를 도메인과 연결할 차례이다.
지금의 도메인은 freenom의 무료 도메인을 사용 중인데, freenom의 첫 화면에 나오는 검색창에서 원하는 단어로 검색하면 무료 도메인을 발급 받을 수 있다.
원하는 도메인이 사용 가능한 상태라면 장바구니에 담고 회원가입을 진행해서 해당 도메인에 내 VM 인스턴스의 공용 IP를 domain.ga와 www.domain.ga에 바로 연결할 수 있다.
freenom에서 무료로 제공하는 도메인은 .ga .tk .cf 등이 있는데, 인터넷 활용이 어려운 국가들의 국가 도메인을 홍보차원에서 무료로 제공해주는 것이라고 한다.
다만 무료로 잘 쓰게 해주다가 연장할 시기가 되면 해당 도메인을 유료로 돌려버린다고 하는데..
더 웃긴 건 내가 처음에 nubi.ga 도메인을 신청할 때 nubi에 해당되는 모든 freenom 도메인이 사용가능한 상태였는데, nubi.ga를 신청하고 얼마 지나지 않아서 나머지 4개의 도메인이 사용 불가능한 상태가 되었다.
아무래도 지금 도메인도 1년이 지나면 연장이 불가능할 것 같으니 나중에라도 상황봐서 유료 도메인으로 옮겨야겠다.
지금은 포크번의 도메인을 사용하고 있다.
클라우드 플레어 연결
freenom의 네임서버로 진행해도 문제는 없지만 나는 Cloudflare를 추가로 연결해주었다.
Cloudflare에 가입하면 도메인을 입력하는 창이 나오는데, freenom에서 신청한 도메인을 입력하고 무료 요금제를 선택한다.
- aaaa.ns.cloudflare.com
- bbbb.ns.cloudflare.com
이렇게 2개의 네임서버를 알려주는데, freenom에 가서 ns01.freenom.com 으로 되어있는 네임서버들을 다 지워주고 Cloudflare의 네임서버로 바꿔준다.
[이미지]
[이미지]
[이미지]
그 뒤에는 클라우드 플레어로 가서 도메인과 공용IP를 연결해주면 된다.
[이미지]
DNS 탭으로 들어가서 레코드 추가를 눌러 형식에는 A, 이름은 freenom에서 신청한 도메인, IP에는 VM인스턴스의 공용 IP를 입력한다.
[이미지]
위의 내용대로 진행하면 문제가 없지만 내 경우에는 여기서 문제가 생겼는데, nubi.ga로 접속을 하면 접속이 잘 되지만 앞에 www.을 같이 쓰면 접속이 되지 않았다.
알고보니 처음에는 nubi.ga의 A 레코드만 입력하고 www의 cname 레코드를 입력하지 않아 접속이 되지 않은 건데, 제대로 입력을 한 후에도 브라우저 캐시가 남아있어 접속이 되지 않았다.
Nginx 라우팅 설정
EditPlus로 /etc/nginx/sites-available/default 파일에 다시 들어간다.
# Default server configuration
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name 도메인.com;
location / {
try_files $uri $uri/ =404;
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
}
'server_name' 옆에는 도메인;을 적어주고 'try_files $uri $uri/ =404;' 부분 아래에 위의 내용을 적어준다.
나중에 라이믹스 설치하면서 지워야 되지만 헷갈리니 내가 한 순서대로 적은 것이다.
location ~ /\.ht {
deny all;
}
}
### HTTP (CNAME Connect www.도메인.com to 도메인.com ) ###
server {
listen 80;
listen [::]:80;
server_name www.도메인.com;
location / {
return 301 http://도메인.com$request_uri; ### redirect to http://도메인.com
}
}
location ~ ... } 아래에도 위 내용을 적어준다.
그 뒤에 ssh에서 다시 nginx 테스트를 해보고 아래와 같은 문구가 나오면 정상적으로 작동중인 것이다.
여기서 주의해야 할 점이 있는데, default 파일 내에 한글이 있으면 나중에 SSL 인증서를 적용하는 과정에서 오류가 발생한다.
여기서는 보기 쉽게 한글로 적혀있지만 가급적이면 '도메인'도 영어로 미리 수정하는 것이 좋다.
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
정상적으로 작동되는게 확인이 되면 nginx를 재시작해준다.
$ sudo service nginx restart
MariaDB 설치 및 설정
[이미지]
MariaDB 홈페이지에서 설치하는 명령어를 알려준다.
https://downloads.mariadb.org/mariadb/repositories/#mirror=harukasan
나는 우분투 20.04니까 저렇게 골라주면 된다.
$ sudo apt-get install software-properties-common
$ sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
$ sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] https://mirror.yongbok.net/mariadb/repo/10.5/ubuntu focal main'
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install mariadb-server
설치하고 MariaDB가 제대로 돌아가는지 확인.
$ service mysql status
초록색 Active를 확인했으면 Ctrl+c로 나온다.
Thanks for using MariaDB! 뜨면 완료.
$ sudo mysql_secure_installation
Enter current password for root (enter for none): Enter
Switch to unix_socket authentication [Y/n] N
Change the root password? [Y/n] Y
New password: 암호 입력
Re-enter new password: 암호 재입력
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] N
Remove test database and access to it? [Y/n] Y
Reload Privilege tables now? [Y/n] Y
그 뒤 mariadb.cnf 파일을 생성한다.
$ sudo touch /etc/mysql/conf.d/mariadb.cnf
$ sudo nano /etc/mysql/conf.d/mariadb.cnf
mariadb.cnf 파일에 아래의 내용을 입력한다.
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4
collation_server = utf8mb4_unicode_ci
character_set_server = utf8mb4
mysql을 재시작하고 재부팅을 해준다.
재부팅 후에는 바로 ssh 접속이 불가능하니 잠시 후에 다시 시도한다.
$ sudo service mysql restart
$ sudo shutdown now -r
phpMyAdmin 설치
$ wget -O /var/www/phpmyadmin5.0.zip https://files.phpmyadmin.net/phpMyAdmin/5.0.4/phpMyAdmin-5.0.4-all-languages.zip
$ unzip /var/www/phpmyadmin5.0.zip -d /var/www
$ rm /var/www/phpmyadmin5.0.zip
$ ln -s /var/www/phpMyAdmin-5.0.4-all-languages /var/www/html/원하는명칭
$ sudo iptables -F
'http://공용IP/원하는명칭' 이 phpMyAdmin 접속 주소가 된다.
해당 주소로 접속하면 로그인 창이 뜨는데 사용자명에 root를 입력하고 암호에는 MariaDB에서 설정한 암호를 입력하면 된다.
들어가면 에러 메시지가 몇 개 떠있는데, 위 쪽의 파란 창에서 [여기]를 누르고 [Create]를 누르면 일부는 해결된다.
나머지 오류를 해결하기 위해 SSH에서 아래의 명령어를 입력한다.
$ mv /var/www/phpMyAdmin-5.0.4-all-languages/config.sample.inc.php /var/www/phpMyAdmin-5.0.4-all-languages/config.inc.php
아래 링크로 접속해서 도메인을 입력하고 나오는 암호화된 문자열을 복사한다.
[이미지]
[이미지]
EditPlus로 var/www/phpMyAdmin-5.0.4-all-languages/config.inc.php 파일을 열어서 18번째 줄 암호화 문자열 넣는 곳에 암호화 문자열을 붙여넣고 저장한다.
그 뒤 ssh에서 아래의 명령어들을 입력하고 phpMyAdmin에 다시 들어가보면 에러 메시지들이 사라져있다.
$ mkdir /var/www/phpMyAdmin-5.0.4-all-languages/tmp
$ sudo chgrp www-data /var/www/phpMyAdmin-5.0.4-all-languages/tmp
$ sudo chmod 774 /var/www/phpMyAdmin-5.0.4-all-languages/tmp
Sendmail 설치
SSL 인증서 적용 후에 Sendmail을 설치하면 오류가 나기도 해서 Sendmail을 먼저 설치한다.
$ sudo apt-get install sendmail
After this operation, 5185 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
$ sudo sendmailconfig
Configure sendmail with the existing /etc/mail/sendmail.conf? [Y] Y
Configure sendmail with the existing /etc/mail/sendmail.mc? [Y] Y
Reload the running sendmail now with the new configuration? [Y] Y
아래의 명령어로 php.ini 파일을 열어 수정해준다.
$ sudo nano /etc/php/8.0/fpm/php.ini
Ctrl+w로 'sendmail_path'를 검색해서 아래와 같이 수정한다.
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
sendmail_path = "env -i /usr/sbin/sendmail -t -i"
fpm을 재시작한다.
$ sudo systemctl restart php8.0-fpm
sendmail을 실행하고 상태를 확인한다.
$ sudo service sendmail start
$ sudo service sendmail status
Active가 나오면 정상적으로 작동 중이라고 하는데 내 경우에는 밑에 빨간색으로 오류처럼 뭔가 뜨고 내 Gmail 계정으로 메일 발송이 되지 않아 hostname을 변경해주니 완벽하진 않지만 오류 메시지가 많이 줄어들었다.
hostname은 변경 후 바로 적용되지 않고 재부팅을 해야 되고, 변경된 hostname으로 sendmail을 사용하려면 sendmail을 다시 설치해야 되기 때문에 php를 설치하면서 재부팅을 하기 전 미리 hostname을 변경한 것이다.
sendmail이 정상적으로 활성화되었다면 실제 메일 주소로 메일을 발송해서 테스트 해본다.
$ (echo "Subject: 메일 테스트; echo ; echo "메일 테스트 성공") | sendmail -i -v 자신의메일주소
보통은 Gmail은 발송이 실패해서 아예 스팸 메일함에도 들어가지 않고, 네이버는 스팸 메일함에 들어갔다.
근데 이게 이상해서 새로운 VM 인스턴스로 할 때마다 어떨 때는 Gmail에는 잘 보내지는데 네이버에는 안 가지기도 하고, 둘 다 잘 보내지다가 SSL 인증서 적용 후에 갑자기 둘 다 안되기도 하고 멋대로다.
자동 인증서 관리 환경 구성
$ mkdir -p /var/www/letsencrypt/.well-known/acme-challenge
$ sudo touch /etc/nginx/snippets/letsencrypt.conf
$ sudo chown root:ubuntu /etc/nginx/snippets/letsencrypt.conf
$ sudo chmod 775 /etc/nginx/snippets/letsencrypt.conf
$ sudo nano /etc/nginx/snippets/letsencrypt.conf
letsencrypt.conf 파일을 열어서 아래 내용을 넣어준다.
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}
EditPlus로 /etc/nginx/sites-available/default 파일을 열어서 'server_name 도메인;' 아래 'include /etc/nginx/snippets/letsencrypt.conf;'를 추가 후 저장한다.
# Default server configuration
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name 도메인.com;
include /etc/nginx/snippets/letsencrypt.conf;
location / {
try_files $uri $uri/ =404;
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 300;
}
location ~ /\.ht {
deny all;
}
}
### HTTP (CNAME Connect www.도메인.com to 도메인.com ) ###
server {
listen 80;
listen [::]:80;
server_name www.도메인.com;
include /etc/nginx/snippets/letsencrypt.conf;
location / {
return 301 http://도메인.com$request_uri; ###Redirect to http://도메인.com
}
}
그 후 nginx 상태를 확인해보고 재시작한다.
$ sudo nginx -t
$ sudo service nginx restart
$ sudo iptables -F
Let's Encrypt SSL 인증서 적용
$ wget https://dl.eff.org/certbot-auto -P /home/ubuntu/
$ chmod a+x certbot-auto
$ export LC_ALL="C"
$ sudo reboot now
재부팅하고 잠시 후에 다시 들어가서 아래 명령어로 python과 certbot을 설치한다.
$ sudo apt-get update && sudo apt-get install -y certbot
$ sudo apt install certbot python3-certbot-nginx
설치 후에 Let's Encrypt SSL 인증서를 다운로드한다.
$ sudo certbot certonly --webroot --agree-tos --no-eff-email --email 이메일주소 -w /var/www/letsencrypt -d 도메인.com -d www.도메인.com
$ sudo iptables -F
$ sudo ls -al /etc/letsencrypt/live/도메인명
아래와 같이 나오면 인증서가 제대로 적용된 것이다.
drwxr-xr-x 2 root root 4096 Feb 28 20:30 .
drwx------ 3 root root 4096 Feb 28 20:30 ..
-rw-r--r-- 1 root root 692 Feb 28 20:30 README
lrwxrwxrwx 1 root root 31 Feb 28 20:30 cert.pem -> ../../archive/도메인/cert1.pem
lrwxrwxrwx 1 root root 32 Feb 28 20:30 chain.pem -> ../../archive/도메인/chain1.pem
lrwxrwxrwx 1 root root 36 Feb 28 20:30 fullchain.pem -> ../../archive/도메인/fullchain1.pem
lrwxrwxrwx 1 root root 34 Feb 28 20:30 privkey.pem -> ../../archive/도메인/privkey1.pem
Nginx에 SSL 인증서 적용
아래의 명령어로 OpenSSL을 사용하여 dhparam을 암호화한다.
20분 정도 걸린다고 하는데 금방 끝나는 경우도 있고 더 오래 걸리기도 한다.
$ sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096
다 끝나면 ssl.conf 파일의 권한을 변경해준다.
$ sudo touch /etc/nginx/snippets/ssl.conf
$ sudo chmod 777 /etc/nginx/snippets/ssl.conf
$ sudo nano /etc/nginx/snippets/ssl.conf
ssl.conf 파일을 열어 아래와 같이 입력해준다.
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
ssl_ecdh_curve secp384r1;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4;
add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
수정할 수 없도록 다시 권한을 변경해준다.
$ sudo chmod 644 /etc/nginx/snippets/ssl.conf
EditPlus로 /etc/nginx/sites-available/default 파일을 열어서 아래의 내용을 그대로 붙여넣는다.
# Default HTTPS server configuration
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name 도메인.com;
ssl_certificate /etc/letsencrypt/live/도메인.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/도메인.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/도메인.com/fullchain.pem;
include /etc/nginx/snippets/ssl.conf;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
바꾸기로 도메인.com을 다 수정하고 nginx를 재시작한다.
$ sudo nginx -t
$ sudo service nginx restart
$ sudo iptables -F
재시작 후에 도메인으로 접속해보면 https가 적용되어있다.
SSL 인증서 자동갱신
$ sudo su
$ cd /bin
$ nano letsencrypt.sh
나노 에디터에서 letsencrypt.sh 파일에 아래 내용을 입력한다.
#!/bin/bash
sudo certbot renew
sudo service nginx restart
입력 후 실행할 수 있게 권한을 변경해준다.
$ chmod +x letsencrypt.sh
그 뒤엔 인증서가 자동으로 갱신이 되게 해줘야 한다.
$ sudo crontab -e
선택창이 뜨는데 1번 나노 에디터를 선택하고 맨 아래 쪽에 아래의 내용을 입력한다.
*을 포함한 5개의 숫자는 분/시/일/월/요일을 뜻하므로 아래 내용은 매일 새벽 4시에 갱신을 한다는 것이다.
0 4 * * * /usr/bin/letsencrypt.sh
갱신할 필요가 없다면 갱신 시도는 자동으로 종료되지만 이어지는 명령어로 인해 nginx가 재시작한다.
설정을 마치면 crontab을 활성화해야 한다.
$ sudo service cron start
아래의 명령어로 자동 갱신 테스트를 해서 Congratulations가 나오면 앞으로 SSL이 자동으로 갱신된다.
$ sudo certbot renew --dry-run
아래의 사이트에 도메인을 입력하면 보안 점수를 알려주는데, SSL 인증서 설치가 제대로 완료됐다면 A+ 등급이 나온다.
DB 생성
아래 명령어로 MariaDB에 접속한다.
앞서 설정한 DB 암호를 입력하면 된다.
$ mysql --user=root mysql -p
아래 명령어로 DB를 생성해주는데, 라이믹스와 미디어위키를 위한 DB 2개를 생성한다.
> CREATE DATABASE 라이믹스용DB명;
> CREATE DATABASE 미디어위키용DB명;
아래 명령어로 생성된 DB를 확인한다.
> SHOW DATABASES;
라이믹스와 미디어위키에서는 DB 이용자로 root를 사용할 수 없기 때문에 DB 이용자를 따로 만들어줘야한다.
이용자 생성 후에는 DB의 모든 권한을 해당 이용자로 넘겨준다.
> CREATE USER '라이믹스DB이용자이름'@'localhost' IDENTIFIED BY '비밀번호';
> GRANT ALL PRIVILEGES ON 라이믹스용DB명.* TO '라이믹스DB이용자이름'@'localhost' WITH GRANT OPTION;
> CREATE USER '위키DB이용자이름'@'localhost' IDENTIFIED BY '비밀번호';
> GRANT ALL PRIVILEGES ON 미디어위키용DB명.* TO '위키DB이용자이름'@'localhost' WITH GRANT OPTION;
라이믹스 설치
우선 라이믹스의 nginx 설정이 들어있는 rhymix.conf /etc/nginx/snippets 폴더에 넣어준다.
$ sudo chown ubuntu:ubuntu /etc/nginx/snippets
$ curl https://raw.githubusercontent.com/rhymix/rhymix/master/common/manual/server_config/rhymix-nginx.conf > /etc/nginx/snippets/rhymix.conf
Editplus로 default 파일을 열어 'server_name 도메인.com;' 아래 'client_max_body_size 32m;'를 추가하고 'include /etc/nginx/snippets/ssl.conf;' 아래 'include snippets/rhymix.conf;'를 추가한다.
여기서 주의할 점이 있는데, 단축주소와 관련된 rewrite 규칙이 라이믹스 2.0부터는 rhymix.conf 파일에 추가되어있다.
그렇기 때문에 앞서 default 파일을 작성할 때 썼던 'location / { ~~' 부분이 오류를 일으켜 ssh에서 nginx 테스트를 하면 오류 메시지가 뜬다. 아래 내용을 default 파일에서 지워주면 문제 없이 작동한다.
location / {
try_files $uri $uri/ =404;
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
}
참고 : 라이믹스 깃허브
수정 후에는 nginx를 재시작한다.
$ sudo service nginx restart
파일질라를 실행하고 사이트 관리자를 열어 FTP 설정을 해준다.
[이미지]
- 프로토콜 = sftp
- 호스트 = 공용IP
- 로그온 유형 = 키 파일
- 사용자 = ubuntu
- 키 파일 = putty로 만들었던 키 파일
이제 파일질라로 업로드할 라이믹스를 공식 홈페이지에서 다운받는다.
git으로도 설치할 수 있고, 그 방법이 업데이트가 훨씬 편하지만 이 글의 작성 시점에는 내가 git 사용법을 잘 몰라서 ftp 업로드로 설치했다.
압축을 해제하고 ftp로 업로드 하기 전에, 설치 경로(도메인의 기본 주소)에 'files'폴더를 미리 만들어줘야 한다.
업로드하는 파일들이 저 폴더에 저장되기 때문에 쓰기 권한을 주기 위해 파일질라에서 폴더를 생성하고 하위 디렉터리까지 777 권한을 준다.
files 폴더 권한 수정까지 완료했으면 압축 해제한 라이믹스 파일을 ftp로 업로드한다.
git으로 설치하는 방법도 어렵지 않다.
라이믹스가 설치될 /var/www/html 폴더로 이동해서 git을 통해 설치하고, html/rhymix라는 폴더 안에 설치되기 때문에 폴더 안의 파일들을 상위 폴더인 html 폴더로 이동시킨다.
$ cd /var/www/html
$ git clone https://github.com/rhymix/rhymix.git
$ shopt -s dotglob
$ mv rhymix/* .
$ shopt -u dotglob
ftp로 업로드할 때와 마찬가지로 files 폴더를 생성하고 권한을 변경해준다.
$ mkdir files
$ chmod 777 files
[이미지]
업로드가 끝나고 도메인으로 접속하면 설치 화면이 뜬다.
제대로 진행했으면 이 화면에서 전부 OK가 나와야하는데, 처음엔 default 파일에서 rewrite 규칙과 관련된 부분을 지우지 않아서 mod_rewrite 부분이 빨간색이었다.
[이미지]
- DB 아이디 = 라이믹스 DB 권한을 가진 DB 이용자
- DB 비밀번호 = MariaDB 비밀번호
- DB 이름 = 9번째 글에서 라이믹스용으로 생성한 DB 이름
- 테이블 접두사 = DB에서 라이믹스 DB 구분용 접두사, RX
마저 진행하면 라이믹스 설치가 완료된다.
미디어위키 설치 전 준비
php나 db와 관련된 패키지들은 위에서 이미 다 설치했고, 이미지 썸네일 때문에 imagemagick만 추가로 설치했던 걸로 기억한다.
아래 명령어로 imagemagick 설치 여부를 확인한다.
$ convert -version
설치되어있지 않다면 설치하고 nginx를 재시작한다.
$ sudo apt install imagemagick
$ sudo service nginx restart
미디어위키 요구조건에 부합하게 php.ini 파일을 수정해줘야한다.
$ sudo nano /etc/php/8.0/fpm/php.ini
아래와 같이 수정해줘야 하는데, 라이믹스와 충돌이 발생할까 무서워 memory_limit, max_execution_time, cgi.fix_pathinfo는 그대로 놔두었다.
Ctrl+W로 검색해서 해당 내용들을 수정해준다.
file_uploads = On
allow_url_fopen = On
memory_limit = 256M
upload_max_filesize = 20M
post_max_size = 20M
max_execution_time = 360
cgi.fix_pathinfo = 0
date.timezone = Asia/Seoul
다만 20M로 설정한 뒤에도 미디어위키에서 특수:파일올리기 문서를 확인해보면 여전히 2M로 되어있었고, html 폴더의 .htaccess 파일과 LocalSettings.php 파일에 아래 내용을 추가했는데도 여전히 2M이었다.
.htaccess 파일
php_value post_max_size 20M
php_value upload_max_filesize 20M
LocalSettings.php 파일
$wgUploadSizeWarning = 20971520;
$wgMaxUploadSize = 20971520;
나노에디터로 nginx의 sites-available 폴더에 미디어위키 파일을 작성한다.
$ sudo nano /etc/nginx/sites-available/mediawiki
도메인 부분을 내 도메인에 맞게 수정해서 아래에 있는대로 작성하면 된다.
server {
listen 80;
listen [::]:80;
root /var/www/html/orangehrm;
index index.php index.html index.htm;
server_name 도메인.com www.도메인.com;
client_max_body_size 100M;
location / {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ^/(.*)$ /index.php;
}
location ^~ /maintenance/ {
return 403;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
원래는 마지막의 'include fastcgi_params;' 아래에 'try_files $uri @rewrite;'가 있어야하는데 rewrite 규칙이 있을 경우 미디어위키 설치가 진행되지 않았다.
아마 default로 적용되는 라이믹스에 rewrite 관련 규칙이 포함되어있어서 발생하는 문제가 아닐까 싶어 해당 부분을 지워주니 문제 없이 진행됐다.
미디어위키 설치
준비가 끝나면 미디어위키를 VM 인스턴스에 업로드한다.
라이믹스와 마찬가지로 ftp 업로드를 통해 미디어위키를 설치하려 했으나 index.php에서 설치를 통해 /mw-config/index.php로의 접근을 하려하면 오류가 났고, 직접 주소로 이동해도 진행이 되지 않아 tar 파일을 업로드해서 진행했다.
아래의 명령어로 최신 버전의 미디어위키 파일을 받아 압축을 해제하고 위키를 설치할 폴더로 이동시킨다.
내 경우는 '도메인/wiki'에 해당하기 때문에 '/var/www/html/wiki' 폴더로 이동시켰다.
$ cd /tmp && wget https://releases.wikimedia.org/mediawiki/1.35/mediawiki-1.35.1.tar.gz
$ sudo tar -zxvf mediawiki*.tar.gz
$ sudo mkdir -p /var/www/html/wiki
$ sudo mv mediawiki-1.35.1/* /var/www/html/wiki
이동시킨 후에는 미디어위키 폴더의 소유자와 권한을 수정해줘야되는데, sudo로 폴더를 이동시켰기 때문에 폴더의 소유자는 root로 되어있을 것이다.
참고한 글에선 www-data를 위키 폴더의 소유자로 설정했지만 www-data를 소유자로 할 경우 위키 설치가 진행되지 않았고, 내가 ftp에 접속하는 계정은 ubuntu이기 때문에 소유자를 ubuntu로 변경해준다.
$ sudo chown -R ubuntu:ubuntu /var/www/html/wiki/
$ sudo chmod -R 755 /var/www/html/wiki/
소유자와 권한을 변경한 후에 아래 명령어를 입력해서 미디어위키를 활성화해준다.
$ sudo ln -s /etc/nginx/sites-available/mediawiki /etc/nginx/sites-enabled/
$ sudo systemctl restart nginx.service
[이미지]
미디어위키를 활성화하고 도메인/wiki 주소로 이동하면 위와 같은 화면이 뜬다.
LocalSettings.php 파일은 설치과정에서 만들어지는 파일이기 때문에 무시하고 아래의 set up the wiki로 이동한다.
설치 과정을 쭉 진행하다 보면 DB와 관련된 부분이 나오는데, 앞서 위키를 위해 준비했던 세팅을 그대로 적으면 된다.
설치 과정을 중간에 멈추거나 진행하는 것을 선택하는 과정이 있는데, 끝까지 하지 않으면 나중에 플러그인을 수동 설치하며 LocalSettings.php 파일에서 직접 수정해줘야 되기 때문에 끝까지 하는 것이 좋다.
[이미지]
설치 과정이 완료되면 LocalSettings.php 파일이 자동으로 다운로드 된다.
해당 파일을 ftp를 통해 wiki 폴더에 넣어주면 미디어위키 설치가 완료된다.