Cara Setup Freebsd Server dengan Nginx

Tutorial cara setup server Freebsd dengan Nginx web server untuk menjalankan web statis/hugo


JagoTekno.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

  1. Login ke server
  2. Jalankan perintah ini
sudo certbot -v
  1. Akan muncul pertanyaan, bahwa kita akan melakukan update SSL, disini anda tekan Enter
  2. Kemudian muncul pertanyaan lagi, disini anda tekan e
  3. 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.

Nixos Flakes Tutorial (system dan home-manager)
Ditulis oleh Rafi pada Monday, 25 December 2023
mrfdn author

Rafi

  • 15 year+ of Linux user.
  • 5 years+ blogger and web developer.

Jika artikel yang dibuatnya ternyata bermanfaat, support dengan cara

Baca juga


comments powered by Disqus