728x90
파이썬 3.6 + MariaDB 10.4 + PHP 7.4 를 설치하는 스크립트이다.
MariaDB를 Python 에서 이용하기 위해서는 Python 3.6 을 먼저 yum 설치해야 한다.
설치 스크립트는 편의상 구분 작성했다.
Updated : 2021.12.30
SQLite 3.7.17 버전이라 더 높은 버전의 SQLite 설치가 필요하다는 메시지가 나올 경우
아래 명령어를 실행하면 에러없이 환경 설정 가능하다.
Docker 테스트 할 때 sudo 명령어가 먹히지 않았을 때 나온 현상이라 아래 코드는 별도 설정하지 않아도 된다.
# SQLite 3.7.17 버전보다 높은 버전을 설치하기 위한 작업
wget https://www.sqlite.org/2018/sqlite-autoconf-3240000.tar.gz
tar zxvf sqlite-autoconf-3240000.tar.gz
cd sqlite-autoconf-3240000
./configure --prefix=/usr/local
make
make install
python3.6 -c "import sqlite3; print(sqlite3.sqlite_version)"
export LD_LIBRARY_PATH=/usr/local/lib
python3.6 -c "import sqlite3; print(sqlite3.sqlite_version)"
# 3.24.0 버전으로 확인될 것이다.
cd ..
rm -rf sqlite-autoconf-3240000
#로 파일을 삭제한다.
|
파이썬 3.6 설치 스크립트
###############################################################
## CentOS 7 Package Update
#yum update할 때 kernel은 업데이트되지 않게 하기
vi /etc/yum.conf
[main]
exclude=kernel*
#저장(:wq)하고 나온다.
# 그래야만 CentOS 7.4 커널은 업데이트 되지 않고 나머지 사항은 업데이트된다.
yum -y update
###############################################################
# 파이썬(Python) 설치 과정
###############################################################
rpm -qa | grep mariadb
# 설치된 것이 없다면 아래 한꺼번에 지우기는 실행하지 않아도 된다.
## 설치된 것 한꺼번에 지우기
rpm -qa | grep mariadb >list
# vi list로 해서 삭제 안할 리스트는 선별 제거한다.
sudo yum -y remove $(awk '{print $1}' <list)
# python 2.7.X 버전이 설치된 것을 확인한다.
rpm -qa | grep python
# Python 모듈을 빌드하려면 개발 도구가 필요
yum -y install epel-release
yum -y groupinstall 'Development Tools'
yum -y install yum-utils
yum -y install zlib zlib-devel libffi-devel
yum -y install zip unzip wget mc git net-tools
yum -y install mariadb-devel
yum -y install gcc gcc-c++ python3 python3-devel openssl openssl-devel
python3 -V
pip3 -V
# pip 설치는 가상환경 만들어서 하는 걸 권장하므로 아래 한줄은 주석처리했다.
# pip3 install --upgrade pip
# 현재 Alias 확인
ls -l /bin/python*
ln -s /bin/pip3.6 /bin/pip
# 아래와 같이 수정하지 않으면 yum 설치가 되지 않는다.
vi /usr/bin/yum
# 첫줄에 python 을 python2.7 로 변경하고 저장(:wq)한다.
vi /usr/libexec/urlgrabber-ext-down
# 첫줄에 python 을 python2.7 로 변경하고 저장(:wq)한다.
###### SQLite3 DB 설정 ###################################
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 –version
.quit
# 빠져나오는 것은 .quit
##### 파이썬 가상환경 설정 ####################################
mkdir -p /home/httpd/python/
cd /home/httpd/python/
python3 -m pip install virtualenv
python3 -m pip install --upgrade pip
# 가상환경 이름을 django 로 설정했는데 다른 명칭으로 변경해도 된다.
virtualenv django
cd /home/httpd/python/django
# django 가상환경 실행
source /home/httpd/python/django/bin/activate
pip3 install --upgrade pip setuptools
pip3 install Django
pip3 install djangorestframework
# MySQL 이나 MaraiDB 와 연동 목적
pip3 install mysqlclient
# 파이썬 디버깅 도구 설치
pip3 install pylint
pip3 install twisted
# Flask 를 하지 않을 경우에는 생략한다.
# Flask 는 아직 테스트해보지 않아 틀릴 수도 있다.
# Flask 로 API 서버 개발시 필요한 패키지
pip3 install --upgrade pip setuptools
pip3 install flask
pip3 install PyJWT
pip3 install flask-mysqldb
pip3 install bcrypt
pip3 install python-dateutil
pip3 install -U flask-cors
pip3 install pillow
pip3 install pymysql
pip3 install requests
pip3 install firebase-admin
# 장고 프로젝트 생성 및 Web 서버 구동 테스트
cd /home/httpd/python/django
django-admin startproject config .
chmod 755 manage.py
python manage.py makemigrations
python manage.py migrate
# superuser 는 추가하고 싶은 만큼 여러번 실행하면 된다.
python manage.py createsuperuser
# userid,email,password 생성
cd config
vi settings.py
ALLOWED_HOSTS = ['*']
# 변경하고 :wq (저장)하고 나온다.
# 8000번 포트로 Web 서버 구동
python manage.py runserver 0.0.0.0:8000
# 서버를 재부팅하거나 Web 서버를 중지시킨 경우에 다시 실행하는 명령어
cd /home/httpd/python/django/
source /home/httpd/python/django/bin/activate
python manage.py runserver 0.0.0.0:8000
# django 프로젝트를 생성해서 하는 사항은 여기서는 배제한다.
##########################################################################
# 방화벽 설정
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 --reload
firewall-cmd --list-all
#########################################################################
# Databse 접근을 위한 SELinux 설정 변경
# SELinux 상태 확인
sestatus
#SELinux httpd flag 확인 : 네트워크를 통해 Database에 연결할 수 있는 옵션이 꺼져 있음
getsebool -a | grep httpd
# Database 접근을 위한 SELinx 설정 변경
setsebool -P httpd_can_network_connect_db 1
# SELinux 비활성화 하기
vi /etc/sysconfig/selinux
SELINUX=disabled
:wq 로 저장하고 나온다.
# 재부팅해야 SELinux 명령어 수정한 사항이 적용된다.
reboot
# 임시 비활성화 방법
setenforce 0
|
MariaDB 10.4 설치 스크립트
################################
##### MariaDB 10.4 버전 설치 #####
################################
vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/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 codefox@localhost identified by 'NiceWonderfull!#%';
grant all privileges on pythondb.* to codefox@localhost;
flush privileges;
quit
### 테이블 백업하기 ####
mysqldump -uroot -p --databases pythondb > pythondb.sql
### 테이블 구조만 백업하기 ####
mysqldump -uroot -p --no-data --databases pythondb > pythondb.sql
###################################
##### root 패스워드 분실 복구 #####
###################################
# 서비스 정지
systemctl stop mariadb
# mariadb 안전모드 실행
sudo /usr/bin/mysqld_safe --skip-grant &
# 패스워드 변경
mysql -uroot mysql
update user set password=password('변경할비밀번호') where user='root';
flush privileges;
exit;
|
PHP 7.4 설치 스크립트
#############################################
# PHP 7.4 와 Apache 설치
#############################################
## 현재 설치된 PHP 버전 확인
yum list php
yum -y install expat-devel
# 설치 확인 방법1
yum list installed | grep httpd
yum list installed | grep php
# 설치 확인 방법2
rpm -qa | grep httpd
rpm -qa | grep php
## 설치된 것 한꺼번에 지우기
rpm -qa | grep php >list
# vi list로 해서 삭제 안할 리스트는 선별 제거한다.
sudo yum -y remove $(awk '{print $1}' <list)
rpm -qa | grep httpd >list
# vi list로 해서 삭제 안할 리스트는 선별 제거한다.
sudo yum -y remove $(awk '{print $1}' <list)
# yum 삭제 방법 (실제 삭제할 사항이 아니라 주석(#) 처리)
# yum remove -y vsftpd
# Remi 저장소를 설치하고 활성화한다.
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# yum 저장소와 패키지를 관리
yum -y groupinstall "Development tools"
yum -y install epel-release yum-utils
# Disable repo for PHP 5.4
yum-config-manager --disable remi-php54
yum-config-manager --enable remi-php74
# Install PHP 7.4 on CentOS 7
yum install -y --enablerepo=remi-php74 httpd php php-cli php-common php-devel php-ldap
yum install -y --enablerepo=remi-php74 php-mbstring php-mcrypt php-mysqlnd mod_ssl php-pdo
yum install -y --enablerepo=remi-php74 php-pgsql php-sqlite php-process php-snmp php-soap
yum install -y --enablerepo=remi-php74 php-libxml php-xml php-pear php-gd php-fpm php-dom
yum install -y --enablerepo=remi-php74 php-ssh2 php-xmlreader php-curl php-date php-exif
yum install -y --enablerepo=remi-php74 php-filter php-simplexml php-hash php-iconv php-imagick
yum install -y --enablerepo=remi-php74 php-json php-openssl php-pcre php-posix php-sockets
yum install -y --enablerepo=remi-php74 php-spl php-tokenizer php-zlib php-gmp php-Icinga php-intl
yum install -y --enablerepo=remi-php74 php-pecl-zip zip php-zip php-pspell
yum install -y --enablerepo=remi-php74 wget unzip mc git nmap telnet net-tools
# PHP 버전 확인
php -v
# Apache 버전 확인
httpd -v
# 서비스 활성화(재부팅시 auto start)
systemctl enable httpd
# 서비스 시작
systemctl start httpd
# 서비스 구동 상태 확인
systemctl status httpd
# 서비스 중지
systemctl stop httpd
# 서비스 재시작
systemctl restart httpd
# openssl 버전 확인
openssl version
###################################################
# Apache 환경 설정
###################################################
# Web root 디렉토리 : /var/www/html 기본 설정인데 아래는 home 디렉토리 하단으로 수정했다.
# 보안 설정 부분이 같이 포함되어 있으니 아래와 같이 설정하면 도움된다.
# 더 자세한 사항은 구글링해서 찾아보시라.
## httpd.conf 파일 수정
vi /etc/httpd/conf/httpd.conf
ServerName localhost
DocumentRoot "/home/httpd/htdocs"
<Directory "/home/httpd">
AllowOverride None
Require all granted
</Directory>
<Directory "/home/httpd/htdocs">
Options +FollowSymLinks -Indexes
AllowOverride All
Require all granted
<LimitExcept GET POST>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
<IfModule mime_module>
TypesConfig /etc/mime.types
#AddType application/x-gzip .tgz
#AddEncoding x-compress .Z
#AddEncoding x-gzip .gz .tgz
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php .html .do
AddType application/x-httpd-php-source .phps
AddType text/css .css
AddType text/javascript .js
#AddHandler cgi-script .cgi
#AddHandler type-map var
#AddOutputFilter INCLUDES .shtml
</IfModule>
ErrorDocument 400 /error.php
ErrorDocument 401 /error.php
ErrorDocument 402 /error.php
ErrorDocument 403 /error.php
ErrorDocument 404 /error.php
ErrorDocument 405 /error.php
ErrorDocument 408 /error.php
ErrorDocument 500 /error.php
ErrorDocument 501 /error.php
ErrorDocument 502 /error.php
ErrorDocument 503 /error.php
# 반드시 서버 정보 노출 방지 추가해야 함.
ServerTokens Prod
ServerSignature Off
TraceEnable Off
# 저장(:wq)하고 나온다.
# Apache HTTPOXY 취약점 방지
echo "RequestHeader unset Proxy early" >> /etc/httpd/conf/httpd.conf
##################################
# PHP.ini 환경 설정 수정사항
##################################
vi /etc/php.ini
short_open_tag = On
cgi.fix_pathinfo=0
;PHP 버전 정보 노출 방지(Hide PHP Version Number)
expose_php = Off
post_max_size = 20M ;// 8M 으로 되어 있었음.
upload_max_filesize = 18M ;// 기본 2M 으로 되어 있었음
date.timezone ="Asia/Seoul"
;PHP에서 세션은 일단 생성 된 뒤에, 가비지 콜렉터 관리로직에 의해 소멸된다.
session.gc_probability = 1
session.gc_divisor = 1
;이값이 100이면 1/100 즉 1%의 확률로 가비지콜렉션이 실행된다.
;1이면 정확하게 유효기간이 넘은 데이타가 삭제된다.
; 세션 시간은 1시간으로 설정한다.
session.gc_maxlifetime = 3600
# 저장(:wq)하고 나온다.
#####################################################################
# Web 서버 root 디렉토리 생성
mkdir -p /home/httpd/htdocs
# 반드시 추가구현해야 문제없이 동작한다. error.php 파일 내용은 오픈하지 않는다.
# error.php 대신에 index.php 로 설정해도 무방하다.
# 해커가 없는 파일을 검색으로 찾을 때 비정상적으로 검색한다는 걸 알려주는 error.php 파일인데,
# 비정상적인 파일 검색 실행시 무조건 index.php 로 가도록 설정해도 되기 때문이다.
# Web 서버 root 디렉토리로 이동
cd /home/httpd/htdocs/
vi .htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ error.php?/$1 [QSA,PT,L]
</IfModule>
## 보안설정
sudo chmod 640 /etc/httpd/conf/httpd.conf
sudo chown root:root /etc/httpd/conf/httpd.conf
sudo chmod 640 /etc/php.ini
sudo chown root:root /etc/php.ini
sudo chown -R apache:apache /home/httpd/htdocs
sudo chmod -R 755 /home/httpd/htdocs
# 방화벽 설정 확인
iptables -L
# Apache 재시작
systemctl restart httpd
# 만약 Web 서버가 동작하지 않는다면 에러 로그를 살펴봐야 한다.
cd /var/log/httpd/
# 열린포트 확인
yum -y install net-tools
netstat -nltp
### 시간 동기화
yum -y install rdate
crontab -e
00 00 * * * /usr/bin/rdate -s time.bora.net && /sbin/clock -w
#####################################
# 최신버전 phpMyAdmin 설치
#####################################
# Web 서버 root 디렉토리로 이동
cd /home/httpd/htdocs
wget https://files.phpmyadmin.net/phpMyAdmin/5.1.1/phpMyAdmin-5.1.1-all-languages.zip
unzip phpMyAdmin-5.1.1-all-languages.zip
chown -R apache:apache phpMyAdmin-5.1.1-all-languages
mv phpMyAdmin-5.1.1-all-languages pma
cd pma
cp -rp config.sample.inc.php config.inc.php
# 환경 설정
vi config.inc.php
$cfg['blowfish_secret'] = 'qtdRoGmbcr]0s)r$9b_JUnoGmbcr]0s)r$9b{~Xz'; // 임의의 값 설정
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['compress'] = true;
$cfg['TempDir'] = '/tmp';
# 저장(:wq)하고 빠져나온다.
# 주의사항
# phpMyAdmin 편리한 만큼 특정 IP에서만 접속하도록 IPFiltering을 설정하는 걸 추가해줘야 안전하다.
# 설정 방법은 블로그 게시글을 찾아서 적용하기 바란다.
###############################
# composor 설치
###############################
cd /home/httpd/htdocs
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
composer -V
export COMPOSER_ALLOW_SUPERUSER=1
echo "export COMPOSER_ALLOW_SUPERUSER=1" >> ~/.bashrc
cat ~/.bashrc | grep export
# PHPSpredSheet 설치
cd /home/httpd/htdocs
composer require phpoffice/phpspreadsheet
# PHP Excel 예제는 본 블로그에 게시되어 있다.
###############################
# RSA 암호화 통신을 위한 설정
###############################
#리눅스 SSH 에서 RSA 공개키, 개인키 생성방법
mkdir -p /home/rsa/key/
cd /home/rsa/key/
# Private Key 생성
openssl genrsa -out rsa_pri.pem 1024
# Public Key 생성
openssl rsa -pubout -in rsa_pri.pem -out rsa_pub.pem
# RSA javascript 암호화 PHP 복호화 예제는 구글링으로 찾아보시라.
# RSA kotlin 암호화 PHP 복호화 예제는 구글링으로 찾아서 해결하시라.
|
728x90
'리눅스' 카테고리의 다른 글
Apache log Full (0) | 2022.02.22 |
---|---|
CentOS 7 docker 설치 및 컨테이너 사용 방법 (2) | 2021.12.31 |
[CentOS] PHP MySQL 일괄 MySQLi 로 변경 방법 (0) | 2021.11.05 |
VirtualBox CentOS 7 NAT (0) | 2021.11.05 |
CentOS 7 에서 MySQL 5.7 yum 설치 스크립트 (0) | 2021.10.23 |