
Artikel ini berisi catatan ane saat memasang Ente di FreeBSD. Sejujurnya memasang Ente adalah proses self host app yang sangat rumit dan menjengkelkan yang pernah ane rasakan, hingga saat ini. Jadi tujuan catatan ini dibuat menjadi sangat jelas agar ane (atau ente atau elu) tidak menjadi pusing dan jengkel seperti ane sebelum ini.
Ente adalah aplikasi backup foto seperti Google Photos atau iCloud Photos, dia punya banyak fitur keren (dan overkill untuk ukuran aplikasi Photos) seperti end to end encryption, open source, cross platform, face recognition, zero knowledge AI, tanpa iklan, tanpa AI, tanpa tracking, dan bahkan 2FA Authenticator di dalamnya.
Ane akan fokus pada fungsi Ente untuk penyimpanan Photos, jadi berikut catatan yang sudah ane kumpulkan dari pengalaman memasang Ente (yang menjengkelkan itu). Ente sudah memberikan dokumentasi untuk self host tanpa Docker, per hari ini sudah banyak perbaikan atas dokumentasi ini namun 3 bulan yang lalu kacau isinya.
Persiapan #
Ente sudah menyediakan binary yang bisa langsung dipasang, sayangnya tidak untuk FreeBSD. Oleh karena itu ane perlu mem-build sendiri binary tersebut. Untuk melakukan itu ada beberapa aplikasi dan pustaka yang perlu dipasang terlebih dahulu.
Go. Mutlak diperlukan karena Ente dibuat dengan Go, tambahkan
pkgconfuntuk handling dependencies. Ane nanti perlu pull data dari repo Ente di Github jadi butuh Git. Untuk reverse proxy ane akan pakai Caddy.$ doas pkg update $ doas pkg install go124 pkgconf git-lite caddyPostgresql. Ente pakai postgresql untuk database-nya, juga minta
libsodiumuntuk enkripsi E2E. Karena ane sudah ada postgresql di jail yang lain, jadi ane cukup pasanglibsodium. Tapi, oke baiklah mari kita anggap tidak ada postgres.$ doas pkg install libsodium postgresql18-serverKemudian buat database postgresql, sebelum itu aktifkan postgresql, inisialisasi postgres ,dan jalankan daemonnya dulu
$ doas sysrc postgresql_enable="YES" $ doas /usr/local/etc/rc.d/postgresql initdb $ doas service postgresql startPastikan bahwa postgresql sudah berjalan dengan baik
$ doas service postgresql status status postgresql pg_ctl: server is running (PID: 66771) /usr/local/bin/postgres "-D" "/data/postgres/data18" $ doas sockstat -4 | grep 5432 postgres postgres 88698 9 tcp4 10.0.0.3:5432 10.0.0.4:13701 postgres postgres 88682 9 tcp4 10.0.0.3:5432 10.0.0.4:62644 postgres postgres 88662 9 tcp4 10.0.0.3:5432 10.0.0.4:58171 postgres postgres 66771 6 tcp4 10.0.0.3:5432 *:*Setelah postgres benar - benar berjalan, ganti password untuk user default postgresql yaitu
postgres$ doas passwd postgresBuat user dan database untuk Ente, kemudian atur agar database tersebut menjadi milik user yang dibuat.
$ su - postgres $ CREATEUSER ente-admin $ CREATEDB ente-db -O ente-adminAtur password untuk
ente-admindan beri semua privilleges untuknya.$ psql ente-db ente-db=# ALTER ROLE ADMIN WITH ENCRYPTED PASSWORD 'entebahlul'; ente-db=# GRANT ALL PRIVILLEGES ON DATABASE ente-db TO ente-admin; ente-db=# exit $ exit $ doas service postgresql restartAsumsi postgresql dan Ente akan berjalan di
localhost, maka ane tidak perlu mengubah pengaturan untuk akses jaringan dipostgresql.confdanpg_hba.conf. Namun jika postgresql jalan di jaringan atau jail yang lain, maka perlu merubah pengaturan.# vim /data/db/postgres/data18/postgresql.conf listen_addresses = '*'merubah isian
listen_addresseske*membuat postgresql akan menerima koneksi dari luar jail. Kemudian di filepg_hba.confditambahkan isian sebagai berikut# vim /data/db/postgres/data18/pg_hba.conf host ente_db all 10.0.0.3/32 trust host ente_db all 10.0.0.0/24 trustdimana
10.0.0.3adalah IP dari Ente.NodeJS, diperlukan untuk build frontend. Sebenarnya ane ga butuh untuk build frontend di FreeBSD, namun siapa tahu ada masalah ane tetap install saja.
$ doas pkg install node24 yarn-node24
- Storage alias penyimpanan. Ane sudah punya Garage S3 yang berjalan di dalam jail dan sudah menulis tentang cara pasang dan pengaturannya.
Build #
Ente memiliki 2 jenis servis yaitu backend dan frontend, oleh karena itu perlu untuk melakukan build secara terpisah. Backendnya sendiri dibangun dengan Go dan akan menghasilkan file binary, sedangkan frontendnya dibangun dengan NextJS.
Backend #
Setelah semua persiapan selesai, saatnya melakukan build Ente server. Unduh repo Ente terlebih dahulu dengan git dan kemudian build.
$ git clone https://github.com/ente-io/ente.git
$ cd ente/server
$ go124 mod tidy
$ go124 build cmd/museum/main.go
Perintah go124 mod tidy digunakan untuk mengunduh semua dependencies dan perintah go124 build untuk memulai melakukan build dengan hasil file main yang sudah memiliki atribut execute.
Saat file main dijalankan akan muncul error bahwa dia membutuhkan file konfigurasi bernama museum.yaml. Jadi salin file tersebut dari folder example atau bikin sendiri kosongan.
$ cp config/example.yaml ./museum.yaml
Agar bisa berjalan saja untuk sementara ane isi dengan konfigurasi database dan bucket S3. Contohnya seperti ini
db:
host: 10.0.0.3
port: 5432
sslmode: disable
name: ente-db
user: ente-user
password: entebahlul
s3:
are_local_buckets: false
use_path_style_urls: true
b2-eu-cen:
key: W3wNV6XRh1YJ8arQKBoongNqGhQ
secret: FakeLIpA3l0VjttIiHaZgdMXF4ujQOYTyBtztpSy7w0yD2qzphOQwRtvj
endpoint: s3.taa.ee
region: us-east-1
bucket: ente-bucket
khusus untuk s3, karena ane pakai local atau selfhost maka nilai are_local_buckets: false karena ane pakai endpoint url. Ane sudah coba kasih true tapi tak pernah bisa tersambung dengan baik. b2-eu-cen adalah key yang harus dipakai jika pakai s3 selfhost atau AWS Compatible s3.
Kemudian jalankan ./main secara defaultnya akan mencari file museum.yaml sebagai konfigurasi utama atau kasih flags --config path jika memakai nama yang lain. Ente akan berjalan di http://localhost:8080.
# cd ente/server
# ./main --config /root/ente/server/museum.yaml
Update
Agar Ente bisa dijalankan setiap boot maka bisa dibuat service script seperti contoh berikut.
#!/bin/sh
# PROVIDE: ente
# REQUIRE: networking postgresql
# KEYWORD: shutdown
. /etc/rc.subr
name="ente"
rcvar="ente_enable"
desc="Ente Photos Server"
ente_dir="/root/ente/server"
ente_bin="${ente_dir}/main"
ente_config="${ente_dir}/museum.yaml"
ente_log="/var/log/ente.log"
ente_pid="/var/run/ente.pid"
load_rc_config $name
: ${ente_enable:=NO}
command="${ente_bin}"
command_args="--config ${ente_config}"
start_cmd="ente_start"
stop_cmd="ente_stop"
status_cmd="ente_status"
ente_start() {
echo "Starting ${name}..."
# PAKSA CWD = folder ente
cd "${ente_dir}" || { echo "Failed to cd to ${ente_dir}"; exit 1; }
nohup ${command} ${command_args} > ${ente_log} 2>&1 &
echo $! > ${ente_pid}
echo "${name} started (PID: $!)"
}
ente_stop() {
echo "Stopping ${name}..."
if [ -f "${ente_pid}" ]; then
kill $(cat ${ente_pid}) 2>/dev/null && rm -f ${ente_pid}
echo "${name} stopped."
fi
}
ente_status() {
if [ -f "${ente_pid}" ]; then
pid=$(cat ${ente_pid})
if kill -0 $pid 2>/dev/null; then
echo "${name} is running (PID: $pid)"
else
echo "${name} not running (stale PID)"
fi
else
echo "${name} is not running."
fi
}
run_rc_command "$1"
Kemudian simpan sebagai /usr/local/etc/rc.d/ente, jangan lupa ganti atribut supaya bisa dijalankan sebagai shell script
# chmod +x /usr/local/etc/rc.d/ente
Kemudian rubah file /etc/rc.conf dan masukkan pengaturan berikut
ente_enable=YES
Ente sekarang bisa dikelola dengan service ente start|stop|restart dan bisa jalan saat boot
Jika ada rencana untuk memakai email sebagai alat komunikasi dan verifikasi, ada baiknya untuk mengatur JWT (JSON Web Token) yang bisa dibuat dengan perintah
$ cd ente/server
$ go124 run tools/gen-random-keys/main.go
Kemudian simpan hasilnya di file museum.yaml di bawah pengaturan sebelumnya. Karena ane hanya single user maka ane tak perlu pengaturan ini, resikonya adalah OTP tidak akan dikirim ke email, melainkan harus melihat di console. (Lihat contoh dibawah)
Setelah backend sudah selesai dibuild selanjutnya adalah build ente-cli yang nantinya sangat penting untuk melakukan tweaks akun Ente.
$ cd ente/cli
$ go124 build -o "bin/ente-cli" main.go
perintah ini akan menghasilkan file ente-cli di dalam folder bin. Agar bisa dipergunakan yang harus dilakukan adalah menentukan konfigurasi, ente-cli membutuhkan file config.yaml di folder .ente di home directory.
$ cd ~
$ mkdir .ente
$ touch config.yaml
endpoint:
api: http://localhost:8080
$ mkdir secrets
elu bisa pakai nilai http://localhost:8080 atau langsung domain (tapi harus set di Caddy dulu). Juga harus membuat folder secrets yang dipergunakan ente-cli untuk menyimpan secrets auth.
Untuk sementara sampai disini build backend (server dan cli), selanjutnya adalah build frontend.
Frontend #
Ane tidak melakukan build frontend di FreeBSD karena NextJS tidak bisa berjalan lancar di sini, memang bisa diakali dengan mengikuti banyak sekali build library dari source tapi tidak worth it untuk dilakukan. NextJS adalah aplikasi web dan dia tidak butuh harus dibuild di FreeBSD (framework agnostic), jadi ane akan build di Macos karena lebih mudah.
Di Macos tentu harus pasang Node, npm, dan yarn semua diselesaikan oleh Homebrew.
$ git clone https://github.com/ente-io/ente.git
$ cd ente/web
$ yarn install
Tunggu sampai selesai, setelah itu ane bisa saja mengatur environment variables tapi tidak ane lakukan karena memang mau buat Ente Photos lebih aman dengan mengetik langsung endpoint-nya saat login.
Frontend bisa dibuild dengan yarn (ane hanya build accounts, photos saja ga butuh yang lainnya) caranya sebagai berikut
$ yarn build
$ yarn build:accounts
kedua perintah di atas akan membuild frontends dan hasilnya bisa dilihat di folder out di bawah apps/photos/ dan apps/accounts/ . Untuk mempermudah maka ane kumpulkan folder out tadi ke satu folder khusus dengan nama ente-www.
$ cp -R ente/web/apps/photos/out ~/ente-www/photos
$ cp -R ente/web/apps/accounts/out ~/ente-www/accounts
Caddy Reverse Proxy #
Untuk ini ane sudah siapkan domain, sebut saja photos.taa.ee. Langsung saja edit file konfigurasi Caddy dan tambahkan rules baru.
$ doas vim /usr/local/etc/caddy/Caddyfile
photos.taa.ee {
root * /home/tae/ente-www/photos
file_server try_files {path} {path}.html /index.html
}
ente.taa.ee {
reverse_proxy http://127.0.0.1:8080
}
$ doas caddy validate /usr/local/etc/caddy/Caddyfile
$ doas service caddy restart
Jika tidak ada masalah seharusnya Ente sudah bisa diakses dengan membuka photos.taa.ee. Di tampilan awal Ente, klik 7x di gambar brankas dan ketik alamat dari ente server yaitu ente.taa.ee. Kemudian klik pada tautan Don’t have an account untuk mendaftar.

