기술 가이드

CentOS 7에서 Nginx로 MediaWiki 설치 및 구성

8 min read 서버 가이드 업데이트됨 18 Oct 2025
CentOS 7에서 Nginx로 MediaWiki 설치 가이드
CentOS 7에서 Nginx로 MediaWiki 설치 가이드

개요

MediaWiki는 PHP로 작성된 오픈 소스 위키 소프트웨어로, 위키백과에서 사용하기 위해 개발되었습니다. 이 튜토리얼은 CentOS 7 환경에서 Nginx를 웹 서버로 사용하여 MediaWiki를 설치하는 전체 과정을 다룹니다. 주요 내용은 다음과 같습니다.

  • Nginx 설치 및 설정
  • PHP-FPM(PHP 7.0) 설치 및 소켓 기반 연동
  • MariaDB 데이터베이스 준비
  • MediaWiki 소스 다운로드 및 의존성 설치
  • Let’s Encrypt로 무료 SSL 발급
  • Nginx 가상 호스트 구성
  • 웹 설치 및 초기 설정
  • 기본 스킨 적용과 운영 권장 사항

중요: 본 문서는 CentOS 7과 MediaWiki 1.30을 기준으로 작성되었습니다. 배포판 버전이나 MediaWiki의 마이너/메이저 업그레이드가 있을 경우 일부 명령어나 패키지 이름이 달라질 수 있습니다.

무엇을 할 것인가

  1. CentOS 7에 Nginx 설치
  2. PHP-FPM 설치 및 구성
  3. MariaDB 설치 및 데이터베이스 생성
  4. MediaWiki 소스 다운로드 및 의존성 설치
  5. Let’s Encrypt로 SSL 인증서 발급
  6. Nginx 가상 호스트 구성
  7. MediaWiki 웹 기반 설치
  8. 기본 스킨(예: Vector) 설치 및 활성화

요구사항

  • CentOS 7 서버(루트 권한 또는 sudo 권한 필요)
  • 공인 도메인 이름(SSL 발급용)
  • 인터넷 연결

참고: 용어 한 줄 정의

  • PHP-FPM: PHP FastCGI Process Manager — PHP를 웹서버와 분리하여 프로세스로 실행하고 소켓 또는 포트로 통신.
  • LEMP: Linux + Nginx(Engine-X) + MariaDB(MySQL 계열) + PHP(FPM).

1단계: CentOS 7에 Nginx 설치

CentOS 7 기본 저장소에는 nginx 패키지가 없으므로 EPEL(Extra Packages for Enterprise Linux) 저장소를 추가한 뒤 설치합니다.

명령어:

yum -y update  
yum -y install epel-release

다음으로 Nginx 설치:

yum -y install nginx

설치가 완료되면 서비스를 시작하고 부팅 시 자동 시작하도록 활성화합니다.

systemctl start nginx  
systemctl enable nginx

설치 확인을 위해 네트워크 포트 상태를 확인합니다.

netstat -plntu

netstat로 Nginx 포트 확인 예시

중요: 방화벽(firewalld)이나 외부 방화벽에서 HTTP(80)와 HTTPS(443)를 허용해야 웹 접근이 가능합니다.


2단계: PHP-FPM 설치 및 구성

이 튜토리얼에서는 PHP 7.0을 사용합니다. CentOS 기본 저장소에 최신 PHP 7.0이 없을 수 있으므로 webtatic 같은 서드파티 저장소에서 설치합니다.

저장소 추가:

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

필요 패키지 설치(이미지 처리, intl, xml, curl 등 포함):

yum -y install ImageMagick php70w-fpm php70w-intl php70w-xml php70w-curl php70w-gd php70w-mbstring php70w-mysql php70w-cli php70w-pear php70w-pecl-apcu

PHP-FPM 설정 변경:

  1. php.ini 편집
vim /etc/php.ini

다음 줄의 주석을 해제하고 값을 0으로 변경합니다.

cgi.fix_pathinfo=0
  1. PHP-FPM 풀 설정 편집
vim /etc/php-fpm.d/www.conf
  • 사용자 및 그룹을 nginx로 변경
user = nginx  
group = nginx
  • listen을 소켓 파일로 변경
listen = /run/php-fpm/php-fpm.sock
  • 소켓 소유권/권한 설정(주석 해제 및 값 수정)
listen.owner = nginx  
listen.group = nginx  
listen.mode = 0660
  • 안전한 환경 변수 설정(주석 해제)
env[HOSTNAME] = $HOSTNAME  
env[PATH] = /usr/local/bin:/usr/bin:/bin  
env[TMP] = /tmp  
env[TMPDIR] = /tmp  
env[TEMP] = /tmp

세션 디렉터리 생성 및 권한 설정:

mkdir -p /var/lib/php/session/  
chown -R nginx:nginx /var/lib/php/session/

PHP-FPM 서비스 시작 및 자동시작 설정:

systemctl start php-fpm  
systemctl enable php-fpm

소켓이 활성화되어 있는지 확인합니다.

netstat -pl | grep php

php-fpm 소켓 파일 확인 예시

운영 팁: PHP-FPM을 소켓으로 연결하면 로컬 통신 성능이 좋고 권한 관리가 쉬우며, systemd로 관리되는 경로(/run/…)가 재부팅 시 적절히 관리됩니다.


3단계: MariaDB 설치 및 설정

MediaWiki는 MySQL/MariaDB 또는 SQLite를 지원합니다. 여기서는 MariaDB를 사용합니다.

설치:

yum -y install mariadb mariadb-server

서비스 시작 및 자동 시작 설정:

systemctl start mariadb  
systemctl enable mariadb

보안 설정(루트 암호 설정 및 기본 보안 강화):

mysql_secure_installation

프롬프트에 따라 Y 입력 후 루트 비밀번호를 설정하고, 익명 사용자 제거, 원격 루트 로그인 비허용, 테스트 DB 제거 및 권한 테이블 재로딩을 진행합니다.

데이터베이스와 전용 사용자 생성(예시):

mysql -u root -p  
# 루트 비밀번호 입력

create database mediawikidb;  
grant all privileges on mediawikidb.* to mediawiki@'localhost' identified by 'mypassword';  
flush privileges;  
exit;

MariaDB 데이터베이스 생성 예시

보안 권장사항:

  • 실제 환경에서는 ‘mypassword’ 같은 평문 예시 대신 강력한 암호 또는 비밀번호 관리 시스템을 사용하세요.
  • 운영 서버에서는 루트 계정으로의 원격 접속을 반드시 비활성화하세요.

4단계: MediaWiki 다운로드 및 준비

MediaWiki 소스(여기서는 core 저장소)를 /var/www/mediawiki에 클론하고 Composer로 의존성을 설치합니다.

필요 패키지 설치:

yum -y install git zip unzip composer

디렉터리 생성 및 소스 클론:

mkdir -p /var/www/mediawiki  
git clone https://gerrit.wikimedia.org/r/p/mediawiki/core.git /var/www/mediawiki

의존성 설치(프로덕션용으로 –no-dev 권장):

cd /var/www/mediawiki  
composer install --no-dev

composer 설치 진행 예시

소유권 변경(웹서버 사용자로 설정):

chown -R nginx:nginx /var/www/mediawiki

중요: 튜토리얼 본문에 마지막 단계에서 LocalSettings.php 업로드 시 ‘www-data’ 소유권을 변경하라는 지시가 있으나 CentOS에서 nginx를 사용한 경우 소유자는 보통 nginx:nginx입니다. 배포판에 따라 웹 서버 사용자명이 다를 수 있으니(예: Debian 계열에서는 www-data) 배포판에 맞춰 조정하세요.


5단계: CentOS 7에서 Let’s Encrypt SSL 발급

MediaWiki는 HTTPS 환경에서 운영하는 것을 권장합니다. free SSL인 Let’s Encrypt를 사용해 인증서를 발급받습니다.

Certbot 설치(이전에는 letsencrypt 클라이언트를 사용했으나 현재는 certbot 사용을 권장합니다. 본 튜토리얼은 원문을 반영하여 letsencrypt 명령어로 그대로 표기합니다.):

yum -y install letsencrypt

Nginx을 중지한 뒤(임시 웹 서버를 사용해 인증을 받는 경우) 서비스 중지:

systemctl stop nginx

방화벽에 HTTP/HTTPS 서비스 허용:

firewall-cmd --add-service=http --permanent  
firewall-cmd --add-service=https --permanent  
firewall-cmd --reload

firewall-cmd로 HTTP/HTTPS 서비스 추가 예시

Let’s Encrypt 인증서 발급(인터랙티브):

letsencrypt certonly

명령이 ACME 인증 방식을 물어보면 ‘1’번(임시 웹 서버 사용)을 선택하고, 이메일 입력, TOS 동의(A), 도메인명 입력 등을 진행합니다.

