নোড.জেএস ডিপ্লোমেন্ট সেটিংস / কনফিগারেশন ফাইল কীভাবে সংরক্ষণ করবেন?


640

আমি কয়েকটি নোড অ্যাপ্লিকেশনগুলিতে কাজ করছি এবং আমি স্থাপন-সম্পর্কিত সেটিংস সঞ্চয় করার জন্য একটি ভাল প্যাটার্ন খুঁজছি। জ্যাঙ্গো বিশ্বে (আমি যেখান থেকে এসেছি), প্রচলিত অনুশীলনে settings.pyস্ট্যান্ডার্ড সেটিংস (টাইমজোন, ইত্যাদি), এবং তারপরে একটি local_settings.pyস্থাপনার নির্দিষ্ট সেটিংসের জন্য একটি ফাইল থাকা উচিত ie কোন ডাটাবেসে কথা বলতে হবে, কোন মেমকেচে সকেট, প্রশাসকদের জন্য ইমেল ঠিকানা এবং এই জাতীয় আরও on

আমি নোডের জন্য অনুরূপ নিদর্শনগুলি খুঁজছি। কেবল একটি কনফিগার ফাইলই দুর্দান্ত হবে, সুতরাং এটিতে থাকা সমস্ত কিছুর সাথে জ্যাম লাগবে না app.jsতবে উত্স নিয়ন্ত্রণে নেই এমন কোনও ফাইলে সার্ভার-নির্দিষ্ট কনফিগারেশন করার উপায় থাকা আমার কাছে গুরুত্বপূর্ণ। একই অ্যাপ্লিকেশনটি বিভিন্ন সার্ভারগুলিতে বন্যভাবে বিভিন্ন সেটিংস সহ ভালভাবে মোতায়েন করা যেতে পারে, এবং মার্জ সংঘাতগুলি মোকাবেলা করা এবং এটি আমার মজার ধারণা নয়।

সুতরাং এর জন্য কি কোনও ধরণের ফ্রেমওয়ার্ক / সরঞ্জাম রয়েছে, বা প্রত্যেকে নিজেরাই কিছু মিলে কিছু হ্যাক করে?


मी । কনফিগারেশনটি যেভাবে করা হয়েছে তা আমি সত্যিই পছন্দ করি । মূলত, তারা অ্যাপ্লিকেশন পরিবেশগত প্রতি পৃথক সেটিংস (উত্পাদন, বিকাশ, পরীক্ষার জন্য) এবং অ্যাপ্লিকেশন পরিবেশের ভেরিয়েবলগুলি যেমন সিক্রেট ইত্যাদির মাধ্যমে নির্দিষ্ট বিবরণগুলি সরবরাহ করে তার উপর ভিত্তি করে অ্যাপ্লিকেশন সম্পর্কিত কনফিগারেশনকে সেপ্রেট সাজানোর মডিউলটিতে সঞ্চয় করে
হিনরিচ

উত্তর:


765

আমি package.jsonআমার প্যাকেজগুলির config.jsজন্য একটি এবং আমার কনফিগারেশনের জন্য ব্যবহার করি যা দেখতে দেখতে:

var config = {};

config.twitter = {};
config.redis = {};
config.web = {};

config.default_stuff =  ['red','green','blue','apple','yellow','orange','politics'];
config.twitter.user_name = process.env.TWITTER_USER || 'username';
config.twitter.password=  process.env.TWITTER_PASSWORD || 'password';
config.redis.uri = process.env.DUOSTACK_DB_REDIS;
config.redis.host = 'hostname';
config.redis.port = 6379;
config.web.port = process.env.WEB_PORT || 9980;

module.exports = config;

আমি আমার প্রকল্প থেকে কনফিগারটি লোড করছি:

var config = require('./config');

এবং তারপর আমি থেকে আমার জিনিসপত্র অ্যাক্সেস করতে পারেন config.db_host, config.db_portইত্যাদি ... এই আমাকে করতে দেয় পারেন ব্যবহার হার্ডকোডেড পরামিতি, অথবা পরামিতি পরিবেশগত ভেরিয়েবল সঞ্চিত যদি আমি উৎস নিয়ন্ত্রণ পাসওয়ার্ড সঞ্চয় করতে চান না।

আমি একটি উত্পন্ন package.jsonএবং নির্ভরতা বিভাগ সন্নিবেশ করি:

"dependencies": {
  "cradle": "0.5.5",
  "jade": "0.10.4",
  "redis": "0.5.11",
  "socket.io": "0.6.16",
  "twitter-node": "0.0.2",
  "express": "2.2.0"
}

আমি যখন আমার স্থানীয় মেশিনে প্রকল্পটি ক্লোন করি, তখন আমি npm installপ্যাকেজগুলি ইনস্টল করতে দৌড়ে যাই । যে আরো তথ্য এখানে

প্রকল্পটি আমার প্রোডাকশন সার্ভারে রিমোট যুক্ত করে গিটহাবে সংরক্ষণ করা হয়েছে।


32
দেব বনাম প্রোডের জন্য আপনার যখন বিভিন্ন কনফিগারেশন সেটিংস থাকে তখন কী হয়?
chovy

4
আমার এটি করার একটি উপায় নেই তবে প্রতিটি এনভির জন্য এনএনভি ভেরিয়েবলের মধ্যে এনভির নামটি সেট করুন। তারপরে এই ফাইলটিতে এটির কেবল জাভাস্ক্রিপ্ট .. একটি কেস ব্যবহার করুন বা যদি বিবৃতিটি যথাযথভাবে উপযুক্ত ভেরিয়েবলগুলি লোড করতে পারেন। এমনকি আপনি প্রতিটি এনভির জন্য পৃথক কনফিগার সাবফিল তৈরি করতে পারেন এবং যদি বিবৃতিতে সাবফিলিটি এখানে একটি সাবকনফিগ ভারে পুনরায় লোড করুন এবং সেই সাবকনফিগ ভারটি মূল কনফিগারেশনে রফতানি করতে পারেন .. আমি মূলত যা বলতে চাইছি তা হ'ল এটি
জেএস

4
কি প্রক্রিয়া.এনভি? এটি কোথায় অবস্থিত? এবং কিভাবে এটি সেট?
রাগিত কিউই

