Web Admin dengan Virtualmin

Foto os

Anda mendapat sebuah server dengan IP publik. Server ini akan dipakai untuk web server oleh banyak user yang akan upload situs mereka dengan domainnya masing-masing. Saatnya menggunakan Virtualmin.

 
Pemasangan Ubuntu
Gunakanlah Ubuntu Hardy Server Edition (8.04 LTS). Kalau mesin Anda Intel Core 2 Duo, ada baiknya pakai edisi 64 bit. Saat pemasangan, pastikan openssh-server disertakan. Atur IP-nya, dan cobalah diakses dari komputer lain menuju IP publik server tersebut. Jika berhasil hingga Anda bisa sudo su secara remotely, silahkan keluar dari Gedung Cyber, dan mulailah konfigurasi selanjutnya dari tempat lain.
Anda juga bisa mencobanya dulu dengan distro yang memiliki Desktop, seperti Ubuntu Hardy Desktop Edition. Distro ini sudah dilengkapi dengan Firefox. Jika Anda masih enggan memasangnya di partisi harddisk, silahkan pasang di VirtualBox.
Karena nanti setiap user adalah user sistem Linux (bukan virtual user), maka sebaiknya Anda perhatikan permission pada home directory Anda sendiri. Secara default Ubuntu akan memberikan hak akses 755 pada home directory user, misalkan /home/grananda:

# ls -l /home
drwxr-xr-x 57 grananda grananda 4096 2009-08-29 16:30 grananda

Ubahlah hak aksesnya menjadi 750 agar user lain tidak dapat melihat direktori Anda.
# chmod 750 /home/grananda
# ls -l /home
drwxr-x--- 57 grananda grananda 4096 2009-08-29 16:30 grananda

Selanjutnya Anda tidak perlu khawatir. Bila Anda membuat Virtual Server di menu Virtualmin nanti, ia juga akan membuatkan user dengan hak akses 750 pada home directory-nya.
 
Pemasangan Virtualmin
Setelah instalasi selesai, saatnya untuk mengunduh Virtualmin, ikutilah petunjuk yang ada di situsnya. Saat tulisan ini dibuat, mereka meminta untuk mendownload script install.sh, dan menjalankannya sebagai superuser.
$ sudo su
# sh install.sh

Disini ada beberapa pertanyaan yang perlu dijawab. Terakhir script ini akan mengunduh paket-paket yang diperlukan. Anda bisa pantau progress-nya melalui konsole lain:
# tail -f /root/virtualmin-install.log

Pastikan proses telah selesai sebelum Anda lanjut ke langkah berikutnya.
 
Konfigurasi PHP
Lalu aktifkan SuPHP agar script PHP dijalankan oleh pemiliknya.
# apt-get install libapache2-mod-suphp

Beritahu modul ini agar menjadi direktori /home sebagai basis, lakukan perubahan pada file /etc/suphp/suphp.conf :
docroot=/home

Aktifkan modulnya:
# a2enmod rewrite
# a2enmod suphp

Non-aktifkan modul sebelumnya:
# a2dismod php5

Lebih lanjut tentang alasan menggunakan SuPHP bisa dilihat di artikel ini.
Pada saat tulisan ini dibuat, script instalasi tidak menyertakan paket php5-pgsql, sehingga Anda perlu memasangnya sendiri:
# apt-get install php5-pgsql

Anda juga perlu memasang modul pengelola gambar:
# apt-get install php5-gd

Ubahlah baris berikut ini pada /etc/php5/cgi/php.ini agar user Anda nyaman upload video:
max_execution_time = 1000
max_input_time = 1000
memory_limit = 128M
post_max_size = 100M
upload_max_filesize = 1000M

Restart web server:
# /etc/init.d/apache2 restart

 
Mail Server
Postfix perlu diatur agar boleh menerima relay dari network lain, misalnya Anda mengirim mail dari notebook menggunakan Thunderbird. Edit /etc/postfix/master.cf, aktifkan baris submission dan smtps :
submission inet n       -       -       -       -       smtpd
smtps      inet n       -       -       -       -       smtpd