Karena ane tidak setup email (SMTP dll termasuk JWT), maka verifikasi akun tidak bisa dilakukan melalui email. Jadi kembali ke console dan lihat log dari main dan cari baris seperti ini
Skipping sending email to poes@taa.ee: Verification code: 946197
Masukkan kode verifikasi 946197 dan voila bisa langsung masuk ke dalam Ente Photos.
Konfigurasi lanjutan #
Semua perubahan di museum.yaml harus diikuti dengan restart main agar Ente mempergunakan konfigurasi yang baru dirubah.
- Closed, tidak menerima pendaftaran. Instance Ente ini ane pergunakan pribadi sehingga ane tidak perlu menerima pendaftaran, oleh karena itu ane masukkan
keyberikut dimuseum.yaml
internal:
disable-registration: true
- Jadi Admin. Ini penting karena menjadi admin bisa melakukan pengaturan secara maksimal. Untuk menjadi admin ada beberapa langkah yang harus dilakukan yaitu mencari
user_iddi dalam database postgres dan masukkan ke dalammuseum.yaml.
$ psql -U ente-user -d ente-db
ente-db=# SELECT * FROM users;
Catat user_id, misalnya 1580567352375231 kemudian edit file museum.yaml
internal:
disable-registration: true
admins:
- 1580567352375231
- Upgrade storage. Meski selfhost, defaultnya Ente akan memberikan storage maksimal 10GB pada setiap user, agar bisa memaksimalkan storage ada 2 cara yaitu edit database atau pakai
ente-cli.
Agar bisa mempergunakan ente-cli maka akun ane harus sudah menjadi admin. Kemudian jalankan ente-cli.
$ cd ente/cli/bin
$ ./ente-cli admin update-subscription -u poes@taa.ee --no-limit True
perintah ini akan membuat user poes@taa.ee akan memiliki storage sebesar 100TB yang akan expired di 100 tahun kemudian.
Namun jika lebih nyaman dengan SQL, bisa dicoba cara berikut:
$ psql -U ente-user -d ente-db
$ UPDATE subscriptions SET storage = 107374182400 WHERE user_id = 1580567352375231;
Mempergunakan cara ini lebih beresiko database rusak sehingga ane pilih memakai ente-cli.

