diff --git a/ct/ente.sh b/ct/ente.sh index 7e71a7303..b2043bf9f 100644 --- a/ct/ente.sh +++ b/ct/ente.sh @@ -8,10 +8,10 @@ source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxV APP="Ente" var_tags="${var_tags:-photos}" var_cpu="${var_cpu:-4}" -var_ram="${var_ram:-4096}" -var_disk="${var_disk:-10}" +var_ram="${var_ram:-6144}" +var_disk="${var_disk:-20}" var_os="${var_os:-debian}" -var_version="${var_version:-12}" +var_version="${var_version:-13}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -20,18 +20,18 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /var ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_info "Updating Ente LXC" - $STD apt-get update - $STD apt-get -y upgrade - msg_ok "Updated Ente LXC" + header_info + check_container_storage + check_container_resources + if [[ ! -d /var ]]; then + msg_error "No ${APP} Installation Found!" exit + fi + msg_info "Updating Ente LXC" + $STD apt-get update + $STD apt-get -y upgrade + msg_ok "Updated Ente LXC" + exit } start diff --git a/install/ente-install.sh b/install/ente-install.sh index fa77381d8..7b78adabe 100644 --- a/install/ente-install.sh +++ b/install/ente-install.sh @@ -14,19 +14,22 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y \ +$STD apt install -y \ libsodium23 \ libsodium-dev \ pkg-config \ caddy \ - gcc \ - curl \ - jq + gcc msg_ok "Installed Dependencies" PG_VERSION="17" setup_postgresql +PG_DB_NAME="ente_db" PG_DB_USER="ente" setup_postgresql_db setup_go NODE_VERSION="24" NODE_MODULE="yarn" setup_nodejs +RUST_CRATES="wasm-pack" setup_rust +$STD rustup target add wasm32-unknown-unknown +import_local_ip + ENTE_CLI_VERSION=$(curl -s https://api.github.com/repos/ente-io/ente/releases | jq -r '[.[] | select(.tag_name | startswith("cli-v"))][0].tag_name') fetch_and_deploy_gh_release "ente-server" "ente-io/ente" "tarball" "latest" "/opt/ente" fetch_and_deploy_gh_release "ente-cli" "ente-io/ente" "prebuild" "$ENTE_CLI_VERSION" "/usr/local/bin" "ente-$ENTE_CLI_VERSION-linux-amd64.tar.gz" @@ -45,28 +48,15 @@ endpoint: EOF msg_ok "Configured Ente CLI" -msg_info "Setting up PostgreSQL" -DB_NAME="ente_db" -DB_USER="ente" -DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)" -$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';" -$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;" -$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';" -$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';" -$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';" +msg_info "Saving Ente Credentials" { - echo "Ente Credentials" - echo "Database Name: $DB_NAME" - echo "Database User: $DB_USER" - echo "Database Password: $DB_PASS" - echo "" echo "Important Configuration Notes:" - echo "- Frontend is built with IP: $(hostname -I | awk '{print $1}')" + echo "- Frontend is built with IP: $LOCAL_IP" echo "- If IP changes, run: /opt/ente/rebuild-frontend.sh" - echo "- Museum API: http://$(hostname -I | awk '{print $1}'):8080" - echo "- Photos UI: http://$(hostname -I | awk '{print $1}'):3000" - echo "- Accounts UI: http://$(hostname -I | awk '{print $1}'):3001" - echo "- Auth UI: http://$(hostname -I | awk '{print $1}'):3003" + echo "- Museum API: http://$LOCAL_IP:8080" + echo "- Photos UI: http://$LOCAL_IP:3000" + echo "- Accounts UI: http://$LOCAL_IP:3001" + echo "- Auth UI: http://$LOCAL_IP:3003" echo "" echo "Post-Installation Steps Required:" echo "1. Create your first user account via the web UI" @@ -78,7 +68,7 @@ $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';" echo "" echo "Note: Email verification requires manual intervention since SMTP is not configured" } >>~/ente.creds -msg_ok "Set up PostgreSQL" +msg_ok "Saved Ente Credentials" msg_info "Building Museum (server)" cd /opt/ente/server @@ -105,14 +95,13 @@ SECRET_JWT=$(go run tools/gen-random-keys/main.go 2>/dev/null | grep "jwt" | awk msg_ok "Generated Secrets" msg_info "Creating museum.yaml" -CONTAINER_IP=$(hostname -I | awk '{print $1}') cat </opt/ente/server/museum.yaml db: host: 127.0.0.1 port: 5432 - name: $DB_NAME - user: $DB_USER - password: $DB_PASS + name: $PG_DB_NAME + user: $PG_DB_USER + password: $PG_DB_PASS s3: are_local_buckets: true @@ -125,9 +114,9 @@ s3: bucket: ente-dev apps: - public-albums: http://${CONTAINER_IP}:3002 - cast: http://${CONTAINER_IP}:3004 - accounts: http://${CONTAINER_IP}:3001 + public-albums: http://${LOCAL_IP}:3002 + cast: http://${LOCAL_IP}:3004 + accounts: http://${LOCAL_IP}:3001 key: encryption: $SECRET_ENC @@ -149,26 +138,24 @@ msg_ok "Created museum.yaml" read -r -p "Enter the public URL for Ente backend (e.g., https://api.ente.yourdomain.com or http://192.168.1.100:8080) leave empty to use container IP: " backend_url if [[ -z "$backend_url" ]]; then - LOCAL_IP=$(hostname -I | awk '{print $1}') - ENTE_BACKEND_URL="http://$LOCAL_IP:8080" - msg_info "No URL provided" - msg_ok "using local IP: $ENTE_BACKEND_URL\n" + ENTE_BACKEND_URL="http://$LOCAL_IP:8080" + msg_info "No URL provided" + msg_ok "using local IP: $ENTE_BACKEND_URL\n" else - ENTE_BACKEND_URL="$backend_url" - msg_info "URL provided" - msg_ok "Using provided URL: $ENTE_BACKEND_URL\n" + ENTE_BACKEND_URL="$backend_url" + msg_info "URL provided" + msg_ok "Using provided URL: $ENTE_BACKEND_URL\n" fi read -r -p "Enter the public URL for Ente albums (e.g., https://albums.ente.yourdomain.com or http://192.168.1.100:3002) leave empty to use container IP: " albums_url if [[ -z "$albums_url" ]]; then - LOCAL_IP=$(hostname -I | awk '{print $1}') - ENTE_ALBUMS_URL="http://$LOCAL_IP:3002" - msg_info "No URL provided" - msg_ok "using local IP: $ENTE_ALBUMS_URL\n" + ENTE_ALBUMS_URL="http://$LOCAL_IP:3002" + msg_info "No URL provided" + msg_ok "using local IP: $ENTE_ALBUMS_URL\n" else - ENTE_ALBUMS_URL="$albums_url" - msg_info "URL provided" - msg_ok "Using provided URL: $ENTE_ALBUMS_URL\n" + ENTE_ALBUMS_URL="$albums_url" + msg_info "URL provided" + msg_ok "Using provided URL: $ENTE_ALBUMS_URL\n" fi export NEXT_PUBLIC_ENTE_ENDPOINT=$ENTE_BACKEND_URL @@ -177,6 +164,7 @@ export NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=$ENTE_ALBUMS_URL msg_info "Building Web Applications" cd /opt/ente/web export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 +source "$HOME/.cargo/env" $STD yarn install $STD yarn build $STD yarn build:accounts @@ -188,7 +176,6 @@ cp -r apps/accounts/out /var/www/ente/apps/accounts cp -r apps/auth/out /var/www/ente/apps/auth cp -r apps/cast/out /var/www/ente/apps/cast -# Save build configuration for future rebuilds cat </opt/ente/rebuild-frontend.sh #!/usr/bin/env bash # Rebuild Ente frontend @@ -219,6 +206,8 @@ export NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=\$ENTE_ALBUMS_URL echo "Building Web Applications\n" +# Ensure Rust/wasm-pack is available for WASM build +source "\$HOME/.cargo/env" cd /opt/ente/web yarn build yarn build:accounts @@ -253,7 +242,6 @@ systemctl enable -q --now ente-museum msg_ok "Created Museum Service" msg_info "Configuring Caddy" -CONTAINER_IP=$(hostname -I | awk '{print $1}') cat </etc/caddy/Caddyfile # Ente Photos - Main Application :3000 { @@ -334,18 +322,15 @@ EOF systemctl reload caddy msg_ok "Configured Caddy" -motd_ssh -customize - msg_info "Creating helper scripts" -cat <<'HELPER_EOF' >/usr/local/bin/ente-get-verification +cat <<'EOF' >/usr/local/bin/ente-get-verification #!/usr/bin/env bash echo "Searching for verification codes in museum logs..." journalctl -u ente-museum --no-pager | grep -i "verification\|verify\|code" | tail -20 -HELPER_EOF +EOF chmod +x /usr/local/bin/ente-get-verification -cat <<'HELPER_EOF' >/usr/local/bin/ente-upgrade-subscription +cat <<'EOF' >/usr/local/bin/ente-upgrade-subscription #!/usr/bin/env bash if [ -z "$1" ]; then echo "Usage: ente-upgrade-subscription " @@ -355,46 +340,11 @@ fi EMAIL="$1" echo "Upgrading subscription for: $EMAIL" ente admin update-subscription -a "$EMAIL" -u "$EMAIL" --no-limit -HELPER_EOF +EOF chmod +x /usr/local/bin/ente-upgrade-subscription msg_ok "Created helper scripts" -msg_info "Cleaning up" -$STD apt -y autoremove -$STD apt -y autoclean -msg_ok "Cleaned" - -# Final setup summary -CONTAINER_IP=$(hostname -I | awk '{print $1}') -echo -e "\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -echo -e " ${GN}Ente Installation Complete!${CL}" -echo -e "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -echo -e "\n${BL}Access URLs:${CL}" -echo -e " Photos: http://${CONTAINER_IP}:3000" -echo -e " Accounts: http://${CONTAINER_IP}:3001" -echo -e " Albums: ${ENTE_ALBUMS_URL}" -echo -e " Auth: http://${CONTAINER_IP}:3003" -echo -e " API: ${ENTE_BACKEND_URL}" -echo -e "\n${YW}⚠️ Important Post-Installation Steps:${CL}" -echo -e "\n${BL}1. Create your first account:${CL}" -echo -e " • Open http://${CONTAINER_IP}:3000 in your browser" -echo -e " • Click 'Sign Up' and create an account" -echo -e "\n${BL}2. Verify your email (required):${CL}" -echo -e " • Run: ${GN}ente-get-verification${CL}" -echo -e " • Look for the verification code in the output" -echo -e " • Enter the code in the web UI to complete registration" -echo -e "\n${BL}3. Remove storage limit:${CL}" -echo -e " • After email verification is complete" -echo -e " • Run: ${GN}ente-upgrade-subscription your@email.com${CL}" -echo -e " • This removes the 10GB limit" -echo -e "\n${BL}4. If IP changes:${CL}" -echo -e " • Run: ${GN}/opt/ente/rebuild-frontend.sh${CL}" -echo -e " • This rebuilds the frontend with the new IP" -echo -e "\n${YW}Known Limitations:${CL}" -echo -e " • Email verification requires checking logs (no SMTP configured)" -echo -e " • Account creation must be done manually via web UI" -echo -e " • Subscription upgrade requires CLI after account creation" -echo -e " • Frontend must be rebuilt if container IP changes" -echo -e "\n${BL}Credentials saved to:${CL} ~/ente.creds" -echo -e "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n" +motd_ssh +customize +cleanup_lxc