Juga jadikan user postfix termasuk dalam grup sasl agar tidak terjadi permission denied pada saslauthd:
# adduser postfix sasl

Karena user account menggunakan Linux user, ubahlah /etc/default/saslauthd:
MECHANISMS="shadow"

Lalu restart:
# /etc/init.d/saslauthd restart
# /etc/init.d/postfix restart

Agar mail client dapat login dengan plaintext, aktifkan baris ini di /etc/dovecot/dovecot.conf:
disable_plaintext_auth = no

Lalu restart:
# /etc/init.d/dovecot restart

Konfigurasi ini juga berguna menghilangkan error saat login ke webmail :)
 

Kenyamanan SSH
Anda juga ingin memberikan kenyamanan bagi user bila mereka menggunakan konsole melalui ssh ? Silahkan ikuti petunjuk ini untuk pengaturan vim dan bash autocompletion. Untuk memudahkan user mengunduh aplikasi dari GitHub dan Bitbucket pasang paket berikut ini:

# apt-get install git-core mercurial

Database
Ada baiknya Anda memberikan fasilitas procedural language pada database user. Ini penting agar mereka bisa membuat function dan trigger.

# su postgres -c "createlang plpgsql template1"

Dengan begitu setiap pembuatan database secara otomatis sudah menyertakannya.
Tambahkan baris berikut ini pada /etc/postgresql/8.3/main/pg_hba.conf:
host all all 202.59.201.67/32 md5

202.59.201.67 adalah IP dimana PostgreSQL terpasang. Pada /etc/postgresql/8.3/main/postgresql.conf aktifkan baris berikut ini:

listen_addresses = '*'

Setelah itu restart daemon-nya:
# /etc/init.d/postgresql-8.3 restart

 
DNS client
Tambahkan baris ini di awal /etc/resolv.conf:
nameserver 127.0.0.1

dengan begitu Firefox terlebih dahulu akan mencari domain ke server ini. Ini penting bila Firefox dan server berada dalam satu mesin. Namun bila terpisah, Anda bisa tambahkan IP publik server di awal /etc/resolv.conf dimana Firefox berada, contoh:
nameserver 192.168.0.1

Mengapa begitu penting ?
Saat Anda membuat domain nanti, domain tersebut baru dikenal oleh DNS server di mesin ini. DNS server lain yang dimiliki ISP dimana Anda mengakses Internet belum mengenalnya. Jadi penting untuk uji coba akses domain dalam latihan ini.
 
Konfigurasi awal melalui Virtualmin
Setelah selesai, akses menggunakan Firefox ke IP server port 10000, contoh: https://192.168.0.1:10000. Username dan password yang diminta adalah super user, dalam hal ini user pertama yang Anda masukkan saat pemasangan Ubuntu, katakanlah user grananda dengan password yang telah Anda tentukan tadi.
Login pertama kali, Anda akan dihadapkan pada wizard untuk konfigurasi awal. Secara umum Anda bisa klik Next pada setiap form. Namun ada baiknya Anda mengikuti petunjuk ini:

  • Memory use:
    • Preloaded Virtualmin libraries: Yes
    • Run email domain lookup server: Yes
  • Virus scanning:
    • Run ClamAV scanner server: Yes
  • Spam filtering:
    • Run SpamAssasin spam filter: Yes
  • Database servers:
    • Run MySQL database server: Yes
    • Run PostgreSQL database server: Yes

Setelah selesai Anda diminta untuk cek ulang konfigurasi. Klik tombol Recheck and refresh configuration. Proses pengecekan berlangsung hingga Anda menemukan kalimat

your system is ready to use by Virtualmin