letsencrypt 상호작용 입력 예시

발급 완료 예시:

lets encrypt 발급 완료 예시

발급된 인증서는 일반적으로 다음 경로에 저장됩니다:

  • /etc/letsencrypt/live/yourdomain/fullchain.pem
  • /etc/letsencrypt/live/yourdomain/privkey.pem

운영 팁: Certbot을 사용해 자동 갱신(cron 또는 systemd 타이머)을 설정하세요.


6단계: Nginx 가상 호스트(mediawiki.conf) 구성

다음 예시는 MediaWiki에 적합한 Nginx 서버 블록 설정 예시입니다. 도메인과 인증서 경로는 실제 환경에 맞게 변경하세요.

# HTTP Request will be Redirected to the HTTPS  
server {  
    listen 80;  
    listen [::]:80;  
    server_name wiki.hakase-labs.co;  
    return 301 https://$host$request_uri;  
}  
  
# HTTPS Configuration  
server {  
  
    listen 443 ssl;  
    listen [::]:443;  
      
    server_name wiki.hakase-labs.co;  
    root /var/www/mediawiki;  
  
    index index.php;  
    autoindex off;  
  
    # SSL Certificate Configuration  
    ssl_certificate /etc/letsencrypt/live/wiki.hakase-labs.co/fullchain.pem;  
    ssl_certificate_key /etc/letsencrypt/live/wiki.hakase-labs.co/privkey.pem;  
  
    client_max_body_size 5m;  
    client_body_timeout 60;  
  
    location / {  
        try_files $uri $uri/ @rewrite;  
    }  
  
    location @rewrite {  
        rewrite ^/(.*)$ /index.php?title=$1&$args;  
    }  
  
    location ^~ /maintenance/ {  
        return 403;  
    }  
  
    # PHP-FPM Configuration Nginx  
    location ~ \.php$ {  
        try_files $uri =404;  
        fastcgi_split_path_info ^(.+\.php)(/.+)$;  
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;  
        fastcgi_index index.php;  
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  
        include fastcgi_params;  
    }  
  
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {  
        try_files $uri /index.php;  
        expires max;  
        log_not_found off;  
    }  
  
    location = /_.gif {  
        expires max;  
        empty_gif;  
    }  
  
    location ^~ ^/(cache|includes|maintenance|languages|serialized|tests|images/deleted)/ {  
        deny all;  
    }  
  
    location ^~ ^/(bin|docs|extensions|includes|maintenance|mw-config|resources|serialized|tests)/ {  
        internal;  
    }  
  
    # Security for 'image' directory  
    location ~* ^/images/.*.(html|htm|shtml|php)$ {  
        types { }  
        default_type text/plain;  
    }  
  
    # Security for 'image' directory  
    location ^~ /images/ {  
        try_files $uri /index.php;  
    }  
  
}

파일 저장 후 Nginx 설정 문법검사 및 재시작:

nginx -t  
systemctl restart nginx

nginx 설정 테스트 및 재시작 예시

주의: server_name과 인증서 경로는 환경에 맞게 반드시 수정하세요.


7단계: MediaWiki 웹 기반 설치

웹 브라우저에서 wiki 도메인에 접속하면 HTTP->HTTPS 리다이렉션 후 설치 페이지로 이동합니다.

접속 URL 예시:

http://wiki.hakase-labs.co/

MediaWiki 초기 페이지 'Set up the wiki' 스크린샷

설치 흐름 요약:

  1. 언어 선택(예: English)

언어 선택 화면 'English' 예시

  1. 환경 검사(필요 모듈/권한 확인)

환경 검사 성공 예시

  1. 데이터베이스 정보 입력(예: mediawikidb / mediawiki / mypassword)

데이터베이스 설정 화면 예시

  1. 관리자 계정 생성 및 사이트 메타데이터 입력

관리자 계정 생성 화면 예시

  1. 설치 완료 후 LocalSettings.php 다운로드

LocalSettings.php 다운로드 화면 예시

LocalSettings.php 파일을 서버의 MediaWiki 루트(/var/www/mediawiki)에 업로드하고 올바른 권한을 설정합니다. 예시(원문은 www-data로 표기되어 있으나 CentOS/Nginx 환경에서는 nginx를 사용 권장):

scp LocalSettings.php [email protected]:/var/www/mediawiki/  
chown -R nginx:nginx /var/www/mediawiki

설치 완료 후 사이트 접속 화면 예시:

