Setup LEMP untuk Menjalankan Wordpress di Nixos
cara setup LEMP stack untuk menjalankan wordpress di nixos
mrfdn.com - Saya memiliki beberapa projekan php, (wordpress, drupak, joomla, php native).
Untuk itu di laptop saya yang sedang terinstall Nixos, saya ingin memasang LEMP stack untuk proses development.
Kelebihan cara ini dibandingkan mengunakan ALPHP adalah kita bisa menjalankan Node.JS, sebab di ALPHP belum support NPM.
Hanya saja proses instalasinya cukup ribet. Untuk itu saya ingin mencatat apa saja yang saya lakukan sehingga proses instalasi LEMP + wordpress di Nixos akhirnya bisa berhasil.
Langsung saja.
Setup LEMP
- Buat file di
/etc/nixos/lemp/default.nix
cd /etc/nixos/
mkdir lemp
cd lemp
default.nix
- Buka file
default.nix
lalu isi dengan config lemp berikut.
{ lib, config, pkgs, ... }:
{
services.nginx = {
enable = true;
user = "nix";
# sesuaikan dengan hostname system nixos anda.
virtualHosts."local.nixhost" = {
enableACME = true;
forceSSL = true;
root = "/var/www/html";
extraConfig = ''
index index.php;
'';
locations."~ \\.php$".extraConfig = ''
fastcgi_pass unix:${config.services.phpfpm.pools.mypool.socket};
fastcgi_index index.php;
'';
locations."/".extraConfig = ''
try_files $uri $uri/ /index.php?$args;
'';
locations."~* /(?:uploads|files)/.*\.php$".extraConfig = ''
deny all;
'';
locations."~* \.(js|css|png|jpg|jpeg|gif|ico)$".extraConfig = ''
expires max;
log_not_found off;
'';
};
};
services.mysql = {
enable = true;
package = pkgs.mariadb;
# settings = { "mysqld" = { "port" = 3308; }; };
initialScript =
pkgs.writeText "initial-script" ''
CREATE USER IF NOT EXISTS 'root'@'localhost' IDENTIFIED BY 'root';
CREATE DATABASE IF NOT EXISTS wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO 'root'@'localhost';
'';
ensureDatabases = [ "wordpress" ];
ensureUsers = [
{
name = "root";
ensurePermissions = {
"root.*" = "ALL PRIVILEGES";
"*.*" = "ALL PRIVILEGES";
};
}
];
};
services.longview.mysqlPasswordFile = "/run/keys/mysql.password";
security.acme = {
acceptTerms = true;
};
security.acme.certs = {
# sesuaikan dengan hostname system nixos anda
"local.nixhost".email = "youremail@address.com";
};
services.phpfpm.pools.mypool = {
user = "nobody";
settings = {
pm = "dynamic";
"listen.owner" = config.services.nginx.user;
"pm.max_children" = 5;
"pm.start_servers" = 2;
"pm.min_spare_servers" = 1;
"pm.max_spare_servers" = 3;
"pm.max_requests" = 500;
};
};
}
- Edit file
/etc/nixos/configuration.nix
untuk include file konfigurasi LEMP yang sudah dibuat.
{ config, pkgs, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
./lemp/default.nix
];
...
#### tambahkan juga extraGroups pada user anda dengan value `nginx`
...
users.users.nix = {
isNormalUser = true;
description = "nix";
extraGroups = [
"wheel"
"networkmanager"
"video"
"input"
"storage"
"libvirtd"
"docker"
"nginx"
];
### tambah juga package mariadb dan php yang akan digunakan oleh user nix.
packages = with pkgs; [
php82
php82Packages.composer
mariadb
];
shell = pkgs.zsh;
...
### pada bagian networkikng, tambahkan extrahost supaya gampang akes hostname sendiri.
networking.extraHosts = ''
127.0.0.1 local.nixhost
'';
- Rebuild nixos,
sudo nixos-rebuild switch
Test
Sekarang masuk ke /var/www/html
lalu buat file baru bernama index.php
.
Kemudian edit index.php lalu isi dengan baris kode ini,
<?php
phpinfo();
?>
Selanjutnya buka browser, lalu akses localhost, atau http://127.0.0.1 atau melalui http://local.nixhost yang sudah di set di sebelumnya.
Anda akan melihat informasi php yang sedang digunakan.
Sampai di sini sudah benar, artinya kita berhasil menjalankan web server nginx dan menampilkan data php yang digunakan.
Mengakses Mysql untuk membuat database baru
Untuk mengakses Mysql, cukup ketik,
mysql -u root
Cara install wordpress pada LEMP stack yang sudah dibuat pada Nixos
- Download wordpress lalu extract di
/var/www/html/
- Buat database dengan command
mysql -u root
- Install wordpress dengan mengakses browser
local.nixhost/wordpress/
- Tidak perlu isi password database, kosongkan saja!, cukup isi:
- database name = wordpress
- database user = root
- database host = localhost Selesai.
Tips
Karena secara default kita bekerja di /var/www/html
, yang mana folder itu hanya bisa diakses oleh root.
Maka kita harus membuat folder ini writeable dan ubah users dan groups nya.
sudo chmod -R 777 /var/www/html
sudo chown -R username:users /var/www/html
Sekarang kita bisa bekerja di folder ini dengan normal dengan menggunakan text editor favorit (nvim, vscode, dll).
Sekian, semoga bermanfaaat.