maka bisa dipastikan sistem telah siap untuk digunakan.
Kini Anda dihadapkan pada menu-menu untuk pengaturan sebuah web hosting. Kalau dulu Anda mengubah file-file konfigurasi secara manual seperti yang ada pada /etc/bind dan /etc/apache2, kini bisa dilakukan melalui menu web ini.
 
Mail Account
Secara default, Virtualmin menggunakan format user.domain untuk IMAP login. Akan lebih nyaman bila formatnya menggunakan user@domain, agar sama dengan emailnya. Ikuti langkah berikut ini:

  1. Masuk ke menu System Settings, Server Templates, Default Settings.
  2. Pada bagian Edit template section, pilihlah Mail for domain.
  3. Pada bagian Format for usernames that include domain pilihlah username@domain.
  4. Klik Save.

Khusus administrator domain bersangkutan, IMAP login tidak memerlukan @domain. Lebih jelasnya Anda bisa lihat di menu Edit Mail and FTP users kolom IMAP/FTP login, setelah Anda membuat domain nanti.

Berikan Bash
Bila nanti user baru Anda login menggunakan ssh, ia akan mendapat shell sederhana, yaitu /bin/sh. Terus terang, shell ini kurang nyaman, dimana tidak memiliki history dan autocompletion. Sebaiknya Anda memberikan /bin/bash.
Klik menu System Customization, Custom Shell, Custom shells below. Gantilah /bin/sh menjadi /bin/bash, lalu klik Save.

Pendaftaran Domain
Selanjutnya kita mulai seolah ada pelanggan yang ingin hosting di server ini. Pelanggan Anda meminta Internet domain reymanx.web.id. Karena .id, Anda bisa mendaftarkannya di Pandi. Ikutilah petunjuknya. Yang terpenting arahkan domain tersebut ke IP publik server ini. Namun Anda juga bisa mengabaikan pendaftaran ke Pandi jika hanya untuk latihan.
Setelah urusan administrasi selesai, kembali ke Virtualmin untuk membuat ruang bagi domain ini. Klik Create Virtual Server, dan isilah:

Domain name: reymanx.web.id
Administration password: 1234

Lalu klik Create Server untuk pembuatan berbagai konfigurasi. Biasanya username yang dibuat adalah reymanx, sesuai kata pertama pada reymanx.web.id. Sedangkan Administration password adalah password untuk user reymanx.
Database PostgreSQL bernama reymanx juga otomatis dibuat. Database ini dimiliki oleh database user bernama reymanx juga, dengan password yang sama. Data ini penting untuk pembuatan situs yang memerlukan database, seperti Drupal.
Sekarang cobalah untuk mengakses http://reymanx.web.id di tab yang lain pada Firefox. Jika Anda mendapatkan pesan Forbidden, berarti DNS telah bekerja dengan baik dan Anda bisa memberitahukan pelanggan bahwa ruang untuk domain tersebut telah siap.
Pendaftaran domain biasanya membutuhkan waktu dua hari untuk penyebaran di berbagai server Internet, terutama di DNS server Internet Service Provider. Ini artinya pelanggan Anda perlu menunggu selama itu agar ia bisa mengunjungi reymanx.web.id di warnet terdekat.

Izin Pembuatan Subdomain (update 21-07-2011)
Izinkan user membuat sub-domain-nya sendiri. Ini bisa dilakukan per user / domain, yaitu melalui menu Administration Options, Edit Owner Limits:

Maximum allowed virtual servers: unlimited

Pembuatan sub-domain perlu diimbangi dengan izin pembuatan database. Masih di halaman yang sama. Lihatlah ke bawah, klik Allowed capabilites and features, lalu contreng Can manage database. Klik Save.

Untuk pembuatan database, user terlebih dahulu login ke Virtualmin melalui http://admin.reymanx.web.id. Selanjutnya masuk ke menu Edit Databases. User hanya bisa membuat database melalui menu ini. Dengan kata lain ia tidak dapat melakukannya melalui perintah CREATE DATABASE.