12
আমি ভাবছিলাম "বাহ .. আমি কয়েক ঘন্টা ধরে নোড.জেএস এ খুঁজছি এবং আমার অ্যাপ্লিকেশন ইতিমধ্যে কাজ করছে .. বিটিডাব্লু, সম্ভবত আমি এই এলোমেলো কোডটি ভাগ করে নেব যা নিয়ে এসেছি"
নোলি

3
আপনি কি এখনও এই পাস শব্দগুলি সংরক্ষণ করতে পরিবেশের ভেরিয়েবল ব্যবহার করতে পারবেন না? এই লাইনটি কি তার জন্য নয়: config.twitter.password = process.env.TWITTER_PASSWORD || 'পাসওয়ার্ড';
DMart

244

আপনি নোড v0.5.x হিসাবে JSON ফাইলের প্রয়োজন হতে পারে ( এই উত্তরটি উল্লেখ করে )

config.json:

{
    "username" : "root",
    "password" : "foot"
}

app.js:

var config = require('./config.json');
log_in(config.username, config.password);

40
এই বৈশিষ্ট্যটির সাথে এতটা মুগ্ধ নয়। আপনার ("./ config.js") প্রয়োজন হতে পারে এবং আমি কনফিগার করা ফাইলগুলিতে মন্তব্যগুলি যুক্ত করার ক্ষমতা পেয়েছি যা আমি খুব গুরুত্বপূর্ণ বলে মনে করি এবং অন্যান্য ঘণ্টা এবং শিসগুলি। আপনি যদি কনফিগারেশন কেবলমাত্র বৈশিষ্ট্য এবং কোনও কোড না থাকে তবে আপনার প্রয়োজনীয় কিছু (কনফারেন্স.জেএস) ছাড়াই কোনও কিছু ছাড়বেন না JSON প্রিফিক্সেড
এক্সপোর্টসনফিগ

3
@ টেকনোপল আপনি ঠিক বলেছেন তবে বোবা বনাম স্মার্ট টেম্প্লেটিং সিস্টেমগুলি ব্যবহার করার 'সঠিকতা' / ব্যবহারযোগ্যতা সম্পর্কে একটি বড় আলোচনা চলছিল: (১) আপনি সাধারণত টেম্প্লেটিং / অপশনগুলির জন্য একটি ঘোষিত / বোবা ভাষা চান (২) কেবলমাত্র টেম্প্লেটিং (বা কনফিগারেশন) করার জন্য একটি "প্রায়-পিএল" পুনর্গঠন করা খারাপ ধারণা known পরিচিত আচরণগুলির সাথে আপনার বিদ্যমান আসল পিএল পুনরায় ব্যবহার করতে ভাল et ব্যবহারকারী সেটিংস করতে জেএস পুনর্ব্যবহারের জন্য এখনও পর্যন্ত +1; ঘোষণামূলক পদ্ধতির দিকে না যাওয়ার জন্য -১। আমরা বেশ কিছু জটিল কনফিগার স্টাফ ঘোষিত পদ্ধতিতে দেখেছি; আমার অন্ত্রে আমাকে বলে যে এই উপায়।
প্রবাহিত করুন

1
ভিএসকোডে (2017 সালের শেষের দিকে) জসন ফাইল থেকে প্রাপ্ত বস্তুর উপর কোনও ইন্টেলিজেন্স নেই। মডিউল.এক্সপোর্টগুলি থেকে অবজেক্টের জন্য পুরোপুরি কাজ করা ইন্টেলিজেন্স
রোমেন ভিনসেন্ট

199

অনেক পরে, আমি কনফিগারেশন পরিচালনার জন্য একটি খুব ভাল Node.js মডিউল পেয়েছি: nconf

একটি সহজ উদাহরণ:

var nconf = require('nconf');

// First consider commandline arguments and environment variables, respectively.
nconf.argv().env();

// Then load configuration from a designated file.
nconf.file({ file: 'config.json' });

// Provide default values for settings not provided above.
nconf.defaults({
    'http': {
        'port': 1337
    }
});

// Once this is in place, you can just use nconf.get to get your settings.
// So this would configure `myApp` to listen on port 1337 if the port
// has not been overridden by any of the three configuration inputs
// mentioned above.
myApp.listen(nconf.get('http:port'));

এটি রেডিসে সেটিংস সংরক্ষণের , কনফিগারেশন ফাইলগুলি লেখার পক্ষে এবং মোটামুটি শক্ত এপিআইও সমর্থন করে এবং ফ্ল্যাটিরনের কাঠামোর উদ্যোগের অংশ হিসাবে নোডেজিটসুকে আরও ভাল সম্মানিত নোডিজিটসও সমর্থন করে , তাই এটি হওয়া উচিত মোটামুটি ভবিষ্যতের প্রমাণ

গিথুব এ এনকনফ দেখুন ।


2
সম্ভবত একটি বোবা প্রশ্ন কিন্তু আমি একটি পরিষ্কার ব্যাখ্যা দেখতে পাইনি: আমি নোড পরিবেশের ভেরিয়েবলগুলি কোথায় সেট করব? আমি ইতিমধ্যে এনকনফ ব্যবহার করছি তবে আমি পরিবেশগত পরিবর্তনশীলগুলি কোথায় সেট করব তা পরিষ্কার নয়। এটা কি এনগিনেক্স / এপাচি? এটি কি অন্য কনফিগারেশন ফাইল?
সিভিলিয়ান

91
কনফিগারেশন হিসাবে .json ফাইল ব্যবহার করা ভাল ধারণা বলে আমি মনে করি না, কারণ মন্তব্যের অনুমতি নেই।
ফ্র্যাঙ্ক জু

11
এটি দুর্দান্ত দেখাচ্ছে। আমি মনে করি কনফিগার ফাইলটি কমান্ড-লাইন বিকল্প এবং পরিবেশের ভেরিয়েবলগুলিকে ওভাররাইড করলে আপনি অনেকগুলি ইউনিক্সহেডকে অবাক করে দিন। নিম্নোক্ত ক্রমের উপরে আমরা ক্রম ব্যবহার করেছি: কনফিগারেশন ফাইল (গুলি), পরিবেশের ভেরিয়েবল, কমান্ড-লাইন বিকল্প।
শেলডনহ

2
@ শেলডনহ যতক্ষণ না আপনি খুঁজে পেয়েছেন যে বুলিয়ান বিকল্পগুলি সর্বদা আরজিভিতে সেট করা থাকে, তাই অগ্রাধিকার ভঙ্গ করে ...: /
ড্যানিয়েল সি। সোব্রাল

