Cara Setup Freebsd Server dengan Nginx
Tutorial cara setup server Freebsd dengan Nginx web server untuk menjalankan web statis/hugo
mrfdn.com - Kali ini saya ingin share cara setup VPS server dengan OS Freebsd yang saya beli pada sebuah web hosting.
Saya hanya ingin menjalankan web statis di sana. Jadi settingan server ini akan sangat minimalis.
Tanpa berlama-lama begini caranya.
Setup Nginx
Install nginx dan neovim
pkg install nginx neovim
Aktifkan service nginx.
sysrc nginx_enable="YES"
Jalankan service nginx.
service nginx start
Konfigurasi Server Block Nginx
Selanjutnya mengkonfigurasi Nginx server block untuk domain.anda.
Membuat folder untuk document root website. Website akan disimpan di /usr/local/www/
.
mkdir -p /usr/local/www/domain.anda
Coba buat sebuah file index.html di sana lalu isi dengan hello world.
echo "hello world" > /usr/local/www/domain.anda/index.html
Membuat folder untuk menyimpan file virtual host konfigurasi server block.
bebas beri nama foldernya mau pakai websites, virtualhost, vhost, dsb.
mkdir -p /usr/local/etc/nginx/websites
Membuat file konfigurasi server block.
nvim /usr/local/etc/nginx/websites/domain.anda.conf
Isi file konfigurasi server block dengan ini.
server {
listen 80;
server_name domain.anda www.domain.anda;
root /usr/local/www/domain.anda;
index index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/domain.anda_access.log;
error_log /var/log/nginx/domain.anda_error.log;
}
Buka file konfigurasi Nginx.
nvim /usr/local/etc/nginx/nginx.conf
Tambahkan konfigurasi di bawah ini sebelum penutup http.
Di sini kita mau bilang, include (ikutkan) semua file .conf yang ada di /usr/local/etc/nginx/websites/
.
http {
...
include /usr/local/etc/nginx/websites/*.conf;
}
Sebelum update, coba cek dulu konfigurasinya.
nginx -t
Jika tidak ada kesalahan maka akan menghasilkan ini.
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
Restart service nginx.
service nginx restart
Install Lets Encrypt situs bisa diakses melalui HTTPS
Install Certbot
pkg install py39-certbot-nginx
Request SSL untuk domain.anda
certbot --nginx -d domain.anda -d www.domain.anda
Masukkan email yang aktif.
Jika berhasil, certbot mengubah file konfigurasi server block anda. Silahkan buka
cat /usr/local/etc/nginx/websites/domain.anda.conf
Anda akan menemukan perubahan, kira-kira seperti ini:
server {
server_name domain.anda www.domain.anda;
root /usr/local/www/domain.anda;
index index.html index.xml;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/domain.anda_access.log;
error_log /var/log/nginx/domain.anda_error.log;
listen 443 ssl; # managed by Certbot
ssl_certificate /usr/local/etc/letsencrypt/live/domain.anda/fullchain.pem; # managed by Certbot
ssl_certificate_key /usr/local/etc/letsencrypt/live/domain.anda/privkey.pem; # managed by Certbot
include /usr/local/etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = domain.anda) {
return 301 https://$host$request_uri;
} # managed by Certbot
server_name domain.anda;
listen 80;
return 404; # managed by Certbot
Tips: Jika menggunakan cloudflare sebagai DNS, tidak perlu mengaktifkan SSL melalui Cloudflare, cukup gunakan saja dia sebagai DNS. Karena akan bentrok dengan settingan server.
Sampai di sini kita sudah berhasil membuat website live dengan Nginx di Freebsd.
Selanjutnya kita cukup bekerja di folder root /usr/local/www/domain.anda
. Folder ini sama saja seperti folder public_html.
Kita bisa update semua isi website di sana.
Jika menggunakan Hugo sebagai web static builder, yang mana file nya tersimpan secara local di laptop pribadi, kita tinggal kirim hasil build hugo ke server freebsd menggunakan Rsync.
Supaya lebih gampang cukup buat file executable ini di folder root hugo anda.
Cara update SSL menggunakan Certbot di Freebsd
- Login ke server
- Jalankan perintah ini
sudo certbot -v
- Akan muncul pertanyaan, bahwa kita akan melakukan update SSL, disini anda tekan Enter
- Kemudian muncul pertanyaan lagi, disini anda tekan e
- Tunggu sampai selesai dan situs sudah bisa HTTPS lagi.
full log saat update SSL nya kira-kira seperti ini:
username@freebsdhost:~ % sudo certbot -v
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Which names would you like to activate HTTPS for?
We recommend selecting either all domains, or all domains in a VirtualHost/server block.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: domain1.com
2: domain2.com
3: domain3.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
You have an existing certificate that contains a portion of the domains you
requested (ref: /usr/local/etc/letsencrypt/renewal/domain.com.conf)
It contains these names: domain.com
You requested these names for the new certificate: domain1.com, domain2.com, domain3.com
Do you want to expand and replace this existing certificate with the new
certificate?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(E)xpand/(C)ancel:
(E)xpand/(C)ancel: e
Renewing an existing certificate for domain.com and 5 more domains
Performing the following challenges:
http-01 challenge for domain1.com
http-01 challenge for domain2.com
http-01 challenge for domain3.com
Waiting for verification...
Cleaning up challenges
Successfully received certificate.
Certificate is saved at: /usr/local/etc/letsencrypt/live/domain.com/fullchain.pem
Key is saved at: /usr/local/etc/letsencrypt/live/domain.com/privkey.pem
This certificate expires on 2024-06-10.
These files will be updated when the certificate renews.
Ganti port SSH Freebsd
nvim /etc/ssh/sshd_config
Cari baris ini:
Port 22
Ubah port 22 menjadi Port yang di inginkan misalnya Port 1234
Setelah itu save dan restart ssh freebsd anda
service sshd restart
Nanti saat anda logout dari VPS anda tidak bisa lagi akses vps melalui perintah
ssh username@id.address.vps.anda
tapi dengan ini:
ssh -p 1234 username@ip.address.vps.anda
Rsync Hugo ke VPS Hosting
Buat file executable dengan nama deploy.
vim deploy.sh
Isi dengan config berikut.
#!/bin/sh
USER=usernameVPS
HOST=ip.address.vps.anda
DIR=/usr/local/www/domain.anda/
hugo && rsync -arvz --delete public/ ${USER}@${HOST}:${DIR}
# jika menggunakan custom port gunakan ini
# hugo && rsync -arvz -e "ssh -p 1234" --delete public/ ${USER}@${HOST}:${DIR}
exit 0
Save, dengan mengetik :wq
Buat file ini menjadi executable.
chmod +x deploy.sh
Tes exekusi/deploy ke vps
cd folder/web/hugo/anda
./deploy.sh
Demikian tutorial singkat cara setup server Freebsd dengan Nginx untuk menjalankan website statis.
Semoga bermanfaat.