GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Menginstal Nextcloud dengan Docker di Server Linux Anda

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

Prasyarat

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 Chakraborty

Jika 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
Jika Anda menggunakan tutorial ini di masa mendatang (dari referensi waktu sekarang) dan ada versi Nextcloud dan MariaDB yang jauh lebih baru, silakan gunakan versi tersebut.

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.

Docker Compose membuat jaringan default untuk semua layanannya dalam file Compose. Tetapi karena layanan NCFrontend sudah terhubung ke jaringan bersih, Docker Compose tidak akan membuat jaringan default itu lagi, itulah sebabnya Anda harus membuat jaringan khusus seperti "umum" untuk membuat komunikasi terjadi.

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.

Konfigurasi SMTP adalah opsional. Untuk artikel ini, saya akan menggunakan SendGrid sebagai contoh. Lihat dokumentasi server SMTP Anda untuk nilai yang lebih sesuai dengan variabel lingkungan berikut.

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 Bandyopadhyay

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


Docker
  1. Cara Memasang Lingkungan Desktop di Server Linux Tanpa Kepala Anda

  2. Cara menginstal dan menghosting server OpenVPN dengan Docker

  3. Instal server Wireguard VPN dengan Docker

  1. Cara Menginstal Jenkins dengan Docker

  2. Cara Menginstal Nextcloud 14 di Debian 9

  3. Cara Menginstal NextCloud 15 di Ubuntu 18.04

  1. Cara Menginstal SQL Server di Linux

  2. Cara menginstal NextCloud 13 di Ubuntu 16.04

  3. Cara Menginstal Virtualisasi Server Linux