@ ড্যানিয়েলসি.সোব্রাল এটি সত্যই লজ্জাজনক। ওহ, এবং এলটিএনএস! :-)
শেলডনহ

94

আমার সমাধান মোটামুটি সহজ:

./Config/index.js এ পরিবেশ কনফিগারেশন লোড করুন

var env = process.env.NODE_ENV || 'development'
  , cfg = require('./config.'+env);

module.exports = cfg;

./Config/config.global.js এ কিছু ডিফল্ট সংজ্ঞায়িত করুন

var config = module.exports = {};

config.env = 'development';
config.hostname = 'dev.example.com';

//mongo database
config.mongo = {};
config.mongo.uri = process.env.MONGO_URI || 'localhost';
config.mongo.db = 'example_dev';

./Config/config.test.js এ ডিফল্টগুলি ওভাররাইড করুন

var config = require('./config.global');

config.env = 'test';
config.hostname = 'test.example';
config.mongo.db = 'example_test';

module.exports = config;

এটি ব্যবহার করে ./models/user.js:

var mongoose = require('mongoose')
, cfg = require('../config')
, db = mongoose.createConnection(cfg.mongo.uri, cfg.mongo.db);

পরীক্ষার পরিবেশে আপনার অ্যাপ্লিকেশন চালানো:

NODE_ENV=test node ./app.js

2
আমি এই এক পছন্দ। অন্যদের দ্বারা যেমন উল্লেখ করা হয়েছে জেএসএন কোনও পছন্দসই স্টোরেজ কাঠামো নয় এবং গ্লোবালগুলির সাথে এই স্তরটি সহজ এবং কার্যকর
সেবাস্তিয়ান জে

আমি এনকনফের চেয়ে বেশি পছন্দ করতে পারি কারণ এটি কনফিগারেশনের (ডিভ, পরীক্ষা এবং প্রোড) ফাইলগুলির জন্য জেএস ফর্ম্যাটকে অনুমতি দেয়। আমাদের প্রতিটি কনফিগার বিকল্প ডকুমেন্ট করার অনুমতি দেয় যা অন্যথায় JSON ফর্ম্যাট দিয়ে সম্ভব নয়।
কুণাল কাপাদিয়া

বিটিডাব্লু, NODE_ENV'উন্নয়ন' এ খেলাপি a পরিবর্তে আপনার 'উত্পাদন' পরীক্ষা করা উচিত।
কেভিন সটল

5
আমি উন্নয়নের জন্য যাচাই করছি না। আমি এটি ডিফল্ট করছি। আমি কেন উত্পাদনে কখনই ডিফল্ট হব তা নিশ্চিত নয়।
chovy

39

আপনি ডটেনভের দিকেও নজর রাখতে পারেন যা বারো-ফ্যাক্টর অ্যাপ্লিকেশনটির শৃঙ্খলা অনুসরণ করে ।

আমি নোড-কনফিগার ব্যবহার করতাম তবে সেই কারণে ডটেনভ তৈরি করেছি। এটি সম্পূর্ণরূপে রুবির ডটেনভ গ্রন্থাগার দ্বারা অনুপ্রাণিত হয়েছিল।

ব্যবহার বেশ সহজ:

var dotenv = require('dotenv');
dotenv.load();

তারপরে আপনি কেবল একটি .env ফাইল তৈরি করুন এবং নিজের সেটিংসটি সেখানে সেখানে রেখে দিন:

S3_BUCKET=YOURS3BUCKET
SECRET_KEY=YOURSECRETKEYGOESHERE
OTHER_SECRET_STUFF=my_cats_middle_name

যে dotenv nodejs জন্য।


2
অথবা কেবল এটি ব্যবহার করুন foreman run node xx.jsস্বয়ংক্রিয়ভাবে আপনার .env ফাইলেও পড়বে।
সাইমন

1
আমি কি এই পদ্ধতির উত্পাদনের জন্য ব্যবহার করব?
লামোর

1
@ লামার না, আপনি এগুলি প্রকৃত সার্ভারে এনভিভি ভেরিয়েবলগুলিতে সেট করেছেন। প্রতিবার যখন আপনি মোতায়েন করেন তারা সেখানে ছিলেন তবে উত্স কোডে নেই।
সিডোনাল্ডসন

@ লামার হ্যাঁ আপনি সার্ভারে এনভির ভেরিয়েবলগুলি সেট করার আরও পোর্টেবল বিকল্প হিসাবে করতে পারেন। গুরুত্বপূর্ণ বিষয়টি হ'ল আপনার সংস্করণ নিয়ন্ত্রণ বা স্থাপনার প্রক্রিয়াতে ফাইলটি অন্তর্ভুক্ত করা নয়.env
জোশ নো

31

আপনি কি আপনার স্ক্রিপ্টগুলি শুরু করার জন্য এনপিএম ব্যবহার করছেন (এনভি ইত্যাদি)?

আপনি যদি .envফাইলগুলি ব্যবহার করেন তবে সেগুলি package.json আপনারগুলিতে অন্তর্ভুক্ত করতে পারেন এবং উত্স / শুরু করতে এনপিএম ব্যবহার করতে পারেন।

উদাহরণ:

{
  "name": "server",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node test.js",
    "start-dev": "source dev.env; node test.js",
    "start-prod": "source prod.env; node test.js"
  },
  "dependencies": {
    "mysql": "*"
  }
}

তারপরে এনপিএম স্ক্রিপ্টগুলি চালান:

$ npm start-dev

এটি এখানে বর্ণিত হয়েছে https://gist.github.com/ericelliott/4152984 এরিক ইলিয়টের সমস্ত ক্রেডিট


2
আপনি "উত্স" কি বলতে পারেন? আমি পেয়েছিsource : not found
জননিবিজল

@ জোহনিবিজল source(বা সহজভাবে .) , ইউনিক্স শেল (বাশ, ইত্যাদি) -এ একটি বিল্ট-ইন কমান্ড যা বর্তমান শেলটিতে প্রদত্ত ফাইল থেকে কমান্ডগুলি পড়তে এবং সম্পাদন করতে পারে । অর্থাৎ, কমান্ডগুলি একটি সাব-শেল-এ কার্যকর করা হয় না। এই উদাহরণে এর প্রভাব হ'ল পরিবেশের পরিবর্তনগুলি সংজ্ঞায়িত করা হয় prod.envযেটি বর্তমান শেলের সাথে যুক্ত হয় এবং তাই এই শেলটি দ্বারা উদ্ভূত কোনও শিশু প্রক্রিয়াতে প্রেরণ করা হয়। আপনি উইন্ডোজ সিএমডি ব্যবহার করছেন বলে মনে হচ্ছে। আরও তথ্যের জন্য এই প্রশ্নটি দেখুন ।
উত্কু

