Nextcloud adalah solusi sempurna untuk alternatif Google Drive atau Dropbox yang dihosting sendiri.
Saya tidak akan memberi tahu Anda mengapa Anda harus menggunakan Nextcloud. Sebagai gantinya, saya akan menunjukkan cara menginstal server Nextcloud dengan wadah Docker.
Tutorial ini menggunakan pengaturan proxy terbalik Ngnix sehingga Anda dapat menerapkan instance Nextcloud Anda dengan SSL. Dengan cara ini, URL penerapan Nextcloud Anda akan menggunakan HTTPS dan Anda akan mentransfer file dengan aman.
Menjelang akhir tutorial, saya akan membagikan beberapa tips untuk pengguna cloud Linode untuk mengurangi upaya penerapan Nextcloud.
Linode | Awan Terbuka Independen untuk PengembangMisi kami adalah mempercepat inovasi dengan membuat komputasi awan menjadi sederhana, terjangkau, dan dapat diakses oleh semua orang. LinodePrasyarat
Sebelum bergerak maju, beberapa hal perlu diperhatikan. Inilah yang Anda butuhkan:
- Server Linux baik yang fisik, mesin virtual, atau di server awan.
- Docker dan Docker Compose terpasang di server Linux Anda. Jika Anda memerlukan bantuan, ikuti panduan instalasi buruh pelabuhan di Ubuntu dan CentOS. Demikian pula, Anda dapat mengikuti tutorial instalasi docker-compose di Ubuntu dan CentOS.
- Beberapa pengetahuan tentang Docker dan Docker Compose bagus untuk dimiliki.
- Nama domain. Penerapan ini, seperti semua yang lain dari Buku Pegangan Linux, dilakukan di bawah nama domain sebenarnya dengan HTTPS.
- Beberapa pengalaman dengan perintah shell dan Linux karena ada banyak gerakan di dalamnya.
- Akses ke layanan SMTP seperti Sendgrid. Anda akan membutuhkannya untuk mengirim pemberitahuan email, pengaturan ulang kata sandi, dll.
- Waktu dan kesabaran.
Menyebarkan server Nextcloud dengan Docker di proxy terbalik
Mari kita lihat langkah-langkahnya satu per satu.
Langkah 1:Siapkan proxy terbalik
Dengan proxy terbalik, Anda dapat menggunakan beberapa layanan web di server yang sama. Ini bukan opsional karena Anda memerlukan wadah Let's Encrypt untuk SSL.
Ada dua cara untuk mengatur proxy terbalik Ngnix..
Jika Anda tidak menggunakan Linode, silakan baca artikel saya tentang cara mengatur nginx-reverse-proxy dengan Docker.
Cara Menggunakan Nginx Reverse Proxy Dengan Beberapa Aplikasi DockerPelajari bagaimana Anda dapat menerapkan beberapa layanan web di server yang sama menggunakan proxy terbalik Nginx dan wadah buruh pelabuhan. Buku Pegangan LinuxDebdut ChakrabortyJika Anda menggunakan Linode, saya sarankan Anda menggunakan StackScript reverse-proxy-jwilder kami untuk menyebarkan server Anda dengan mudah dengan semua yang sudah disiapkan untuk Anda.
Penerapan proxy terbalik harus dilakukan menggunakan file Compose terpisah sehingga Anda dapat memulai ulang atau memperbarui layanan web tanpa mengganggu penyiapan proxy terbalik.
Saya telah menyiapkan file penulisan di repositori GitHub publik kami. Karena ini bukan artikel mendetail tentang penerapan reverse-proxy, saya tidak akan membahas detail file Compose.
Anda dapat menggunakan git
, atau wget
untuk mengunduh file. Jika menggunakan git
, kloning seluruh repositori:
git clone https://github.com/linuxhandbook/tutorial-snippets && \
cd tutorial-snippets/Reverse_Proxy
Jika tidak, cukup unduh file yang diperlukan:
mkdir -p ~/Reverse_Proxy && cd ~/Reverse_Proxy
for file in max_upload_size.conf env.example docker-compose.yaml; do
wget https://raw.githubusercontent.com/linuxhandbook/tutorial-snippets/main/Reverse_Proxy/${file}
done
Ada tiga file di sini:
- env.example:Ganti namanya menjadi .env dan ubah nilai
DEFAULT_EMAIL
ke email Anda - max_upload_size.conf:File ini memastikan bahwa Anda dapat mengupload file berukuran sebesar 1 GB (defaultnya adalah 2 MB).
- docker-compose.yaml:Terbesar dari semuanya. Dibahas secara singkat di paragraf berikutnya.
Buat jaringan buruh pelabuhan bernama net
. Ini digunakan dalam file docker-compose.yaml.
docker network create net
File komposisi buruh pelabuhan terlihat seperti ini:
Terakhir, terapkan container
docker-compose up -d
Pada penerapan yang berhasil, Anda harus mendapatkan 503 saat mencoba mengunjungi alamat IP server yang menghosting proxy terbalik ini. Tidak apa-apa. Anda belum memiliki layanan web yang berjalan di dalamnya.
Langkah 2:Terapkan Nextcloud
Ada dua komponen di sini:satu adalah database, yang lain adalah Nextcloud itu sendiri, atau lebih tepatnya sebut saja frontend.
Untuk database backend, database berbasis MySQL apa pun akan berfungsi. Saya akan menggunakan MariaDB, terutama tag gambar (atau versi) 10.5.9.
Untuk Nextcloud, saya akan menggunakan versi 21.0.0, ini adalah yang terbaru pada saat penulisan artikel ini.
Oleh karena itu, gambar yang digunakan adalah
mariadb:10.5.9
nextcloud:21.0.0
File kerangka, yaitu file penulisan dan file env sudah diunggah ke repositori GitHub publik kami. Anda dapat mengunduhnya atau menulis ulang saat membaca penjelasannya.
Saya sarankan Anda mengunduh file, lalu memeriksa semuanya untuk memahami apa yang terjadi, Anda tidak perlu menulis ulang semuanya dari awal.
Anda dapat mengkloning seluruh repositori GitHub kami, atau cukup mengunduh file yang diperlukan.
Jika Anda mengkloning repositori "tutorial-snippets" saat menerapkan reverse-proxy, cukup ubah direktori Anda saat ini ke tutorial-snippets/Nextcloud
.
git
. yang berfungsi perintahnya adalah sebagai berikut:
git clone https://github.com/linuxhandbook/tutorial-snippets && \
cd tutorial-snippets/Nextcloud
Jika tidak, gunakan kode shell berikut untuk membuat direktori bernama "Nextcloud" dan unduh file di sana.
mkdir -p ~/Nextcloud && cd ~/Nextcloud
for file in env.example docker-compose.yaml; do
wget https://raw.githubusercontent.com/linuxhandbook/tutorial-snippets/main/Nextcloud/${file}
done
Salin env.example
file ke .env
. Anda akan mengedit file ini nanti untuk variabel lingkungan. Menyimpan file asli hanya untuk cadangan, tidak ada yang lain.
cp env.example .env
Sekarang, izinkan saya membahas definisi layanan:
1. NCDatabase
NCDatabase
layanan terlihat seperti ini:
NCDatabase:
image: "mariadb:10.5.9"
volumes:
- "NCMariaDB:/var/lib/mysql"
environment:
- MYSQL_ROOT_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD
- MYSQL_DATABASE
- MYSQL_USER
- MYSQL_PASSWORD
restart: "on-failure"
networks: ["common"]
Ini adalah layanan database, dan seperti yang dinyatakan sebelumnya, layanan ini menggunakan mariadb:10.5.9
gambar sebagai cetak birunya.
Untuk penyimpanan persisten, saya menggunakan volume bernama NCMariaDB
, itu dipasang di /var/lib/mysql
, tempat MariaDB menyimpan datanya.
Variabel lingkungan ditangani menggunakan .env
file, saya akan membicarakannya sebentar lagi.
Saya suka on-failure
mulai ulang kebijakan, tetapi Anda bebas memilih unless-stopped
atau always
. Anda mungkin ingin membaca lebih lanjut tentang kebijakan restart di Docker.
common
jaringan umum antara ini dan layanan frontend, itu ada untuk memastikan komunikasi dimungkinkan antara wadah ini.
Variabel Lingkungan
Ini adalah penerapan berbasis Docker, Anda harus menyiapkan beberapa variabel lingkungan. Sekarang buka .env
ini file di editor teks favorit Anda dan mulai ubah nilainya sebagai berikut:
MYSQL_ROOT_PASSWORD
atau MYSQL_RANDOM_ROOT_PASSWORD
:Setel MYSQL_RANDOM_ROOT_PASSWORD
ke 1 atau atur kata sandi root yang kuat untuk MariaDB. Gunakan openssl
untuk membuat sandi acak.
MYSQL_DATABASE
&MYSQL_USER
:Ada beberapa pengaturan default, tetapi Anda dapat mengubahnya jika perlu. Setel ini ke nama database dan nama pengguna pilihan Anda masing-masing.
MYSQL_PASSWORD
:Kata sandi untuk pengguna (MYSQL_USER
) yang akan memiliki akses ke database MariaDB utama (MYSQL_DATABASE
).
MYSQL_HOST
:Ini adalah nama layanan wadah database. Jika Anda tidak akan mengubah nama layanan di File Tulis, biarkan ini apa adanya.
2. NCFrontend
Ini adalah layanan frontend Nextcloud. Layanan ini sesederhana yang sebelumnya. Lihat:
NCFrontend:
image: "nextcloud:21.0.0"
volumes:
- "NCData:/var/www/html"
environment:
- LETSENCRYPT_HOST
- VIRTUAL_HOST
- TRUSTED_PROXIES
- OVERWRITEPROTOCOL
- MYSQL_DATABASE
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_HOST
- SMTP_HOST
- SMTP_PORT
- SMTP_NAME
- SMTP_PASSWORD
- MAIL_FROM_ADDRESS
- NEXTCLOUD_TRUSTED_DOMAINS
- NEXTCLOUD_ADMIN_USER
- NEXTCLOUD_ADMIN_PASSWORD
depends_on:
- "NCDatabase"
networks: ["net", "common"]
Gambar yang digunakan adalah nextcloud:21.0.0
, seperti yang saya katakan sebelumnya, adalah versi terbaru pada saat penulisan ini.
Untuk memastikan Anda menyimpan data Anda dengan aman, dan tidak kehilangannya dalam peristiwa yang tidak menguntungkan dari restart kontainer sederhana, data harus dipertahankan. Nextcloud menyimpan data/informasinya di /var/www/html
, jadi lokasi ini dibuat persisten menggunakan volume bernama NCData
.
depends_on
array adalah salah satu yang menarik. Itu memastikan bahwa nilai-nilai, yaitu layanan yang disebutkan di dalamnya dikerahkan terlebih dahulu sebelum yang sekarang dimulai.
Di sini, saya memastikan bahwa database dimulai sebelum Nextcloud itu sendiri, untuk menghindari masalah koneksi.
Anda mungkin masih melihat beberapa masalah di log, karena permulaan penampung yang berhasil tidak menunjukkan bahwa proses yang dimaksud di dalam penampung juga telah berhasil dimulai. Mereka dapat mengambil lebih banyak waktu. Dalam kasus kami, mysqld membutuhkan sedikit lebih banyak waktu untuk memulai, itulah sebabnya Anda mungkin melihat beberapa kesalahan dalam log sampai akhirnya koneksi berhasil dibuat.
Ada dua jaringan. Yang pertama adalah net
, yang juga merupakan bagian dari penerapan reverse-proxy. Ini diperlukan karena reverse-proxy harus dapat berkomunikasi dengan layanan proxy, yaitu Nextcloud. common
jaringan adalah untuk cloud berikutnya dan wadah basis data agar dapat berkomunikasi dengan sukses.
Variabel Lingkungan
Buka .env
file (yang sama yang Anda gunakan untuk MariaDB) di editor teks favorit Anda dan mulai ubah nilainya sebagai berikut:
LETSENCRYPT_HOST
, VIRTUAL_HOST
&NEXTCLOUD_TRUSTED_DOMAINS
:Setel ini ke domain/subdomain tempat Anda ingin menghosting instance Nextcloud Anda.
TRUSTED_PROXIES
:Subnet jaringan, dibagikan oleh proxy terbalik dan frontend ini. Anda bisa mendapatkan subnet menggunakan perintah berikut (pastikan jq
sudah terpasang)
docker inspect -f '{{ json .IPAM.Config }}' net | jq -r .[].Subnet
OVERWRITEPROTOCOL
:Parameter overwriteprotocol digunakan untuk mengatur protokol proxy. Saat kami menggunakan HTTPS, setel ini ke HTTPS.
SMTP_HOST
&SMTP_PORT
:Alamat server SMTP dan port yang akan didengarkannya, untuk SendGrid adalah smtp.sendgrid.net dan port 587 untuk TLS otomatis.
SMTP_NAME
&SMTP_PASSWORD
:Nama pengguna &kata sandi untuk otentikasi. Untuk SendGrid nilai username sangat konsisten. Ini adalah apikey
. Untuk kata sandi, itu akan menjadi kunci API Anda.
MAIL_FROM_ADDRESS
:Nilai dari From
kepala SMTP. Setel ini ke sesuatu seperti [email protected]
.
NEXTCLOUD_ADMIN_USER
&NEXTCLOUD_ADMIN_PASSWORD
:Alih-alih menggunakan UI web saat pertama kali membuat pengguna admin, Anda dapat membuatnya tepat pada tahap penerapan melalui variabel-variabel ini. Setel ini ke nama pengguna dan kata sandi pengguna admin Anda. Jika Anda meninggalkannya, Anda akan diminta untuk membuat akun saat pertama kali meluncurkan Nextcloud.
Volume
Saya memiliki dua volume internal yang ditentukan dalam jaringan ini, NCMariaDB
untuk MariaDB dan NCData
untuk Nextcloud. Apakah akan menyimpan ini internal atau eksternal terserah Anda.
Banyak yang akan mengatakan itu berisiko untuk menyimpan ini internal karena Anda dapat dengan mudah membuat kesalahan dengan menggunakan docker-compose down -v
dan keluarkan volumenya bersama wadahnya. Pada saat yang sama, dengan volume eksternal, Anda dapat membuat kesalahan docker volume prune
dan hapus semua data Anda.
Putuskan mana yang akan lebih aman untuk Anda. Jika Anda memutuskan untuk menjadikannya eksternal, buka file Tulis dan ubah volumes
definisi untuk sesuatu seperti ini:-
volumes:
NCMariaDB:
external: true
NCData:
external: true
Setelah itu, buat volumenya:
for volume in NCMariaDB NCData; do
docker volume create ${volume}
done
Jaringan
Tidak banyak di sini. Anda akan melihat ada dua jaringan yang ditentukan. Satu untuk frontend dan reverse-proxy, dan satunya lagi untuk frontend dan backend agar dapat berkomunikasi.
Wadah basis data dan frontend nextcloud memiliki jaringan umum bernama "umum", ini ada agar kedua wadah ini dapat berkomunikasi satu sama lain. Anda dapat membuat ini internal, yang akan membatasi wadah basis data untuk mengakses internet publik, tetapi saya tidak yakin keuntungan apa yang mungkin Anda dapatkan dari ini.
Namun jika Anda ingin melakukan ini, tampilannya akan seperti ini:
networks:
net:
external: true
common:
internal: true
Akhirnya, menerapkan Nextcloud
Tidak ada lagi yang bisa dilakukan. Jalankan saja perintah berikut
docker-compose up -d
Gambar yang diperlukan akan ditarik dan kemudian disebarkan.
Setelah di-deploy, harus ada total empat container yang berjalan di server Anda.
[email protected]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1dce1c7909fe jrcs/letsencrypt-nginx-proxy-companion:latest "/bin/bash /app/entr…" 7 hours ago Up 7 hours reverse_proxy_LetsencryptCompanion_1
d29719999132 jwilder/nginx-proxy:latest "/app/docker-entrypo…" 7 hours ago Up 7 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp reverse_proxy_NginxProxy_1
cd719cb2a677 nextcloud:21.0.0 "/entrypoint.sh apac…" 7 hours ago Up 7 hours 80/tcp nextcloud_NCFrontend_1
60dff2062aa5 mariadb:10.5.9 "docker-entrypoint.s…" 7 hours ago Up 7 hours 3306/tcp nextcloud_NCDatabase_1
Anda mungkin memiliki lebih banyak kontainer yang berjalan juga jika ada kontainer yang berjalan sebelumnya. Intinya adalah penerapan Nextcloud ini terdiri dari empat wadah, wadah nginx, wadah pendamping letsencrypt, wadah mariadb, dan terakhir wadah nextcloud yang sebenarnya.
Pasca penerapan
Sebelum mengakhiri ini, saya ingin menyebutkan satu hal singkat yang mungkin ingin Anda ketahui setelah penerapan.
Pertama buka browser Anda dan buka domain tempat instance Nextcloud ini dihosting (VIRTUAL_HOST
). Anda akan melihat layar yang mirip dengan ini, jika Anda tidak mengatur pengguna admin menggunakan file penulisan
Karena variabel lingkungan database dibagikan melalui .env
yang umum file, Anda tidak akan melihat UI pemasangan web yang lebih umum yang meminta informasi basis data seperti nama host, port, kata sandi nama pengguna basis data.
Kotak centang serupa juga dapat dilihat di sana. Sebaiknya hapus centang pada kotak ini dan instal aplikasi mana pun yang Anda perlukan nanti dari daftar aplikasi.
Untuk kiat penerapan pos lainnya, baca artikel luar biasa ini yang ditulis oleh rekan saya Avimanyu:
10 Tips Bermanfaat untuk Mengelola Instans Docker NextcloudBeberapa saran bermanfaat yang perlu diingat dan diikuti dalam praktik saat Anda menghosting sendiri instans Nextcloud dengan Docker! Buku Pegangan LinuxAvimanyu BandyopadhyayItu dia. Saya harap tutorial terperinci ini membantu Anda dengan instalasi server Nextcloud Anda dengan Docker. Jika Anda memiliki pertanyaan atau saran, beri tahu saya di bagian komentar dan saya akan dengan senang hati membantu Anda.