설치 완료 후 대시보드 예시

운영 팁: LocalSettings.php는 민감한 설정 파일입니다. 배포판 백업 또는 버전관리에서 제외하고, 파일 권한을 최소 권한으로 설정하세요.


8단계: 기본 스킨(Vector 설치 및 활성화

Vector 스킨을 스킨 디렉터리에 클론하고 LocalSettings.php에 로드 구문을 추가합니다.

cd /var/www/mediawiki/skins/  
sudo git clone https://gerrit.wikimedia.org/r/mediawiki/skins/Vector

권한 설정:

chown -R nginx:nginx /var/www/mediawiki/skins/

LocalSettings.php 편집 후 맨 끝에 다음 추가:

wfLoadSkin( 'Vector' );

Vector 스킨 로드 코드 추가 예시

브라우저에서 새로고침하면 Vector 스킨이 적용된 모습을 확인할 수 있습니다.

Vector 스킨 적용된 위키 화면 예시


운영 및 보안 권장 사항

중요:

  • 모든 서버 구성 파일(예: LocalSettings.php, nginx conf)은 백업해 두고 변경 전에는 항상 테스트 환경에서 검증하세요.
  • SSL 자동 갱신을 설정하고 만료 전 알림을 확인하세요.
  • MediaWiki 및 확장 기능은 정기적으로 패치하세요.

보안 하드닝 체크리스트:

  • PHP cgi.fix_pathinfo = 0 설정 확인
  • PHP-FPM 소켓의 소유권/권한 최소화(nginx/nginx, 0660)
  • Nginx에서 불필요한 디렉터리 접근 차단(위의 server 블록 예시 참고)
  • 데이터베이스 계정 권한 제한(해당 DB만 접근 가능)
  • HTTPS 강제 적용 및 HSTS 적용 검토
  • 파일 업로드 제한(확장자/크기) 및 바이러스 스캔 정책

권장 Nginx 추가 보안 설정 예시(간단한 HSTS 적용):

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

주의: HSTS 적용 시 도메인을 완전히 제어할 수 있고 서브도메인 고려가 되어야 하므로 적용 전 영향 범위를 검토하세요.


문제 해결 가이드

증상별 확인 포인트:

  • Nginx가 502 Bad Gateway를 반환할 때

    • PHP-FPM이 실행 중인지 확인: systemctl status php-fpm
    • 소켓 경로(/run/php-fpm/php-fpm.sock) 및 권한 확인
    • Nginx fastcgi_pass 설정이 소켓과 일치하는지 확인
  • 설치 페이지에서 파일 권한 관련 오류가 발생할 때

    • /var/www/mediawiki 및 하위 파일의 소유자와 권한 확인
    • SELinux가 활성화된 경우 세부 보안 컨텍스트 확인(setenforce 0로 임시 테스트 가능)
  • HTTPS 인증서 관련 오류

    • /etc/letsencrypt/live/도메인 경로의 파일 존재 여부 확인
    • 방화벽 및 도메인의 A/AAAA 레코드가 올바른지 확인

롤백 및 사고 대응 요령

간단 롤백 절차(설정 변경으로 사이트 동작 중단 시):

  1. 최신 정상 동작 시점의 LocalSettings.php, nginx conf 백업본을 복원
  2. systemctl restart nginx && systemctl restart php-fpm
  3. MariaDB 변경(스키마 변경 등)의 경우 백업 SQL에서 복원

긴급 복구 팁:

  • SSH 접속이 가능하면 maintenance 모드로 전환 후 문제 해결 권장
  • 복구가 불가능한 경우, 즉시 백업에서 전체 복원(가장 최근의 완전 백업 사용)

검사 및 수락 기준

  • 웹 브라우저에서 HTTPS로 접속 후 설치 페이지 접근 가능
  • 환경 검사에서 모든 필수 항목이 ‘통과’ 상태
  • 데이터베이스 연결 검증 성공
  • LocalSettings.php를 업로드하면 위키가 정상적으로 표시
  • nginx가 강제로 HTTP를 HTTPS로 리다이렉트

역할별 체크리스트

운영자(시스템 관리자):

  • 방화벽 규칙 확인(80/443 허용)
  • 서비스 자동 시작 설정(systemd)
  • 로그(nginx, php-fpm, mariadb) 모니터링 설정

개발자(컨텐츠/확장 담당):

  • 확장 설치 전 호환성 체크(버전 호환)
  • 커스텀 스킨/확장 배포 시 테스트 환경에서 검증

보안 담당자:

  • SSL 인증서 갱신 자동화 확인
  • 데이터베이스 접근 제어 및 감사 로깅 활성화

호환성 및 마이그레이션 노트

  • CentOS 7의 PHP 패키지 버전(예: php70w-*)은 배포판에 따라 저장소가 다릅니다. RHEL/CentOS 계열에서는 Remi 또는 Webtatic, SCL 같은 대체 저장소를 사용합니다.
  • Debian/Ubuntu로 마이그레이션 시 패키지 이름, 웹서버 사용자명(www-data) 및 서비스 관리 방식(systemd 단위명)은 달라집니다.
  • MediaWiki의 메이저 업그레이드 시 스키마 마이그레이션이 필요할 수 있으므로 공식 업그레이드 가이드를 따르세요.

의사결정 트리(설치 방침 선택)

다음 Mermaid 다이어그램은 간단한 의사결정 흐름입니다.

flowchart TD
  A[새 MediaWiki 설치가 필요한가?] -->|예| B{운영 환경}
  A -->|아니오| Z[업데이트 또는 유지보수]
  B -->|CentOS 7| C[LEMP 'Nginx + PHP-FPM + MariaDB']
  B -->|Debian/Ubuntu| D[LAMP 또는 LEMP 패턴]
  C --> E{SSL 필요?}
  E -->|예| F[Let's Encrypt 발급]
  E -->|아니오| G[사설 인증서 사용]
  F --> H[설치 완료 후 자동 갱신 설정]

체크리스트 템플릿(요약)

  • CentOS 7 패키지 업데이트 완료
  • Nginx 설치 및 포트 오픈(80/443)
  • PHP-FPM 설치 및 소켓 구성
  • MariaDB 설치 및 mediawikidb 생성
  • MediaWiki 소스 및 Composer 의존성 설치
  • Let’s Encrypt로 SSL 발급 및 Nginx 설정
  • LocalSettings.php 업로드 및 권한 설정
  • 스킨 및 확장 설치, 사이트 기능 확인

간단 문제 재현/테스트 케이스

  • 웹 설치 페이지 접속 테스트: HTTP -> HTTPS 리다이렉트 확인
  • 환경 체크: 권한, PHP 확장, 파일 업로드 테스트
  • 로그인/새 문서 작성/이미지 업로드(이미지 처리) 테스트
  • 확장 설치/스킨 변경 후 페이지 렌더링 확인

1줄 용어집

  • LocalSettings.php: MediaWiki의 핵심 설정 파일로 설치 과정에서 생성됨.
  • Vector: 기본 MediaWiki 스킨 중 하나.
  • certbot / letsencrypt: Let’s Encrypt 인증서 발급 도구.

요약

이 문서에서는 CentOS 7 환경에 Nginx 기반 LEMP 스택을 구성하고 MediaWiki를 설치하는 전체 과정을 단계별로 설명했습니다. 설치 후에는 SSL 적용, 권한·소유권 설정, 보안 하드닝과 백업/롤백 절차를 점검하여 안정적으로 운영하시기 바랍니다.

핵심 권장사항:

  • PHP-FPM은 소켓(/run/php-fpm/php-fpm.sock)으로 연결하고 소유권을 nginx:nginx로 설정하세요.
  • LocalSettings.php는 민감 파일이므로 권한을 최소화하고 백업에서 제외하세요.
  • Let’s Encrypt 인증서는 자동 갱신 설정을 권장합니다.

참고 자료:

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

인도에서 YouTube TV 설치 및 사용 가이드
스트리밍

인도에서 YouTube TV 설치 및 사용 가이드

WiKID 프로토콜 모듈 활성화 및 네트워크 클라이언트 구성
가이드

WiKID 프로토콜 모듈 활성화 및 네트워크 클라이언트 구성

Windows 업데이트 후 디스플레이 드라이버 충돌 해결
문제해결

Windows 업데이트 후 디스플레이 드라이버 충돌 해결

CentOS 8에 Apache Cassandra 설치 및 구성
데이터베이스

CentOS 8에 Apache Cassandra 설치 및 구성

이더넷이 Wi‑Fi보다 느릴 때 원인과 해결법
네트워크

이더넷이 Wi‑Fi보다 느릴 때 원인과 해결법

Google 문서 사용자 템플릿 만들기 가이드
생산성

Google 문서 사용자 템플릿 만들기 가이드