মূল্যবান লক্ষ্য করা যায় - 12 ফ্যাক্টর অ্যাপ্লিকেশনটি তৈরি না করার প্রস্তাব দেয় dev.envএবং প্রতি ডিপ্লোয় করে prod.envএকটি .envফাইল রাখে।
আইরিডেইন

24

আপনি নোড-কনফিগারেশনের দিকেও নজর রাখতে পারেন যা configuration HOST এবং OD NODE_ENV ভেরিয়েবলের উপর নির্ভর করে কনফিগারেশন ফাইলটি লোড করে : কিছুটা রআর এর মতো: ডকুমেন্টেশন

এই বিভিন্ন স্থাপনার সেটিংস (জন্য বেশ উপযোগী হতে পারে development, testবা production)।


22

কেবল এর settings.jsসাথে একটি সরল কাজ করুন exports:

exports.my_password = 'value'

তারপরে, আপনার স্ক্রিপ্টে, একটি করুন require:

var settings = require('./settings.js');

আপনার সমস্ত সেটিংস এখন settingsভেরিয়েবলের মাধ্যমে উপলভ্য হবে :

settings.my_password // 'value'

@ ব্যাকডেস্ক অবশ্যই আপনি একটি গোপন স্টোরেজ সিস্টেম স্থাপন করতে পারবেন যা গোপনীয়তা এনক্রিপ্ট করবে এবং আইপি, কিছু টোকেন ইত্যাদির সাহায্যে অ্যাক্সেস সীমাবদ্ধ করবে কিন্তু দিনের শেষে যখন এটি সমস্ত ডিস্ক থেকে কিছু ফাইল পড়তে আসে তবে তা এনক্রিপ্ট করা বা না.
ভানুয়ান

@ ব্যাকডেস্ক উদাহরণটিতে কোনও সমস্যা নেই। ঠিক এটি: কংক্রিটের কিছু ব্যাখ্যা করার জন্য একটি উদাহরণ।
এমিলিও গ্রিসোলিয়া

14

আমি এখানে আমার টুপিটি রিংয়ে ফেলতে যাচ্ছি কারণ এর উত্তরের কোনওটিই সমস্ত সমালোচনামূলক উপাদানগুলিকে সম্বোধন করে না যে কোনও সিস্টেমের প্রয়োজন। বিবেচ্য বিষয়:

  • পাবলিক কনফিগারেশন (এটি সীমানা দ্বারা দেখা যেতে পারে) বনাম ব্যক্তিগত কনফিগারেশন (লোক মোগ্রাবি এটি পেয়েছে)। এবং এগুলি পৃথক রাখা নিশ্চিত করা।
  • চাবি মত গোপন
  • ডিফল্ট বনাম পরিবেশ-নির্দিষ্ট ওভাররাইডগুলি
  • সামনের বান্ডিল

আমি এখানে আমার কনফিগারেশনটি কীভাবে করব:

  • config.default.private.js - সংস্করণ নিয়ন্ত্রণে, এগুলি হ'ল ডিফল্ট কনফিগারেশন বিকল্প যা কেবলমাত্র আপনার ব্যাকএন্ডের দ্বারা দেখা যায়।
  • config.default.public.js- সংস্করণ নিয়ন্ত্রণে, এগুলি ডিফল্ট কনফিগারেশন বিকল্প যা ব্যাকএন্ড এবং সম্মুখভাগ দ্বারা দেখা যায়
  • config.dev.private.js - আপনার যদি ডিভের জন্য বিভিন্ন ব্যক্তিগত ডিফল্ট প্রয়োজন হয়।
  • config.dev.public.js - যদি আপনার ডেভের জন্য বিভিন্ন পাবলিক ডিফল্টের প্রয়োজন হয়।
  • config.private.js - সংস্করণ নিয়ন্ত্রণে নয়, এগুলি পরিবেশ নির্দিষ্ট বিকল্প যা ওভাররাইড করে config.default.private.js
  • config.public.js - সংস্করণ নিয়ন্ত্রণে নয়, এগুলি পরিবেশ নির্দিষ্ট বিকল্প যা ওভাররাইড করে config.default.public.js
  • keys/- এমন একটি ফোল্ডার যেখানে প্রতিটি ফাইল কোনও একরকম আলাদা গোপনীয়তা সঞ্চয় করে। এটিও সংস্করণ নিয়ন্ত্রণের অধীনে নেই (কীগুলি কখনই সংস্করণ নিয়ন্ত্রণের অধীনে থাকা উচিত নয়)।

আমি কনফিগারেশনের জন্য প্লেইন-পুরানো জাভাস্ক্রিপ্ট ফাইলগুলি ব্যবহার করি তাই জাভাস্ক্রিপ্ট ল্যাঙ্গেজের সম্পূর্ণ ক্ষমতা আমার রয়েছে (মন্তব্যগুলি এবং পরিবেশ-নির্দিষ্ট ফাইলে ডিফল্ট কনফিগার ফাইল লোড করার মতো জিনিসগুলি করার ক্ষমতা সহ যাতে সেগুলি ওভাররাইড করা যায়)। আপনি যদি পরিবেশের ভেরিয়েবলগুলি ব্যবহার করতে চান তবে আপনি সেগুলি কনফিগারেশন ফাইলের মধ্যে এগুলি লোড করতে পারেন (যে কারণে আমি জেএসন ফাইলগুলি ব্যবহার করার পরামর্শ দিচ্ছি না কারণ এনভির ভার্স ব্যবহার করার বিরুদ্ধে আমি প্রস্তাব দিই - আপনার কাছে কোনও প্রোগ্রামিং ভাষা নির্মাণের ক্ষমতা নেই) আপনার কনফিগারেশন)।

