Basic Tutorial VPS Non Panel

Basic Cara Managed VPS Non-Panel Dengan Apache Webserver

Pada kesempatan ini kami akan mencoba membuat tutorial kecil mengenai penggunaan VPS Non-Panel. Ini berawal dari banyaknya teman-teman yang ingin menggunakan VPS karena websitenya sudah tidak layak di shared hosting atau karena ingin upgarde kebutuhan namun kebanyakan belum begitu terbiasa dengan VPS kosongan karena pada umumnya telah terbiasa dengan interface cPanel sementara mereka ingin berhemat budget dan resource dari VPS tersebut sehingga harus menggunakan VPS tanpa panel. Nah melihat kendala itu kami berniat membantu dengan membuatkan mini howto untuk managed VPS Non-Panel dengan harapan agar teman-teman yang mengalami kendala bisa mengikuti tutorial kami ini hingga berhasil dan jika masih stuck juga bisa menghubungi kami untuk dibantu (walaupun ambil VPS dari hoster lain tidak masalah kami akan bantu semampunya).
Tentunya untuk lebih memudahkan mengikuti tutorial ini alangkah baiknya sudah tahu apa itu VPS dan serta mempunyai sebuah VPS untuk dipraktekan. Jika ada teman-teman yang masih belum tahu apa itu VPS, bisa merujuk ke link ini terkait penjelasan basic apa itu VPS?

Baik kita langsung saja untuk memulai tutorialnya dan berikut saya informasikan kondisi yang ditest untuk membuat tutorial ini :
a. VPS dengan OS CentOS 6 64 bit, 2vCore, 2GB Ram 30GB SSD
b. Menggunakan webserver apache dengan database server MariaDB 5.5.49
c. Menggunakan internal DNS dengan BIND (configurasi standard)
d. IP server : 112.113.114.115, Domain : contohdomainsaya.com dan NS : ns1. conothdomainsaya.com dan ns2.conothdomainsaya.com
e. Bonus : FTP Server dengan pure-ftpd menggunakan mysql + configure database basic

Baik kita akan memulai dengan menginstall web server, database dan PHP

1. WEB Server BEGIN

Memulai install paket-paket yang dibutuhkan :
[root@dummy ~]# yum install httpd -y
[root@dummy ~]# service httpd start
[root@dummy ~]# chkconfig httpd on
[root@dummy ~]# yum update && yum install epel-release
[root@dummy ~]# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
[root@dummy ~]# yum --enablerepo=remi-test --disablerepo=remi install compat-mysql55
Buat repo untuk install MariDBnya :
[root@dummy ~]#  nano /etc/yum.repos.d/mariadb.repo

Kemudian pastekan baris di bawah dan save
====================================================================
# MariaDB 5.5 CentOS repository list - created 2013-06-06 07:53 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
====================================================================
Kemudian lakukan update dan install MariaDBnya :
[root@dummy ~]# yum update
[root@dummy ~]# yum install MariaDB-devel MariaDB-client MariaDB-server -y
[root@dummy ~]# service mysql start
[root@dummy ~]# chkconfig mysql on
Kemudian silahkan setting password untuk user root databasenya :
[root@dummy ~]# /usr/bin/mysql_secure_installation
Setelah itu install paket-paket PHP yang dibutuhkan
[root@dummy ~]# yum --enablerepo=remi install php-mysqlnd php-pgsql php-pecl-mongo php-pdo php-pecl-memcache php-pecl-memcached php-gd php-xml php-mbstring php-mcrypt php-pecl-apcu php-cli php-pear php
[root@dummy ~]# /etc/init.d/httpd restart
[root@dummy ~]# /etc/init.d/mysql restart

Untuk memastikan berhasil silahkan anda akses IP VPS anda dari web browser jika memunculkan halaman default apache maka anda berhasil sampai di sini
WEB Server DONE

