envshare.dev เป็น open source project ให้นักพัฒนาแชร์ environment variables อย่างปลอดภัยกับใครก็ได้ คุณอัปโหลดไฟล์ .env หรือพิมพ์ environment variables เข้าไป พวกมันจะถูก encrypt ก่อนเก็บใน database แล้วคุณ share link ให้ใครก็ได้ พวกเขาจะ decrypt environment variables ได้
EnvShare ฟรีและ open source โค้ดอยู่ที่ GitHub
ฟีเจอร์
- Sharable Links: แชร์ environment variables อย่างปลอดภัยโดยส่งลิงก์
- End-to-End Encryption: ใช้ AES encryption encrypt data ก่อนเก็บ
- Limit number of reads: จำกัดจำนวนครั้งที่ link อ่านและ decrypt ได้
- Auto Expire: Expire links และลบข้อมูลอัตโนมัติหลังเวลาที่กำหนด
วิธีการทำงาน
ทุกครั้งที่อยากแชร์ environment variables encryption key ใหม่สุ่ม generate ใน browser ข้อมูล sensitive encrypt ด้วย AES แล้วเก็บใน Redis
หลังจากนั้น unique document id รวมกับ encryption key กลายเป็น shareable link ใช้ access และ decrypt data

Data
EnvShare ใช้ Redis เก็บ encrypted environment variables Redis ยอดเยี่ยงเพราะเป็น fast key-value store แต่มี complex data structures เช่น lists, sets, hashes ด้วย มัน auto remove expired keys ซึ่ง perfect สำหรับ use case ของเรา
Data เก็บใน Redis hash โครงสร้าง:
{
"remainingReads": 20, // Optional, จำนวนครั้งที่ link อ่านได้
"encrypted": "...", // Encrypted environment variables
"iv": "..." // Initialization vector สำหรับ AES-CBC
}
การใช้ hash ให้เราเก็บ metadata พร้อม encrypted data และ atomic decrement remaining reads ด้วย HINCRBY Redis ยืดหยุ่นมาก อนุญาต fast iteration และ implement new ideas เร็ว เช่นอนาคตอาจเพิ่ม access log sorted set เหมาะที่สุด
ปัญหาเดียวคือ Redis ปกติ available แค่ TCP ไม่ทำงานใน edge-functions โชคดี Upstash ให้ Redis API ใช้งาน Redis ผ่าน HTTP นี่คือสิ่งที่ EnvShare ต้องการ Upstash ให้ free Redis database 10,000 requests ต่อวัน มากพอสำหรับเรา ถ้าอยาก self-host EnvShare เอง สร้างบัญชีฟรี ที่นี่ เช็ก selfhosting guide ที่นี่
Setup Redis ใน edge-functions ง่าย แค่สร้าง database ติดตั้ง @upstash/redis
ใน edge-function เก็บ data:
// /api/share.ts
import { Redis } from "@upstash/redis";
const redis = new Redis({
url: "..." // UPSTASH_REDIS_REST_URL
token: "..." // UPSTASH_REDIS_REST_TOKEN
});
await redis.hset(key, {
remainingReads: 20,
encrypted: "...",
iv: "...",
});
สรุป
ขอบคุณที่อ่าน! EnvShare เป็นโปรเจกต์สนุกที่ผมสร้างแสดงให้เห็นว่าง่ายแค่ไหนเริ่มต้นกับ Next.js และ Upstash Redis หวังว่าชอบและมีประโยชน์ หากมีคำถามหรือ feedback ติดต่อผมบน Twitter ได้เลย
Relevant links: