I have selected Ubuntu as OS platform to install my php, wordpress and mysql. It gave me lots of learning experience on Linux. Here is many steps I recorded during working on my 51sec.org blog site.
1. Configure Interfaces
Welcome to Ubuntu 15.10 (GNU/Linux 4.2.0-16-generic x86_64)
* Documentation: https://help.ubuntu.com/ 48 packages can be updated. 37 updates are security updates. Last login: Sat Feb 13 20:16:03 2016 from 192.168.2.62 john@ubuntu15:~$ cd /etc/network john@ubuntu15:/etc/network$ sudo vi interfaces [sudo] password for john: # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface — use DHCP auto eth0 iface eth0 inet dhcp ~ |
2. System Software Update
sudo apt-get update # Fetches the list of available updates
sudo apt-get upgrade # Strictly upgrades the current packages sudo apt-get dist-upgrade # Installs updates (new ones) sudo nano /etc/apache2/apache2.conf #add a single line “ServerName server_domain_or_IP “to the biottom of /etc/apache2/apache2.conf file to suppress a warning message. sudo apache2ctl configtest sudo systemctl restart apache2 |
Check Firewall to make sure allow inbound traffic for 80 and 443
ubuntu@ip-10-10-0-60:~$ sudo ufw app list
sudo: unable to resolve host ip-10-10-0-60 Available applications: Apache Apache Full Apache Secure OpenSSH ubuntu@ip-10-10-0-60:~$ sudo ufw app info “Apache Full” sudo: unable to resolve host ip-10-10-0-60 Profile: Apache Full Title: Web Server (HTTP,HTTPS) Description: Apache v2 is the next generation of the omnipresent Apache web server. Ports: 80,443/tcp ubuntu@ip-10-10-0-60:~$ sudo ufw allow in “Apache Full” sudo: unable to resolve host ip-10-10-0-60 Rules updated Rules updated (v6) ubuntu@ip-10-10-0-60:~$ sudo ufw app info “Apache Full” sudo: unable to resolve host ip-10-10-0-60 Profile: Apache Full Title: Web Server (HTTP,HTTPS) Description: Apache v2 is the next generation of the omnipresent Apache web server. Ports: 80,443/tcp |
john@ubuntu15:/etc/network$ cat /etc/*-release
DISTRIB_ID=Ubuntu DISTRIB_RELEASE=15.10 DISTRIB_CODENAME=wily DISTRIB_DESCRIPTION=”Ubuntu 15.10″ NAME=”Ubuntu” VERSION=”15.10 (Wily Werewolf)” ID=ubuntu ID_LIKE=debian PRETTY_NAME=”Ubuntu 15.10″ VERSION_ID=”15.10″ HOME_URL=”http://www.ubuntu.com/” SUPPORT_URL=”http://help.ubuntu.com/” BUG_REPORT_URL=”http://bugs.launchpad.net/ubuntu/” john@ubuntu15:/etc/network$ john@ubuntu15:/etc/network$ uname -a
Linux ubuntu15 4.2.0-16-generic #19-Ubuntu SMP Thu Oct 8 15:35:06 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
|
3. Install LAMP
3.1. Install Apache
sudo apt-get install apache2
|
3.2. Install MySQL
sudo apt-get install mysql-server
sudo mysql_install_db sudo mysql_secure_installation |
3.3. Install PHP
sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql
|
3.4. Restart Server
sudo /etc/init.d/apache2 restart
|
3.5. Check Apache
3.6. Check PHP
john@ubuntu15:/etc/network$ php -r ‘echo “\n\nYour PHP installation is working fine.\n\n\n”;’
Your PHP installation is working fine. ubuntu@ip-10-10-0-60:~$php -i ubuntu@ip-10-10-0-60:~$sudo nano /var/www/html/info.php <?php phpinfo(); ?> |
http://your_server_IP_address/info.php
4. Install Phpmyadmin (Optional)
$ sudo apt-get install phpmyadmin
|
follow configuration wizard to finish the configuration, such as choosing :
- apache2 for your web server
- yes for Configure database for phpmyadmin with dbconfig-common?
- MySQL application password for phpmyadmin:
- password for root user Password of the database’s administrative user:
5. Install WordPress
5.1 Install
cd ~ wget http://wordpress.org/latest.tar.gz tar xzvf latest.tar.gz sudo apt-get update sudo apt-get install php5-gd libssh2-php
5.2 Configure
ubuntu@ip-10-10-0-60:~$ cd ~/wordpress ubuntu@ip-10-10-0-60:~/wordpress$ cp wp-config-sample.php wp-config.php ubuntu@ip-10-10-0-60:~/wordpress$ curl -s https://api.wordpress.org/secret-key/1.1/salt/ define('AUTH_KEY', '/c|BO/-!OU8+unm:*{r.iZD/7.Ayge],.Unawgno^!%(=p@#U7fdW#3Q<hcq<&/e'); define('SECURE_AUTH_KEY', '5d;:+VIC&Lh6-F>IoYk6eQag=n,;/KB9^589o|Ou)_N-_yb;Bo7$t,}?Uc 4rtgO'); define('LOGGED_IN_KEY', '=/lVrQ?h6yt(yYi9VS=1kZehJ67z4o]bg{dO-jIXl*r8h~3qeUd9BK6!3|#@;.!2'); define('NONCE_KEY', 'HuHK`7HwsW7|jvAXY(AXWFYcWmbvW2-xwNw[HXM0nu?4P.GATiYXZhLsAiaqoF<N'); define('AUTH_SALT', '!qV`*1GT;dRH-Zf6Ylwa*I]]|Y/seeoHqc*-:N11xi.!<d8X|<bA`4ot-2oJrmNO'); define('SECURE_AUTH_SALT', '+TgB6l[^8LgLp65);+PtT2DYideMa>UD=SJZ2jD`Aaqz_dR1E@2r>;i:X1JLU{`g'); define('LOGGED_IN_SALT', 'R`~Rhkuzz}v|OM|<$JSjkBd,~y/fsePw[q6:hH>GR{u``I/pmRa_]BkG%g(@K36x'); define('NONCE_SALT', 'C305sfDZGO5~J3XLDp|QLw2]4QYZ1B/#UM[pC6Lt+tvkBi]9pl-k^]e6Cw$,DM1('); ubuntu@ip-10-10-0-60:~/wordpress$
ubuntu@ip-10-10-0-60:~/wordpress$ nano wp-config.php
5.3 Connect database
Change :
// ** MySQL settings - You can get this info from your web host ** // /** The name of the database for WordPress */ define('DB_NAME', 'wordpress'); /** MySQL database username */ define('DB_USER', 'wordpressuser'); /** MySQL database password */ define('DB_PASSWORD', 'password');
5.4 Copy Files to /var/www/html and Change Permission
sudo rsync -avP ~/wordpress/ /var/www/html/
cd /var/www/html
sudo chown -R ubuntu:www-data *
mkdir /var/www/html/wp-content/uploads
sudo chown -R :www-data /var/www/html/wp-content/uploads
5.5 Web Interface Installation
6. Allow Remote WordPress Connection to Mysql
6.1 Change MySql bind interface:
ubuntu@ip-10-1-1-50:/etc/mysql/mysql.conf.d$ netstat -ntlp | grep 3306 (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -
ubuntu@ip-10-1-1-50:/etc/mysql/mysql.conf.d$ vi mysqld.cnf
.....
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
# bind-address = 127.0.0.1
bind-address = 0.0.0.0
#
.....
ubuntu@ip-10-1-1-50:/etc/mysql/mysql.conf.d$ sudo /etc/init.d/mysql restart sudo: unable to resolve host ip-10-1-1-50 Restarting mysql (via systemctl): mysql.service. ubuntu@ip-10-1-1-50:/etc/mysql/mysql.conf.d$ netstat -ntlp | grep 3306 (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN -
6.2 Allow a new user with remote machine name or public ip to access Mysql DB
ubuntu@ip-10-1-1-50:/etc/mysql/mysql.conf.d$ sudo mysql -u root -p mysql sudo: unable to resolve host ip-10-1-1-50 Enter password: Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 74 Server version: 5.7.19-0ubuntu0.16.04.1 (Ubuntu) Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create user 'remotewordpressuser'@'ec2-34-215-22-243.us-west-2.compute.amazonaws.com' identified by '1234567890'; ERROR 1396 (HY000): Operation CREATE USER failed for 'remoteuser'@'ec2-34-215-22-243.us-west-2.compute.amazonaws.com' mysql> GRANT ALL ON *.* to remoteordpressuser@'ec2-34-215-22-243.us-west-2.compute.amazonaws.com' identified by '1234567890'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.01 sec) mysql> exit Bye ubuntu@ip-10-1-1-50:/etc/mysql/mysql.conf.d$
[root@ip-10-10-0-50 html]# mysql -h 50.40.50.80 -u remotewordpressuser -p
Enter password:
ERROR 1130 (HY000): Host 'ec2-34-215-22-243.us-west-2.compute.amazonaws.com' is not allowed to connect to this MySQL server
[root@ip-10-10-0-50 html]#
[root@ip-10-10-0-50 html]# mysql -h 50.40.50.80 -u remotewordpressuser -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 82
Server version: 5.7.19-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
[root@ip-10-10-0-50 html]# cp wp-config.php wp-config.php.old
[root@ip-10-10-0-50 html]# vi wp-config.php
<?php
/**
* The base configuration for WordPress
*
* The wp-config.php creation script uses this file during the
* installation. You don't have to use the web site, you can
* copy this file to "wp-config.php" and fill in the values.
*
* This file contains the following configurations:
*
* * MySQL settings
* * Secret keys
* * Database table prefix
* * ABSPATH
*
* @link https://codex.wordpress.org/Editing_wp-config.php
*
* @package WordPress
*/
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');
/** MySQL database username */
define('DB_USER', 'remotewordpressuser');
/** MySQL database password */
define('DB_PASSWORD', '1234567890');
/** MySQL hostname */
define('DB_HOST', '50.40.50.80');
/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8mb4');
/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');
/**#@+
Note:
a. Stop Mysql service and Disable it Auto Run when rebooted
ubuntu@ip-10-10-0-55:/var/log/apache2$ vmstat -s 1014648 K total memory 310308 K used memory 390732 K active memory 143836 K inactive memory 414364 K free memory 15576 K buffer memory 274400 K swap cache 0 K total swap 0 K used swap 0 K free swap 675 non-nice user cpu ticks 0 nice user cpu ticks 608 system cpu ticks 157804 idle cpu ticks 1517 IO-wait cpu ticks 0 IRQ cpu ticks 15 softirq cpu ticks 527 stolen cpu ticks 205823 pages paged in 23372 pages paged out 0 pages swapped in 0 pages swapped out 97824 interrupts 160060 CPU context switches 1506783521 boot time 1623 forks ubuntu@ip-10-10-0-55:/var/log/apache2$ sudo service mysql stop sudo: unable to resolve host ip-10-10-0-55 ubuntu@ip-10-10-0-55:/var/log/apache2$ vmstat -s 1014648 K total memory 154184 K used memory 235852 K active memory 132412 K inactive memory 581604 K free memory 15648 K buffer memory 263212 K swap cache 0 K total swap 0 K used swap 0 K free swap 696 non-nice user cpu ticks 0 nice user cpu ticks 612 system cpu ticks 167728 idle cpu ticks 1523 IO-wait cpu ticks 0 IRQ cpu ticks 15 softirq cpu ticks 528 stolen cpu ticks 207123 pages paged in 23868 pages paged out 0 pages swapped in 0 pages swapped out 101681 interrupts 167164 CPU context switches 1506783521 boot time 1657 forks ubuntu@ip-10-10-0-55:/var/log/apache2$ sudo nano /etc/init/mysql.conf sudo: unable to resolve host ip-10-10-0-55 GNU nano 2.5.3 File: /etc/init/mysql.conf description "MySQL 5.7 Server" author "Mario Limonciello <[email protected]>" #start on runlevel [2345] stop on starting rc RUNLEVEL=[016] respawn respawn limit 2 5 env HOME=/etc/mysql umask 007 # The default of 5 seconds is too low for mysql which needs to flush buffers kill timeout 300
b. Stop Apache2 Service and Disable it Auto Run when rebooted
- systemctl command – Only works on systemd based Ubuntu like version 16.04 LTS and above.
- /etc/init.d/apache2 – A sys v init style script to start / stop / restart the Apache2 service under Debian or Ubuntu Linux.
- service command – This command work in most Linux distributions including Debian and Ubuntu.
- upstart command – Only works on certain version of Ubuntu.
- apache2ctl command – This method should work on all Linux and Unix likeoperating systems.
$ lsb_release -a $ sudo systemctl stop apache2.service $ sudo systemctl status apache2.service
$ sudo apt-get install rcconf
$ sudo rcconf
7. Install free https certificate
https://letsencrypt.org/ provides free ssl/tls certificate for popular application platform using Certbot ACME client to simplify the whole process.
$ sudo apt-get update $ sudo apt-get install software-properties-common $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt-get update $ sudo apt-get install python-certbot-apache
$ sudo certbot --apache
Reference:
- Tutorial: Hosting a WordPress Blog with Amazon Linux
- Tutorial: Installing a LAMP Web Server on Amazon Linux
- How To Install Linux, Apache, MySQL, PHP (LAMP) stack on Ubuntu 16.04
- How To Install WordPress with LAMP on Ubuntu 16.04