Selanjutnya kita menginstall Bind untuk kebutuhan DNS

2. DNS Server BEGIN

Install paket yang dibutuhkan :
[root@dummy ~]# yum -y install bind bind-utils
Kemudian edit file /etc/named.conf seperti berikut ini :
[root@dummy ~]# nano /etc/named.conf
======================================================
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
        directory "/var/named";
        dump-file "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query { any; };
        recursion no;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
};

logging {
            category lame-servers
{
        null;
};
channel default_debug {
        file "data/named.run";
        severity dynamic;
};
        channel default_syslog {
        file "data/default.log";
        severity dynamic;
};
category queries
{
        default_syslog;
};
        category default
{
        default_debug;
};
};
zone "." IN {
        type hint;
        file "named.ca";
};

zone "contohdomainsaya.com" IN {
        type master;
        file "/var/named/contohdomainsaya.com.zone";
        };

zone "114.113.112.in-addr.arpa" IN {
        type master;
        file "/var/named/114.113.112.rev";
        allow-update { none; };
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
======================================================
Selanjutnya kita membuat file untuk /var/named/contohdomainsaya.com.zone
[root@dummy ~]#  nano /var/named/contohdomainsaya.com.zone
kemudian isi seperti berikut (note : mohon sesuaikan IP dan domainnya seperti yang real)
======================================================
; Zone file for contohdomainsaya.com
$TTL 3600
@         86400         IN         SOA         ns1.contohdomainsaya.com. webmaster.contohdomainsaya.com. (
                                1603120047          ; serial, todays date+todays
                                86400                    ; refresh, seconds
                                7200                      ; retry, seconds
                                1209600                ; expire, seconds
                                86400                    ; minimum, seconds
        )
contohdomainsaya.com. 86400         IN         NS         ns1.contohdomainsaya.com.
contohdomainsaya.com. 86400         IN         NS         ns2.contohdomainsaya.com.
contohdomainsaya.com.                    IN         A           112.113.114.115
ns1.contohdomainsaya.com.              IN         A           112.113.114.115
ns2.contohdomainsaya.com.              IN         A           112.113.114.115
hostname.contohdomainsaya.com.     IN         A           112.113.114.115
mail.contohdomainsaya.com.                 IN         A           112.113.114.115
contohdomainsaya.com.                             IN         MX 0     mail.contohdomainsaya.com.
_domainkey.contohdomainsaya.com.   IN         TXT "t=y; o=-; r=admin@contohdomainsaya.com"
contohdomainsaya.com.                            IN         TXT "v=spf1 ip4:112.113.114.115 a mx ~all"
_dmarc.contohdomainsaya.com.           IN         TXT "v=DMARC1; p=none; pct=20; rua=mailto:admin@contohdomainsaya.com"
www                                                 IN         CNAME contohdomainsaya.com.
======================================================
Kemudian save.
Setelah disave selanjutnya kita membuat file /var/named/114.113.112.rev
[root@dummy ~]#  nano /var/named/114.113.112.rev
kemudian isi seperti berikut (note : mohon sesuaikan IP dan domainnya seperti yang real)
======================================================
$TTL         3600
@                             IN SOA             contohdomainsaya.com. root.contohdomainsaya.com. (
                                100 ; serial
                                1H ; refresh
                                1M ; retry
                                1W ; expiry

                                1D) ; minimum
@                             IN         NS         ns1.contohdomainsaya.com.
@                             IN         NS         ns2.contohdomainsaya.com.
1                               IN         PTR       hostname.contohdomainsaya.com.
======================================================
kemudian save
Setelah disave selanjutnya restart service Bind nya
[root@dummy ~]#  service named restart
Agar auto ON ketika reboot
[root@dummy ~]#  chkconfig named on
Kemudian test :
[root@dummy ~]# dig @8.8.8.8 contohdomainsaya.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.5 <<>> @8.8.8.8 contohdomainsaya.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16262
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;contohdomainsaya.com. IN A
;; ANSWER SECTION:
contohdomainsaya.com. 3600 IN A 112.113.114.115
;; Query time: 463 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue May 31 09:41:05 2016
;; MSG SIZE rcvd: 50
You have mail in /var/spool/mail/root
[root@dummy ~]#
Baik, sampai di sini anda telah berhasil install dan configurasi Bind sebagai DNS server anda
DNS Server END

3. Create VHOST BEGIN

Step selanjutnya kita membuat Vhost untuk kebutuhan tempat meletak data-data web kita nantinya atau sebagai root direktori Html dari website kita
Buat Direkroti dan rubah permisionnya :
[root@dummy ~]# mkdir -p /var/www/contohdomainsaya.com/public_html
[root@dummy ~]# chown -R apache:apache /var/www/contohdomainsaya.com/public_html
[root@dummy ~]# chmod 755 /var/www
Untuk contoh awal kita buat file index.php untuk memastikan nanti bahwasanya kita berhasil ketika kita ngetest :
[root@dummy ~]# nano /var/www/contohdomainsaya.com/public_html/index.php
Kemudian isi baris berikut ini :
===========================
<html>
<head>
<title>My Page Test VPS Non Panel</title>
</head>
<body>
<?php echo '<p>Hello World</p>'; ?>
</body>
</html>
===========================
Kemudian edit file /etc/httpd/conf/httpd.conf dan sesuaikan seperti baris berikut :
[root@dummy ~]# nano /etc/httpd/conf/httpd.conf
===========================
Listen 80
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@contohdomainsaya.com
DocumentRoot /var/www/contohdomainsaya.com/public_html
ServerName www.contohdomainsaya.com
ServerAlias contohdomainsaya.com
ErrorLog /var/www/contohdomainsaya.com/error.log
</VirtualHost>
===========================
Kemudian save, selanjutnya buat file error.log dan restart service httpdnya
[root@dummy ~]# touch /var/www/contohdomainsaya.com/error.log
[root@dummy ~]# /etc/init.d/httpd stop
[root@dummy ~]# /etc/init.d/httpd start
[root@dummy ~]# /etc/init.d/httpd restart
Dan sampai di sini kita telah berhasil buat Vhost, silahkan ditest coba akses (pastikan domain anda sudah propagasi/resolv ke IP VPS anda, jika belum bisa ditunggu dan dicheck dari intodns.com)
Dan dengan sampai di step ini kita telah berhasil install web server apachec, PHP, DNS Server BIND dan membuat Vhost sehingga sudah siap dipergunakan.

4. Step Optional :

a. Biasanya saya pada umumnya tidak menggunakan user root, jadi saya buat 1 user baru kemudian disabled user root dari file /etc/ssh/sshd_config yaitu dengan menambahkan :
PermitRootLogin no
b. Biasanya saya juga merubah port default 22 SSH, jadi saya edit dari file ini juga /etc/ssh/sshd_config dengan menghilangkan tanda # kemudian rubah port 22 sesuai kebutuhan
Port 8060  #(hanya contoh port)
Kemudian hanya mengizinkan port yang dibutuhkan saja (jika tidak menggunakan mail server maka port 25, 465, 110, 995, 143 dan 993 tidak perlu)
[root@dummy ~]# iptables -F
[root@dummy ~]# iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
[root@dummy ~]# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
[root@dummy ~]# iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
[root@dummy ~]# iptables -A INPUT -i lo -j ACCEPT
[root@dummy ~]# iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
[root@dummy ~]# iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
[root@dummy ~]# iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
[root@dummy ~]# iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
[root@dummy ~]# iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
[root@dummy ~]# iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
[root@dummy ~]# iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
[root@dummy ~]# iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT
[root@dummy ~]# iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
[root@dummy ~]# iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
[root@dummy ~]# iptables -A INPUT -p tcp -m tcp --dport 8060 -j ACCEPT
[root@dummy ~]# iptables -L -n
[root@dummy ~]# iptables-save | sudo tee /etc/sysconfig/iptables
[root@dummy ~]# /etc/init.d/iptables restart

5. Upload dan install data web dalam contoh ini menggunakan Wordpress


Option #1 Menggunakan SSHSecureShellClient
A. Upload file web atau sejenisnya misalnya Wordpress/Joomla/dan CMS yang ingin digunakan :
--->Pertama download dan install aplikasi SSH Secure Shell, ini fungsi aplikasinya untuk mempermudah upload/download file dari PC Windows ke VPS dan berikut link downloadnya : http://www2.ohlone.edu/downloads/SSHSecureShellClient-3.2.9.exe
--->Jika sudah didownload dan diinstall silahkan jalankan aplikasi tersebut dan akses ke VPS anda kurang lebih seperti SS di bawah ini :
Setelah aplikasi dijalankan pilih dan click tomol “Quick Connect” dan akan muncul seperti berikut ini :
Mohon maaf IP dan port saya buramkan karena ini VPS salah satu teman kami

Setelah diclick tombol connect maka akan muncul tampilan sebagai berikut ini dan click Yes :

Setelah click tombol Yes maka akan diminta untuk input password, silahkan isikan password VPS anda kemudian click tombol OK maka akan muncul tampilan sebagai berikut ini :

Di form sebelah kanan yang ada tulisan “/root” rubah menjadia : /var/www/contohdomainsaya.com/public_html
Kenapa? Karena directori /var/www/contohdomainsaya.com/public_html inilah yang berfungsi sebagai root direktori html dari website anda dengan domain contohdomainsaya.com

Di situ terlihat sudah ada file index.php, silahkan anda hapus file tersebut dan upload data-data web anda (pastikan anda upload di sini bukan dalam bentuk direktori namun data webnya langsung, misalnya anda menggunakan wordpress maka direktori yang anda upload bukan yang wordpress namun data-data seperti berikut ini :

Silahkan anda upload data-data web anda hingga selesai ke dalam VPS.
Option #2 Menggunakan WinSCP

--->Pertama download dan install aplikasi WinSCP, ini fungsi aplikasinya untuk mempermudah upload/download file dari PC Windows ke VPS dan berikut link downloadnya :  https://winscp.net/eng/docs/guide_install
--->Jika sudah didownload dan diinstall silahkan jalankan aplikasi tersebut dan akses ke VPS anda kurang lebih seperti SS di bawah ini :

Note :
File protocol : Iini ada SFTP, SCP, FTP, WebDAV, saya biasanya menggunakan SFTP dan FTP (salah satunya),
Host name : Bisa menggunakan domain dan atau IP VPS anda,
Port number : Ini sesuaikan dengan pemilihan "File protocol" sebelumnya, jika pilih SFTP maka portnya samakan dengan port akses SSH anda, jika FTP maka gunakan port FTP umumnya 21, dan begitu juga yang lainnya,
User name : Isikan user name yang anda gunakan,
Password : Isikan password yang anda gunakan,
Kemudian save, untuk selanjutnya tinggal login
Setelah berhasil login maka kurang lebih tampilannya sebagai berikut ini :

Di form sebelah kanan yang ada tulisan “/root” rubah menjadia : /var/www/contohdomainsaya.com/public_html
Kenapa? Karena directori /var/www/contohdomainsaya.com/public_html inilah yang berfungsi sebagai root direktori html dari website anda dengan domain contohdomainsaya.com, caranya sebegai berikut ini :


Di situ terlihat sudah ada file index.php, silahkan anda hapus file tersebut dan upload data-data web anda (pastikan anda upload di sini bukan dalam bentuk direktori namun data webnya langsung, misalnya anda menggunakan wordpress maka direktori yang anda upload bukan yang wordpress namun data-data seperti berikut ini :

Silahkan anda upload data-data web anda hingga selesai ke dalam VPS.


 

B. Jika upload data-data web sudah selesai sekarang kita lanjut untuk membuat databasenya :
--->Login ke VPS anda dengan menggunakan putty,
--->Setelah berhasil login ketik perintah berikut untuk masuk ke mysqlnya :
[root@dummy ~]#  mysql -u root -ppassword-database-saya
Maka akan masuk ke mysql server dengan tampilan sebagai berikut :

Lalu buat database dengan mengetik perintah berikut ini :
MariaDB [(none)]> create database namadatabasesaya;
Jika tampilannya seperti ini berarti berhasil :

 Untuk menghapus database yang ada perintahnya sebagai berikut :

Jika create database sudah selesai sekarang kita lanjut install Wordpressnya

C. Install Wordpress :
---->Silahkan anda akses domain anda via web browser dengan mengetik : contohdomainsaya.com maka akan muncul installasi wordpress, kemudian silahkan next dan ikutin step seterusnya hingga selesai
---->Ketika ada permintaan untuk configurasi database isi dengan :
hostname : localhost
User : root
password : password-database-saya
database name : sesuaikan dengan nama database yang telah anda buat sebelumnya

Sampai di sini anda sudah berhasil menjalankan sebuah website anda di VPS non-panel

D. Jika anda ingin menambahkan beberapa domain lain maka caranya yaitu :
------>Pertama buat vhostnya dulu dengan perintah sebagai berikut ini :
[root@dummy ~]# mkdir -p /var/www/domainbaruanda.com /public_html

[root@dummy ~]# chown -R apache:apache /var/www/domainbaruanda.com/public_html

[root@dummy ~]# chmod 755 /var/www

[root@dummy ~]# nano /var/www/ domainbaruanda.com /public_html/index.php
Untuk contoh file index.phpnya isi seperti di bawah ini saja :
======================================================

<html>

 <head>

  <title>My Page Test VPS Non Panel</title>

 </head>

 <body>

 <?php echo '<p>Hello World</p>'; ?>

 </body>

</html>
======================================================

[root@dummy ~]#  nano /etc/httpd/conf/httpd.conf
Kemudian tambahkan baris di bawah di bagian virtualhost ;
======================================================

<VirtualHost *:80>

     ServerAdmin webmaster@domainbaruanda.com

     DocumentRoot /var/www/domainbaruanda.com/public_html

     ServerName www.domainbaruanda.com

     ServerAlias domainbaruanda.com

     ErrorLog /var/www/domainbaruanda.com/error.log

</VirtualHost>
======================================================
Kemudian simpan
Lalu ketik perintah di bawah untuk membuat file errornya

[root@dummy ~]# touch /var/www/ domainbaruanda.com /error.log

Kemudian agar dibaca konfigurasi yang baru tadi ketik perintah di bawah di console :
[root@dummy ~]# /etc/init.d/httpd stop

[root@dummy ~]# /etc/init.d/httpd start

[root@dummy ~]# /etc/init.d/httpd restart

------>Kemudian buat A recordnya dengan mengedit file namednya
[root@dummy ~]# nano /etc/named.conf
Kemudian tambahkan file ini di atas sebelum baris include "/etc/named.rfc1912.zones";
======================================================
zone " domainbaruanda.com " IN {

        type master;

        file "/var/named/domainbaruanda.com.db";

};
======================================================
Kemudian simpan :
Lalu buat file /var/named/domainbaruanda.com.db dengan perintah sebagai berikut :
[root@dummy ~]# nano /var/named/domainbaruanda.com.db
lalu isi dengan beris berikut ini :
======================================================
; Zone file for domainbaruanda.com

$TTL         3600

@              86400    IN      SOA     ns1.contohdomainsaya.com. webmaster. domainbaruanda.com. (

                  3013040200      ; serial, todays date+todays

        86400           ; refresh, seconds

                  7200            ; retry, seconds

                  3600000         ; expire, seconds

                  86400          ; minimum, seconds

      )

domainbaruanda.com.                 86400  IN         NS     ns1.contohdomainsaya.com.

domainbaruanda.com.                 86400  IN         NS     ns2.contohdomainsaya.com.

domainbaruanda.com.                             IN         A       112.113.114.115

ns1.contohdomainsaya.com.                    IN         A       112.113.114.115

ns2.contohdomainsaya.com.                    IN         A       112.113.114.115

domainbaruanda.com.                             IN         MX 0 mail. domainbaruanda.com.

mail                                                        IN         CNAME domainbaruanda.com.

www                                                      IN         CNAME domainbaruanda.com.

Lalu save dan tunggu hingga resolv/propagasi domainbaruanda.com ke VPS

Baik demikian tutorial kecil ini jika ada hal yang terkandala bias konfirmasi ke kami kembali agar bias kami bantu Dan atau jika tutorial kami ini banyak yang kurang-kurang bisa dibantu tambahkan.

Optional Konfigurasi Tutorial Build FTP Server MySQL


Pada step ini kita akan mencoba menginstall dan configure FTP.
Q : Lah untuk apa? kan untuk upload/download file bisa dari WinSCP/sejenisnya ngapain lagi install FTP ?
A : Yupz, benar tapi pengalaman untuk pengguna Wordpress jika tidak diinstall FTP biasanya ada komplaen terkendala untuk install theme/pluginnya jadi sebelum komplaen kita cegah
 

Baik berikut step install dan configure FTP (pure-ftpd) server dengan menggunakan Mysql
Pertama install pure-ftpd :
[root@dummy ~]# yum install pure-ftpd
Kemudian masuk ke MySQL dan buat database :
[root@dummy ~]# mysql -u root -ppassworddatabase
mysql> CREATE DATABASE namedatabse;
Query OK, 1 row affected (0.01 sec)
mysql> GRANT ALL ON namedatabse.* to 'root'@'localhost' IDENTIFIED BY 'passworddatabase';
Query OK, 0 rows affected (0.06 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.06 sec)
mysql> use namedatabse;
Database changed

mysql> CREATE TABLE `users` (
    ->   `ID` int(11) NOT NULL AUTO_INCREMENT,
    ->   `User` varchar(32) NOT NULL DEFAULT '',
    ->   `Password` varchar(64) NOT NULL DEFAULT '',
    ->   `Uid` int(3) NOT NULL DEFAULT '500',
    ->   `Gid` int(3) NOT NULL DEFAULT '500',
    ->   `Dir` varchar(255) NOT NULL DEFAULT '',
    ->   `QuotaSize` int(4) NOT NULL DEFAULT '50',
    ->   `Status` enum('0','1') NOT NULL DEFAULT '1',
    ->   `ULBandwidth` int(2) NOT NULL DEFAULT '100',
    ->   `DLBandwidth` int(2) NOT NULL DEFAULT '100',
    ->   `Date` date NOT NULL DEFAULT '0000-00-00',
    ->   `LastModif` varchar(255) NOT NULL DEFAULT '',
    ->   PRIMARY KEY (`ID`),
    ->   UNIQUE KEY `User` (`User`),
    ->   KEY `Uid` (`Uid`),
    ->   KEY `Gid` (`Gid`),
    ->   KEY `Dir` (`Dir`)
    -> ) ENGINE=innodb AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.14 sec)

mysql> quit
Kemudian edit file /etc/pure-ftpd/pure-ftpd.conf dan lakukan perubahan sebagai berikut :
[root@dummy ~]# nano /etc/pure-ftpd/pure-ftpd.conf
ChrootEveryone              yes
MaxClientsNumber            50
MaxClientsPerIP             8
VerboseLog                  yes
AnonymousOnly               no
NoAnonymous                 yes
MaxIdleTime                 15
MySQLConfigFile             /etc/pure-ftpd/pureftpd-mysql.conf
PAMAuthentication        no
UnixAuthentication         no
Kemudian save
Selanjutnya edit file /etc/pure-ftpd/pureftpd-mysql.conf dan sesuaikan sebegai berikut :
[root@dummy ~]# nano /etc/pure-ftpd/pureftpd-mysql.conf
MYSQLUser       root
MYSQLPassword   passworddatabase
MYSQLDatabase   namedatabse
MYSQLCrypt      md5
Kemudian buat user :
[root@dummy ~]# useradd userftpsaya
[root@dummy ~]# passwd userftpsaya
Kemudian rubah home direktori dari user userftpsaya dengan mengedit file /etc/passwd karena pada defaultnya ketika kita add user baru maka home direktorinya terletak di /home/namauser, nah ini kita rubah karena jika tidak akan mengalami kendala nanti ketika upload/download/edit file melalui FTP akan ada error terkait permision
Defaultnya akan seperti ini : userftpsaya:x:501:501::/home/userftpsaya:/bin/bash
Kita rubah menjadi : userftpsaya:x:501:501::/var/www/contohdomainsaya.com/public_html:/bin/bash
Setelah itu kita save.
Selanjutnya kita masuk ke database MySQL untuk menamb user FTP :
[root@dummy ~]# mysql -u root -ppassworddatabase
mysql> use namedatabse;
Database changed
mysql> INSERT INTO `users` (`User`, `Password`, `Uid`, `Gid`, `Dir`, `QuotaSize`,
-> `Status`, `ULBandwidth`, `DLBandwidth`, `Date`, `LastModif`)
-> VALUES ('userftpsaya', md5('passwordftpsaya'), '501', '501', '/var/www/contohdomainsaya.com/public_html',
-> '550000', 2, '550000', '550000', now(), '');
Query OK, 1 row affected, 1 warning (0.20 sec)
Selanjutnya kita rubah kepemilikan root direktori HTML nya :
[root@dummy ~]# chown -R userftpsaya /var/www/contohdomainsaya.com/public_html
Kemudian kita rubah permision untuk file dan direktorinya :
[root@dummy ~]# find /var/www/contohdomainsaya.com/public_html -type d -exec chmod 755 {} \;
[root@dummy ~]# find /var/www/contohdomainsaya.com/public_html -type f -exec chmod 644 {} \;
Kemudian kita restart service FTP kita agar membaca konfigurasi yang telah kita rubah barusan :
[root@dummy ~]# /etc/init.d/pure-ftpd start
 

Selamat sampai di sini anda telah berhasil menginstall dan configure FTP server basic
 

Optional Speedup

Enable gzip compression


Pastikan LoadModule deflate_module modules/mod_deflate.so sudah ada di file /etc/httpd/conf/httpd.conf dengan cara :
[root@dummy ~]#  grep -i LoadModule /etc/httpd/conf/httpd.conf | grep mod_deflate.so
LoadModule deflate_module modules/mod_deflate.so
[root@dummy ~]#
Jika belum ada bisa ditambahkan terlebih dahulu.
Kemudian edit file /etc/httpd/conf/httpd.conf lalu tambahkan baris berikut ini :
======================================================
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/php
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/json
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/x-js
======================================================
Kemudian restart service apachenya
[root@dummy ~]#  /etc/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[root@dummy ~]#
Untuk memastikan berfungsi check dari sini : https://varvy.com/tools/gzip/
Gzip adalah metode mengompresi file (membuat file berukuran lebih kecil) sehingga untuk mentransfer file/content tersebut dari server ke request pengungjung lebih ringan dan cepat.

Enable Expires Headers

Untuk ini kita bermain di level .htaccess, jadi silahkan tambahkan baris berikut ini di file .htaccess anda (Semuanya : expires headers, ETags dan Keep-alive)
======================================================
## Start Expires Headers
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 1 month"
ExpiresByType text/cache-manifest "access plus 0 seconds"
ExpiresByType text/html "access plus 0 seconds"
# Data
ExpiresByType text/xml "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType application/json "access plus 0 seconds"

# RSS feed
ExpiresByType application/rss+xml "access plus 1 hour"

# Favicon (cannot be renamed)
ExpiresByType image/x-icon "access plus 1 week"

# Media: images, video, audio
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType audio/ogg "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"

# HTC files (css3pie)
ExpiresByType text/x-component "access plus 1 month"
# Webfonts
ExpiresByType font/truetype "access plus 1 month"
ExpiresByType font/opentype "access plus 1 month"
ExpiresByType application/x-font-woff "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
# CSS and JavaScript
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType text/javascript "access plus 1 year"

<IfModule mod_headers.c>
Header append Cache-Control "public"
</IfModule>

</IfModule>
## End Expires Headers
======================================================
Expires headers berfungsi memberitahukan kepada browser apakah akan mengambil content dari server atau akan mengambil dari chache browser

Configure entity tags (ETags)


======================================================
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)(\.gz)?$">
Header unset ETag
FileETag None
</FilesMatch>
======================================================
Entity tags (ETags) adalah sebuah mekanisme webserver dan browser digunakan untuk menentukan apakah komponen dalam cache browser cocok dengan yang ada di server.

Enable keep-alive


======================================================
<ifModule mod_headers.c>
Header set Connection keep-alive
</ifModule>
======================================================
Mengaktifkan keep-alive bertujuan untuk menginformasikan kepada browser pengunjung website untuk membuat sebuah TCP koneksi sekali bukan multi koneksi untuk memuat
content website anda seperti gambar, CSS, Javascript, dll sehingga hal ini dapat mempercepat load website karena browser pengunjung cukup membuat satu koneksi saja ke server.

Optional Konfigurasi Database (/etc/my.cnf)

Ini hanya konfigurasi awal untuk install baru/basic server, mungkin tidak mencakup semua pilihan yang anda butuhkan. Silahkan bereksperimen dan dan sesuaikan dengan kondisi yang ada.

[mysql]
# CLIENT #
port = 3306
socket = /var/lib/mysql/mysql.sock
[mysqld]
# GENERAL #
user = mysql
default-storage-engine = InnoDB
socket = /var/lib/mysql/mysql.sock
pid-file = /var/lib/mysql/mysql.pid
# MyISAM #
key-buffer-size = 32M
myisam-recover = FORCE,BACKUP
# SAFETY #
max-allowed-packet = 16M
max-connect-errors = 1000000
skip-name-resolve
sql-mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY
sysdate-is-now = 1
innodb = FORCE
# DATA STORAGE #
datadir = /var/lib/mysql/
# BINARY LOGGING #
log-bin = /var/lib/mysql/mysql-bin
expire-logs-days = 14
sync-binlog = 1
# CACHES AND LIMITS #
tmp-table-size = 32M
max-heap-table-size = 32M
query-cache-type = 0
query-cache-size = 0
max-connections = 500
thread-cache-size = 50
open-files-limit = 65535
table-definition-cache = 4096
table-open-cache = 4096
# INNODB #
innodb-flush-method = O_DIRECT
innodb-log-files-in-group = 2
innodb-log-file-size = 128M
innodb-flush-log-at-trx-commit = 1
innodb-file-per-table = 1
innodb-buffer-pool-size = 1456M
# LOGGING #
log-error = /var/lib/mysql/mysql-error.log
log-queries-not-using-indexes = 1
slow-query-log = 1
slow-query-log-file = /var/lib/mysql/mysql-slow.log

 

Copyright Albenet Hosting Sunday 25-Jun-2017 All rights reserved.