シンプルで高速なURL短縮サービス
Tiny-URLは、Node.js + Express + MongoDBで構築されたURL短縮サービスです。メール/パスワード認証によるユーザー管理、プレミアムプラン、管理者機能を備えています。
- 🔗 URL短縮: 長いURLを短く変換
- 👤 ユーザー認証: メール/パスワードでの安全なログイン(2FA対応)
- 🔑 APIトークン: プログラムからのAPI利用に対応
- 📈 使用状況追跡: API利用回数を自動記録
- ⭐ プレミアムプラン: カスタムURL設定機能
- 📊 ダッシュボード: 自分が作成したURLとAPIトークンの管理
- 🚀 高パフォーマンス: レート制限・MongoDB接続最適化
- 📱 レスポンシブデザイン: Tailwind CSSによるモダンUI
- バックエンド: Node.js, Express.js
- データベース: MongoDB (Mongoose ODM)
- 認証: Cookie-based セッション管理
- テンプレートエンジン: EJS
- スタイリング: Tailwind CSS
- セキュリティ: bcrypt (パスワードハッシュ化)
- その他: express-rate-limit, cloudflare-express
- Node.js (v14以上)
- MongoDB Atlas アカウント (またはローカルMongoDB)
- npm または yarn
git clone https://github.com/orarange/tinyurl.git
cd tinyurlnpm install.envファイルを作成:
# MongoDB接続URL
mongo_url=mongodb+srv://username:password@cluster.mongodb.net/database
# ドメイン設定
domain=yourdomain.com
# ポート設定
PORT=3000
# 管理者uniqueIdリスト(カンマ区切り)
admin_unique_ids=your_unique_id_1,your_unique_id_2node .サーバーは http://localhost:3000 で起動します。
tinyurl/
├── APIs/ # API エンドポイント
│ ├── index.js # URL短縮API
│ ├── geturl.js # URL取得API
│ └── gettiny.js # 短縮URL検索API
├── functions/ # ユーティリティ関数
│ ├── login.js # ログイン処理
│ └── register.js # ユーザー登録
├── models/ # Mongooseモデル
│ ├── users.js # ユーザーモデル
│ ├── tinyurl.js # フリープランURL
│ ├── premium.js # プレミアムURL
│ └── preuser.js # プレミアムユーザー
├── routes/ # ルート定義
│ ├── index.js # メインページ・URL短縮
│ ├── login.js # ログイン
│ ├── register.js # 新規登録
│ ├── dash.js # ダッシュボード
│ ├── admin.js # 管理者パネル
│ ├── tiny.js # リダイレクト処理
│ └── ...
├── views/ # EJSテンプレート
├── public/ # 静的ファイル
│ ├── css/
│ ├── images/
│ ├── robots.txt
│ └── sitemap.xml
├── index.js # アプリケーションエントリーポイント
├── package.json
└── .env # 環境変数 (gitignore)
- フリープラン: ランダムな短縮URLを生成
- プレミアムプラン: カスタムURLを設定可能
- すべての短縮URLは
/t/プレフィックスを使用
- メール/パスワードでの新規登録
- セキュアなログイン (bcryptでハッシュ化)
- uniqueIdベースのユーザー識別システム
- 作成したURLの一覧表示
- URL削除機能
- プレミアムステータス確認
- 全URLの閲覧・削除
- ユーザー管理
- プレミアムユーザーの追加・削除
- 一括削除機能
すべてのAPIエンドポイントはAPIトークンによる認証が必要です。
- ダッシュボードでAPIトークンを生成
- リクエストヘッダーに
Authorization: Bearer <token>を含める
POST /api/make
Authorization: Bearer turl_your_api_token_here
Content-Type: application/json
{
"original": "https://example.com/very-long-url",
"custom": "myurl" // オプション (プレミアムのみ)
}レスポンス:
{
"status": "200",
"message": "request was successful!",
"tiny": "https://yourdomain.com/t/abc123"
}GET /api/get?t=shortcode
Authorization: Bearer turl_your_api_token_hereレスポンス:
{
"status": 200,
"original": "https://example.com/very-long-url"
}GET /api/gettiny?o=https://example.com
Authorization: Bearer turl_your_api_token_hereレスポンス:
{
"status": 200,
"tiny": "abc123"
}- すべてのAPIリクエストは自動的に記録されます
- ダッシュボードで今月の使用回数を確認できます
- トークンごとの最終使用日時も表示されます
- Apacheをインストール:
sudo apt install apache2- 必要なモジュールを有効化:
sudo a2enmod proxy proxy_http ssl rewrite headers http2- 設定ファイルを作成 (
/etc/apache2/sites-available/yourdomain.conf):
<VirtualHost *:80>
ServerName yourdomain.com
Redirect permanent / https://yourdomain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName yourdomain.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
ProxyPreserveHost On
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
Protocols h2 http/1.1
</VirtualHost>- サイトを有効化:
sudo a2ensite yourdomain.conf
sudo systemctl reload apache2npm install -g pm2
pm2 start index.js --name tinyurl
pm2 startup
pm2 savenode .node check-unique-ids.js管理者に設定したいユーザーのuniqueIdを.envのadmin_unique_idsに追加してください。
- ✅ パスワードはbcryptでハッシュ化
- ✅ HTTPSでの通信を推奨
- ✅ Rate Limiting (10秒間に5リクエスト)
- ✅ Cookie httpOnly フラグ
⚠️ 本番環境ではsecureフラグを有効化推奨
ISC
orarange
問題が発生した場合は、GitHub Issuesで報告してください。
ドメイン: orrn.net A simple URL shortener service.
- Shorten long URLs
- Custom short URL aliases
- URL analytics and statistics
- RESTful API
npm installnpm startPOST /api/shorten- Create a short URLGET /:shortCode- Redirect to original URLGET /api/stats/:shortCode- Get URL statistics
MIT