우분투 서버 nginx, php 7.2.x, mariadb 10.3.x 설치 스크립트

우분투 서버에 nginx 최신 안정버전, php 7.2.x, mariadb 10.3.x 버전 설치를 위한 스크립트이다. 아래 스크립트트를 server.sh 등으로 저장한 후 실행 권한을 준 후 실행한다. 사용자명, 비밀번호, 도메인을 입력받아 설치를 진행하며 DB 생성을 위해 DB root 비밀번호 입력이 필요하다. 스크립트는 우분투 서버 16.04 LTS(64비트)에서 테스트 했다.

#!/bin/bash
# ================================================================== #
# nginx, php 7.2.x, mariadb 10.3.x install shell script for Ubuntu
# ================================================================== #
# Copyright (c) 2018 Seongho Jang https://ncube.net
# This script is licensed under MIT
# ================================================================== #

# Input username, password, domain
while [[ $username == '' ]]
do
    read -p "Enter Username: " username
done

while [[ $password == '' ]]
do
    read -s -p "Enter Password: " password
    echo -e ""
done

while [[ $domain == '' ]]
do
    read -p "Enter domain: " domain
done

# Update package
sudo apt-get update
sudo apt-get -y upgrade

# Set locale
#sudo dpkg-reconfigure locales
sudo apt-get -y install language-pack-ko-base language-pack-ko
sudo locale-gen ko_KR.UTF-8
sudo locale-gen en_US.UTF-8
sudo localectl set-locale LANG=ko_KR.UTF-8 LANGUAGE="ko_KR:ko"
sudo source /etc/default/locale

# Install mail
sudo apt-get -y install sendmail
sudo apt-get -y install mailutils

# Create user
sudo groupadd "$username"
sudo useradd -g "$username" -s /bin/bash -m "$username"
echo -e "$password\n$password\n" | sudo passwd "$username"

# Make directory
sudo mkdir -p /home/"$username"/www
sudo chown "$username"."$username" /home/"$username"/www

# Set timezone
sudo timedatectl set-timezone Asia/Seoul
sudo apt-get install -y rdate
sudo /usr/bin/rdate -s time.bora.net; /sbin/hwclock --systohc

# Install MariaDB 10.3.x
sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,arm64,i386,ppc64el] http://ftp.kaist.ac.kr/mariadb/repo/10.3/ubuntu '$(lsb_release -cs)' main'
sudo apt-get update
sudo apt-get -y install mariadb-server

# Install nginx latest stable version
sudo sh -c "echo 'deb http://nginx.org/packages/ubuntu/ `lsb_release -cs` nginx' >> /etc/apt/sources.list"
sudo sh -c "echo 'deb-src http://nginx.org/packages/ubuntu/ `lsb_release -cs` nginx' >> /etc/apt/sources.list"
curl http://nginx.org/keys/nginx_signing.key | apt-key add -
sudo apt-get update
sudo apt-get install -y nginx

# Install PHP 7.2.x
sudo apt-get -y install python-software-properties
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install -y php7.2-cli php7.2-fpm php7.2-bcmath php7.2-bz2 php7.2-common php7.2-curl php7.2-dba php7.2-gd php7.2-json php7.2-mbstring php7.2-mysql php7.2-opcache php7.2-readline php7.2-soap php7.2-xml php7.2-xmlrpc php7.2-zip

# nginx configure
sudo service nginx stop

sudo cat > /etc/nginx/conf.d/"$domain".conf <<WEBCONF
server {
    listen 80 default_server ;
    server_name $domain www.$domain ;
    root /home/$username/pg ;

    access_log /var/log/nginx/$domain.access.log ;
    error_log  /var/log/nginx/$domain.error.log warn ;

    location / {
        index index.php index.html index.htm ;
    }
    
    include /etc/nginx/php.conf ;
    
}
WEBCONF

# Create database
sudo service mysql restart
read -s -p "Enter DB Root Password: " dbpassword
mysql -uroot -p${dbpassword} -e "CREATE DATABASE ${username} DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"
mysql -uroot -p${dbpassword} -e "CREATE USER ${username}@localhost IDENTIFIED BY '${password}';"
mysql -uroot -p${dbpassword} -e "GRANT ALL PRIVILEGES ON ${username}.* TO '${username}'@'localhost';"
mysql -uroot -p${dbpassword} -e "FLUSH PRIVILEGES;"

# Daemon start
echo -e ""
sudo nginx -t
sudo php-fpm7.2 -t
sudo service php7.2-fpm restart
sudo service nginx restart

echo "Complete!"

/etc/nginx/php.conf 파일의 내용은 아래와 같다.

# Block dot file (.htaccess .htpasswd .svn .git .env and so on.)
location ~ /\. {
    deny all;
}