প্রতিটি কী পৃথক ফাইলে থাকার কারণটি ইনস্টলার ব্যবহারের জন্য। এটি আপনাকে এমন একটি ইনস্টলার স্থাপন করতে দেয় যা মেশিনে কী তৈরি করে এবং কী ফোল্ডারে সেগুলি সঞ্চয় করে। এটি না করে আপনি যখন আপনার কীগুলি অ্যাক্সেস করতে পারবেন না এমন কনফিগারেশন ফাইলটি লোড করবেন তখন আপনার ইনস্টলারটি ব্যর্থ হতে পারে। এইভাবে আপনি ডিরেক্টরিটি অতিক্রম করতে পারেন এবং কী রয়েছে তা আপনার কোডের কোনও প্রদত্ত সংস্করণে কী আছে তা নিয়ে চিন্তা না করেই সেই ফোল্ডারে থাকা কোনও কী ফাইল লোড করতে পারেন।

যেহেতু সম্ভবত আপনার ব্যক্তিগত কনফিগারেশনে কীগুলি লোড হয়েছে, আপনি অবশ্যই কোনও বেসরকারী কোডটিতে আপনার ব্যক্তিগত কনফিগারেশনটি লোড করতে চান না। আপনার ফ্রন্টএন্ড কোডবেসটিকে আপনার ব্যাকএন্ড থেকে সম্পূর্ণ পৃথক করার পক্ষে সম্ভবত এটি আরও কঠোরতর আদর্শ, যদিও পিটা হ'ল বহুবার লোকেরা এটি করা থেকে বিরত রাখতে যথেষ্ট বড় বাধা, এইভাবে ব্যক্তিগত বনাম পাবলিক কনফিগারেশন। তবে ফ্রন্টএন্ডে প্রাইভেট কনফিগারেশন লোড হওয়া রোধ করতে আমি দুটি জিনিস করছি:

  1. আমার একটি ইউনিট পরীক্ষা রয়েছে যা নিশ্চিত করে যে আমার ফ্রন্টএন্ড বান্ডিলগুলিতে ব্যক্তিগত কনফিগারেশনে থাকা আমার কাছে কোনও গোপনীয় কী নেই।
  2. আমার ব্যাকএন্ড কোডের চেয়ে আলাদা ফোল্ডারে আমার ফ্রন্টএন্ড কোড রয়েছে এবং আমার কাছে "কনফিগারেশন" নামে দুটি আলাদা ফাইল রয়েছে - প্রতিটি প্রান্তের জন্য একটি one ব্যাকএন্ডের জন্য, কনফিগার.জে প্রাইভেট কনফিগারেশন লোড করে, সম্মুখভাগের জন্য, এটি পাবলিক কনফিগারেশন লোড করে। তারপরে আপনার সর্বদা কেবল ('কনফিগারেশন') প্রয়োজন এবং এটি কোথা থেকে এসেছে তা নিয়ে চিন্তা করবেন না।

একটি শেষ জিনিস: আপনার কনফিগারেশনটি আপনার অন্য কোনও ফ্রন্টএন্ড কোডের চেয়ে সম্পূর্ণ আলাদা ফাইলের মাধ্যমে ব্রাউজারে লোড করা উচিত । আপনি যদি আপনার ফ্রন্টএন্ড কোড বান্ডিল করেন তবে সর্বজনীন কনফিগারেশনটি সম্পূর্ণ পৃথক বান্ডিল হিসাবে তৈরি করা উচিত। অন্যথায়, আপনার কনফিগারটি সত্যই আর কনফিগার করা হয়নি - এটি আপনার কোডের একমাত্র অংশ। কনফিগারেশন বিভিন্ন মেশিনে আলাদা হতে সক্ষম হওয়া প্রয়োজন।


13

আসামি করা অন্য বিকল্প যা বৈধতার জন্য স্কিমা যুক্ত করে। এনকনফের মতো এটি পরিবেশের ভেরিয়েবল, আর্গুমেন্ট, ফাইল এবং জসন অবজেক্টের যে কোনও সমন্বয় থেকে লোডিং সেটিংস সমর্থন করে settings

README থেকে উদাহরণ:

var convict = require('convict');
var conf = convict({
  env: {
    doc: "The applicaton environment.",
    format: ["production", "development", "test"],
    default: "development",
    env: "NODE_ENV"
  },
  ip: {
    doc: "The IP address to bind.",
    format: "ipaddress",
    default: "127.0.0.1",
    env: "IP_ADDRESS",
  },
  port: {
    doc: "The port to bind.",
    format: "port",
    default: 0,
    env: "PORT"
  }
});

আর্টিকেল শুরু করা: নোড-সাজাপ্রাপ্তের সাথে টেমিং কনফিগারেশন


12

আপনি কনফিগ ব্যবহার করতে পারেন পরিবেশ নির্দিষ্ট কনফিগ ফাইলে। এটি json বা yaml কনফিগারেশন ফাইলগুলি স্বয়ংক্রিয়ভাবে লোড করে, এতে ডিফল্ট মান এবং গতিশীল কনফিগারেশন বৈশিষ্ট্য রয়েছে।

কনফিগ রেপো থেকে একটি উদাহরণ:

File: config/app.json
----------------------------
{
    "default": {
        "port": 3000,
        "cache_assets": true,
        "secret_key": "7EHDWHD9W9UW9FBFB949394BWYFG8WE78F"
    },

    "development": {
        "cache_assets": false
    },

    "test": {
        "port": 3001
    },

    "staging": {
        "port": #{process.env.PORT},
        "secret_key": "3F8RRJR30UHERGUH8UERHGIUERHG3987GH8"
    },

    "production": {
        "port": #{process.env.PORT},
        "secret_key": "3F8RRJR30UHERGUH8UERHGIUERHG3987GH8"
    }
}

উন্নতির পথে:

> config.app.port
3000

উত্পাদনে, ধরে নিই আমরা অ্যাপ্লিকেশনটি শুরু করি $ NODE_ENV=production PORT=4567 node app.js

> config.app.port
4567

আরও বিশদ: https://github.com/vngrs/konfig


9

আমি কনফিগার করে একটি ফাইল নামকরণ হিসাবে একটি ফোল্ডার তৈরি করব config.jsএবং পরে নীচে যেমন প্রয়োজন সেখানে এই ফাইলটি ব্যবহার করব

Config.js এর উদাহরণ

module.exports = {
    proxyURL: 'http://url:port',
    TWITTER: {
        consumerkey: 'yourconsumerkey',
        consumerSecrete: 'yourconsumersecrete'
    },
    GOOGLE: {
        consumerkey: 'yourconsumerkey',
        consumerSecrete: 'yourconsumersecrete'
    },
    FACEBOOK: {
        consumerkey: 'yourconsumerkey',
        consumerSecrete: 'yourconsumersecrete'
    }
}

