기술 가이드

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
저자
편집

유사한 자료

Debian 11에 Podman 설치 및 사용하기
컨테이너

Debian 11에 Podman 설치 및 사용하기

Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정
시스템 관리

Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정

OptiScaler로 FSR 4 주입: 설치·설정·문제해결 가이드
그래픽 가이드

OptiScaler로 FSR 4 주입: 설치·설정·문제해결 가이드

Debian Etch에 Dansguardian+Squid(NTLM) 구성
네트워크

Debian Etch에 Dansguardian+Squid(NTLM) 구성

안드로이드 SD카드 설치 오류(Error -18) 완전 해결
안드로이드 오류

안드로이드 SD카드 설치 오류(Error -18) 완전 해결

KNetAttach로 원격 네트워크 폴더 연결하기
네트워킹

KNetAttach로 원격 네트워크 폴더 연결하기