cara install Nextcloud di server Ubuntu langkah demi langkah sampai bisa diakses lewat browser - wongganteng10/tutorial GitHub Wiki
Oke, aku jelasin cara install Nextcloud di server Ubuntu langkah demi langkah sampai bisa diakses lewat browser. Aku buat untuk Ubuntu Server 22.04 yang fresh install.
sudo apt update && sudo apt upgrade -y
Nextcloud butuh Apache/Nginx, MariaDB/MySQL, dan PHP. Di sini aku pakai Apache + MariaDB + PHP:
sudo apt install apache2 mariadb-server libapache2-mod-php php-gd php-mysql php-curl php-xml php-mbstring php-zip php-bz2 php-intl php-gmp php-bcmath php-imagick unzip -y
Masuk ke MariaDB:
sudo mysql -u root -p
Lalu di dalam MariaDB:
CREATE DATABASE nextcloud;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'passwordku';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
(Ganti passwordku
dengan password yang kuat)
cd /tmp
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
sudo mv nextcloud /var/www/html/
sudo chown -R www-data:www-data /var/www/html/nextcloud
sudo chmod -R 755 /var/www/html/nextcloud
Buat file konfigurasi:
sudo nano /etc/apache2/sites-available/nextcloud.conf
Isi dengan:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/nextcloud
ServerName your-domain.com
<Directory /var/www/html/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
</Directory>
ErrorLog ${APACHE_LOG_DIR}/nextcloud_error.log
CustomLog ${APACHE_LOG_DIR}/nextcloud_access.log combined
</VirtualHost>
(Ganti your-domain.com
dengan domain atau IP server)
Aktifkan konfigurasi:
sudo a2ensite nextcloud.conf
sudo a2enmod rewrite headers env dir mime
sudo systemctl restart apache2
Buka browser, lalu akses:
http://IP-server
Isi form:
-
Username & Password Admin
-
Folder data → biarkan default atau tentukan lokasi
-
Database → pilih MySQL/MariaDB, masukkan:
- Database:
nextcloud
- User:
nextclouduser
- Password:
passwordku
- Database:
Klik Finish setup.
Install certbot:
sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache
Kalau mau, aku bisa bikin versi Nextcloud di Ubuntu Server tapi pakai Nginx + PHP-FPM biar lebih cepat dan hemat resource. Mau aku buatin yang versi Nginx?
Oke, aku buatkan script .sh
supaya instalasi Nextcloud di Ubuntu Server bisa otomatis dari awal sampai selesai.
Script ini akan:
- Update sistem
- Install Apache, MariaDB, PHP dan modul Nextcloud
- Buat database + user Nextcloud
- Download Nextcloud terbaru
- Set hak akses
- Konfigurasi Apache otomatis
#!/bin/bash
# Script instalasi Nextcloud otomatis di Ubuntu Server 22.04
# By ChatGPT
# ====== Konfigurasi ======
DB_NAME="nextcloud"
DB_USER="nextclouduser"
DB_PASS="passwordku" # Ganti password ini
SERVER_NAME="nextcloud.local" # Ganti domain atau IP server
NEXTCLOUD_DIR="/var/www/html/nextcloud"
# ====== Update Sistem ======
echo "🚀 Update & Upgrade Sistem..."
sudo apt update && sudo apt upgrade -y
# ====== Install Apache, MariaDB, PHP ======
echo "📦 Menginstall Apache, MariaDB, dan PHP..."
sudo apt install apache2 mariadb-server libapache2-mod-php \
php-gd php-mysql php-curl php-xml php-mbstring php-zip php-bz2 php-intl \
php-gmp php-bcmath php-imagick unzip wget -y
# ====== Konfigurasi Database ======
echo "🗄 Membuat database dan user untuk Nextcloud..."
sudo mysql -e "CREATE DATABASE ${DB_NAME};"
sudo mysql -e "CREATE USER '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';"
sudo mysql -e "GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'localhost';"
sudo mysql -e "FLUSH PRIVILEGES;"
# ====== Download Nextcloud ======
echo "⬇️ Mengunduh Nextcloud..."
cd /tmp
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
sudo mv nextcloud /var/www/html/
# ====== Set Hak Akses ======
echo "🔑 Mengatur hak akses folder Nextcloud..."
sudo chown -R www-data:www-data ${NEXTCLOUD_DIR}
sudo chmod -R 755 ${NEXTCLOUD_DIR}
# ====== Konfigurasi Apache ======
echo "🛠 Membuat konfigurasi Apache untuk Nextcloud..."
cat <<EOF | sudo tee /etc/apache2/sites-available/nextcloud.conf
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot ${NEXTCLOUD_DIR}
ServerName ${SERVER_NAME}
<Directory ${NEXTCLOUD_DIR}/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
</Directory>
ErrorLog \${APACHE_LOG_DIR}/nextcloud_error.log
CustomLog \${APACHE_LOG_DIR}/nextcloud_access.log combined
</VirtualHost>
EOF
# ====== Aktifkan Konfigurasi ======
sudo a2ensite nextcloud.conf
sudo a2enmod rewrite headers env dir mime
sudo systemctl restart apache2
echo "✅ Instalasi Nextcloud selesai!"
echo "🌐 Akses Nextcloud di: http://${SERVER_NAME}"
echo "📌 Database: ${DB_NAME} | User: ${DB_USER} | Pass: ${DB_PASS}"
-
Simpan script ini sebagai
install_nextcloud.sh
-
Beri izin eksekusi:
chmod +x install_nextcloud.sh
-
Jalankan:
./install_nextcloud.sh
-
Setelah selesai, buka di browser:
http://IP-server
atau domain yang kamu set di
SERVER_NAME
.
Buka browser, lalu akses:
http://IP-server
Isi form:
-
Username & Password Admin
-
Folder data → biarkan default atau tentukan lokasi
-
Database → pilih MySQL/MariaDB, masukkan:
- Database:
nextcloud
- User:
nextclouduser
- Password:
passwordku
- Database:
Klik Finish setup.
Kalau mau, aku bisa tambahkan otomatis install SSL Let's Encrypt dan optimasi PHP di script ini supaya Nextcloud lebih cepat dan aman. Mau aku tambahkan?
Mantep — aku konversi skrip instalasimu supaya pakai Nginx + PHP-FPM (bukan Apache), plus tetap menyertakan fitur auto-update IP yang sudah kamu tulis. Aku tulis lengkap, siap kamu simpan sebagai file (mis. install_nextcloud_nginx.sh
) dan jalankan.
Catatan singkat sebelum pakai:
- Skrip ini untuk Ubuntu/Debian (paket default
php-fpm
akan dipasang — biasanya menghasilkanphp8.1-fpm
di Ubuntu 22.04). - Skrip akan mencoba mendeteksi socket PHP-FPM setelah instalasi; bila gagal, akan pakai fallback
/run/php/php8.1-fpm.sock
. - Jangan jalankan bila sudah ada Nextcloud di folder tujuan — skrip akan berhenti jika sudah ada
config.php
.
Simpan ini dan jalankan (sudo bash install_nextcloud_nginx.sh
):
#!/bin/bash
# 🚀 Nextcloud Installer + Auto Update IP (Nginx version)
# By ChatGPT (revisi Nginx)
set -euo pipefail
IFS=$'\n\t'
LOG_FILE="/var/log/nextcloud_install_nginx.log"
exec > >(tee -a "$LOG_FILE") 2>&1
echo "====================================="
echo " Instalasi Nextcloud Otomatis (Nginx)"
echo "====================================="
fail() { echo "❌ ERROR: $1"; exit 1; }
ask() { read -rp "$1" REPLY; echo "${REPLY:-$2}"; }
ZIP_SOURCE=$(ask "📂 Lokasi file latest.zip (kosongkan untuk download otomatis): " "")
DB_NAME=$(ask "📌 Nama Database [nextcloud]: " "nextcloud")
DB_USER=$(ask "👤 User Database [nextclouduser]: " "nextclouduser")
DB_PASS=$(ask "🔑 Password Database [passwordku]: " "passwordku")
DEFAULT_IP=$(hostname -I | awk '{print $1}')
SERVER_NAME=$(ask "🌐 Domain/IP Server [${DEFAULT_IP}]: " "${DEFAULT_IP}")
NEXTCLOUD_DIR=$(ask "📁 Lokasi Instalasi Nextcloud [/var/www/nextcloud]: " "/var/www/nextcloud")
NGINX_PORT=$(ask "🔌 Port Nginx [2222]: " "2222")
[[ "$NGINX_PORT" =~ ^[0-9]+$ ]] || fail "Port harus angka!"
if ss -ltn | awk '{print $4}' | grep -q ":${NGINX_PORT}$"; then
fail "Port $NGINX_PORT sedang digunakan!"
fi
if [ -d "$NEXTCLOUD_DIR" ]; then
if [ -f "$NEXTCLOUD_DIR/config/config.php" ]; then
fail "Nextcloud sudah terinstal di $NEXTCLOUD_DIR!"
fi
else
echo "📂 Membuat folder instalasi: $NEXTCLOUD_DIR"
sudo mkdir -p "$NEXTCLOUD_DIR"
fi
echo "🚀 Update & Upgrade Sistem..."
sudo apt-get update -y
echo "📦 Menginstall Nginx, MariaDB, PHP-FPM, dan ekstensi..."
sudo apt-get install -y nginx mariadb-server php-fpm \
php-gd php-mysql php-curl php-xml php-mbstring php-zip php-bz2 php-intl \
php-gmp php-bcmath php-imagick unzip wget curl
# restart services (ensure php-fpm service up)
sudo systemctl enable --now nginx
# try to enable any php-fpm service
if systemctl list-units --type=service | grep -q 'php'; then
# do nothing, php-fpm likely running
:
else
# best-effort: try common service names
for svc in php8.1-fpm php8.0-fpm php7.4-fpm php-fpm; do
if systemctl list-unit-files | grep -q "^${svc}"; then
sudo systemctl enable --now "${svc}" || true
fi
done
fi
echo "🗄 Membuat database dan user..."
sudo mysql -e "CREATE DATABASE IF NOT EXISTS \`${DB_NAME}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
sudo mysql -e "CREATE USER IF NOT EXISTS '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';"
sudo mysql -e "GRANT ALL PRIVILEGES ON \`${DB_NAME}\`.* TO '${DB_USER}'@'localhost'; FLUSH PRIVILEGES;"
# secure minimal
sudo mysql -e "DELETE FROM mysql.user WHERE User='';" || true
sudo mysql -e "DROP DATABASE IF EXISTS test;" || true
sudo mysql -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';" || true
sudo mysql -e "FLUSH PRIVILEGES;" || true
echo "⬇️ Menyiapkan Nextcloud..."
if [ -n "$ZIP_SOURCE" ] && [ -f "$ZIP_SOURCE" ]; then
echo "📦 Menggunakan file lokal..."
cp "$ZIP_SOURCE" /tmp/latest.zip
else
echo "🌐 Mengunduh Nextcloud..."
wget -q --show-progress -O /tmp/latest.zip https://download.nextcloud.com/server/releases/latest.zip || fail "Download gagal!"
fi
echo "🔓 Ekstrak..."
unzip -qo /tmp/latest.zip -d /tmp
sudo cp -r /tmp/nextcloud/* "$NEXTCLOUD_DIR"
sudo chown -R www-data:www-data "$NEXTCLOUD_DIR"
sudo chmod -R 755 "$NEXTCLOUD_DIR"
# ===== Nginx Site Config =====
NGINX_CONF_NAME="nextcloud-$(basename "$NEXTCLOUD_DIR").conf"
NGINX_CONF_PATH="/etc/nginx/sites-available/${NGINX_CONF_NAME}"
# detect php-fpm socket (after install there should be one)
sleep 1
PHP_SOCK=$(ls /run/php/php*-fpm.sock 2>/dev/null | head -n1 || true)
if [ -z "$PHP_SOCK" ]; then
# fallback common socket
PHP_SOCK="/run/php/php8.1-fpm.sock"
fi
cat <<EOF | sudo tee "${NGINX_CONF_PATH}" >/dev/null
server {
listen ${NGINX_PORT} default_server;
server_name ${SERVER_NAME};
root ${NEXTCLOUD_DIR};
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
fastcgi_hide_header X-Powered-By;
client_max_body_size 512M;
fastcgi_buffers 64 4K;
index index.php index.html /index.php;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
deny all;
}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location / {
rewrite ^ /index.php\$uri;
}
location ~ \.php(?:$|/) {
fastcgi_split_path_info ^(.+\.php)(/.*)\$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
fastcgi_param PATH_INFO \$fastcgi_path_info;
fastcgi_param HTTPS off;
fastcgi_pass unix:${PHP_SOCK};
fastcgi_index index.php;
fastcgi_param MOD_X_ACCEL_REDIRECT_ENABLED off;
}
location ~* \.(?:css|js|woff|svg|gif|png|jpg|jpeg|ico)\$ {
try_files \$uri /index.php\$uri\$is_args\$args;
access_log off;
}
# caching of static files
location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)\$ {
try_files \$uri /index.php\$uri\$is_args\$args;
expires 30d;
access_log off;
}
}
EOF
sudo ln -sf "${NGINX_CONF_PATH}" /etc/nginx/sites-enabled/${NGINX_CONF_NAME}
# remove default to avoid port conflict if it's on same port
if [ -f /etc/nginx/sites-enabled/default ]; then
sudo rm -f /etc/nginx/sites-enabled/default
fi
# test nginx config then reload
sudo nginx -t || (sudo tail -n 200 /var/log/nginx/error.log && fail "Nginx config test gagal")
sudo systemctl reload nginx
# ===== Script Auto Update IP =====
AUTO_UPDATE_SCRIPT="${NEXTCLOUD_DIR}/config/update-nextcloud-ip.sh"
cat <<'EOL' | sudo tee "$AUTO_UPDATE_SCRIPT" >/dev/null
#!/bin/bash
CONFIG_FILE="$(dirname "$0")/config.php"
BACKUP_DIR="$(dirname "$0")/backup-config"
mkdir -p "$BACKUP_DIR"
if [ ! -f "$CONFIG_FILE" ]; then
echo "❌ File $CONFIG_FILE tidak ditemukan!"
exit 1
fi
NEW_IP=$(hostname -I | awk '{print $1}')
OLD_IP=$(grep -Po "(?<=0 => ')[^']+" "$CONFIG_FILE" || echo "")
if [ -z "$OLD_IP" ]; then
echo "❌ IP lama tidak ditemukan di config.php"
exit 1
fi
if [ "$OLD_IP" == "$NEW_IP" ]; then
echo "✅ IP sudah sesuai: $NEW_IP"
exit 0
fi
cp "$CONFIG_FILE" "${BACKUP_DIR}/config.php.bak_$(date +%F_%T)"
sed -i "s/${OLD_IP}/${NEW_IP}/g" "$CONFIG_FILE"
echo "🔄 IP lama (${OLD_IP}) diganti dengan IP baru (${NEW_IP}) di config.php"
EOL
sudo chmod +x "$AUTO_UPDATE_SCRIPT"
# ===== Setup Cron Job =====
EXISTING_CRON=$(sudo crontab -l 2>/dev/null || true)
NEW_CRON="* * * * * /bin/bash $AUTO_UPDATE_SCRIPT >/dev/null 2>&1
@reboot /bin/bash $AUTO_UPDATE_SCRIPT"
echo "$EXISTING_CRON" | grep -v 'update-nextcloud-ip.sh' | {
cat
echo "$NEW_CRON"
} | sudo crontab -
echo "✅ Instalasi selesai!"
echo "🌐 Akses: http://${SERVER_NAME}:${NGINX_PORT}"
echo "📌 Database: ${DB_NAME} | User: ${DB_USER} | Pass: ${DB_PASS}"
echo "📁 Lokasi Instalasi Nextcloud: ${NEXTCLOUD_DIR}"
echo "📜 Log: $LOG_FILE"
Kalau mau, aku bisa:
-
- Simpan file ini untuk kamu (beri nama file yang diinginkan) — lalu tunjukkan perintah
chmod +x
&sudo bash ...
.
- Simpan file ini untuk kamu (beri nama file yang diinginkan) — lalu tunjukkan perintah
-
- Sesuaikan supaya menggunakan TLS/HTTPS (Let's Encrypt) otomatis — sangat direkomendasikan untuk production.
-
- Sesuaikan socket PHP-FPM kalau di servermu berbeda (mis.
127.0.0.1:9000
).
- Sesuaikan socket PHP-FPM kalau di servermu berbeda (mis.
Mau aku simpan jadi file dan kirimkan instruksi jalannya?