তারপরে যদি আমি এই কনফিগারেশন ফাইলটি কোথাও ব্যবহার করতে চাই

আমি প্রথমে নীচের মত আমদানি করব

var config = require('./config');

এবং আমি নীচের মত মান অ্যাক্সেস করতে পারেন

const oauth = OAuth({
    consumer: {
        key: config.TWITTER.consumerkey,
        secret: config.TWITTER.consumerSecrete
    },
    signature_method: 'HMAC-SHA1',
    hash_function(base_string, key) {
        return crypto.createHmac('sha1', key).update(base_string).digest('base64');
    }
});

5

কেবলমাত্র npmমডিউল ব্যবহার করুন config(300000 এর বেশি ডাউনলোড)

https://www.npmjs.com/package/config

নোড-কনফিগারেশন আপনার অ্যাপ মোতায়েনের জন্য শ্রেণিবদ্ধ কনফিগারেশনগুলি সংগঠিত করে।

এটি আপনাকে ডিফল্ট প্যারামিটারগুলির একটি সেট নির্ধারণ করতে এবং বিভিন্ন স্থাপনার পরিবেশের জন্য তাদের বর্ধিত করতে দেয় (বিকাশ, কিউএ, মঞ্চায়ন, উত্পাদন ইত্যাদি)।

$ npm install config
$ mkdir config
$ vi config/default.json


{
      // Customer module configs
      "Customer": {
        "dbConfig": {
          "host": "localhost",
          "port": 5984,
          "dbName": "customers"
        },
        "credit": {
          "initialLimit": 100,
          // Set low for development
          "initialDays": 1
        }
      }
}



$ vi config/production.json

{
  "Customer": {
    "dbConfig": {
      "host": "prod-db-server"
    },
    "credit": {
      "initialDays": 30
    }
  }
}



$ vi index.js

var config = require('config');
//...
var dbConfig = config.get('Customer.dbConfig');
db.connect(dbConfig, ...);

if (config.has('optionalFeature.detail')) {
  var detail = config.get('optionalFeature.detail');
  //...
}


$ export NODE_ENV=production
$ node index.js

4

'উন্নয়ন' এবং 'উত্পাদন' কনফিগারগুলি আলাদা করা ভাল ।

আমি নিম্নলিখিত উপায়ে ব্যবহার করি: এখানে আমার কনফিগারেশন / index.js ফাইলটি রয়েছে:

const config = {
    dev : {
        ip_address : '0.0.0.0',
        port : 8080,
        mongo :{
            url : "mongodb://localhost:27017/story_box_dev",
            options : ""
        }
    },
    prod : {
        ip_address : '0.0.0.0',
        port : 3000,
        mongo :{
            url : "mongodb://localhost:27017/story_box_prod",
            options : ""
        }
    }
} 

কনফিগার ব্যবহার নিম্নলিখিত প্রয়োজন:

const config = require('../config')[process.env.NODE_ENV];

আপনি আপনার কনফিগার বস্তুটি ব্যবহার করতে পারবেন তার চেয়ে বেশি:

const ip_address = config.ip_address;
const port = config.port;

এছাড়াও আপনি ফাইলটির module.exports = config;শেষে ব্যবহারকারীconfig/index.js
ম্যাপমালিথ

3

আমি খেলায় কিছুটা দেরি করে ফেলেছি, তবে আমার এখানে যা প্রয়োজন তা বা অন্য কোথাও খুঁজে পেলাম না - তাই আমি নিজেই কিছু লিখেছিলাম।

কনফিগারেশন প্রক্রিয়াটির জন্য আমার প্রয়োজনীয়তাগুলি নিম্নলিখিত:

  1. ফ্রন্ট-এন্ড সমর্থন করুন। ফ্রন্ট-এন্ড কনফিগারেশনটি ব্যবহার করতে না পারলে কী হবে?
  2. সমর্থন settings-overrides.js- যা দেখতে একই রকম তবে কনফিগারেশনের ওভাররাইডগুলিকে অনুমতি দেয় settings.js। কোডটি পরিবর্তন না করে সহজেই কনফিগারেশনটি পরিবর্তন করতে হবে এই ধারণাটি। আমি এটি সাসের জন্য দরকারী মনে করি।

যদিও আমি পরিবেশকে সমর্থন করার বিষয়ে কম চিন্তা করি - এটি কীভাবে আমার সমাধানে সহজেই যুক্ত করা যায় তা ব্যাখ্যা করবে the

var publicConfiguration = {
    "title" : "Hello World"
    "demoAuthToken" : undefined, 
    "demoUserId" : undefined, 
    "errorEmail" : null // if null we will not send emails on errors. 

};

var privateConfiguration = {
    "port":9040,
    "adminAuthToken":undefined,
    "adminUserId":undefined
}

var meConf = null;
try{
    meConf = require("../conf/dev/meConf");
}catch( e ) { console.log("meConf does not exist. ignoring.. ")}




var publicConfigurationInitialized = false;
var privateConfigurationInitialized = false;

function getPublicConfiguration(){
    if (!publicConfigurationInitialized) {
        publicConfigurationInitialized = true;
        if (meConf != null) {
            for (var i in publicConfiguration) {
                if (meConf.hasOwnProperty(i)) {
                    publicConfiguration[i] = meConf[i];
                }
            }
        }
    }
    return publicConfiguration;
}


function getPrivateConfiguration(){
    if ( !privateConfigurationInitialized ) {
        privateConfigurationInitialized = true;

        var pubConf = getPublicConfiguration();

        if ( pubConf != null ){
            for ( var j in pubConf ){
                privateConfiguration[j] = pubConf[j];
            }
        }
        if ( meConf != null ){
              for ( var i in meConf ){
                  privateConfiguration[i] = meConf[i];
              }
        }
    }
    return privateConfiguration;

}


exports.sendPublicConfiguration = function( req, res ){
    var name = req.param("name") || "conf";

    res.send( "window." + name + " = " + JSON.stringify(getPublicConfiguration()) + ";");
};


var prConf = getPrivateConfiguration();
if ( prConf != null ){
    for ( var i in prConf ){
        if ( prConf[i] === undefined ){

            throw new Error("undefined configuration [" + i + "]");
        }
        exports[i] = prConf[i];
    }
}


return exports;

