파이썬/Python 환경설정

Django(장고) 배포 환경 구축 CentOS 7 with Apache and mod_wsgi

Link2Me 2022. 4. 9. 16:28
728x90

장고 배포를 위한 환경 구성을 할 때마다 실패를 해서 삽질을 엄청했다.

https://computingforgeeks.com/deploy-python-3-django-application-on-centos-with-apache-and-mod-wsgi/

위 사이트에 적힌 순서에 따라 해도 안되더니 마지막 2줄이 해결책이더라.

 

Windows 10 Pycharm 툴을 이용해서 Python 3.9.5 or Python 3.10.2 환경에서 개발 테스트 한 것을 CentOS 7 으로 옮겨서 실행하다보니 동일 환경을 구성하기 어렵다.

그래서 pip install -r requirements.txt 를 하면 에러가 발생한다.

이런 점을 감안해서 작성한 스크립트이다.

 

1. 선행 작업사항

##########################################################################
## CentOS 7 Package Update
 
yum -y update
 
##########################################################################
# 방화벽 설정
yum -y install firewalld
 
# 방화벽 데몬 시작
systemctl start firewalld
 
# 서버 부팅 시 firewalld 데몬 자동 시작 설정
systemctl enable firewalld
 
firewall-cmd --permanent --add-service=http 
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-service=mysql
firewall-cmd --permanent --zone=public --add-port=3306/tcp
 
firewall-cmd --permanent --zone=public --add-port=8000/tcp
firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --reload
firewall-cmd --list-all
 
#########################################################################
# Databse 접근을 위한 SELinux 설정 변경
# SELinux 상태 확인
sestatus
 
#SELinux httpd flag 확인 : 네트워크를 통해 Database에 연결할 수 있는 옵션이 꺼져 있음
getsebool -| grep httpd
 
# Database 접근을 위한 SELinx 설정 변경
setsebool -P httpd_can_network_connect_db 1
 
# SELinux 비활성화 하기
vi /etc/sysconfig/selinux
SELINUX=disabled
:wq 로 저장하고 나온다.
 
# 재부팅해야 SELinux 명령어 수정한 사항이 적용된다.
reboot 
 
# 임시 비활성화 방법
setenforce 0
 

 

2. Python 설치 과정

 

#########################################################################
# 파이썬(Python) 설치 과정
#########################################################################
# python 2.7.X 버전이 설치된 것을 확인한다.
rpm -qa | grep mariadb
# 설치된 것이 없다면 아래 한꺼번에 지우기는 실행하지 않아도 된다.
 
## 설치된 것 한꺼번에 지우기
rpm -qa | grep mariadb > list
 
# vi list로 해서 삭제 안할 리스트는 선별 제거한다.
sudo yum -y remove $(awk '{print $1}' <list)
 
# Python 모듈을 빌드하려면 개발 도구가 필요
yum -y update
yum -y groupinstall 'Development Tools'
yum -y install yum-utils
yum -y install zip unzip wget mc git net-tools
 
# 아파치와 mode_wsgi 를 설치하기 위해 아래 명령어를 실행한다.
yum -y install epel-release
yum -y makecache
yum -y install httpd mod_wsgi
yum -y install mariadb-devel 
 
# PHP 관련으로 httpd 를 설치하지 말아야 한다.
# 먼저 설치하면 mariadb-devel 이 PHP와 관련되어 설치되기 때문에 
# pip install mysqlclient 명령어 실행시 에러가 발생하더라.
 
 
# 아래 명령어는 필요시 설치해 주면 될 거 같아서 주석처리했다.
#yum -y install gcc openssl-devel bzip2-devel libffi-devel xz-devel sqlite-devel tk-devel
#yum -y install zlib-devel bzip2-devel gdbm-devel 
 
 
# Enable Software Collections
sudo yum -y install centos-release-scl
sudo yum -y install rh-python36 python36-devel httpd-devel rh-python36-mod_wsgi
scl enable rh-python36 bash
 
#sudo yum -y install rh-python38 python38-devel httpd-devel rh-python38-mod_wsgi
#scl enable rh-python38 bash
 