Sebelum

Sesudah
Update CORS. Ane pakai Garage S3 (AWS Compatible), entah mengapa selalu gagal saat upload media melalui Ente. Dari web console errornya adalah masalah CORS Origin. Jadi ane perlu benerin bucket dengan mengupdate CORS. Buat file dengan nama misalnya
cors.json{ "CORSRules": [ { "AllowedOrigins": ["*"], "AllowedHeaders": ["*"], "AllowedMethods": ["GET", "HEAD", "POST", "PUT", "DELETE"], "MaxAgeSeconds": 3000, "ExposeHeaders": ["Etag"] } ] }
Kemudian dengan aws-cli update bucket policy.
Update
Oke begini cara pakai aws-cli. Paket ini bisa diinstall dan dikonfigurasi dengan perintah
$ doas pkg install -y py-awscli
$ aws configure
AWS Access Key ID [None]: W3wNV6XRh1YJ8arQKBoongNqGhQ
AWS Secret access key [None]: FakeLIpA3l0VjttIiHaZgdMXF4ujQOYTyBtztpSy7w0yD2qzphOQwRtvj
Default Region name [None]: us-east-1
Default output format [None]: JSON
AWS Access Key ID dan Secret harus sama dengan yang dimasukkan di file museum.yaml.
$ aws s3api put-bucket-cors \
--endpoint s3.taa.ee \
--bucket ente-bucket \
--cors-configuration file://home/poes/cors.json
- Ente Desktop Meski ada web GUI, memasang Ente Desktop app adalah pilihan yang lebih baik karena pengalaman ane saat pakai web gui sebagian besar media (terutama video) yang ane unggah tidak bisa digenerate thumbnailnya atau frame pertama muncul warna gelap/hitam. Namun masalah ini tidak terjadi saat ane pakai Ente Desktop app.
Untuk memasang tinggal unduh saja aplikasinya di halaman Ente Desktop atau untuk versi termutakhir bisa lewat Repo Github Ente Desktop. Satu - satunya kelemahan yang ane ga suka adalah Ente Desktop app dibangun dengan electron 👎🏾.
Linux #
Khusus untuk yang ingin mudah hidupnya, gunakan Linux karena Ente bisa diinstall hanya dengan 1 baris perintah. Apa itu adek - adek?
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ente-io/ente/main/server/quickstart.sh)"
Setelah semua selesai Ente akan tersedia di http://localhost:3000. Linux itu mudah bukan? bukan.

dari Fediverse
Kamu juga bisa meninggalkan komentar dari akun fediversemu dengan meng-reply di toot ini