匹配网站源码分享(在线匹配)

各位老铁们,大家好,今天由我来为大家分享匹配网站源码分享,以及在线匹配的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

使用Terraform在AWS上部署Django应用程序并连接到AmazonS3

关于S3

为什么我们实际上需要S3存储?

为什么我们需要S3存储?当用户将某个文件上传到Web服务器时,Django默认将此文件保存在文件系统中。只要我们可以有多个容器用于WebECS服务,我们就会遇到容器web_1创建用户文件,容器web_2尝试读取它们的情况。而且,当ECS重新创建容器web_1时,我们会丢失用户文件。

所以,现在我们有了有状态的行为。为了实现无状态行为,我们需要将用户文件存储在通用的全局存储中。S3是我们正在寻找的存储。

在这种情况下,容器web_1在S3存储桶中创建一个新文件,容器web_2可以读取该文件。

这是来自AWS的S3描述:

AmazonSimpleStorageService(AmazonS3)是一种对象存储服务,提供行业领先的可扩展性、数据可用性、安全性和性能。各种规模和行业的客户都可以为几乎任何用例存储和保护任何数量的数据,例如数据湖、云原生应用程序和移动应用程序。借助具有成本效益的存储类和易于使用的管理功能,您可以优化成本、组织数据并配置微调的访问控制,以满足特定的业务、组织和合规性要求。

文件上传到本地存储

但首先,让我们在Django应用程序中添加文件上传。

要使用S3,我们需要安装django-storages和boto3包。为了在Django中处理图像,我们需要Pillow库。将它们添加到requirements.txt并运行pipinstall-rrequirements.txt。

boto3==1.24.45\ndjango_storages==1.13.1\npillow==9.1.0

但现在,我们将使用Django默认的FileSystemStorage。

让我们使用带有图像ImageField的Photo模型创建一个新的Django应用程序photos。

导航到django-aws-backend项目并使用pythonmanage.pystartapp照片创建一个新的Django应用程序。

然后在INSTALLED_APPS底部的settings.py中添加照片应用程序并指定MEDIA_URL和MEDIA_ROOT设置:

INSTALLED_APPS=[\n…\n&39;,\n]\n\nMEDIA_URL=&34;\nMEDIA_ROOT=BASE_DIR/&34;

现在,我们准备在photos/models.py中创建一个照片模型:

fromdjango.dbimportmodels\n\n\nclassPhoto(models.Model):\ntitle=models.CharField(&34;,max_length=255)\nimage=models.ImageField(&34;,upload_to=&34;)

要允许在管理面板中管理Photo对象,请在photos/admin.py中添加PhotoAdmin类

fromdjango.contribimportadmin\n\nfromphotos.modelsimportPhoto\n\n\n@admin.register(Photo)\nclassPhotoAdmin(admin.ModelAdmin):\nlist_display=[&34;]

最后,要由Django开发服务器提供媒体文件,请将以下代码添加到django_aws/urls.py:

fromdjango_aws.settingsimportDEBUG,MEDIA_URL,MEDIA_ROOT\nfromdjango.conf.urls.staticimportstatic\n\n…\n\n\nifDEBUG:\nurlpatterns+=static(MEDIA_URL,document_root=MEDIA_ROOT)

所有必要的代码都已到位。所以我们可以进行和应用迁移。

$pythonmanage.pymakemigrationsphotos\nMigrationsfor&39;:\nphotos/migrations/0001_initial.py\n-CreatemodelPhoto\n$pythonmanage.pymigrate\nOperationstoperform:\nApplyallmigrations:admin,auth,contenttypes,photos,sessions\nRunningmigrations:\nApplyingphotos.0001_initial…OK

现在,让我们尝试在Djangoadmin中创建一张新照片。运行pythonmanage.pyrunserver并进入管理面板http://127.0.0.1:8000/admin/photos/photo/。单击“添加照片”,输入标题,然后从文件系统中选择任何图像。然后,单击“保存并继续编辑”。

Django会将图像保存到本地文件系统。确认您可以单击“当前图像”并在浏览器中查看它。您也可以在django-aws-backend/media/photos文件夹中查看它。

DjangoS3设置