python --version
python -V
 
# yum 설치 문제가 발생하지 않도록 아래와 같이 수정한다.
vi /usr/bin/yum
# 첫줄에 python 을 python2.7 로 변경하고 저장(:wq)한다.
 
vi /usr/libexec/urlgrabber-ext-down
# 첫줄에 python 을 python2.7 로 변경하고 저장(:wq)한다.
 
# 현재 Alias 확인
ls -/bin/python*
 
pip -V
pip3 -V
 
###### SQLite3 DB 설정 ###################################
# Python 에서 SQLite3 를 찾는데, 기본 설치 버전이 3.7.17 이다.
# 장고 설치시에 더 높은 버전을 요구하므로, 아래와 같이 3.10.2 버전을 설치해준다.
 
# https://kojipkgs.fedoraproject.org//packages/sqlite/ 접속하여 확인한다.
# 원하는 파일을 찾아서 링크를 복사하고 wget 으로 붙여넣기 한다.
 
cd /root
mkdir sqlite3
cd sqlite3
wget https://kojipkgs.fedoraproject.org//packages/sqlite/3.10.2/1.fc22/x86_64/sqlite-3.10.2-1.fc22.x86_64.rpm
wget https://kojipkgs.fedoraproject.org//packages/sqlite/3.10.2/1.fc22/x86_64/sqlite-devel-3.10.2-1.fc22.x86_64.rpm
 
sudo yum -y install sqlite-3.10.2-1.fc22.x86_64.rpm sqlite-devel-3.10.2-1.fc22.x86_64.rpm
 
# 파이썬에서 설치된 SQLite3 버전 확인 방법
python -"import sqlite3; print(sqlite3.sqlite_version)"
 
#########################################################
##### 파이썬 가상환경 설정 ####################################
#########################################################
# Step : Install virtual environment
cd /var/www
python -m pip install virtualenv
 
# 가상환경 이름을 venv 로 설정했는데 다른 명칭으로 변경해도 된다.
mkdir -/var/www/logs
 
# venv 가상환경 생성
cd /var/www
virtualenv venv
 
# venv 가상환경 실행
source /var/www/venv/bin/activate
 
pip install --upgrade pip setuptools
pip install django
pip install djangorestframework
 
# MySQL 이나 MaraiDB 와 연동 목적
pip install mysqlclient
 
# 파이썬 디버깅 도구 설치
pip install pylint
pip install twisted
 
# venv 가상환경 종료
deactivate
 
 

 

3. MaraiDB 10.5 설치

 

 
################################
##### MariaDB 10.5 버전 설치 #####
################################
 
vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
 
:wq 로 저장하고 나온다.
 
sudo yum makecache fast
yum -y install mariadb-server mariadb-client
 
# mariadb 부팅 시 자동 시작 설정
systemctl enable mariadb
 
# mariadb 시작
systemctl start mariadb
 
# mariadb 상태 확인
service mariadb status
 
# Maria DB 보안 설정하기
mysql_secure_installation
 
# root 비밀번호 설정 등 상세 과정은 생략한다. 거의 Y만 누르면 끝난다.
 
 
# UTF-8 로 통신하기 위한 서버/클라이언트 설정
vi /etc/my.cnf.d/server.cnf
[mysqld]
collation-server = utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
 
vi /etc/my.cnf.d/mysql-clients.cnf
[mysql]
default-character-set=utf8
[mysqldump]
default-character-set=utf8
 
# MariaDB 재시작
service mariadb restart
 
# MariaDB 접속하여 적용된 사항 확인
mysql -u root -p
status
show variables like 'c%';
 
#########################################
####### 실제 적용 예제 ######
#########################################
// DB 생성
create database pythondb default character set utf8;
 
use mysql;
create user pythonfox@localhost identified by 'PythonWonder#$';
grant all privileges on pythondb.* to pythonfox@localhost;
flush privileges;
quit
 
### 테이블 백업하기 ####
mysqldump -uroot ---databases pythondb > pythondb.sql
 
### 테이블 구조만 백업하기 ####
mysqldump -uroot ---no-data --databases pythondb > pythondb.sql
 

 