PhpPgAdmin (update 21-07-2011)
Kenyamanan lain yang cukup penting adalah Database Browser. Pasang paketnya:

$ sudo apt-get install phppgadmin

Lalu buatlah subdomain db di domain hosting Anda, contoh: db.sabilawebhost.com. Nantinya http://db.sabilawebhost.com akan di-redirect ke https://db.sabilahost.com untuk menghindari penyadapan, dan akhirnya menampilkan halaman PhpPgAdmin.
Sekarang ssh ke server, edit /etc/apache2/sites-available/db.sabilawebhost.com.conf:

<VirtualHost 202.59.201.67:80>
...
Redirect / https://db.sabilahost.com
DocumentRoot ...
</VirtualHost>

Lalu buat symlink-nya:

# cd /home/sabilawebhost/domains/db.sabilawebhost.com
# rm -rf public_html
# ln -s /usr/share/phppgadmin public_html

Pastikan setelah user login di PhpPgAdmin database yang tampil hanya miliknya. Edit /etc/phppgadmin/config.inc.php:

$conf['owned_only'] = true;

Jangan lupa beritahukan user Anda mengenai url Database Browser ini.

Upload
Bila domain sudah aktif, Anda bisa memberi instruksi ke pelanggan untuk mengirim file-file PHP, HTML, dan dokumen lainnya untuk pembuatan situs ke direktori public_html, atau menurut contoh di atas ke /home/reymanx/public_html. Mereka bisa menggunakan WinSCP atau Konqueror (KDE). Di Konqueror mereka bisa ke URL sftp://reymanx.web.id, masukkan username dan password, lalu mulailah upload.
User juga bisa menghemat bandwidth dengan menggunakan ssh atau putty. Misalkan akan memasang Drupal 6, gunakan wget untuk mengunduhnya:

$ wget http://openstorage.gunadarma.ac.id/cms/drupal/drupal.org_Community-plumbing/ftp.drupal.org/files/projects/drupal-6.13.tar.gz

Backup public_html yang lama, dan gunakan direktori Drupal:
$ mv public_html public_html.orig
$ tar xfz drupal-6.13.tar.gz
$ mv drupal-6.13 public_html

Kemudian kembali ke Firefox, kunjungi http://reymanx.web.id dan mulailah melakukan konfigurasi Drupal.
 
Akses Database
Melalui konsole, pelanggan juga dapat mengakses database menggunakan psql, dimana cukup dengan perintah:
$ psql
 
Welcome to psql 8.3.7, the PostgreSQL interactive terminal.
 
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit
 
reymanx=>

 
Cron
Pelanggan juga dapat login ke Virtualmin untuk mengatur domain-nya, yaitu ke http://admin.reymanx.web.id. Lalu untuk apa mereka login ke Virtualmin ?
Drupal membutuhkan update status secara periodik, yaitu http://reymanx.web.id/cron.php perlu dijalankan setiap jam. Untuk itu pelanggan memerlukan cron yang terdapat pada sistem Linux. Melalui Virtualmin pelanggan dapat melakukan itu.
Setelah reymanx login, klik Webmin di kiri atas. Lanjutkan ke menu System, Scheduled Cron Jobs, Create a new scheduled cron job. Pada Command masukkan:
wget -O - -q http://reymanx.web.id/cron.php

Klik Create untuk menyimpan.
 
Mail Client
Pelanggan dapat menggunakan Thunderbird untuk menerima dan mengirim mail. Berikut ini contoh konfigurasinya untuk incoming:

  • Server: reymanx.web.id
  • Protokol: IMAP
  • Connection: SSL port 993
  • Use secure authentication: No
  • User: reymanx

Sedangkan untuk outgoing (SMTP):

  • Server: reymanx.web.id
  • Port: 25
  • User: reymanx
  • Use secure connection: No

