Sajikan situs Anda dan jual kursus dengan server yang di -host sendiri.
SServer adalah server headless sederhana untuk kursus hosting dan konten blog/statis terkait dari repositori gitub pribadi dengan overhead minimal.
Ini memberikan https di luar kotak sehingga Anda tidak harus berurusan dengan instalasi/pengelolaan sertifikat. Ini menyinkronkan konten secara otomatis dari GitHub sehingga Anda tidak perlu mengunggah konten Anda ke server. Ini juga mendukung konten premium dengan file konfigurasi sederhana tanpa mempengaruhi alur kerja konten Anda untuk EG jika Anda menggunakan generator situs statis seperti Hugo, Anda dapat menyembunyikan konten premium dari publik dengan menentukannya dalam file konfigurasi. Ini memiliki integrasi strip sehingga Anda dapat menjual konten premium Anda. Ini memiliki manajemen pengguna yang dibangun untuk menambah/mengotentikasi pengguna. Ini juga memiliki API admin sehingga Anda dapat memantau pesanan/pengguna situs Anda.
Berikut adalah beberapa contoh bagaimana hal itu dapat digunakan, pastikan untuk mengatur variabel lingkungan ss _ <> sebelum mencobanya misalnya misalnya
export SS_GITHUB_TOKEN=<github_token>
export SS_STRIPE_TOKEN=<stripe_token>
export SS_SMTP_FROM=<email_id>
export SS_SMTP_USER=<smtp_username>
export SS_SMTP_PWD=<smtp_password>
export SS_SMTP_HOST=<smtp_host_address>
export SS_SMTP_PORT=<smtp_port>
export SS_ADMIN_EMAIL=<admin_email>
export SS_ADMIN_PWD=<admin_password_for_sserver>
./sserver -repo "https://github.com/newbeelearn/sserver.git"
Repositori harus memiliki index.html dan ssconfig.toml di direktori root -nya. Jika Hugo/Jekyll dll. Seperti generator situs statis digunakan, repositori harus berisi situs yang dihasilkan. (Ini akan memiliki index.html di root secara default)
./sserver -repo "https://github.com/newbeelearn/sserver.git?folder=public"
Repositori harus memiliki index.html di folder dari mana Anda ingin melayani konten, biasanya itu publik jika Hugo/Jekyll dll. Generator situs statis digunakan. Itu harus memiliki ssconfig.toml di direktori root
./sserver -repo "https://github.com/newbeelearn/sserver.git?ref=test-config"
Cabang harus memiliki index.html dan ssconfig.toml di direktori root -nya. Jika Hugo/Jekyll dll. Seperti generator situs statis digunakan, cabang harus berisi situs yang dihasilkan. (Ini akan memiliki index.html di root secara default)
./sserver -repo "https://github.com/newbeelearn/sserver.git?domain=example.com"
Repositori harus memiliki index.html dan ssconfig.toml dalam akses direktori root ke domain dari mana situs dilayani sServer harus memiliki izin untuk mengikat ke 443 port, ini dapat dilakukan dengan perintah berikut berikut
sudo setcap 'cap_net_bind_service=+ep' sserver
./sserver -repo "file:///workspace/projects/newbeelearn.com/sserver"
Repositori harus memiliki index.html dan ssconfig.toml di direktori root -nya. Semua opsi yaitu folder/domain dll. Dapat ditentukan dalam kasus file lokal juga
Contoh ssconfig.toml dapat ditemukan di bawah
# specify the site
[site]
# period to check for new content
syncinterval = "@every 12h"
# product/course details
[[site.prod]]
name = "course1"
# path from root, this will be accessible to users who have bought the course
path = "courses/course1"
# can be draft/active, buying functionality will be enabled when status is active
status = "active"
# unique identifier for the course
sku = "prod-course-1"
# price in cents
price = 10000
# currency
currency = "USD"
SServer membuat direktori "wwwss" dari tempat dijalankan
drwxrwxr-x 2 test test 4096 Nov 30 17:04 a
drwxrwxr-x 8 test test 4096 Nov 30 17:04 b
drwxrwxr-x 2 test test 4096 Nov 30 17:04 certs
drwxrwxr-x 2 test test 4096 Nov 30 17:04 logs
-rw-rw-r-- 1 test test 527483 Nov 30 17:04 tmp.zip
-rw-rw-r-- 1 test test 49152 Nov 30 17:05 ssapp.db
File konfigurasi digunakan untuk menentukan produk/kursus yang ingin Anda jual serta beberapa parameter server seperti seberapa sering situs harus disinkronkan dll.
Contoh file ssconfig.toml ditunjukkan di bawah ini
#specify the site
[site]
#period to check for new content default is 12 hours
syncinterval = "@every 12h"
[[site.prod]]
name = "course1"
path = "courses/course1"
status = "active"
sku = "prod-course-1"
price = 10000
currency = "USD"
Semua titik akhir API relatif terhadap domain yang digunakan untuk melayani konten yaitu jika domain adalah contoh.com dan API IS /api/v1/product/list
adalah https://example.com/api/v1/product/list
Hirarki peran seperti admin ini> pengguna> tamu apa pun API yang dapat diakses oleh tamu juga dapat diakses oleh pengguna dan API apa pun yang dapat diakses oleh pengguna juga dapat diakses oleh admin untuk mengakses cookie sesi API pengguna/admin yang diperoleh setelah masuk harus disediakan dengan setiap permintaan di berlatih ini akan dijaga oleh browser
Keterangan | Meminta | Peran |
---|---|---|
Daftar Pengguna | POST /api/v1/user/register | tamu |
Pengguna Masuk | POST /api/v1/user/login | tamu |
Pengguna Logout | Get /api/v1/user/logout | tamu |
Verifikasi Pengguna | Get /api/v1/user/verify/:id | tamu |
Setel ulang kata sandi pengguna | POST /api/v1/user/reset | tamu |
Dapatkan daftar produk | Get /api/v1/product/list | tamu |
Buat pesanan | POST /api/v1/order/id | tamu |
Ubah pesanan | Put /api/v1/order/id | pengguna |
Pesanan checkout | POST /api/v1/order/checkout | pengguna |
Dapatkan Pesanan demi Pesanan ID | Get /api/v1/order/id/:id | pengguna |
Dapatkan semua pesanan oleh pengguna | Get /api/v1/order/id/list | pengguna |
Ubah Kata Sandi Pengguna | POST /api/v1/user/changepwd | pengguna |
Dapatkan semua pesanan | Get /api/v1/order/list | admin |
Dapatkan semua pengguna | Get /api/v1/user/list | admin |
Daftarkan pengguna baru dengan email dan kata sandi. Mengirim email ke email yang digunakan untuk mendaftar dengan kode verifikasi jika konfigurasi server SMTP diatur.
Contoh Permintaan
curl 'http://localhost:54545/api/v1/user/register'
-H 'Content-Type: application/x-www-form-urlencoded'
-X POST
--data-raw 'email=stripe%40newbeelearn.com&password=test&confirm-password=test&remember=on'
Contoh respons
{"status":"success"}
Masuk pengguna dengan email dan kata sandi. Mengembalikan JSON jika bidang "postlogin" tidak diatur dalam file konfigurasi jika tidak mengarahkan kembali ke halaman yang ditentukan dalam "postlogin"
Contoh Permintaan
curl 'http://localhost:54545/api/v1/user/login'
-H 'Content-Type: application/x-www-form-urlencoded'
-X POST
--data-raw 'email=admin%40example.com&password=admin'
Contoh respons
{
"data": {
"user_id": "1",
"username": ""
},
"msg": "user found",
"status": "success"
}
Login masuk pengguna dan mengarahkan ke beranda
Contoh Permintaan
curl 'http://localhost:54545/api/v1/user/logout'
-H 'Cookie: session_id=9e8b22a3-15ac-442f-bf65-15c37dbfc889; max-age=300; path=/; secure; SameSite=Lax'
Contoh respons
<!doctype html>
<html lang="en">
<head>
</head>
<body>
</body>
</html>
Memverifikasi email pengguna terdaftar dengan mengirim URL jika domain diatur atau kode yang harus ditambahkan setelah verifikasi API jika domain tidak diatur
Contoh Permintaan
curl 'http://localhost:54545/api/v1/user/verify/cafj5grn0gpog1j3a0m0'
Contoh respons
{"status":"success"}
Reset Kata Sandi Pengguna dan mengirimkan kode sementara baru untuk login. Pengguna perlu menggunakan kode ini pada login berikutnya dan mengubah kata sandi
Contoh Permintaan
curl 'http://localhost:54545/api/v1/user/reset'
-H 'Content-Type: application/x-www-form-urlencoded'
-X POST
--data-raw 'email=stripe%40newbeelearn.com'
Contoh respons
{
"data": null,
"msg": "password reset successful",
"status": "success"
}
Dapatkan semua produk yang terdaftar untuk dijual di situs web. Mengambil "batas" dan "offset" sebagai pertanyaan. Jika kueri tidak mengatur nilai default batas diatur ke 10 dan diimbangi ke 0
Contoh Permintaan
curl 'http://localhost:54545/api/v1/product/list?limit=1&offset=0'
Contoh respons
{
"data": [
{
"prd_id": 1,
"prd_name": "course1",
"sku": "prod-course-1",
"permalink": "users/list/",
"price": 10000,
"currency": "USD",
"period": 365,
"status": "active"
}
],
"msg": "Order found",
"status": "success"
}
Membuat pesanan baru dengan produk yang tercantum di bidang "line_item"
. Permintaan harus valid JSON. Field order_id/user_id
dll.
Contoh Permintaan
curl 'http://localhost:54545/api/v1/order/id'
-H 'Content-Type: application/json; charset=utf-8'
-H 'Cookie: session_id=cad8439e-dcc4-475e-94fc-12b75f85bb20; max-age=300; path=/; secure; SameSite=Lax'
-X POST
--data-raw ' {
"order_id": 1,
"user_id": 3,
"currency": "USD",
"line_items": [
{
"sku": "prod-course-1"
},
{
"sku": "prod-course-3"
}
]
}'
Contoh respons
{
"data": {
"order_id": 1,
"user_id": 3,
"created_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"modified_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"status": "active",
"currency": "USD",
"order_number": "cafjktbn0gpp5hq3dt4g",
"grand_total": 11000,
"line_items": [
{
"line_id": 1,
"order_id": 1,
"prd_id": 1,
"created_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"modified_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"grand": 10000,
"enabled": true,
"sku": "prod-course-1"
},
{
"line_id": 2,
"order_id": 1,
"prd_id": 2,
"created_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"modified_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"grand": 1000,
"enabled": true,
"sku": "prod-course-3"
}
]
},
"msg": "Order found",
"status": "success"
}
Memodifikasi pesanan yang ada dengan menambahkan/menghapus produk di bidang line_item
. Pengguna harus masuk untuk memodifikasi pesanan dan pesanan harus dalam keadaan aktif. Gunakan respons sebelumnya dari Create Order atau dapatkan pesanan untuk menambah/menghapus produk
Contoh Permintaan
curl 'http://localhost:54545/api/v1/order/id'
-H 'Content-Type: application/json; charset=utf-8'
-H 'Cookie: session_id=cad8439e-dcc4-475e-94fc-12b75f85bb20; max-age=300; path=/; secure; SameSite=Lax'
-X PUT
--data-raw ' {
"order_id": 1,
"user_id": 3,
"created_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"modified_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"status": "active",
"currency": "USD",
"order_number": "cafjktbn0gpp5hq3dt4g",
"grand_total": 11000,
"line_items": [
{
"line_id": 2,
"order_id": 1,
"prd_id": 2,
"created_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"modified_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"grand": 1000,
"enabled": true,
"sku": "prod-course-3"
}
]
}'
Contoh respons
{
"data": {
"order_id": 1,
"user_id": 3,
"created_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"modified_at": "2022-06-07 11:48:05.425488765 +0000 UTC",
"status": "active",
"currency": "USD",
"order_number": "cafjktbn0gpp5hq3dt4g",
"grand_total": 1000,
"line_items": [
{
"line_id": 2,
"order_id": 1,
"prd_id": 2,
"created_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"modified_at": "2022-06-07 11:48:05.425488765 +0000 UTC",
"grand": 1000,
"enabled": true,
"sku": "prod-course-3"
}
]
},
"msg": "Order found",
"status": "success"
}
Mendapat URL Stripe untuk pembayaran pesanan yang dibuat oleh Buat Pesanan API. Gunakan respons dari buat pesanan/ubah pesanan/dapatkan API pesanan untuk mengirim permintaan. Jangan memodifikasi respons dalam permintaan ini akan mengakibatkan kegagalan.
Contoh Permintaan
curl 'http://localhost:54545/api/v1/order/checkout'
-H 'Content-Type: application/json; charset=utf-8'
-H 'Cookie: session_id=2f1be070-7256-4e84-a4ef-c14754cabcdb; max-age=300; path=/; secure; SameSite=Lax'
-X POST
--data-raw ' {
"order_id": 1,
"user_id": 3,
"created_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"modified_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"status": "active",
"currency": "USD",
"order_number": "cafjktbn0gpp5hq3dt4g",
"grand_total": 11000,
"line_items": [
{
"line_id": 2,
"order_id": 1,
"prd_id": 2,
"created_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"modified_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"grand": 1000,
"enabled": true,
"sku": "prod-course-3"
}
]
}'
Contoh respons
{
"data": {
"url": "https://checkout.stripe.com/pay/cs_test_a17D2l74NsKMv29YJ1c5rSBPx7BGSsNAsObGAsOanEJqyFNXKEYDLji4BZ#fidkdWxOYHwnPyd1blpxYHZxWjA0TlVKPHNMaW9vYEd1YmhdUWQ3UUJqSEpMYTMza11ObGAyXDFPcXA8bz1yY1VicVZVdDN8c1NkaUZEazxIQWdjM04wdz1DTmF3PXxHaVE9bTVuZz1pUWw3NTUybHZLZldgaicpJ2N3amhWYHdzYHcnP3F3cGApJ2lkfGpwcVF8dWAnPyd2bGtiaWBabHFgaCcpJ2BrZGdpYFVpZGZgbWppYWB3dic%2FcXdwYHgl"
},
"msg": "Order found",
"status": "success"
}
Dapatkan detail pesanan berdasarkan nomor pesanan
Contoh Permintaan
curl 'http://localhost:54545/api/v1/order/id/cafjktbn0gpp5hq3dt4g'
-H 'Content-Type: application/json; charset=utf-8'
-H 'Cookie: session_id=fe9b9fff-c5c0-4745-becf-ecb0e5abca81; max-age=300; path=/; secure; SameSite=Lax'
Contoh respons
{
"data": {
"order_id": 1,
"user_id": 3,
"created_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"modified_at": "2022-06-07 11:48:05.425488765 +0000 UTC",
"status": "active",
"currency": "USD",
"order_number": "cafjktbn0gpp5hq3dt4g",
"grand_total": 1000,
"line_items": [
{
"line_id": 2,
"order_id": 1,
"prd_id": 2,
"created_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"modified_at": "2022-06-07 11:48:05.425488765 +0000 UTC",
"grand": 1000,
"enabled": true
}
]
},
"msg": "Order found",
"status": "success"
}
Dapatkan semua pesanan berdasarkan pengguna. Mengambil batas dan offset sebagai parameter kueri nilai default masing -masing adalah 10 dan 0
Contoh Permintaan
curl 'http://localhost:54545/api/v1/order/id/list?limit=1&offset=0'
-H 'Content-Type: application/json; charset=utf-8'
-H 'Cookie: session_id=fe9b9fff-c5c0-4745-becf-ecb0e5abca81; max-age=300; path=/; secure; SameSite=Lax'
Contoh respons
{
"data": [
{
"order_id": 1,
"user_id": 3,
"created_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"modified_at": "2022-06-07 11:48:05.425488765 +0000 UTC",
"status": "active",
"currency": "USD",
"order_number": "cafjktbn0gpp5hq3dt4g",
"grand_total": 1000
}
],
"msg": "Order found",
"status": "success"
}
Ubah Kata Sandi Pengguna. Pengguna harus masuk untuk membuat permintaan ini
Contoh Permintaan
curl 'http://localhost:54545/api/v1/user/changepwd'
-H 'Content-Type: application/x-www-form-urlencoded'
-H 'Cookie: session_id=fe9b9fff-c5c0-4745-becf-ecb0e5abca81; max-age=300; path=/; secure; SameSite=Lax'
-X POST
--data-raw 'oldpassword=cafjjjbn0gpp5hq3dt40&password=test123'
Contoh respons
{
"data": null,
"msg": "password change successful",
"status": "success"
}
Dapatkan semua pesanan di toko. Mengambil batas dan offset sebagai parameter kueri nilai default masing -masing adalah 10 dan 0 tersedia untuk pengguna admin saja. Dapatkan semua pesanan
Contoh Permintaan
curl 'http://localhost:54545/api/v1/order/list?limit=1&offset=0'
-H 'Content-Type: application/json; charset=utf-8'
-H 'Cookie: session_id=e4ecd3a4-b8be-493e-a33d-518ab11c65e8; max-age=300; path=/; secure; SameSite=Lax'
Contoh respons
{
"data": [
{
"order_id": 1,
"user_id": 3,
"created_at": "2022-06-07 11:45:57.601996759 +0000 UTC",
"modified_at": "2022-06-07 11:48:05.425488765 +0000 UTC",
"status": "active",
"currency": "USD",
"order_number": "cafjktbn0gpp5hq3dt4g",
"price_total": 1000,
"discount_total": 0,
"sub_total": 1000,
"taxes_total": 0,
"grand_total": 1000,
"refunds_total": 0,
"created_channel": "",
"payment_provider": ""
}
],
"msg": "Order found",
"status": "success"
}
DAPATKAN SEMUA PENGGUNA DI SITUS WEB. Mengambil batas dan offset sebagai parameter kueri nilai default masing -masing adalah 10 dan 0 tersedia untuk pengguna admin saja.
Contoh Permintaan
curl 'http://localhost:54545/api/v1/user/list?limit=1&offset=0'
-H 'Content-Type: application/json; charset=utf-8'
-H 'Cookie: session_id=e4ecd3a4-b8be-493e-a33d-518ab11c65e8; max-age=300; path=/; secure; SameSite=Lax'
Contoh respons
{
"data": [
{
"user_id": 1,
"email": "[email protected]",
"created_at": "2022-06-07 10:53:00.480128762 +0000 UTC",
"username": "",
"last_password_set": "2022-06-07 10:53:00.480128762 +0000 UTC",
"last_login": "2022-06-07 10:53:00.480128762 +0000 UTC",
"verified": 0,
"reset": 0,
"user_role": "admin"
},
{
"user_id": 2,
"email": "[email protected]",
"created_at": "2022-06-07 10:53:00.532691788 +0000 UTC",
"username": "",
"last_password_set": "2022-06-07 10:53:00.532691788 +0000 UTC",
"last_login": "2022-06-07 10:53:00.532691788 +0000 UTC",
"verified": 0,
"reset": 0,
"user_role": "guest"
},
{
"user_id": 3,
"email": "[email protected]",
"created_at": "2022-06-07 11:13:06.947313364 +0000 UTC",
"username": "",
"last_password_set": "2022-06-07 11:13:06.947313364 +0000 UTC",
"last_login": "2022-06-07 11:13:06.947313364 +0000 UTC",
"verified": 2,
"reset": 1,
"user_role": "user"
}
],
"msg": "Order found",
"status": "success"
}
Tidak, hanya binari yang dilepaskan dan situs yang digunakan untuk diskusi di sekitar produk.
Itu dalam fungsionalitas panggung alfa selesai namun mungkin berisi bug
Ini dibuat karena kebutuhan untuk menjadi tuan rumah kursus
Tidak sekarang karena berlangganan tidak didukung untuk satu kali produk digital saja. Ini juga tidak memiliki fungsionalitas penerusan rute di mana SaaS Anda sendiri dapat dicolokkan. Namun perubahan ini dapat ditambahkan jika ada diskusi yang cukup minat mulai jika Anda ingin memiliki fitur -fitur ini sampai sekarang tidak ada di peta jalan.
Ini dapat digunakan untuk hosting kursus dan blog terkait. Blog dengan buletin. Blog dengan konten premium. Halaman arahan startup dan blog terkait. Menjual tema dll
Linux dan MacOS didukung di luar kotak. Pengguna Windows dapat menggunakan WSL namun tidak diuji.
Buat masalah dan tag dengan fitur
Ini belum diputuskan seperti sekarang gratis untuk digunakan. Produk berbayar jika tersedia akan menggunakan saluran terpisah. Jadi, jika Anda mengunduh dari rilis GitHub, itu gratis selamanya. Bantu kami dalam memutuskannya, beri tahu kami apa yang akan Anda bayar di papan diskusi.