1)root 권한으로 변경
자신의 계정 보기
# whoami
sudo 명령어 실행. root 권한으로 root 로 로그인하는 명령어를 실행한다.
# sudo su
기본 계정의 UserID 는 그림과 다를 수 있음. 위 예시에서 기본 아이디는 scpplanb 이다.
2) 현재 서버에 설치된 패키지 최신버전으로 업그레이드
APT란 Advanced Packaging Tool 을 뜻합니다.
우리는 apt 라는 우분투에 내장된 프로그램을 이용해서 프로그램을 쉽게 설치/제거 할 수 있습니다.
패키지 목록 갱신.
#apt-get update
현재 운영체제에 설치되어있는 프로그램 최신버전패치
#apt-get upgrade
3) 시스템 시간 설정
이것을 하지 않으면 영국 시간을 불러올 것이다.
물론 초기 설치할 때 Asia/Seoul 을 설정했다면 이 작업을 할 필요는 없다. 하지만 또 한다고 해서 문제되지는 않는다.
- 데비안 패키지 재설정 TimeZone Data 를 실행한다.
#dpkg-reconfigure tzdata
GUI 환경이 나올 텐데, 순서대로 Asia - Seoul 을 선택하면 된다.
4) Apache2 설치
#apt-get install apache2
16.04 LTS 에서는 apache 2.4.x 가 설치된다.
가끔씩 apt-get update 및 apt-get upgrade 를 실행하면 아무런 문제없이 최신버전으로 업데이트 될 것이다.
설치가 완료되면 자동적용 및 시작된다.
혹시 기동이 되고 있지 않다면 다음 명령어를 이용해서 기동하자
apachectl start
5) PHP 7.0 설치
#apt-get install php
16.04 에서는 PHP 7.0.x 가 설치된다.
PHP-아파치 연동모듈 설치
#apt-get install libapache2-mod-php7.0
기타 주로 사용되는 모듈을 설치한다.
- 암호화 모듈
#apt-get install php-mcrypt
- 다국어 처리모듈
#apt-get install php-mbstring
- 이미지처리 모듈
#apt-get install php-gd
- 원격지 정보 불러는 모듈 (워드프레스, 드루팔 등에서 쓰임)
#apt-get install php-curl php-xml
-추가로 설치하고 싶은 모듈이 있으면
#apt-cache search php-
#apt-cache search php-
라고 입력해서 설치가능한 패키지를 검색후 install 하도록 하자.
- 아파치 재시작(적용을 위해서)
#service apache2 restart
6) MariaDB 설치
mysql 과 mariadb 는 완전 API 호환된다.
#apt-get install mariadb-server
MariaDB 10.0.24 이 설치된다.
MariaDB 초기화.
다음의 명령어 실행하자.
/usr/bin/mysql_secure_installation
모르면 엔터 누르면 된다. (비밀번호만 설정하고 나머지는 엔터)
잘못한 것 같으면 위 명령어를 다시 실행하면 된다.
:: root 의 인증 플러그인 정보 제거하기
MySQL에 플러그인이라는 개념이 생겼다. 그 중 하나가 서버사이드 인증이다.
예를들어 Linux의 myuser1 사용자와 MySQL(MariaDB)의 myuser1 과 연결이 되는 경우이다. (비밀번호 필요없이 쉘인증)
root 사용자가 기본값으로 unix_socket Auth Plugin 이 설정되어 있지만 많은 불편함을 준다.
기존과 같이 비밀번호 인증 방식으로 바꾸도록 하자.
Linux root 사용자로 로그인한 상태에서
# mysql
(현재는 unix_socket 인증방식이라서 Linux root 사용자는 MySQL(MariaDB) root 계정에 비밀번호 없이 로그인 할 수 있다 하지만 비밀번호가 있다면
mysql -p
를 입력해주고 비번을 입력해서 들어가주자)
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;
DB 연동모듈 설치. 완전 호환되기 때문에 mysql 이라고 해도 mariadb 사용가능.
#apt-get install php-mysql
7) 기본 언어셋 설정(중요)
이 단계를 건너뛰면 DB가 latin1 으로 생성되며 추후 DB작업에 문제가 생길 수 있다.
#vi /etc/mysql/mariadb.conf.d/50-server.cnf
(vi 에디터 사용방법을 모른다면 ftp 클라이언트를 사용하여 서버에 로그인 후 해당파일을 수정하고 덮어쓰기한다.)
[mysqld] 항목에 다음 2 줄을 추가한다.
2015년도 부터는 아래와 같이 utf8mb4 속성을 사용하세요.
이 속성은 utf8확장입니다. 기존의 모든 utf8과 상위 호환됩니다.
(utf8 에서 utf8mb4 로의 변환은 손실이 일어나지 않습니다.)
utf8mb4 속성은 스마트폰 이모티콘 문자(emoji)를 저장할 수 있습니다.
/etc/mysql/mariadb.conf.d/50-server.cnf 에 추가
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
변경사항 적용
#service mysql restart
8) PHP 권한 설정
웹 서비스 구동시 발생할 수 있는 Nobody 퍼미션 관련 문제를 해결하기 위해 관련 프로그램을 설치한다.
이 세팅을 하면 shell의 권한과 sftp의 권한과 web의 권한이 동일하게 취급되며 보안도 좋게된다.
순서대로 쓰면 된다.
# apt-cache search mpm-itk
libapache2-mpm-itk - multiuser module for Apache
#apt-get install libapache2-mpm-itk
#chmod 711 /home
#chmod -R 700 /home/*
(/home/* 안에 아무파일도 없을 경우 마지막 구문은 에러가 날 수 있다. 에러가 나면 무시하도록 하자.)
9) PHP 실행확장자 변경
php 를 해석하는 확장자가 꽤 많이 있다.
#vi /etc/apache2/mods-available/php7.0.conf
.php .php3 .php4 .php5 .php7 .pht .phtml 확장자 파일이 기본적으로 php를 해석할 수 있게 되어있다.
웹페이지에서 파일업로드 구현시 이 확장자 파일을 제대로 막아주지 못하면 사이트가 위험하게 된다.
.php 를 제외한 나머지의 접근을 차단하자.
<FilesMatch ".+\.ph(p3|p4|p5|p7|t|tml)$">
Require all denied
</FilesMatch>
적용을 위해서 아파치 재시작
#service apache2 restart
10) PHP Default timezone 설정하기.
이 값을 설정하지 않으면 시스템 timezone 을 사용합니다.
PHP Default timezone 을 설정하는 것은 필수는 아니지만 매우 권장하는 작업입니다. 설정해주세요.
동일한 작업을 2개의 파일에 적용해 주어야 합니다.
이건 Apache2 - PHP 일때 참조하는 설정파일입니다.
#vi /etc/php/7.0/apache2/php.ini
이건 Cron이나 Console에서 PHP를 직접실행할때 참조하는 설정파일입니다.
#vi /etc/php/7.0/cli/php.ini
date.timezone 값을 찾아서 주석을 제거하고 시간을 설정해주세요.
이 값을 찾아서
이렇게 변경.
#service apache2 restart
나중에 mytest.php 파일을 만들고 웹브라우져에서 실행시킨 뒤 위와 같이 설정되어 있으면 정상이다.
mytest.php
<?php phpinfo(); ?>
Default timezone 이 설정되어 있으면 정상.
11) 계정생성 및 동작테스트
원래 표준명령어는 useradd 이지만 ubuntu는 사용하기 좋게 adduser 를 지원한다.
리눅스 관련 서적을 보면 둘다 계정생성용 명령어라고 되어있다.
쉬운 설정을 위해 adduser를 사용
#adduser myuser1
+(참고로 위와 반대동작을 하는 계정삭제 명령어는 - 계정을 삭제하고 홈디렉토리도 삭제함- 입니다.)
#userdel -r myuser1
보통 웹루트는 홈디렉토리에 하지 않습니다.
저는 주로 www 디렉토리를 사용합니다.사용자변경 후 www 디렉토리를 생성하고 빠져나오기
#su -l myuser1
#mkdir www
#exit
출처
'GCP(google cloud platform)로 서버 구축 > 서버환경 구축' 카테고리의 다른 글
GCP 서버 구축하기(우분투) (1) | 2020.05.31 |
---|