# Ilagay ang Agos VPN sa https://rtube.site/vpn

Para ito sa **cPanel → Setup Node.js App**, gamit ang Node.js **24.x** o **22.13 pataas**. Ang website at API ang ilalagay sa shared hosting. Ang WireGuard VPN server ay kailangan pa rin ng hiwalay na Ubuntu VPS.

## 1. Ihanda ang domain at HTTPS

Sa bagong cPanel, tiyaking kasama ang `rtube.site` sa **Domains**. Kung nasa lumang hosting pa ang DNS, sundin ang DNS instructions ng bagong hosting provider. Panatilihin ang anumang ginagamit mong mail records. Sa **SSL/TLS Status**, tiyaking may valid certificate para sa `rtube.site`.

Ang target address ay `https://rtube.site/vpn`. Hindi kailangang baguhin ang laman ng root website para i-upload ang app.

## 2. I-upload ang website ZIP

1. I-download ang **`artifacts/agos-cpanel.zip`** mula sa project.
2. Buksan ang cPanel → **File Manager** at pumunta sa home folder ng account. Karaniwan itong `/home/USERNAME/`; gamitin ang totoong home path na nasa File Manager.
3. Gumawa ng folder na **`agos-vpn`** sa home folder, katabi ng `public_html`.
4. Sa loob ng `agos-vpn`, i-upload at **Extract** ang ZIP.
5. Dapat direkta mong makita ang `app.cjs`, `package.json`, `package-lock.json`, at `server` folder. Walang dagdag na nested `agos-vpn` folder sa ZIP.

Ang **Application root** ay private source folder; ang **Application URL** ang public address. Kaya sa `/home/USERNAME/agos-vpn` ilalagay ang ZIP, hindi sa `public_html/vpn`. Si cPanel ang gagawa ng URL mapping. Hindi kasama sa ZIP ang local password/database o Android build files.

## 3. Create Application

Pumunta sa **Setup Node.js App → Create Application**. Ilagay:

| Field | Value |
|---|---|
| Node.js version | Ang available na **24.x** |
| Application mode | **Production** |
| Application root | **`agos-vpn`** |
| Application URL: domain | **`rtube.site`** |
| Application URL: path | **`vpn`**, o **`/vpn`** kung iyon ang format ng panel |
| Application startup file | **`app.cjs`** |

Ang preview ng Application URL ay dapat magtapos sa **`rtube.site/vpn`**. Huwag piliin ang root URL na walang `/vpn`.

Sa **Environment variables**, idagdag ang mga ito. Kung lumalabas lang ang section pagkatapos ng Create, idagdag bago mag-Run NPM Install o bumisita sa app:

| Name | Value |
|---|---|
| `NODE_ENV` | `production` |
| `PUBLIC_URL` | `https://rtube.site/vpn` |

I-click ang **Create / Save**. Hindi kailangan ng `PORT`, `HOST`, o `NODE_OPTIONS` override sa normal na Passenger setup. Huwag maglagay ng `ADMIN_PASSWORD`; kusang gagawa ang app ng random password sa first run.

