mbahsomo-note/aupload-build-npm.md

227 lines
3.5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Mantap 👍
Dengan **SvelteKit + Nginx + Gitea**, setup **paling bersih & profesional** adalah:
> **Auto-deploy via Gitea Actions → build → replace semua file di server**
Aku susun **end-to-end**, dari SvelteKit sampai Nginx & Gitea Actions. Tinggal copas.
---
## 1⃣ Pastikan SvelteKit mode STATIC (wajib)
Di `svelte.config.js`:
```js
import adapter from '@sveltejs/adapter-static';
export default {
kit: {
adapter: adapter({
pages: 'build',
assets: 'build',
fallback: null
})
}
};
```
Kalau belum:
```bash
npm i -D @sveltejs/adapter-static
```
Build test lokal:
```bash
npm run build
```
Pastikan folder `build/` muncul.
---
## 2⃣ Setup Nginx (static site)
Contoh config:
```nginx
server {
listen 80;
server_name domainkamu.com;
root /var/www/sveltekit;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
```
Reload:
```bash
sudo nginx -t
sudo systemctl reload nginx
```
📌 Folder target deploy:
```
/var/www/sveltekit
```
---
## 3⃣ Siapkan server untuk auto-deploy
### a. Buat user deploy (opsional tapi recommended)
```bash
sudo adduser deploy
sudo chown -R deploy:deploy /var/www/sveltekit
```
### b. Setup SSH key (WAJIB)
Di local / runner:
```bash
ssh-keygen -t ed25519
```
Copy public key:
```bash
ssh-copy-id deploy@SERVER_IP
```
Pastikan bisa login tanpa password:
```bash
ssh deploy@SERVER_IP
```
---
## 4⃣ Setup Gitea Actions (CI/CD)
Di repo SvelteKit kamu, buat folder:
```bash
.gitea/workflows/deploy.yml
```
Isi **FULL deploy pipeline** 👇
```yaml
name: Deploy SvelteKit
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies
run: npm ci
- name: Build SvelteKit
run: npm run build
- name: Deploy to server
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
script: |
rm -rf /var/www/sveltekit/*
rsync -av --delete build/ /var/www/sveltekit/
```
---
## 5⃣ Set Secrets di Gitea
Repo → **Settings → Secrets**:
| Name | Value |
| ---------------- | ------------------- |
| `SERVER_HOST` | IP / domain server |
| `SERVER_USER` | deploy |
| `SERVER_SSH_KEY` | **private key SSH** |
⚠️ SSH key **tanpa passphrase** untuk CI.
---
## 6⃣ Alur yang terjadi otomatis 🚀
1. `git push origin main`
2. Gitea Actions jalan
3. `npm run build`
4. Server:
* hapus semua file lama
* upload build baru
5. Nginx langsung serve versi terbaru
**ZERO manual upload. ZERO drama.**
---
## 7⃣ Struktur final di server
```bash
/var/www/sveltekit
├── index.html
├── _app/
├── assets/
└── favicon.png
```
---
## 8⃣ Upgrade level (opsional tapi keren)
Kalau mau **zero-downtime deploy**:
```bash
/var/www/releases/20260204/
ln -sfn releases/20260204 current
```
Atau pakai **versioned deploy + rollback** (tinggal ganti symlink).
---
## Ringkasannya 🔥
✅ Static SvelteKit
✅ Nginx simple & cepat
✅ Gitea Actions auto deploy
✅ Replace semua file server
✅ Aman & scalable
Kalau kamu mau:
* **subdomain staging**
* **HTTPS (Certbot)**
* **rollback 1 klik**
* **deploy multi environment**