我们已成功将图像上传到本地文件系统。我更喜欢使用FileSystemStorage进行本地开发。它允许我在没有互联网连接的情况下工作和运行测试。

但是对于生产环境,我们需要提供S3设置。因此,让我们在settings.py中添加以下设置:

DEFAULT_FILE_STORAGE=env(\n&34;,default=&34;\n)\nAWS_ACCESS_KEY_ID=env(&34;,default=&34;)\nAWS_SECRET_ACCESS_KEY=env(&34;,default=&34;)\nAWS_STORAGE_BUCKET_NAME=env(&34;,default=&34;)\nAWS_S3_REGION_NAME=env(&34;,default=&34;)\nAWS_S3_ENDPOINT_URL=env(&34;,default=&34;)\nAWS_S3_FILE_OVERWRITE=False

我们定义:

DEFAULT_FILE_STORAGE。我们保留FileSystemStorage用于本地开发,并设置S3Boto3Storage用于生产。AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY-AWS访问密钥,作为字符串。我们将创建一个单独的用户和访问密钥来访问s3存储。AWS_STORAGE_BUCKET_NAME-S3存储桶的名称。AWS_S3_REGION_NAME-AWS区域。我将使用相同的us-east-2区域;你可以指定你的。AWS_S3_ENDPOINT_URL-用于连接到S3的URL。AWS_S3_FILE_OVERWRITE-如果具有指定名称的文件已经存在,django-storages将附加额外的字符。

我们完成了Django部分。该应用程序已准备好使用S3。提交并推送更改,并确保CI/CD成功通过。

创建S3存储桶

移至Terraform项目。让我们创建一个S3存储桶。首先,我们需要在variables.tf中指定存储桶名称。该名称在您的AWS区域中应该是唯一的。

34;prod_media_bucket&34;S3Bucketforproductionmediafiles&34;prod-media-427861343&34;aws_s3_bucket&34;prod_media&34;public-read&34;*&34;GET&34;HEAD&34;*&34;ETag&34;2012-10-17&34;PublicReadGetObject&34;*&34;s3:GetObject&34;Allow&34;arn:aws:s3:::${var.prod_media_bucket}&34;arn:aws:s3:::${var.prod_media_bucket}/*&34;aws_iam_user&34;prod_media_bucket&34;prod-media-bucket&34;aws_iam_user_policy&34;prod_media_bucket&34;2012-10-17&34;s3:*&34;Allow&34;arn:aws:s3:::${var.prod_media_bucket}&34;arn:aws:s3:::${var.prod_media_bucket}/*&34;aws_iam_access_key&34;prod_media_bucket&34;environment&34;name&34;DEFAULT_FILE_STORAGE&34;value&34;storages.backends.s3boto3.S3Boto3Storage&34;name&34;AWS_ACCESS_KEY_ID&34;value&34;${s3_access_key}&34;name&34;AWS_SECRET_ACCESS_KEY&34;value&34;${s3_secret_key}&34;name&34;AWS_STORAGE_BUCKET_NAME&34;value&34;${s3_media_bucket}&34;name&34;AWS_S3_REGION_NAME&34;value&34;${region}&34;name&34;AWS_S3_ENDPOINT_URL&34;value&34;https://${s3_media_bucket}.s3.${region}.amazonaws.com/&34;s3&34;terraform-427861343&34;terraform&34;us-east-2&34;local&34;s3&34;s3&34;s3&34;yes&34;no&34;s3″!Terraformwillautomatically\nusethisbackendunlessthebackendconfigurationchanges.\n…

因此,让我们检查一下我们是否已成功迁移。运行terraformapply以验证我们的基础架构是否与配置匹配。您应该看到以下消息:

Terraform已将您的真实基础架构与您的配置进行了比较,没有发现任何差异,因此无需进行任何更改。

此外,请检查您的S3存储桶。您应该在这里看到一个新的terraform文件。

因此,我们成功地将Terraform状态移动到S3。提交并推送Terraform项目中的更改。

结束

恭喜!在这一部分中,我们为我们的Django应用程序添加了将图像上传到S3的功能。此外,我们将Terraform后端移至S3。

关注七爪网,获取更多APP/小程序/网站源码资源!

OK,本文到此结束,希望对大家有所帮助。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平