ব্যাখ্যা

  • undefined এর অর্থ এই সম্পত্তি প্রয়োজন
  • null মানে এটি itচ্ছিক
  • meConf- বর্তমানে কোডটি একটি ফাইলের অধীনে লক্ষ্যযুক্ত appmeConfওভাররাইড ফাইলগুলি যা লক্ষ্যযুক্ত conf/dev- যা আমার ভিসি দ্বারা উপেক্ষা করা হয়।
  • publicConfiguration - ফ্রন্ট-এন্ড এবং ব্যাক-এন্ড থেকে দৃশ্যমান হবে।
  • privateConfiguration - কেবল ব্যাক-এন্ড থেকে দৃশ্যমান হবে।
  • sendPublicConfiguration- এমন একটি রুট যা জনসাধারণের কনফিগারেশনটি উন্মোচিত করবে এবং এটিকে বিশ্বব্যাপী পরিবর্তনশীল হিসাবে নির্ধারণ করবে। উদাহরণস্বরূপ নীচের কোডটি সামনের প্রান্তে গ্লোবাল ভেরিয়েবল মাইকনফ হিসাবে সর্বজনীন কনফিগারেশনটি প্রকাশ করবে। ডিফল্টরূপে এটি বিশ্বব্যাপী পরিবর্তনশীল নামটি ব্যবহার করবেconf

    app.get ("/ ব্যাকএন্ড / কনফ", প্রয়োজন ("কনফিড") send

ওভাররাইডের যুক্তি

  • প্রাইভেট কনফিগারেশনটি পাবলিক কনফিগারেশন এবং তারপরে meConf এর সাথে একীভূত হয়।
  • সর্বজনীন কনফিগারেশন যদি প্রতিটি ওভাররাইড থাকে এবং প্রতিটি ওভাররাইড ব্যবহার করে তবে এটি প্রতিটি কী পরীক্ষা করে। এইভাবে আমরা ব্যক্তিগত কিছু প্রকাশ করছি না।

পরিবেশ সমর্থন যোগ করা হচ্ছে

যদিও আমি "পরিবেশ সহায়তা" দরকারী না পেয়েও, সম্ভবত কেউ চাইবে।

পরিবেশগত সমর্থন যুক্ত করতে আপনার মেইকনফের পরিবর্তন দরকার এই জাতীয় কিছুতে (সিউডোকোড)

if (পরিবেশ == "উত্পাদন") {meConf = প্রয়োজন ("../ conf / dev / meConf")। উত্পাদন; }

if (পরিবেশ == "উন্নয়ন") {meConf = প্রয়োজন ("../ conf / dev / meConf")। বিকাশ; }

একইভাবে আপনার পরিবেশ প্রতি ফাইল থাকতে পারে

 meConf.development.js
 meConf.production.js

এবং সঠিকটি আমদানি করুন। বাকি যুক্তি একই থাকে।


ভয়াবহভাবে সুস্পষ্ট নয় যে এর undefinedঅর্থ 'প্রয়োজনীয়' এবং এর nullঅর্থ 'alচ্ছিক'। সুতরাং হলুদ বিনটি প্লাস্টিকের জন্য এবং নীল রঙটি স্ক্র্যাপ কাগজের জন্য? ঠিক আছে, তবে সেই লিটার টস করার আগে ম্যানুয়ালটি পড়তে হয়েছিল।
প্রবাহিত করুন

আপনার এই কনভেনশনটি ব্যবহার করতে হবে না। আমি এটি দরকারী মনে করি এবং আমি আমার দলটিকে এটি ব্যবহার করার নির্দেশ দিই তবে আপনি স্পষ্টতই এই বৈশিষ্ট্যটি সরাতে পারেন।
লোক মোগ্রাবি

3

একটি আদর্শ উদাহরণ আমি স্রেফ ব্যবহার করেছি কারণ আমি একটি সাধারণ জেএসসন ফাইলের চেয়ে আরও নমনীয়তা চেয়েছিলাম তবে এটি কোনও লাইব্রেরিতে বিমুগ্ধ হতে চায়নি যার জন্য নির্ভরতা প্রয়োজন এটি হ'ল এটি। মূলত, তত্ক্ষণাত একটি ফাংশন রফতানি করা যা আমি সেট করতে চেয়েছিল এমন মান সহ একটি বস্তু ফিরিয়ে দিল। অনেক নমনীয়তা দেয়।

     module.exports = function(){
       switch(node_env){
         case 'dev':
           return
           { var1 = 'development'};
         }
    }();

এখানে পূর্ণ উদাহরণ সহ আরও অনেক ভাল ব্যাখ্যা রয়েছে। নোড.জেজে কনফিগার ফাইল ব্যবহার করা হচ্ছে


3

আমি জানি এটি সত্যিই একটি পুরানো পোস্ট। তবে আমি পরিবেশের ভেরিয়েবলগুলি কনফিগার করার জন্য আমার মডিউলটি ভাগ করতে চাই, আমি মনে করি এটি খুব নমনীয় সমাধান। এখানে মডিউলটি জেসন-কনফিগারকারী

var configJson = {
  'baseUrl': 'http://test.com',
  '$prod_baseUrl': 'https://prod.com',
  'endpoints': {
    'users': '<%= baseUrl %>/users',
    'accounts': '<%= baseUrl %>/accounts'
    },
  foo: 'bar',
  foobar: 'foobar',
  $prod_foo: 'foo in prod',
  $test_foo: 'foo in test',
  deep:{
    veryDeep: {
      publicKey: 'abc',
      secret: 'secret',
      $prod_secret: 'super secret'
    }
  }
};

var config = require('json-configurator')(configJson, 'prod');

console.log(config.deep.veryDeep.secret) 
// super secret 

console.log(config.endpoints.users)
// https://prod.com/users 

তারপরে আপনি process.env.NODE_ENVআপনার পরিবেশের জন্য সমস্ত ভেরিয়েবল পেতে ব্যবহার করতে পারেন ।


2

ছাড়াও nconf মডিউল উল্লেখ এই উত্তর , এবং নোড-কনফিগ উল্লেখ এই উত্তর , এছাড়াও আছে নোড-iniparser এবং IniReader , যা সহজ .ini কনফিগারেশন ফাইল পারজার মনে করা হয়।


উইন-ইনআই ফাইলগুলিতে ফিরে যাওয়ার কোনও উপায় নেই iniparser... যা 2013 সালে কনফিগারেশনের অংশগুলি কীভাবে পার্স করা যায় তা তারা গর্বের সাথে জোর দিয়ে জোর দেয় ... যদি আপনার আরও গভীর বাসা বাঁধার দরকার হয় আপনি কি বলবেন [foo/bar]? [foo\bar]? bar.baz=42? bar/baz=42? bar\baz=42? bar:baz=42? আপনি কিভাবে 42একটি সংখ্যা বলতে পারেন ? এটি একটি সর্ব্বিক অঙ্কের পাঠ্য হতে পারে! টস এক্সএমএল, ইয়ামএল টস, টিন উইন.আইএনআই, জেএসএনকে আলিঙ্গন করুন, উদ্বেগগুলি চলে গেছে।
প্রবাহিত করুন



1

এই নিবন্ধটি দ্বারা অনুপ্রাণিত একটি ঝরঝরে দৃষ্টিভঙ্গি এখানে । সর্বব্যাপী লড্যাশ প্যাকেজ ব্যতীত এটির জন্য কোনও অতিরিক্ত প্যাকেজের প্রয়োজন নেই । তদতিরিক্ত, এটি আপনাকে পরিবেশ-নির্দিষ্ট ওভাররাইটগুলির সাথে নেস্টেড ডিফল্টগুলি পরিচালনা করতে দেয়।

প্রথমে, প্যাকেজ রুটের পথে একটি কনফিগার ফোল্ডার তৈরি করুন looks

package
  |_config
      |_ index.js
      |_ defaults.json
      |_ development.json
      |_ test.json
      |_ production.json

এখানে index.js ফাইলটি রয়েছে

const _ = require("lodash");
const defaults = require("./defaults.json");
const envConf = require("./" + (process.env.NODE_ENV || "development") + ".json" );
module.exports = _.defaultsDeep(envConf, defaults);

এখন ধরে নেওয়া যাক আমাদের মতো একটি ডিফল্ট.জসন রয়েছে

{
  "confKey1": "value1",
  "confKey2": {
    "confKey3": "value3",
    "confKey4": "value4"
  }
}

এবং विकास.জসন তাই পছন্দ

{
  "confKey2": {
    "confKey3": "value10",
  }
}

আপনি যদি config = require('./config')এখানে করেন তবে যা পাবেন তা হ'ল

{
  "confKey1": "value1",
  "confKey2": {
    "confKey3": "value10",
    "confKey4": "value4"
  }
}

লক্ষ্য করুন আপনি পরিবেশ-নির্দিষ্ট ফাইলগুলিতে সংজ্ঞায়িত ব্যতীত সমস্ত ডিফল্ট মান পাবেন। সুতরাং আপনি একটি কনফিগার শ্রেণিবিন্যাস পরিচালনা করতে পারেন। ব্যবহার defaultsDeepনিশ্চিত করে তোলে যে আপনি এমনকি নেস্টেড ডিফল্ট থাকতে পারেন।



0

আমি এখানে প্রস্তাবিত কয়েকটি সমাধানের চেষ্টা করেছি, তবে সেগুলি নিয়ে সন্তুষ্ট ছিল না, তাই আমি আমার নিজস্ব মডিউল তৈরি করেছি। এটিকে বলা হয় mikro-configএবং মূল পার্থক্য হ'ল এটি কনফিগারেশনের উপরে কনভেনশনকে সম্মান করে, সুতরাং আপনি কেবল মডিউলটি প্রয়োজন এবং এটি ব্যবহার শুরু করতে পারেন।

আপনি আপনার কনফিগারেশনটি /configফোল্ডার থেকে প্লেন js, অথবা json ফাইলগুলিতে সঞ্চয় করেন । প্রথমে এটি default.jsফাইলটি লোড করে , তারপরে /configডিরেক্টরি থেকে অন্য সমস্ত ফাইল , তারপরে এটি $NODE_ENVভেরিয়েবলের উপর ভিত্তি করে পরিবেশ নির্দিষ্ট কনফিগারেশন লোড করে ।

এটি স্থানীয় local.jsবা উন্নত পরিবেশের জন্য এই কনফিগারেশনটিকে ওভাররাইড করতে দেয় /config/env/$NODE_ENV.local.js

আপনি এখানে এটি তাকান করতে পারেন:

https://www.npmjs.com/package/mikro-config

https://github.com/B4nan/mikro-config


0

দীর্ঘ সময়ের জন্য, আমি এখানে সমাধানে উল্লিখিত পদ্ধতির ব্যবহার করতাম। স্পষ্ট লেখায় গোপনীয়তাগুলির সুরক্ষা সম্পর্কে অবশ্য একটি উদ্বেগ রয়েছে। আপনি উপরে অন্য একটি প্যাকেজ ব্যবহার করতে পারেন configযাতে সুরক্ষা বিটের যত্ন নেওয়া হয়।

এটি দেখুন: https://www.attosol.com/secure-application-secrets- using-masterkey-in-azure-key-vault/


এই পরিষেবাটির জন্য অর্থ প্রদানের জন্য কেন আমি আজুরের সাবস্ক্রাইব করব? কেন উত্তরীয়-ভল্ট ব্যবহার করছেন না? আরেকটি বিষয়: আমি মনে করি উত্স সংগ্রহস্থলের উপর স্পষ্ট পাঠ্য শংসাপত্র সহ কোনও কনফিগার ফাইল ফাইল পোস্ট করা হবে না। হয় পরিবেশের ভেরিয়েবলগুলি ব্যবহার করুন বা কেবলমাত্র পঠনের অনুমতি সহ কোনও ফাইলে এটি আপনার গোপন তথ্য রাখুন।
ইয়াসের সিনজাব

আপনি যদি এটি কোনও তৃতীয় পক্ষের অবস্থান থেকে পড়তে পারেন এবং এটিকে ডিকোড করতে পারেন এবং আপনার পরিষেবাটি সেই শীর্ষ গোপন ডেটা ব্যবহার করতে পারে তবে হ্যাকাররা যদি আপনার কম্পিউটারে অ্যাক্সেস অর্জন করে তবে ঠিক একই কাজ করা সম্ভব হবে। এটি আরও বেশি কাজ করে (বেশি সময় নেয়) তবে শেষ পর্যন্ত এটি আপনাকে রক্ষা করে না। যদি আপনার সার্ভারটি অনুপ্রবেশ করা হয় তবে কল্পনা করুন যে এতে আপনার যা কিছু আছে তা এখন সর্বজনীন।
অ্যালেক্সিস উইল্ক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.