Python (update 15-06-2011)
Mungkin user Anda ada yang ingin situsnya dibuat dengan bahasa Python. Misalnya menggunakan Django. Siapkanlah modul wsgi di Apache:

$ sudo apt-get install libapache2-mod-wsgi

Lalu di konfigurasi Apache bersangkutan - misalnya reymanx.web.id.conf - isi baris berikut ini:

<VirtualHost ....>
..
WSGIScriptAlias / /home/reymanx/wsgi/wsgi_handler.py
WSGIDaemonProcess reymanx.web.id user=reymanx group=reymanx threads=15
WSGIProcessGroup reymanx.web.id
 
# User-uploaded media: MEDIA_URL = '/media/'
Alias /media/ /home/reymanx/wsgi/media/
# django-staticfiles: STATIC_URL = '/static/'
Alias /static/ /home/reymanx/wsgi/static/
</VirtualHost>

Restart Apache:

$ sudo /etc/init.d/apache2 restart

Sampai di sini tugas Anda sebagai admin sudah selesai.

User Space
Selanjutnya user reymanx bisa membuat direktorinya:

$ cd
$ mkdir -p wsgi/media wsgi/static

Lalu buat /home/reymanx/wsgi/wsgi_handler.py:

def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'
 
    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)
 
    return [output]

Lalu cobalah di browser ke url http://reymanx.web.id, seharusnya tampil:

Hello World!

Django
Sebuah fungsi sederhana seperti di atas tentu saja merepotkan untuk membuat aplikasi web. User reymanx bisa melanjutkan instalasi Django sebagai web framework:

  • Unduh paket Django dari https://www.djangoproject.com/download/.
    $ cd
    $ wget http://media.djangoproject.com/releases/1.3/Django-1.3.tar.gz
  • Ekstrak
    $ tar xfvz Django-1.3.tar.gz
    $ cp -r Django-1.3/django/ wsgi/
    $ cp wsgi/django/bin/django-admin.py wsgi/
  • Buat direktori Django project bernama public
    $ cd wsgi
    $ ./django-admin.py startproject public
  • Lalu buat /home/reymanx/wsgi/monitor.py.
    import os
    import sys
    import time
    import signal
    import threading
    import atexit
    import Queue
     
    _interval = 1.0
    _times = {}
    _files = []
     
    _running = False
    _queue = Queue.Queue()
    _lock = threading.Lock()
     
    def _restart(path):
        _queue.put(True)
        prefix = 'monitor (pid=%d):' % os.getpid()
        print >> sys.stderr, '%s Change detected to \'%s\'.' % (prefix, path)
        print >> sys.stderr, '%s Triggering process restart.' % prefix
        os.kill(os.getpid(), signal.SIGINT)
     
    def _modified(path):
        try:
            # If path doesn't denote a file and were previously
            # tracking it, then it has been removed or the file type
            # has changed so force a restart. If not previously
            # tracking the file then we can ignore it as probably
            # pseudo reference such as when file extracted from a
            # collection of modules contained in a zip file.
     
            if not os.path.isfile(path):
                return path in _times
     
            # Check for when file last modified.
     
            mtime = os.stat(path).st_mtime
            if path not in _times:
                _times[path] = mtime
     
            # Force restart when modification time has changed, even
            # if time now older, as that could indicate older file
            # has been restored.
     
            if mtime != _times[path]:
                return True
        except:
            # If any exception occured, likely that file has been
            # been removed just before stat(), so force a restart.
     
            return True
     
        return False
     
    def _monitor():
        while 1:
            # Check modification times on all files in sys.modules.
     
            for module in sys.modules.values():
                if not hasattr(module, '__file__'):
                    continue
                path = getattr(module, '__file__')
                if not path:
                    continue
                if os.path.splitext(path)[1] in ['.pyc', '.pyo', '.pyd']:
                    path = path[:-1]
                if _modified(path):
                    return _restart(path)
     
            # Check modification times on files which have
            # specifically been registered for monitoring.
     
            for path in _files:
                if _modified(path):
                    return _restart(path)
     
            # Go to sleep for specified interval.
     
            try:
                return _queue.get(timeout=_interval)
            except:
                pass
     
    _thread = threading.Thread(target=_monitor)
    _thread.setDaemon(True)
     
    def _exiting():
        try:
            _queue.put(True)
        except:
            pass
        _thread.join()
     
    atexit.register(_exiting)
     
    def track(path):
        if not path in _files:
            _files.append(path)
     
    def start(interval=1.0):
        global _interval
        if interval < _interval:
            _interval = interval
     
        global _running
        _lock.acquire()
        if not _running:
            prefix = 'monitor (pid=%d):' % os.getpid()
            print >> sys.stderr, '%s Starting change monitor.' % prefix
            _running = True
            _thread.start()
        _lock.release()

    Script ini berguna untuk memantau perubahan pada file. Jika ada file yang berubah maka monitor.py akan mengakhiri daemon Django. Sehingga saat diakses kembali oleh browser, Apache akan menghidupkan kembali daemon tersebut, dan - tentu saja - sudah menggunakan file terbaru.

    Tanpa monitor.py ini, jika Anda mengubah salah satu file maka Apache harus di-reload. Selain merepotkan saat development, aktivitas reload Apache jelas bukan wilayahnya user reymanx.

  • Ubah /home/reymanx/wsgi/wsgi_handler.py menjadi:
    import os, sys
     
    sys.stdout = sys.stderr
    sys.path.append(os.path.dirname(os.path.abspath(__file__)))
    os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
     
    import django.core.handlers.wsgi
    application = django.core.handlers.wsgi.WSGIHandler()
     
    import monitor
    monitor.start(interval=1.0)
  • Buat symlink:
    $ ln -s public/settings.py
    $ ln -s . wsgi
  • Bersihkan file yang tak perlu:
    $ cd
    $ rm -rf Django-1.3 Django-1.3.tar.gz