# Block (log file, binary, certificate, shell script, sql dump file) access.
location ~* \.(log|binary|pem|enc|crt|conf|cnf|sql|sh|key)$ {
    deny all;
}

# Block access
location ~* (composer\.json|contributing\.md|license\.txt|readme\.rst|readme\.md|readme\.txt|copyright|artisan|gulpfile\.js|package\.json|phpunit\.xml)$ {
    deny all;
}

location = /favicon.ico {
    log_not_found off;
    access_log off;
}

location = /robots.txt {
    log_not_found off;
    access_log off;
}

# Block .php file inside upload folder. uploads(wp), files(drupal), data(gnuboard).
location ~* /(?:uploads|default/files|data)/.*\.php$ {
    deny all;
}


location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    if (!-f $document_root$fastcgi_script_name) {
        return 404;
    }

    # flush
    fastcgi_keep_conn on;
    gzip off;
    proxy_buffering off;
    include fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_read_timeout 3600;
    fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    fastcgi_index index.php;       
}

Vagrant 와 Virtualbox 를 이용한 Ubuntu 16.04 가상머신 설정

Virtualbox 설치

echo "deb http://download.virtualbox.org/virtualbox/debian xenial contrib" | sudo tee --append /etc/apt/sources.list
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install virtualbox-5.2

Virtualbox Extentension Pack 설치

LatestVirtualBoxVersion=$(wget -qO - http://download.virtualbox.org/virtualbox/LATEST.TXT) && wget "http://download.virtualbox.org/virtualbox/${LatestVirtualBoxVersion}/Oracle_VM_VirtualBox_Extension_Pack-${LatestVirtualBoxVersion}.vbox-extpack"
sudo VBoxManage extpack install --replace Oracle_VM_VirtualBox_Extension_Pack-${LatestVirtualBoxVersion}.vbox-extpack

Vagrant 설치

wget https://releases.hashicorp.com/vagrant/2.1.2/vagrant_2.1.2_x86_64.deb
sudo dpkg -i vagrant_2.1.2_x86_64.deb

Ubuntu 16.04 box 설정

mkdir ubuntu-box
cd ubuntu-box
vagrant init ubuntu/xenial64

box 설정은 Vagrantfile 파일을 수정한다. 개인 PC에서 box 에 ssh 로 접속할 수 있도록 public_network 로 설정하고 bridge 모드로 설정한다. ip는 고정 ip 로 설정한다. cpu 개수와 메모리 용량을 지정한다. Read More

우분투 18.04 topbar 시간 표시 커스터마이징

우분투 18.04 데스크톱에서 topbar(상단바) 의 시간 표시를 커스터마이징 하는 방법이다. datetime-format  그놈 확장 프로그램을 설치해야 한 후 설정을 하면 된다. datetime-format 확장의 프로그램 코드를 수정하지 않으면 이미지와 같이 한글을 표시 형식에 넣을 경우 설정 화면이 깨지는 등의 오류가 발생할 수 있는데 유니코드에 대응하도록 수정된 코드를 적용하여 github 개인 Repo에 업로드 하였다. datetime-format 를 설치하기 위해서는 nodejs 가  설치되어 있어야 한다. Read More

Ubuntu 16.04 LTS 계정추가 쉘스크립트

우분투 16.04 LTS 서버 환경에서 계정 추가를 위한 쉘 스크립트이다. 사용자명과 비밀번호를 입력받아 처리한다.

#!/bin/bash

# Input username
read -p "Enter Username: "  username

# Input password
read -s -p "Enter Password: " password

# Create user
groupadd "$username"

useradd -g "$username" -s /bin/bash -m "$username"

echo -e "$password\n$password\n" | sudo passwd "$username"

echo "Complete!"

계정 추가 후 서버 설치 등의 스크립트 코드를 추가할 수 있을 것이다.

우분투 18.04에 카카오톡 설치하기

아래 글을 보고 우분투 18.04 환경에 wine 을 이용해 카카오톡을 설치했다. PlayOnLinux 등을 설치하지 않고 wine 을 설치한 후 gdiplus, riched30, wmp9, msxml6 패키지 를 설치해야 한다고 나와있지만 패키지를 설치하지 않고 카카오톡을 설치해도 사용에는 이상이 없었다. 우분투 시스템에 cabextract 패키지가 설치되어 있지만 않으면 gdiplus 등은 설치가 되지 않기 때문에 바로 진행을 해보게 된 것이다.

참고 : https://hiseon.me/2018/07/02/ubuntu-kakaotalk/

설치는 wine 설치 -> 맑은 고딕 폰트 설치 -> 카카오톡 설치 의 순서로 진행한다. Read More