4. 장고 프로젝트 생성 예시

 

 
################################################
# 장고 프로젝트 생성 및 Web 서버 구동 테스트
################################################
# venv 가상환경 실행
source /var/www/venv/bin/activate
 
# 프로젝트 생성 예시
cd /var/www/html/
django-admin startproject config .
 
python manage.py startapp accounts
python manage.py startapp blog
python manage.py startapp bookmark
 
# bootstrap4 라이브러리 설치
pip install django-bootstrap4
 
# Client IP address 수집을 위한 라이브러리
pip install django-ipware
 
# RSA/AES 암호화 라이브러리
pip install pycryptodome
pip install pycryptodomex
 
# mariadb db 연동 라이브러리
pip install mariadb
 
# 이제 Windows/MAC 환경에서 구현했던 코드를 리눅스 각 APP에 Override로 한다.
 
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py collectstatic
 
 
# 8000번 포트로 Web 서버 구동(개발자 모드)
python manage.py runserver 0.0.0.0:8000
 
# 정상 동작하는 걸 확인하고 나서
deactivate
 
sudo chown -R apache:apache /var/www/html/
 
 
# Django 배포(운영)를 위한 설정
vi /etc/httpd/conf.d/django.conf
 
<VirtualHost *:80>
        ServerName localhost
        DocumentRoot /var/www/html/
 
        Alias /static /var/www/html/static
        <Directory "/var/www/html/static">
                Options FollowSymLinks
                Order allow,deny
                Allow from all
                Require all granted
        </Directory>
 
        Alias /media /var/www/html/media
        <Directory "/var/www/html/media">
                Options FollowSymLinks
                Order allow,deny
                Allow from all
                Require all granted
        </Directory>
        ErrorLog /var/www/logs/error.log
        CustomLog /var/www/logs/access.log combined
 
        WSGIPassAuthorization On
        WSGIDaemonProcess wowdjango python-path=/var/www/html:/var/www/venv/lib/python3.6/site-packages
        WSGIProcessGroup wowdjango
        WSGIScriptAlias / /var/www/html/config/wsgi.py
 
        <Directory /var/www/html/config>
                <Files wsgi.py>
                        Require all granted
                </Files>
        </Directory>
</VirtualHost>
 
 
# 아래 두줄을 실행하기 전에는 에러가 발생하면서 동작되지 않더라.
sudo cp /opt/rh/httpd24/root/usr/lib64/httpd/modules/mod_rh-python36-wsgi.so /lib64/httpd/modules
sudo cp /opt/rh/httpd24/root/etc/httpd/conf.modules.d/10-rh-python36-wsgi.conf /etc/httpd/conf.modules.d
 
systemctl restart httpd
 
# 서버를 재부팅하거나 Web 서버를 중지시킨 경우에 가상환경 재실행 명령어
source /var/www/venv/bin/activate
 
cd /var/www/html/
python manage.py runserver 0.0.0.0:8000
 
# 가상환경 종료
deactivate
 
# Web 브라우저에서 접속시 문제가 없는지 테스트 해본다.
 

 

 

파일 위치 찾기

 

개발 서버 구동

 

 

환경설정 파일

python_conf.zip
0.10MB

 

 

mod_wsgi 설치하는 또다른 방법이다.

sudo yum -y install httpd httpd-devel
#mod_wsgi 는 python pip 로 설치할 것이므로 yum 설치는 생략한다.
 
# venv 가상환경 실행
source /var/www/venv/bin/activate
 
# mod_wsgi 설치
pip install mod_wsgi
 
# mod_wsgi 설치 확인
mod_wsgi-express start-server
 
#wsgi_module 등록하기
mod_wsgi-express install-module
 
cd /etc/httpd/conf.modules.d/
vi 10-wsgi.conf
LoadModule wsgi_module "/usr/lib64/httpd/modules/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"
# :wq(저장)하고 빠져나온다.
 
# 정상 동작하는 걸 확인하고 나서
deactivate
 
# Web 브라우저에서 잘 동작되는 걸 확인할 수 있다.

 

 

 

 

 

 

 

 

728x90