Lorsque nous écrivons du code, nous le développons généralement d'abord sur notre propre ordinateur, puis déployons le code sur le serveur. Si un morceau de code implique la lecture et l'écriture d'une base de données, ou l'accès à d'autres interfaces de services en ligne, alors pendant le développement, afin de ne pas affecter l'environnement en ligne, nous séparons généralement la base de données dans l'environnement de test et la base de données dans l'environnement en ligne.
Par exemple, notre programme doit accéder à MongoDB et Redis, donc dans le code, nous pourrions écrire comme ceci :
import pymongo import redis handler = pymongo.MongoClient('mongodb://username:password@127.0.0.1:27017').db.col client = redis.Redis(host='127.0.0.1', port=6379, password='xxxx')
Lorsque vous souhaitez déployer le programme dans l'environnement en ligne, vous modifiez manuellement les paramètres de connexion MongoDB et les paramètres de connexion Redis dans le code par les paramètres de l'environnement en ligne. Soumettez ensuite le code à Git, extrayez le dernier code sur le serveur et déployez-le.
Cependant, lorsque vous souhaitez modifier une nouvelle fonction et la tester à nouveau, vous devez modifier ces paramètres de connexion aux paramètres de l'environnement de test et opérer sur votre propre ordinateur. Si vous oubliez de modifier et d'exécuter directement, des données sales peuvent être écrites dans l'environnement en ligne.
Ainsi, quelqu'un peut utiliser des variables d'environnement pour contrôler les paramètres de lecture, par exemple :
import os import redis import pymongo if os.getenv('env', 'prod'): # 线上环境 MONGODB_URI = 'mongodb://username:password@xx.xx.xx.xx:27017' REDIS_PARAMS = {'host': 'xx.xx.xx.xx', 'port': 6379, 'password': 'xxxx'} else: # 测试环境 MONGODB_URI = 'mongodb://username:password@127.0.0.1:27017' REDIS_PARAMS = {'host': '127.0.0.1', 'port': 6379, 'password': 'xxxx'} handler = pymongo.MongoClient(MONGODB_URI).db.col client = redis.Redis(**REDIS_PARAMS)
De cette façon, vous n'avez pas besoin de modifier manuellement les paramètres de connexion de la base de données. Tant que vous définissez les variables d'environnement de l'environnement en ligne env
设置为prod
,那么程序部署到线上环境,它自动就会使用线上数据库的参数。只要 其他地方,例如你电脑上,环境变量env
不为prod
ou n'existent tout simplement pas, les paramètres de l'environnement de développement seront automatiquement utilisés.
Cela évite les problèmes causés par l'oubli de modifier les paramètres, mais il y a un autre problème : si d'autres personnes ont également accès à cette source Git, alors elles sauront comment se connecter à la base de données dans l'environnement en ligne. Ils manipulent même les données dans l’environnement en ligne sans autorisation, entraînant des risques de sécurité ou des fuites de confidentialité.
Pour plus de sécurité, vous pouvez utiliser un fichier spécial pour stocker les paramètres de configuration, et le programme lit les paramètres du fichier. Ce fichier pour l'environnement en ligne contient des paramètres en ligne, et pour l'environnement de développement, ce fichier contient des paramètres de développement. Ce fichier de configuration n'est pas téléchargé sur Git.
Par exemple, nous créons un fichier config.json avec le contenu :
{ "MONGODB_URI": "mongodb://username:password@127.0.0.1:27017", "REDIS_PARAMS": {"host": "127.0.0.1", "port": 6379, "password": "xxxx"} }
Ensuite notre code est modifié comme ceci :
import os import json import redis import pymongo CONFIG_PATH = '/etc/config/config.json' if not os.path.exists(CONFIG_PATH): print('配置文件不存在,自动使用测试环境参数!') MONGODB_URI = 'mongodb://username:password@127.0.0.1:27017' REDIS_PARAMS = {'host': '127.0.0.1', 'port': 6379, 'password': 'xxxx'} else: with open(CONFIG_PATH, encoding='utf-8') as f: config = json.load(f) MONGODB_URI = config['MONGODB_URI'] REDIS_PARAMS = config["REDIS_PARAMS"] handler = pymongo.MongoClient(MONGODB_URI).db.col client = redis.Redis(**REDIS_PARAMS)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!