aws 部署项目遇到的问题

1、ssh连接服务器连接不上

aws默认创建非root用户,并且使用密钥对登录,公钥存储在/home目录+用户名的隐藏.ssh文件下,因为公司项目有要求也是只能通过密钥对登录就没有修改账户密码登陆,登录后使用命令sudo -i 切换到root用户。因为挂载磁盘在/home目录下所以密钥对没有当断开连接或超时自动断开时就会再也连不上去了。所以可行的时挂载到/mnt目录或者挂载/home前备份文件,挂载后cp到/home下。

这个问题弄得我好烦,我以为是更改端口的问题,后面没更改还是一样出错,而且aws还不允许初始化系统和还原快照好像。

创建root用户密钥对

ssh-keygen 
cd .ssh
cat id_rsa.pub >> authorized_keys
yum install -y vim lrzsz

其实这个也适合配置服务器间ssh免登录

#将要连接的服务器公钥上传到要连接的服务器/root/.ssh/下。
cat id_rsa.pub >> authorized_keys
#测试
ssh [email protected]

2、修改默认端口

因为默认ssh端口不安全容易被黑客找到机会,要求更改默认端口,并且生产环境要求启用防火墙,想着测试环境各种关闭防火墙部署环境那叫一个爽,到了生产就叫苦了。更改默认端口后需要开启防火墙和selinux,云上还要开启安全组,记得开启防火墙端口后要重载,selinux也需要开放端口,ssh需要重启。

#更改默认端口
vim /etc/ssh/sshd_config
Port 22
Port 23322
service sshd restart
#开启防火墙端口
firewall-cmd --zone=public --add-port=23322/tcp --permanent  
firewall-cmd --zone=public --add-port=23322/udp --permanent  
firewall-cmd --reload
firewall-cmd --query-port=23322/tcp
#开启selinux端口
#查看ssh开放端口
semanage port -l|grep ssh
#开放端口
semanage port -a -t ssh_port_t -p tcp 23322
#再次查看
semanage port -l|grep ssh
#测试登录
ssh root@localhost -p 23322

这里困扰了挺久的,我想到了防火墙和安全组,没注意selinux。
3、防火墙


aws 部署项目遇到的问题_第1张图片
image.png

服务器上部署etcd,服务连不上etcd,报错no route to host,结果还是防火墙问题,开放2379和2380端口,并且记得重载。

firewall-cmd --zone=public --add-port=2379/tcp --permanent
firewall-cmd --zone=public --add-port=2380/tcp --permanent
firewall-cmd --reload

4、启动docker容器时报错

#遇到错误,重启docker解决
/usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint etcd1 (75212769ea8ac0f8201c8c5715c02bf0dc686c69dcfd146017d083b874afe153):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 2380 -j DNAT --to-destination 172.17.0.2:2380 ! -i docker0: iptables: No chain/target/match by that name.

systemctl restart  docker

5、nginx安装失败

#报错代码
./configure: error: invalid option "--with-http_v2_module"
#原因
进入解压目录,查看可安装模块里没有这个模块
cat auto/options | grep YES
原因是我傻安装的nginx1.8,我知道nginx好像是nginx1.12以上版本才支持,但我以为自己安装的是1.18,后面换了高版本1.15.7就可以了。

6、etcd连接不上

#错误信息
docker context:deadline exceeded
#原因
内网安全组未开放

7、ip ping不通

这个是安全组未开放icmp端口,开放所有ipv4就可以了。


image.png

8、asw S3设置公开访问权限

这个配置我是真的挺无语的,设置了好久解决不了,还是json来配置吧。老外的思维和我们还是挺大的哈。


aws 部署项目遇到的问题_第2张图片
image.png

aws 部署项目遇到的问题_第3张图片
image.png

aws 部署项目遇到的问题_第4张图片
image.png
{
    "Version": "2012-10-17",
    "Id": "Policy1565418346514",
    "Statement": [
        {
            "Sid": "Stmt1565418337732",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::antmall/attachment/*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/public": "yes"
                }
            }
        }
    ]
}

8、购买服务器

购买服务器选择镜像一定选择官方镜像,注意安全。

aws 部署项目遇到的问题_第5张图片
image.png

9、购买RDS
AWS RDS可以设置只对内网开放或公网开放,通过终端节点连接,所以不要去傻傻的找公网IP和私有IP了。

连接方式终端节点+端口+主用户+主密码。


aws 部署项目遇到的问题_第6张图片
image.png

10、nginx问题
Nginx 500错误(Internal Server Error 内部服务器错误)

HTML 文档的字符编码未声明。如果该文件包含 US-ASCII 范围之外的字符,该文件将在某些浏览器配置中呈现为乱码。页面的字符编码必须在文档或传输协议层声明。
原因是nginx配置以及权限问题。

还有几个是未解之谜,怪事年年有,aws特别多

  • 服务器上shell脚本、docker-compose.yml、Dockerfile文件无故消失

  • 上传的配置文件config.env变成了文件夹

  • firewalld防火墙自动关闭

文章仅给自己引以为戒,犯过的错误不要再犯,归根结底还是对AWS不熟悉。

国外除了AWS,还有https://www.linode.com/,https://www.vultr.com/,这几个都不错的。

你可能感兴趣的:(aws 部署项目遇到的问题)