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.


1️⃣ Update Sistem

sudo apt update && sudo apt upgrade -y

2️⃣ Install Web Server + Database + PHP

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

3️⃣ Buat Database untuk Nextcloud

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)


4️⃣ Download Nextcloud

cd /tmp
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
sudo mv nextcloud /var/www/html/

5️⃣ Set Hak Akses

sudo chown -R www-data:www-data /var/www/html/nextcloud
sudo chmod -R 755 /var/www/html/nextcloud

6️⃣ Konfigurasi Apache

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

7️⃣ Akses Nextcloud

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

Klik Finish setup.


8️⃣ (Opsional) Pakai HTTPS

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

Script install_nextcloud.sh

#!/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}"

Cara Pakai

  1. Simpan script ini sebagai install_nextcloud.sh

  2. Beri izin eksekusi:

    chmod +x install_nextcloud.sh
  3. Jalankan:

    ./install_nextcloud.sh
  4. Setelah selesai, buka di browser:

    http://IP-server
    

    atau domain yang kamu set di SERVER_NAME.



Akses Nextcloud

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

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 menghasilkan php8.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:

    1. Simpan file ini untuk kamu (beri nama file yang diinginkan) — lalu tunjukkan perintah chmod +x & sudo bash ....
    1. Sesuaikan supaya menggunakan TLS/HTTPS (Let's Encrypt) otomatis — sangat direkomendasikan untuk production.
    1. Sesuaikan socket PHP-FPM kalau di servermu berbeda (mis. 127.0.0.1:9000).

Mau aku simpan jadi file dan kirimkan instruksi jalannya?

⚠️ **GitHub.com Fallback** ⚠️