읽는 시간 : 4 분 소요
그누보드는 국산 설치형 무료 게시판입니다.
https://www.wsgvet.com현재 제가 메인 홈페이지로 쓰고 있는 중이기도 합니다.
제 홈페이지는 현재 그누보드 5.3이지만 테마만 괜찮은게 나오면 5.4로 넘어갈 예정입니다.
구글 클라우드 플랫폼의 무료 서버 성능에서는 ghost 플랫폼이나 그누보드를 동시에 운용하기에는 조금 벅찰 수 있습니다.
그래서 ghost를 설치할땐 node.js 설치만 했습니다.
다만 그누보드나 워드프레스 같은 경우 php로 구동되기 때문에 php를 따로 설치해야 합니다.
그래서 node.js와 완전히 독립적으로 이 설치기를 작성합니다.
1sudo apt install php7.4 php7.4-fpm php7.4-mysql php-common php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline php7.4-mbstring php7.4-xml php7.4-gd php7.4-curl위 명령어로 패키지를 설치합니다.
조금만 기다리면 설치가 완료됩니다.
1sudo systemctl enable php7.4-fpm위 명령어로 재부팅시에 자동 시작되게 합니다.
1sudo systemctl start php7.4-fpm위 명령어로 실행합니다.
1sudo nano /etc/php/7.4/fpm/php.ini위 명령어로 들어가면 엄청나게 많은 글의 내용이 나오는데요.
1short_open_tag = On2memory_limit = 256M3cgi.fix_pathinfo = 04upload_max_filesize = 100M5post_max_size = 101M6max_execution_time = 3607date.timezone = Asia/Seoul위 항목을 찾아서 다 바꿔줍니다.
찾는 방법은 컨트롤 + W 누르면 밑에 검색창이 나오는데, 앞부분을 복사해서 붙여넣고 엔터를 치면 찾아집니다.
예를들어 short_open_tag를 바꾸고 싶다면 short_open_tag 를 넣고 엔터를 치면 해당부분으로 갑니다.
참고로 short_open_tag는 처음 검색하면 설명 부분이 나오는데 한번더 검색하면 제대로 나옵니다.
cgi.fix_pathinfo는 아마도 ;cgi.fix_pathinfo = 1 이렇게 되어있을텐데요. 앞에 ; 은 주석으로 처리한다는 뜻이므로 이것도 빼야겠죠.
즉 ;cgi.fix_pathinfo = 1 을 cgi.fix_pathinfo = 0 이렇게 바꿔줘야 하는 것입니다.
그 뒤에 수정하면 됩니다. 전부 찾아서 다 바꾼 후
컨트롤 + O, 엔터, 컨트롤 + X를 누르면 저장 후 빠져나와집니다.
1sudo systemctl reload php7.4-fpm위 명령어로 설정을 적용해줍니다.
1sudo mysql -u root -p위 명령어로 DB에 접속합니다.
1CREATE DATABASE gnuboard;위 명령어로 gnuboard라는 DB를 만듭니다.
1CREATE USER 'gnuuser'@'localhost' IDENTIFIED BY 'yourpassword';위 명령어로 gnuuser라는 DB사용자를 만듭니다.
yourpassword 부분은 원하는 비번으로 꼭 수정하세요!
1GRANT ALL ON gnuboard.* TO 'gnuuser'@'localhost' WITH GRANT OPTION;위 명령어로 gnuuser가 gnuboard라는 DB의 모든 권한을 얻습니다.
1FLUSH PRIVILEGES;23EXIT;위 두 명령어로 저장 후 나갑니다.
1mkdir -p /var/www/gnuboard위 명령어로 그누보드 파일이 들어갈 폴더를 생성합니다.
1cd /var/www/gnuboard위 명령어로 폴더로 이동합니다.
1curl -o gnuboard.tar.gz -fSL https://github.com/gnuboard/gnuboard5/tarball/master위 명령어로 그누보드 최신버전을 다운 받습니다.
1tar -xf gnuboard.tar.gz -C . --strip-components=1위와 같이 현재 폴더에 압축을 풉니다.
1rm gnuboard.tar.gz위 명령어로 압축파일을 삭제합니다.
이제 권한을 수정해야 합니다.
1sudo chmod -R 755 /var/www/gnuboard그누보드의 폴더 포함 모든 파일 및 폴더의 권한을 755로 줍니다.
1sudo mkdir /var/www/gnuboard/datadata 폴더를 생성합니다.
1sudo chmod 707 /var/www/gnuboard/datadata 폴더의 권한을 707로 줍니다.
1sudo chown -R www-data:www-data /var/www/gnuboard그누보드 폴더 이하의 모든 파일과 폴더의 소유권을 www-data에게 줍니다.
1sudo nano /var/www/gnuboard/config.php위 명령어로 설정파일로 들어갑니다.
29번째줄에 보면
1define('G5_DOMAIN', '');2define('G5_HTTPS_DOMAIN', '');위 내용이 있습니다. 접속할 주소를 설정하는 곳입니다.
우리는 이미 SSL 인증서를 가지고 있기 때문에 둘다 같은 https 주소를 넣습니다.
저는 gnu.some.ga를 넣겠습니다.
aced.ga와 같이 서브도메인이 없이 넣어 됩니다. 이는 원하는대로 설정하시면 됩니다.
1define('G5_DOMAIN', 'https://gnu.some.ga');2define('G5_HTTPS_DOMAIN', 'https://gnu.some.ga');위와 같은 형식으로 넣고 저장하면 됩니다.
40번째 줄에
1// Set Databse table default Charset2// utf8, utf8mb4 등 지정 가능 기본값은 utf8, 설치전에 utf8mb4 으로 수정시 모든 테이블에 이모지 입력이 가능합니다. utf8mb4 는 mysql 또는 mariadb 5.5 버전 이상을 요구합니다.3define('G5_DB_CHARSET', 'utf8mb4');위와 같이 utf8을 utf8mb4로 바꿔줍니다. 이모지를 제목과 본문, 댓글에 표시할 수 있습니다.
그누보드 파일 설정은 이제 끝입니다.
(1) 그누보드 5.4 주소 rewirte 설정파일 만들어주기
1sudo nano /etc/nginx/snippets/gnuboard-rewirte.conf위 명령어로 설정파일 만들기에 들어갑니다.
1#### 그누보드5 nginx rules BEGIN #####2if (!-e $request_filename){3rewrite ^/content/([0-9a-zA-Z_]+)$ /bbs/content.php?co_id=$1&rewrite=1 break;4rewrite ^/content/([^/]+)/$ /bbs/content.php?co_seo_title=$1&rewrite=1 break;5rewrite ^/rss/([0-9a-zA-Z_]+)$ /bbs/rss.php?bo_table=$1 break;6rewrite ^/([0-9a-zA-Z_]+)$ /bbs/board.php?bo_table=$1&rewrite=1 break;7rewrite ^/([0-9a-zA-Z_]+)/write$ /bbs/write.php?bo_table=$1&rewrite=1 break;8rewrite ^/([0-9a-zA-Z_]+)/([^/]+)/$ /bbs/board.php?bo_table=$1&wr_seo_title=$2&rewrite=1 break;9rewrite ^/([0-9a-zA-Z_]+)/([0-9]+)$ /bbs/board.php?bo_table=$1&wr_id=$2&rewrite=1 break;10}11#### 그누보드5 nginx rules END #####위 내용을 그대로 복사 후 붙여넣기 해줍니다.
컨트롤 + O, 엔터, 컨트롤 + X 엔터를 누르면 저장 후 빠져나옵니다.
(2) SSL 관련 설정파일 만들기
1sudo nano /etc/nginx/snippets/ssl.conf위 명령어로 설정파일 만들기에 들어갑니다.
1ssl_certificate /etc/nginx/ssl/fullchain.pem; # SSL 풀체인 인증서 경로. 자신의 환경에 맞게 바꾸세요.2ssl_certificate_key /etc/nginx/ssl/privkey.pem; # SSL 프라이빗 키 경로. 자신의 환경에 맞게 바꾸세요.3ssl_trusted_certificate /etc/nginx/ssl/chain.pem; # SSL 인증서 경로. 자신의 환경에 맞게 바꾸세요.45ssl_dhparam snippets/dhparams.pem;6ssl_session_cache shared:SSL:10m;7ssl_session_timeout 1d;8ssl_session_tickets off;910ssl_ecdh_curve X25519:sect571r1:secp521r1:secp384r1;11ssl_stapling on;12ssl_stapling_verify on;13resolver 8.8.8.8 8.8.4.4 valid=300s;14resolver_timeout 10s;1516ssl_protocols TLSv1.2 TLSv1.3;17ssl_prefer_server_ciphers off;18ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;1920add_header X-Frame-Options SAMEORIGIN;21add_header X-Content-Type-Options nosniff;22add_header X-XSS-Protection "1; mode=block"; 23add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";위 내용을 그대로 복사 후 붙여넣기 해줍니다.
제일 위에 인증서 경로를 자신의 환경에 맞게 수정해주세요!
제가 알려드린 acme.sh로 인증서를 생성했다면 수정하지 않아도 됩니다.
컨트롤 + O, 엔터, 컨트롤 + X 엔터를 누르면 저장 후 빠져나옵니다.
(3) dhparams.pem 생성하기
1sudo openssl dhparam -out /etc/nginx/snippets/dhparams.pem 2048위 명령어로 dhparams.pem 파일을 생성합니다.
대략 10~20초면 생성이 됩니다.
SSL 인증서를 미리 만들었다면 그대로 진행하면 됩니다.
SSL 인증서가 없다면
위 링크를 통해서 클라우드플레어가 아닌 LuaDNS를 통해 무료도메인도 와일드카드 인증서를 발급받을 수 있습니다.
webroot 방식보다 DNS 방식으로 발급 받는 것이 훨씬 편하므로 강력 추천드립니다.
webroot 방식으로 설치하려면 바로 밑에 무료 도메인 전용 인증서 생성하기를 참고하세요!
위 링크에서 클라우드플레어를 통하여 매우 쉽게 와일드카드 인증서 및 자동갱신을 설정할 수 있습니다.
인증서를 생성했다면 밑의 무료 도메인 전용 인증서 생성하기는 건너뛰고 (4) 서버 설정파일 만들기로 넘어가면 됩니다!
이제 Letsencrypt의 webroot 방식으로 인증서를 생성할 수 있습니다.
1sudo nano /etc/nginx/sites-available/gnuboard위 명령어로 Nginx설정파일을 만들고 들어갑니다.
1server {2 listen 80;3 listen [::]:80;4 server_name www.some.ga some.ga; #some.ga를 자신이 원하는 도메인으로 수정하세요.56 root /var/www/gnuboard;78 index index.php ;9 include snippets/gnuboard-rewirte.conf;1011 location ~ \.(gif|jpg|png)$ {12 add_header Vary "Accept-Encoding";13 add_header Cache-Control "public, no-transform, max-age=31536000";14 }15 location ~* \.(css|js)$ {16 add_header Cache-Control "public, max-age=604800";17 log_not_found off;18 access_log off;19 }20 location ~*.(mp4|ogg|ogv|svg|svgz|eot|otf|woff|woff2|ttf|rss|atom|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|cur)$ {21 add_header Cache-Control "max-age=31536000";22 access_log off;23 }24 charset utf-8;25 server_tokens off;26 client_max_body_size 100M;27 location / {28 try_files $uri $uri/ =404;29 }30 location ~ /\.ht {31 deny all;32 }33 location ~ \.php$ {34 include snippets/fastcgi-php.conf;35 fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;36 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;37 include fastcgi_params;38 }39}위 내용에서 some.ga 부분을 자신의 도메인으로 바꿔주세요.
그리고 컨트롤 + O, 엔터, 컨트롤 + X 엔터를 누르면 저장 후 빠져나옵니다.
1sudo ln -s /etc/nginx/sites-available/gnuboard /etc/nginx/sites-enabled/위 명령어로 설정파일을 활성화되게 해줍니다.
1sudo rm -f /etc/nginx/sites-enabled/default위 명령어로 기존 활성화된 default 서버 링크만 삭제해줍니다.
1sudo nginx -t위 명령어로 설정에 이상이 없는지 확인합니다.
1$ sudo nginx -t2 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok3 nginx: configuration file /etc/nginx/nginx.conf test is successful위와 같이 ok와 successful이 나오면 성공입니다.
1sudo service nginx restart위 명령어로 nginx를 재시작 해줍니다.
이제 acme.sh를 통한 webroot 인증서 발급을 위한 준비는 끝났습니다.
1sudo su위 명령어로 root 계정으로 들어갑니다.
root 계정이 아니면 권한 문제가 생길 수 있습니다. 공식 매뉴얼에는 sudo 명령어를 추천하지 않습니다.
1curl https://get.acme.sh | sh위 명령어로 설치할 수 있습니다. 만약에 안된다면
1wget -O - https://get.acme.sh | sh위 명령어로도 설치할 수 있습니다.
설치할 때 빨간색 글자가 나올 수도 있는데, 무시해도 됩니다.
SSH 터미널(Putty 등)을 끄고, 다시 접속합니다.
SSH에 다시 접속하면 별다른 작업을 하지 않아도 root 계정으로 acme.sh 명령어를 바로 쓸 수 있습니다.
1sudo su2mkdir /etc/nginx/ssl우선 위와 같이 root로 로그인 후 SSL 인증서가 저장될 폴더를 생성합니다.
1acme.sh --issue -w /var/www/gnuboard -d example.com -d www.example.com -d blog.example.com -d home.example.com -d nas.example.com --key-file /etc/nginx/ssl/privkey.pem --fullchain-file /etc/nginx/ssl/fullchain.pem --cert-file /etc/nginx/ssl/chain.pem --reloadcmd "systemctl reload nginx.service"위와 같이 webroot 방식으로 발급받으면 멀티도메인 거의 무제한(100개까지)으로 발급 받을 수 있습니다.
발급 받고 싶은 도메인 주소도 -d example.com 형식으로 추가해주면 됩니다.
example.com만 자신의 도메인으로 수정해주세요!
1[Tue 02 Jun 2020 10:35:49 PM KST] Your cert is in /root/.acme.sh/aced.ga/aced.ga.cer2[Tue 02 Jun 2020 10:35:49 PM KST] Your cert key is in /root/.acme.sh/aced.ga/aced.ga.key3[Tue 02 Jun 2020 10:35:49 PM KST] The intermediate CA cert is in /root/.acme.sh/aced.ga/ca.cer4[Tue 02 Jun 2020 10:35:49 PM KST] And the full chain certs is there: /root/.acme.sh/aced.ga/fullchain.cer5[Tue 02 Jun 2020 10:35:49 PM KST] Installing cert to:/etc/nginx/ssl/chain.pem6[Tue 02 Jun 2020 10:35:49 PM KST] Installing key to:/etc/nginx/ssl/privkey.pem7[Tue 02 Jun 2020 10:35:49 PM KST] Installing full chain to:/etc/nginx/ssl/fullchain.pem8[Tue 02 Jun 2020 10:35:49 PM KST] Run reload cmd: systemctl reload nginx.service9[Tue 02 Jun 2020 10:35:49 PM KST] Reload success위와 같이 잘 발급되고, 원하는 위치에 인증서가 이동된 것을 확인할 수 있습니다.
참고로 ECDSA 인증서를 발급 받고 싶으시면
위 명령어에서 --keylength ec-256 (prime256v1, ECDSA P-256) 또는 --keylength ec-384 (secp384r1, ECDSA P-384)를 넣어주면 됩니다.
1acme.sh --issue --keylength ec-256 -w /var/www/gnuboard -d aced.ga -d www.aced.ga -d blog.aced.ga -d home.aced.ga -d nas.aced.ga --key-file /etc/nginx/ssl/privkey.pem --fullchain-file /etc/nginx/ssl/fullchain.pem --cert-file /etc/nginx/ssl/chain.pem --reloadcmd "systemctl reload nginx.service"위와 같이 실행하면 ECDSA P-256 인증서가 생성됩니다.
다른 상세한 사항은 DNS 인증을 통한 acme.sh Letsencrypt SSL 인증서 발급받기를 참조하세요!
acme.sh를 통해서 인증서를 생성하면 60일 뒤에 자동으로 갱신해줍니다. 그러니 자동갱신에 대한 걱정은 안하셔도 됩니다 ^^
(4) 서버 설정파일 만들기
1sudo nano /etc/nginx/sites-available/gnuboard위 명령어로 설정파일로 들어갑니다.
기존 내용이 있다면 컨트롤 + K 를 눌러서 다 지우고 밑의 내용을 넣습니다.
(4) -1 홈페이지 주소가 aced.ga 처럼 서브도메인이 없는 경우
http://aced.ga, http://www.aced.ga, https://www.aced.ga 를 전부 https://aced.ga로 돌립니다.
1server {2 listen 80;3 listen [::]:80;4 server_name www.aced.ga aced.ga; #aced.ga를 자신이 원하는 도메인으로 수정하세요.5 location / {6 rewrite ^/(.*)$ https://aced.ga/$1 permanent; #aced.ga를 자신이 원하는 도메인으로 수정하세요.7 }8} 910server {11 listen 443 ssl http2;12 listen [::]:443 ssl http2;1314 server_name aced.ga www.aced.ga; #aced.ga를 자신의 도메인으로 수정하세요.15 root /var/www/gnuboard;16 17 if ($host != 'aced.ga' ) { # aced.ga를 자신의 도메인으로 수정하세요.18 rewrite ^/(.*)$ https://aced.ga/$1 permanent; # aced.ga를 자신의 도메인으로 수정하세요.19 }2021index index.php ;2223include snippets/gnuboard-rewirte.conf;24include snippets/ssl.conf;2526 location ~ \.(gif|jpg|png)$ {27 add_header Vary "Accept-Encoding";28 add_header Cache-Control "public, no-transform, max-age=31536000";29 }3031 location ~* \.(css|js)$ {32 add_header Cache-Control "public, max-age=604800";33 log_not_found off;34 access_log off;35 }3637 location ~*.(mp4|ogg|ogv|svg|svgz|eot|otf|woff|woff2|ttf|rss|atom|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|cur)$ {38 add_header Cache-Control "max-age=31536000";39 access_log off;40 }4142charset utf-8;43server_tokens off;44client_max_body_size 100M;4546 location / {47 try_files $uri $uri/ =404;48 }4950 location ~ /\.ht {51 deny all;52 }5354 location ~ \.php$ {55 include snippets/fastcgi-php.conf;56 fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;57 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;58 include fastcgi_params;59 }60}(4) -2 홈페이지 주소가 gnu.some.ga 처럼 서브도메인이 있는 경우
http://gnu.some.ga만 https://gnu.some.ga로 돌려주면 됩니다.
1server {2 listen 80;3 listen [::]:80;4 server_name gnu.some.ga; #gnu.some.ga를 자신이 원하는 도메인으로 수정하세요.5 location / {6 rewrite ^/(.*)$ https://gnu.some.ga/$1 permanent; #gnu.some.ga를 자신이 원하는 도메인으로 수정하세요.7 }8} 910server {11 listen 443 ssl http2;12 listen [::]:443 ssl http2;1314 server_name gnu.some.ga; #gnu.some.ga를 자신의 도메인으로 수정하세요.15 root /var/www/gnuboard;1617index index.php ;1819include snippets/gnuboard-rewirte.conf;20include snippets/ssl.conf;2122 location ~ \.(gif|jpg|png)$ {23 add_header Vary "Accept-Encoding";24 add_header Cache-Control "public, no-transform, max-age=31536000";25 }2627 location ~* \.(css|js)$ {28 add_header Cache-Control "public, max-age=604800";29 log_not_found off;30 access_log off;31 }3233 location ~*.(mp4|ogg|ogv|svg|svgz|eot|otf|woff|woff2|ttf|rss|atom|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|cur)$ {34 add_header Cache-Control "max-age=31536000";35 access_log off;36 }3738charset utf-8;39server_tokens off;40client_max_body_size 100M;4142 location / {43 try_files $uri $uri/ =404;44 }4546 location ~ /\.ht {47 deny all;48 }4950 location ~ \.php$ {51 include snippets/fastcgi-php.conf;52 fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;53 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;54 include fastcgi_params;55 }56}위 내용을 확인 후 꼭 수정하세요!
컨트롤 + O, 엔터, 컨트롤 + X 엔터를 누르면 저장 후 빠져나옵니다.
1sudo ln -s /etc/nginx/sites-available/gnuboard /etc/nginx/sites-enabled/위 명령어로 설정파일을 활성화되게 해줍니다.
무료 도메인에서 이 작업을 했다면 다시 할 필요가 없습니다. 한번 더 해도 문제없습니다 ^^;;
1sudo rm -f /etc/nginx/sites-enabled/default위 명령어로 기존 활성화된 default 서버 링크만 삭제해줍니다.
1sudo nginx -t위 명령어로 설정에 이상이 없는지 확인합니다.
1nginx: the configuration file /etc/nginx/nginx.conf syntax is ok2nginx: configuration file /etc/nginx/nginx.conf test is successful위 내용이 나온다면 성공한 것입니다.
1sudo service nginx restart위 명령어로 nginx를 재시작해줍니다.
이제 서버쪽 설정은 모두 끝났습니다!
이제 주소창에 설정한 주소 를 넣어보세요.
위와 같이 뜬다면 성공입니다.
그누보드5 설치하기를 누릅니다.
동의합니다 -> 다음
위와 같이 셋팅하면 됩니다.
MySQL 정보는 아까 같이 만들었던 그 계정을 넣으면 됩니다.
밑에 최고관리자는 100% 원하시는대로 만들면 됩니다
참고로 회원 ID에 admin으로 되어있는데 바꿔주시는게 보안에 좋습니다.
다 적은 후 다음을 누르면
위와 같이 나오면 드디어 끝입니다.
새로운 그누보드5로 이동을 누르면!
위와 같이 초기화면이 나오면서 완성되었습니다!
감사합니다!