Lalu di browser kembali ke url http://reymanx.web.id, seharusnya kini tampil:

It worked!

Jika di browser tampil error yang kurang informatif, silahkan pesan yang lebih lengkap di /home/reymanx/logs/error_log:

$ tail /home/reymanx/logs/error_log

Mezzanine
Instalasi Django di atas baru sebatas sebagai web framework. Masih banyak pekerjaan yang harus dilakukan untuk menjadi sebuah CMS (Content Management System). Agar lebih mudah, sebaiknya kita pasang salah satu CMS yang berbasis Django, yaitu Mezzanine.

Supaya bersih, backup direktori wsgi menjadi wsgi.1:

$ cd
$ mv wsgi wsgi.1

Salin lagi direktori dan script yang masih diperlukan:

$ mkdir wsgi
$ cd wsgi.1
$ cp -r django monitor.py wsgi_handler.py ../wsgi/

Unduh Mezzanine dari Bitbucket:

$ cd
$ hg clone https://bitbucket.org/stephenmcd/mezzanine
$ cp -r mezzanine/mezzanine wsgi/

Buat project:

$ cd wsgi
$ cp mezzanine/bin/mezzanine_project.py .
$ python mezzanine_project.py public
$ mv public/* .
$ rmdir public

Edit local_settings.py pada bagian DATABASES (sesuaikan):

DATABASES = {
    "default": {
        "ENGINE": "postgresql_psycopg2",
        "NAME": "reymanx",
        "USER": "reymanx",
        "PASSWORD": "1234",
        "HOST": "",
        "PORT": "",
    }
}

Buat tabelnya:
$ python manage.py syncdb

Nanti ada pertanyaan untuk membuat superuser, jawab dengan yes dan isilah yang lainnya (sesuaikan):
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'reymanx'): admin
E-mail address: info@reymanx.web.id
Password: 
Password (again): 
Superuser created successfully.

Lalu ada lagi pertanyaan untuk membuat content awal, jawab lagi dengan yes:

Would you like to install some initial content?
Eg: About page, Blog, Contact form. (yes/no): yes
 
Creating initial content (About page, Blog, Contact form).
 
Installed 16 object(s) from 2 fixture(s)
Installing custom SQL ...
Installing indexes ...
No fixtures found.

Pembuatan tabel selesai. Berikutnya menyesuaikan /media dan /static sebagaimana /etc/apache2/sites-available/reymanx.web.id.conf:

$ mv site_media media
$ mkdir static
$ cd static
$ ln -s ../django/contrib/admin/media admin
$ cd ..

Ubah settings.py pada ADMIN_MEDIA_PREFIX:

ADMIN_MEDIA_PREFIX = "/static/admin/"

Juga MEDIA_URL:
MEDIA_URL = "/media"

Buat symlink wsgi ke dirinya sendiri, untuk menghindari error:

$ ln -s . wsgi

Selesai. Silahkan coba di browser ke http://reymanx.web.id dan http://reymanx.web.id/admin.

Update 13-07-2011
Oh iya, Mezzanine tidak lengkap tanpa Grappelli dan Filebrowser. Silahkan ikuti petunjuk pemasangannya.

Selamat mencoba.
 
Referensi:

 

LampiranUkuran
monitor.py_.gz1.08 KB
wsgi_handler.py_.gz233 bita

Komentar

Foto molln

boleh minta tolong ajarin

boleh minta tolong ajarin pake virtualmin ga? :)
pliss nid help

Foto os

Masalahnya apa ya ?

Masalahnya apa ya ?

Foto molln

usernamenya itu harus sama

usernamenya itu harus sama dengan web yg dibuat ya?klo nanti user mau ganti alamat webnya gmna?

Foto os

Defaultnya memang sama, tapi

Defaultnya memang sama, tapi bisa diubah saat pembuatan. Satu user bisa punya beberapa alamat web.

Foto molln

mas, saya ngecek di

mas, saya ngecek di virtualmin demo pagenya, pas di preview website kok dia ga muncullin forbidden ya?gmn caranya?

Foto molln

mas, klo mau install

mas, klo mau install virtualmin pake file install.sh tapi melewati proxy gmna caranya ya?
soaolnya pas mau coba diinstal keluar pesan:

chmod: cannot access `spinner': No such file or directory
Loading log4sh logging library...
Could not load logging library from software.virtualmin.com. Cannot continue.
We're not just stopping because we don't have a logging library--this probably
indicates a serious problem that will prevent succesful installation anyway.
check network connectivity, name resolution and disk space and try again.

Foto os

Coba buat file

Coba buat file /etc/apt/apt.conf.d/70proxy, isinya:

Acquire::http::Proxy "http://host:port";

atau kalau wajib login:
Acquire::http::Proxy "http://user:pass@host:port";

Sesuaikan host, port, user, dan pass.

Lalu jalankan lagi install.sh

Foto os

Biasanya harus ada index.html

Biasanya harus ada index.html atau index.php di direktori public_html.

Foto molln

klo mau nyetting supaya

klo mau nyetting supaya setiap domain baru punya kuota 75MB gmn?

Foto os

Setahu saya quota itu melekat

Setahu saya quota itu melekat di user bukan domain. Memang sih umumnya 1 domain 1 user. Mengenai perubahan default quota, sayangnya saya juga belum pernah menelusuri. Mungkin petunjuk ini bisa membantu:

  • Cek nama-nama paket virtualmin / webmin dengan
    $ dpkg -l | grep virtualmin

    atau
    $ dpkg -l | grep webmin
  • Lalu carilah kata quota di setiap filenya, contoh:
    $ dpkg -L <nama_paket> | xargs grep -i quota

    Kalau terlalu banyak persempit di direktori /etc:
    $ dpkg -L <nama_paket> | grep etc | xargs grep -i quota

Mudah-mudahan ketemu.