워드프레스는 웹에서 가장 인기 있는 오픈 소스 블로그 시스템이자 CMS이다. PHP와 MySQL을 기반으로 한다. 수천 개의 무료 플러그인과 테마로 기능을 확장할 수 있다.
가상 머신에서 간단하게 워드프레스를 호스팅해보자.
먼저 수동으로 셋업하고, 자동으로 Vagrantfile로 Provisoning을 해보자.
수동 - WordPress 호스팅하기
$ vagrant init spox/ubuntu-arm
Vagrant.configure("2") do |config|
config.vm.box = "spox/ubuntu-arm"
config.vm.network "private_network", ip: "192.168.33.11"
config.vm.network "public_network"
end
- vagrantfile을 생성하여 network을 설정하고 가상 머신을 생성한다.
apache, php, mysql, 종속성 설치
sudo apt install apache2 \
ghostscript \
libapache2-mod-php \
mysql-server \
php \
php-bcmath \
php-curl \
php-imagick \
php-intl \
php-json \
php-mbstring \
php-mysql \
php-xml \
php-zip
- apache, php, mysql을 설치하고 관련된 패키지를 설치한다.
Install WordPress
Ubuntu Archive의 APT 패키지가 아닌 WordPress.org의 릴리스를 사용할 예정이다.
릴리스를 사용하면 워드프레스에서 해결할 수 없는 문제가 적어진다.
sudo mkdir -p /srv/www
sudo chown www-data: /srv/www
curl https://wordpress.org/latest.tar.gz | sudo -u www-data tar zx -C /srv/www
- 설치 디렉토리를 생성하고 WordPress.org에서 파일을 다운로드한다.
Configure Apache for WordPress
<VirtualHost *:80>
DocumentRoot /srv/www/wordpress
<Directory /srv/www/wordpress>
Options FollowSymLinks
AllowOverride Limit Options FileInfo
DirectoryIndex index.php
Require all granted
</Directory>
<Directory /srv/www/wordpress/wp-content>
Options FollowSymLinks
Require all granted
</Directory>
</VirtualHost>
- WordPress용 Apache 사이트를 만든다. 다음 명령어를 사용하여 /etc/apache2/sites-available/wordpress.conf를 생성한다.
sudo a2ensite wordpress
- wordpress를 사용할 수 있도록 한다.
- 이 명령어는 soft link를 생성한다.
sudo a2enmod rewrite
sudo a2dissite 000-default
- default 페이지로 apache로 연결하지 않도록 한다.
sudo service apache2 reload
- 변경된 설정을 적용하기 위해 apache를 reload한다.
데이터베이스 mysql 설정하기
$ sudo mysql -u root
mysql> CREATE DATABASE wordpress;
mysql> CREATE USER wordpress@localhost IDENTIFIED BY '<your-password>';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON wordpress.* TO wordpress@localhost;
mysql> FLUSH PRIVILEGES;
워드프레스를 mysql에 연결하도록 설정하기
이제 이 데이터베이스를 사용하도록 WordPress를 구성한다.
sudo -u www-data cp /srv/www/wordpress/wp-config-sample.php /srv/www/wordpress/wp-config.php
- 먼저 샘플 구성 파일을 wp-config.php에 복사한다.
sudo -u www-data sed -i 's/database_name_here/wordpress/' /srv/www/wordpress/wp-config.php
sudo -u www-data sed -i 's/username_here/wordpress/' /srv/www/wordpress/wp-config.php
sudo -u www-data sed -i 's/password_here/<your-password>/' /srv/www/wordpress/wp-config.php
- 그 다음 구성 파일에서 데이터베이스 자격 증명을 설정한다.
define( 'AUTH_KEY', 'put your unique phrase here' );
define( 'SECURE_AUTH_KEY', 'put your unique phrase here' );
define( 'LOGGED_IN_KEY', 'put your unique phrase here' );
define( 'NONCE_KEY', 'put your unique phrase here' );
define( 'AUTH_SALT', 'put your unique phrase here' );
define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
define( 'LOGGED_IN_SALT', 'put your unique phrase here' );
define( 'NONCE_SALT', 'put your unique phrase here' );
define('AUTH_KEY', ';Ec|+/R+{KROU.e+%2yb(tVMx4p4B%Y.l&m.CXKVFCim@![&KYE>|/:SqV/ [NH(');
define('SECURE_AUTH_KEY', 'DN#(UT>=+&%Ht+[zz]/lP-~,8/;;q2np&bt*A@M?0E#*@$2 A8GrT6Eza0-7|5|6');
define('LOGGED_IN_KEY', 'r(|ac#vUY*A848ykxh9+Gz_+d5z|ZWQ-i i-hc,xj^1u`$}R,CP5XlYl+pv)V%+~');
define('NONCE_KEY', 'a;{5_tv52EO-zm#>C0[5(Y(AzV~Wxvm%l_BJ?2U),$876TD-;~f!L>JV&N3uWZrf');
define('AUTH_SALT', '%gDcPu42B{4eQ1EfN+yKpl16wMy:q&pV+v!Vn1QBHKhoaXH_y{C)JmI4O,;l}>X}');
define('SECURE_AUTH_SALT', '9Y7&if.jU,=~P-Yt@KJ)D4d=|~>BIeTD(b|)/2r{35KEtb*vPYNutq~= 6iC{Vw$');
define('LOGGED_IN_SALT', '5LUb>Rwy|s4-_yEC|Q+LQ4E.GsaDm)481g%jrV>jJ/|UL:B#X+Z-QshBpoo$[q}}');
define('NONCE_SALT', '+!u;q9xR`c(.x#i6#:AWS1>z|Y#pC0a$Flh6V*3S7#U=~-_]!-S/w8Pr!eV.-Vd^');
- srv/www/wordpress/wp-config.php 파일을 수정한다.
- 가상 머신을 설치할 때 설정한 private_network IP주소를 이용하여 접속한다.
Configure WordPress
자동 - WordPress 호스팅하기(IaC)
자동이랄 것도 없이 매우 간단하다.
provision 섹션에 위 과정을 그대로 작성하면 끝난다.
# Enable provisioning with a shell script. Additional provisioners such as
# Ansible, Chef, Docker, Puppet and Salt are also available. Please see the
# documentation for more information about their specific syntax and use.
config.vm.provision "shell", inline: <<-SHELL
sudo apt update
sudo apt install apache2 \
ghostscript \
libapache2-mod-php \
mysql-server \
php \
php-bcmath \
php-curl \
php-imagick \
php-intl \
php-json \
php-mbstring \
php-mysql \
php-xml \
php-zip -y
sudo mkdir -p /srv/www
sudo chown www-data: /srv/www
curl https://wordpress.org/latest.tar.gz | sudo -u www-data tar zx -C /srv/www
cp /vagrant/wordpress.conf /etc/apache2/sites-available/wordpress.conf
sudo a2ensite wordpress
sudo a2enmod rewrite
sudo a2dissite 000-default
sudo service apache2 reload
mysql -u root -e 'CREATE DATABASE wordpress;'
mysql -u root -e 'CREATE USER wordpress@localhost IDENTIFIED BY "admin123";'
mysql -u root -e 'GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON wordpress.* TO wordpress@localhost;'
mysql -u root -e 'FLUSH PRIVILEGES;'
sudo -u www-data cp /srv/www/wordpress/wp-config-sample.php /srv/www/wordpress/wp-config.php
sudo -u www-data sed -i 's/database_name_here/wordpress/' /srv/www/wordpress/wp-config.php
sudo -u www-data sed -i 's/username_here/wordpress/' /srv/www/wordpress/wp-config.php
sudo -u www-data sed -i 's/password_here/admin123/' /srv/www/wordpress/wp-config.php
service mysql restart
SHELL
cp /vagrant/wordpress.conf /etc/apache2/sites-available/wordpress.conf
wordpress.conf에서 수정할 부분은 로컬 폴더를 공유하는 위치에 파일을 이동하여 가상 머신으로 이동하여 적용할 수 있다.
mysql -u root -e 'CREATE DATABASE wordpress;'
mysql에 로그인 없이 쿼리를 작성하려면 mysql -u root 명령어로 로그인을 한뒤 -e 옵션을 추가하여 쿼리를 입력하면 된다.
vagrant up 명령어를 사용하면 가상 머신이 생성되면서 provision 섹션에 입력된 명령어가 실행되면서 워드프레스가 설치된다.