Ang startup file na `app.cjs` ay wrapper para sa Node modules ng app; compatible ito sa dokumentadong [CloudLinux CommonJS-wrapper approach](https://docs.cloudlinux.com/cloudlinuxos/cloudlinux_os_components/#limitations). Ang UI fields at install/restart actions ay nasa [CloudLinux Node.js Selector guide](https://docs.cloudlinux.com/cloudlinuxos/lve_manager/#node-js-selector).

## 4. Install at Restart

1. Sa app settings, i-click ang **Run NPM Install**. Hintaying matapos.
2. I-click ang **Restart**; kung stopped ang app, **Start App**.
3. Buksan ang **https://rtube.site/vpn/api/health**.

Ang inaasahang sagot:

```json
{"status":"ok","product":"Agos VPN"}
```

Hindi kailangang magpatakbo ng `npm start` sa terminal; ang hosting panel ang magpapatakbo ng app.

## 5. Kunin ang bagong admin password

Pagkatapos ng unang successful request, sa **File Manager** buksan ang:

```text
/home/USERNAME/agos-vpn/server/data/bootstrap-admin.txt
```

Gamitin ang aktuwal na home path ng account mo. Kopyahin ang password mula sa file at mag-login sa **https://rtube.site/vpn/**.

**Iba ito sa `bootstrap-admin.txt` na nakabukas sa local IDE.** Ang local password ay para sa local database. Ang bagong hosting ay may sarili nitong database at password. Itago ang password sa password manager; huwag i-upload ang file sa `public_html` o ipadala ang password sa chat.

Normal lang na walang server ang dashboard. Kapag lumabas ang dashboard, online na ang admin website; wala pang VPN tunnel hanggang maikonekta ang VPS.

## 6. Ikonekta ang VPN VPS at phone

Kapag mayroon nang **Ubuntu 24.04 VPS** na may root/SSH access at public IPv4:

1. Gamitin ang source ZIP sa VPS at ilagay ang project sa `/opt/agos`.
2. Sundin ang **steps 3–4** ng [DEPLOYMENT.md](DEPLOYMENT.md) para sa WireGuard at agent. Hindi na kailangang mag-install ng isa pang admin website sa VPS. Gumawa muna ng private config folder gamit ang `sudo install -d -m 700 /etc/agos` bago gumawa ng agent config.
3. Sa agent config, gamitin ang buong admin URL:

```json
{
  "api_url": "https://rtube.site/vpn",
  "agent_token": "TOKEN_FROM_ADD_SERVER"
}
```

4. Ang WireGuard **endpoint** sa Add server ay ang **VPS IP o hostname + `:51820`**. Hindi ito `rtube.site/vpn`; iyon ay website address.
5. Kapag **Online** na ang server, gumawa ng code sa **Devices → Enroll device**.
6. I-install ang updated **`agos-vpn-debug.apk` v1.0.1** sa phone. Ilagay ang `https://rtube.site/vpn` at enrollment code.
7. Test muna sa Wi-Fi o may active mobile data. Hintayin ang **Connected**, saka subukan ang browsing at VPS exit IP.

Ang cPanel ZIP ay para sa website; ang source ZIP ang may `deploy/` scripts para sa VPS. Hindi nagbibigay ng no-load carrier configuration ang hosting setup na ito.

## Kapag may error

| Nakikita | Susunod na check |
|---|---|
| 404 o dating website sa `/vpn/api/health` | Check Application URL path = `/vpn`, domain DNS sa bagong hosting, at `PUBLIC_URL`. Kung root-site rewrite ang sumasalo sa `/vpn`, ipa-check sa hosting support ang app mapping bago palitan ang existing `.htaccess`. |
| 503 o “application could not be started” | Check **Run NPM Install**, startup file `app.cjs`, Node 24, at application error log sa panel. |
| `ERR_REQUIRE_ESM` | Tiyaking `app.cjs` ang startup, hindi `server/index.mjs`. |
| `ERR_UNKNOWN_BUILTIN_MODULE: node:sqlite` | Mali o kulang ang actual Node runtime. Piliin ang Node 24 at Restart; kung ganoon pa rin, ipa-check sa host ang built-in `node:sqlite` support. |
| `SQLITE_CANTOPEN` o `EACCES` | Dapat writable ng account ang `agos-vpn/server/data`. Huwag ilipat sa public folder para ayusin ito. |
| 403 kapag nag-login | Gamitin ang eksaktong HTTPS domain ng `PUBLIC_URL`; `www.rtube.site` at `rtube.site` ay magkaibang origin. Save at Restart matapos magpalit ng variable. |
| “Use the final HTTPS address” sa Android | May redirect sa API. Gamitin ang final host sa `PUBLIC_URL`, agent, at phone. Ang `/vpn/api/health` ay dapat direktang sumagot ng JSON. |
| Walang password file | Buksan muna ang health URL para ma-start ang app. Check kung may `ADMIN_PASSWORD` o `DATA_DIR` override; ang `ADMIN_PASSWORD` ay hindi gumagawa ng bootstrap file. |

Kung kailangan ng tulong, ibigay ang step number at error text. Alisin muna ang anumang password o token mula sa log na ibabahagi.

## Updates at backup

Bago mag-update, i-Stop ang app at mag-save ng private backup ng `server/data` (kasama ang SQLite companion files). I-extract ang bagong website ZIP sa existing app folder nang pinapanatili ang `server/data` at ang `node_modules` link na ginawa ng cPanel. Walang `server/data` o `node_modules` sa ZIP, kaya hindi nito pinapalitan ang credentials o dependencies. Run NPM Install, Restart, at ulitin ang health/login checks.

Ang `PUBLIC_URL` ay may `/vpn`; pinapanatili ng app ang prefix sa assets at API, at ang login cookie ay nakasaklaw sa `/vpn/`. Dapat panatilihin ng host mapping ang request path. Ang deployment ay hindi pa verified sa live hosting hangga't hindi pumapasa ang health at login checks doon.
