AWS基本教程 场景是:在把22端口关闭了,无法再连上服务器的情况
解决办法:关闭服务器,点击操作
->实例设置
->编辑用户数据
1 2 3 4 5 6 7 # !/bin/bash # 允许 SSH 端口 iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -F iptables -A INPUT -p tcp --dport 22 -j ACCEPT
再启动服务器
AWS升级配置 1.先停止
实例,不是终止
实例
2.修改实例类型
服务器局域网互通 需要把局域网 想要互通的服务器,加入一个公共的的默认安全组
选择default
安全组
要看服务器部署在哪里
JavaSDK上传图片到S3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 @RestController @Slf4j @Api(tags = "上传接口") public class UploadController { @Value("${S3.accessKey}") String accessKey; @Value("${S3.secretKey}") String secretKey; @Value("${S3.endPoint}") String endPoint; @Value("${S3.bucketName}") String bucketName; @PostMapping("/upload") @ApiOperation("上传") @NotNeedAuth public Response<String> upload (@RequestParam("file") MultipartFile file) { String originalFilename = file.getOriginalFilename(); if (!Constant.PHOTO_LIST.contains(originalFilename.substring(originalFilename.lastIndexOf("." ) + 1 ))) { return Response.fail(CodeConstant.CODE_095); } String newImageName = ThreadLocalRandom.current().nextInt(10000 ) + System.currentTimeMillis() + originalFilename.substring(originalFilename.lastIndexOf("." )).toLowerCase(); String fileName = "lxdt/dt/" + Constant.DIRECTORY_TIME_FORMAT.format(LocalDateTime.now(Constant.TIME_ZONE)) + newImageName; try { S3Util.uploadFileByFile(accessKey, secretKey, endPoint, bucketName, fileName, file); } catch (Exception e) { log.error("上传失败" , e); return Response.error("" ); } return Response.successData(fileName); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class S3Util { public static void uploadFileByFile (String accessKey, String secretKey, String endPoint, String bucketName, String folderName, MultipartFile file) throws IOException { ClientConfiguration clientConfig = new ClientConfiguration (); clientConfig.setProtocol(Protocol.HTTPS); AmazonS3 amazonS3 = AmazonS3Client.builder().withEndpointConfiguration(new AwsClientBuilder .EndpointConfiguration(endPoint, Region.getRegion(Regions.AP_SOUTHEAST_1).getName())) .withClientConfiguration(clientConfig).withCredentials(new AWSStaticCredentialsProvider (new BasicAWSCredentials (accessKey, secretKey))) .disableChunkedEncoding().withPathStyleAccessEnabled(true ).withForceGlobalBucketAccessEnabled(true ).enablePathStyleAccess().build(); ObjectMetadata objectMetadata = new ObjectMetadata (); objectMetadata.setContentType(file.getContentType()); objectMetadata.setContentLength(file.getSize()); amazonS3.putObject(new PutObjectRequest (bucketName, folderName, file.getInputStream(), objectMetadata).withCannedAcl(CannedAccessControlList.PublicRead)); } }
S3桶策略 公开访问桶策略
1 2 3 4 5 6 7 8 9 10 11 12 { "Version" : "2012-10-17" , "Statement" : [ { "Sid" : "PublicReadGetObject" , "Effect" : "Allow" , "Principal" : "*" , "Action" : "s3:GetObject" , "Resource" : "arn:aws:s3:::your-bucket-name/*" } ] }
印象中有遇到这种情况:
第一次操作桶的时候,桶里面的文件是能正常共享出来的
很久之后没有操作了,再上传一个新文件,上传的这个文件就不能共享了
第二次出现这样情况的时候,我文件的url搞错了,是可以正常共享的
PicGO+S3 创建存储桶 红框里不要勾选
创建文件夹,设置公开
开启静态托管
新建IAM用户 访问创建IAM页面
创建使用者
创建使用者详情
创建使用者权限,点击下一步,然后就能看到key和密钥了
PicGO配置 PicGO软件许要下再S3插件,然后再配置文件里粘贴这个
1 2 3 4 5 6 7 "aws-s3" : { "accessKeyID" : "AKIA2Q6ZSIPP7MKZOFHR" , "secretAccessKey" : "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" , "bucketName" : "mmzcg.com" , "uploadPath" : "blog/{year}/{fullName}" , "acl" : "public-read" }
参考 S3教程
PicGoS3教程
CloudFront加速Vercel 1.找到vercel自动分配的域名
2.aws 创建分配
3.选择源
不要选择源,输入vercel分配的域名
4.选择全部https,其它可以默认
5.选择证书
备用域名: 比如vercel默认分配的是xxx.vercel.app 你想加速的域名是 abc.blog,备用域名就填abc.blog
自定义SSL证书: 用aws自带的证书申请工具
点击保存,回到CloudFront首页
6.cname
看上次修改时间这一列,如果显示的时间,就表示刚才的配置已经生效了,如果显示在部署中…就等一会
CloudFront这一列会分配一个域名,在域名解析那里Cname指向这个域名就可以了
AWS S3和Hexo 1.安装插件
1 2 npm install hexo-deployer-aws-s3 --save-dev
2.改_config.yml
1 2 3 4 5 6 7 8 deploy: type : 'aws-s3' region: ap-east-1 bucket: mmzcg.com
如果要部署多个地方,每个仓库的type前面要加一个-
如果只有一个,就只用type开头就行
3.执行环境变量
1 2 3 export AWS_ACCESS_KEY_ID=AKIA2Q6ZSIPP7MKZOFHRexport AWS_SECRET_ACCESS_KEY=ZifJfUmVVGMq37hd8Itozp4fws5O97dVlwgMgtCYsource /etc/profile
4.部署
1 2 3 4 hexo clean hexo algoli hexo d -g
发现报错,The bucket does not allow ACLs
,还需要在存储中开启 ACLs
接下来要关闭「阻止共有访问操作」
部署成功后,开启静态网站托管功能
RDS 创建RDS 选择mysql社区版本
AWS的RDS开启慢查询日志到cloudwatch中
快照导出到S3
参考文档
接下来的页面是需要的设置
导出标识符,就是导出任务的名字
导出的数据,这里测试就简单点,导出全部表,要是选部分表,文档里有导出规则
S3 目标, 选一个存储桶
接下来的两个是难点,IAM角色,和加密
先看加密,先创建ARN,找到配置的选项卡
点击下面的链接
在客户管理的秘钥,创建一个秘钥, 客户管理的密钥和AWS托管的密钥是有区别的,要选对
创建完之后,再回到 密钥列表的页面,点密钥ID,进入到详情页
复制ARN刚刚才导出的页面,角色权限什么的,各种尝试下就可以了
front清空缓存API 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 import boto3import datetimedef create_invalidation (distribution_id, paths ): client = boto3.client('cloudfront' ,aws_access_key_id='AKIA2UC26S7767GSGKJQ' ,aws_secret_access_key='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' ) caller_reference = str (datetime.datetime.now()) items = paths if isinstance (paths, list ) else [paths] invalidation_batch = { 'Paths' : { 'Quantity' : len (items), 'Items' : items }, 'CallerReference' : caller_reference } response = client.create_invalidation( DistributionId=distribution_id, InvalidationBatch=invalidation_batch ) return response distribution_info = [ ["EX123AFBG" , "生产环境" , "生产" , "baidu.com" ], ] paths_to_invalidate = ['/*' ] for info in distribution_info: distribution_id = info[0 ] print (f"Creating invalidation for Distribution ID: {distribution_id} , Description: {info[1 ]} , Type: {info[2 ]} " ) response = create_invalidation(distribution_id, paths_to_invalidate) print (response) print ("================" ) print ("刷新完成" )