إنتقل إلى المحتوى الرئيسي

TinyAuth for Nginx

TinyAuth هو أبسط طريقة لحماية تطبيقاتك بشاشة تسجيل دخول

التثبيت

الآن حان وقت إضافة TinyAuth إلى ملف docker-compose.yml الموجود أو إنشاء ملف جديد. إذا كنت تنشئ ملفاً جديداً، لا تنسَ إضافة قسم services:. يمكن أن يكون الإعداد بسيطاً كالتالي:

docker-compose.yml
tinyauth:
container_name: tinyauth
hostname: tinyauth
image: ghcr.io/maposia/remnawave-tinyauth:latest
restart: always
ports:
- '127.0.0.1:3002:3002'
networks:
- remnawave-network
environment:
- PORT=3002
- APP_URL=https://tinyauth.example.com
- USERS=your-username-password-hash
- SECRET=some-random-32-chars-string
volumes:
- ./data:/data
# للحصول على USERS وSECRET اقرأ أدناه

إعداد المتغيرات

لإنشاء أول تجزئة للمستخدم، استخدم الأمر التالي

docker run -it --rm ghcr.io/maposia/remnawave-tinyauth:latest user create --interactive

بعد التشغيل، ستُطلب منك إدخال اسم مستخدم وكلمة مرور. ستحتاج أيضاً إلى تحديد output format-docker

بعد ذلك، ستظهر رسالة تفيد بإنشاء المستخدم وسيظهر username:passwordHash الذي يجب استخدامه في docker-compose.yml في المتغير USERS

معلومات

بعد تشغيل الحاوية، يمكنك إنشاء تجزئة للمستخدم باستخدام حاوية tinyAuth الجارية بالأمر.

docker exec -it tinyauth ./tinyauth user create --interactive
معلومات

كل متغير إعداد له مكافئ بـ FILE (مثل USERS وUSERS_FILE)، يمكن استخدام الملف بدلاً من متغير البيئة.

USERS= قائمة مفصولة بفواصل لمستخدمي tinyauth. (مطلوب)

USERS_FILE= ملف يحتوي على قائمة مستخدمي tinyauth.

جميع متغيرات البيئة متاحة في الوثائق الرسمية https://tinyauth.app/docs/reference/configuration

لإنشاء متغير البيئة SECRET استخدم openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | head -c 32.

الإعداد

بعد ذلك، تحتاج إلى إعداد nginx.conf لحماية المسار المطلوب.

nginx.conf
upstream tinyauth {
server 127.0.0.1:3002;
}


server {
server_name tinyauth.example.com;
listen 443 ssl;
http2 on;

ssl_certificate "/etc/nginx/ssl/tinyauth.example.com/fullchain.pem";
ssl_certificate_key "/etc/nginx/ssl/tinyauth.example.com/privkey.pem";
ssl_trusted_certificate "/etc/nginx/ssl/tinyauth.example.com/fullchain.pem";

location / {
proxy_pass http://tinyauth;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}

server {
server_name panel.remnawave.com;
listen 443 ssl;
http2 on;

ssl_certificate "/etc/nginx/ssl/panel.remnawave.com/fullchain.pem";
ssl_certificate_key "/etc/nginx/ssl/panel.remnawave.com/privkey.pem";
ssl_trusted_certificate "/etc/nginx/ssl/panel.remnawave.com/fullchain.pem";

location / {
auth_request /tinyauth;
error_page 401 = @tinyauth_login;

proxy_http_version 1.1;
proxy_pass http://remnawave;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}

location /tinyauth {
proxy_pass http://tinyauth/api/auth/nginx;

proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header x-forwarded-proto $scheme;
proxy_set_header x-forwarded-host $http_host;
proxy_set_header x-forwarded-uri $request_uri;
}

location @tinyauth_login {
return 302 https://tinyauth.example.com/login?redirect_uri=$scheme://$http_host$request_uri;
}

#تأكد من استبدال http://tinyauth.example.com بعنوان URL التطبيق الخاص بك

تشغيل الحاوية

بعد ذلك، أعد تشغيل nginx وشغّل tinyAuth

docker compose down && docker compose up -d && docker compose logs -f
warning

هام: إذا كنت تستخدم tinyAuth قبل 01.12.2025 وقمت بالتحديث، فقد انتقلت من الإصدار 3 إلى الإصدار 4.

التحديث من v3 إلى v4

اعتباراً من v4، أصبح Tinyauth تطبيقاً ذو حالة يستخدم قاعدة بيانات SQLite لتخزين الجلسات. هذا التغيير يحسن الأمان. لإعدادات Docker، أضف المجلد التالي:

services:
tinyauth:
volumes:
- ./data:/data

إصدار مفاتيح API

معلومات

يمكنك استخدام Basic base64(username:password) في رأس X-Api-Key لطلباتك إلى API.

مثال: X-Api-Key: Basic dXNlcm5hbWU6cGFzc3dvcmQ=