当前位置 : 首页 » 文章分类 :  开发  »  AWS Lightsail CentOS7 使用记录

AWS Lightsail CentOS7 使用记录

为什么又买了个 lightsail 实例?
一是因为想玩玩docker,结果装 docker 的时候发现不支持 centos6.x 的系统,现在的系统 Amazon Linux AMI 是 centos 6.x,需要个 centos 7.x 的系统。
二是把一直以来在服务器上生成 hexo 博客失败的问题解决了,想以后把博客部署流程简化,搞成推笔记到 github 后通过 webhooks 触发自动生成博客内容,但是生成博客时由于内存太小导致 hexo 进程被kill了,需要个内存更大的vps。

这次的主要不同:
1、尽量容器化,目前把 nginx 网关, spring boot 微服务都放到 docker 里了,等完全容器化以后无论如何换服务器都不怕了,不用每次再花好长时间安装一堆环境了。
2、CentOS7 自带 postfix 邮件服务器,不用再安装配置sendmail了,sendmail的配置太繁琐了,在现在这种讲究一键安装极少配置的时代肯定要淘汰。


VPS购买记录

  1. 2018年9月份开始使用美区AWS的免费一年EC2服务器,免费用了一年后没续费,太贵,而且卡shell非常严重。
  2. 2019年6月买了一个月的阿里云ECS,1vCPU 1G内存,速度很快,就是部署在上面的博客域名得备案,有web页面的域名得备案说得过去,关键放上去的api接口都给劫持了,就没再用。
  3. 2019年7月12日,买了AWS推出的轻量级服务器lightsail,东京区域A,1vCPU 0.5G内存 20G SSD,3.5刀每月,用到现在有半年时间了,很稳定。
  4. 2019年12月21日,新买了个 lightsail 实例,东京区域A, 1vCPU 2G内存 60G SSD, 10刀每月。花了1周多时间把环境搭好后停掉原来的 0.5G 内存实例。

ssh登录

创建实例后会分配一个公网IP,这个IP是动态的,就是重启linux系统可能会改变,想要固定不变的ip可以在“联网”页面创建和实例唯一绑定的静态ip。
要ssh链接的话可以在 Lishtsail 的 账户 页面下看到有生成好的ssh私钥,下载下来即可。
同一区域有多个示例的话,默认是共用私钥。

私钥权限过大无法登陆

注意:ssh私钥 文件的权限必须是 0400 ,即所有者只读,别的账号读都不行。
否则登录时提示:
错误:未保护的私钥文件

在mac使用时,刚下载下来的私钥pem文件是0644权限,都不行:

 ~/.ssh  ssh -i lightsail.pem xxx@xx.xx.xx.xx
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'lightsail.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "lightsail.pem": bad permissions
xx@xx.xx.xx.xx: Permission denied (publickey).

必须保护您的私钥文件,防止其他任何用户对其进行读写操作。如果除您外其他任何人都能够读取或写入您的私钥,则 SSH 会忽略您的密钥
获取您在启动实例时指定的密钥对的 .pem 文件在您电脑上位置的完全限定路径。确保 .pem 文件具有权限 0400 而不是 0777。
chmod 0400 ~/.ssh/lightsail.pem 改小私钥文件的权限即可


设置root密码和默认账户密码

创建 lightsail 实例后, 根据选择的linux版本不同,给分配的默认用户名不同:
创建 AWS AMI linux 实例后,分配的默认用户名是 ec2-user ,密码未知
创建 centos 实例后,分配的默认用户名是 centos ,密码未知
使用默认的账户登录服务器后,用户权限受到很大的限制,有些目录无法访问,需要切换到root账户下工作

初次登录后并没有默认的root用户密码,需要在默认用户下创建root密码,可以使用命令sudo passwd root在出现提示后创建新密码
如果出现root密码丢失的情况,也可以使用上边的命令重新生成新的root密码

直接在web页面上ssh登录,使用命令sudo passwd root 修改root密码
然后 su 切换到root账号,passwd centos 修改默认账号的密码。
牢记这两个密码。

设置ssh会话超时时间

基于安全的理由,如果用户连线到 SSH Server 后闲置,SSH Server 会在超过特定时间后自动终止 SSH 连线。
为了避免总是被强行退出,可设置ssh超时时间。
编辑 sshd_config 配置文件
sudo vi /etc/ssh/sshd_config
找到注释掉的如下2个配置项,改为:

ClientAliveInterval 60
ClientAliveCountMax 3

ClientAliveInterval 指定了服务器端向客户端请求no-op包的时间间隔, 默认是0, 不发送。设置60表示每60秒发送一次, 然后客户端响应, 这样就保持长连接了。
ClientAliveCountMax 表示服务器发出请求后客户端没有响应的次数达到一定值, 就自动断开。正常情况下, 客户端不会不响应,使用默认值3即可。

修改后重新启动 sshd 服务
sudo service sshd restart


系统配置

Linux版本信息

$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

uname 信息

$ uname -a
Linux ip-xx-xx-xx-xx.ap-northeast-1.compute.internal 3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 29 14:49:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

时区设置为东八区Shanghai

默认情况下,Amazon Linux 实例设置为 UTC (协调世界时) 时区,将其修改为东八区,即上海

1、确保系统中有 Shanghai 的时区文件 /usr/share/zoneinfo/Asia/Shanghai
2、在 /etc/localtime 与时区文件之间创建一个符号链接,以便实例在引用本地时间信息时找到此时区文件。
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3、重启系统,以便所有服务和应用程序接受新时区信息。
sudo reboot
不想重启系统的话,可以分别重启需要读取新时区的应用,以便读取新时区。

在 Amazon Linux 上更改时区
https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/set-time.html


给linux添加swap交换文件(即虚拟内存)

1、创建大小为 2G 的交换文件 sudo dd if=/dev/zero of=/swapfile1 bs=1M count=2048

$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=2048
记录了2048+0 的读入
记录了2048+0 的写出
2147483648字节(2.1 GB)已复制,28.712 秒,74.8 MB/秒

2、修改文件的权限,避免其他用户对这个文件进行误操作:
sudo chmod 600 /swapfile1

3、使用mkswap命令来设置交换文件 sudo mkswap /swapfile1

$ sudo mkswap /swapfile1
正在设置交换空间版本 1,大小 = 2097148 KiB
无标签,UUID=93daf665-0941-48e7-88aa-64719358d25b

4、启用交换文件:
sudo swapon /swapfile1

5、写入 /etc/fstab, 以便在系统启动时自动加载交换文件:
/swapfile1 none swap defaults 0 0

$ cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Mon Jan 28 20:51:49 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=f41e390f-835b-4223-a9bb-9b45984ddf8d /                       xfs     defaults        0 0
/swapfile1 none swap defaults 0 0

新添了交换分区并启用它之后,请查看 cat /proc/swapsfreeswapon -s 命令的输出来确保交换分区已被启用了。

$ free -m
              total        used        free      shared  buff/cache   available
Mem:           1836         657          70          24        1108         950
Swap:          2047           0        2047
$ swapon -s
文件名                类型        大小    已用    权限
/swapfile1                                 file    2097148    0    -2

网络配置与解析

修改hostname

在CentOS7中,有三种定义的主机名:静态的(static)、瞬态的(transient)、灵活的(pretty)。
“静态”主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名。
“瞬态”主机名是在系统运行时临时分配的主机名,例如,通过DHCP或mDNS服务器分配。静态主机名和瞬态主机名都遵从作为互联网域名同样的字符限制规则。
而另一方面,“灵活”主机名则允许使用自由形式(包括特殊/空白字符)的主机名,以展示给终端用户。

在CentOS 7中,有个叫 hostnamectl 的命令行工具,它允许你查看或修改与主机名相关的配置。
查看 hostname

$ hostnamectl
   Static hostname: ip-xx-xx-xx-xx.ap-northeast-1.compute.internal
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 05cb8c7b39fe0f70e3ce97e5beab809d
           Boot ID: b683aa01296b48c6b2a1c9d95d0c8319
    Virtualization: xen
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-957.1.3.el7.x86_64
      Architecture: x86-64

同时修改所有三个主机名:静态、瞬态和灵活主机名:
hostnamectl set-hostname centos
一旦修改了静态主机名,/etc/hostname 将被自动更新。
然而 /etc/hosts 不会更新以保存所做的修改,所以手动更新 /etc/hosts,
127.0.0.1 centos.localdomain centos
之后再重启CentOS 7
sudo reboot


防火墙配置

在 ec2 中叫安全组,在Lightsail中位于 “联网-防火墙” 配置项下,都是用于控制哪些IP和端口可以访问服务器的,EC2可以控制到IP,lightsail只能控制端口。
Lightsail防火墙默认阻断了除ssh 22和http 80端口外的所有流量
我目前配置如下:


Lightsail防火墙

域名解析配置

我的 devgou.com 域名解析配置如下


devgou域名解析

A记录表示解析到一个ipv4
主机记录www表示解析 www.example.com 的访问
主机记录@表示解析 example.com 的访问

主机记录www和@,解析到服务器ip,用于博客web页面访问
主机记录api,即新定义了一个子域名 api.devgou.com,解析到服务器ip,用于java spring后台接口
主机记录mysql,即新定义了一个子域名 mysql.devgou.com,解析到服务器ip,用于mysql
主机记录mail解析到ip,配合MX类型主机记录@解析到 mail.devgou.com,用于邮件服务器
主机记录webhooks,即新定义了一个子域名 webhooks.devgou.com,解析到服务器ip,用于git钩子


yum安装git

$ yum list git
已加载插件:priorities, update-motd, upgrade-helper
可安装的软件包
git.x86_64                                                 2.14.5-1.60.amzn1

直接yum安装即可
sudo yum install git
git 需要依赖 perl 等库,会自动安装这些依赖。

ssh连接github

进入 ~/.ssh 目录
确保当前是非 root 用户
ssh-keygen -P '' -f github 生成密钥对, 使用默认加密算法,文件名指定github,得到私钥文件 github,公钥文件 github.pub
登录github页面,添加公钥到github
ssh -T git@github.com 测试连接是否成功

配置 ~/.ssh/config 文件(没有的话自己重建一个),指定不同域名使用不同key

Host github.com *.github.com
    IdentityFile ~/.ssh/github

修改 config 文件权限 sudo chmod 600 config
否则提示 Bad owner or permissions on .ssh/config

注意:
1、执行 ssh-keygen 命令时,不要加 sudo,否则生产的文件拥有者是root,当前账户无法读取密钥文件,会导致 Permission denied (publickey)
2、执行 ssh -T git@github.com 测试连接是否成功时,也不能加 sudo,否则账户不对,读取不到密钥。


git clone Permission denied (publickey)

clone 代码仓库时有个问题,如果不加 sudo 没权限自动创建目录,如果加了 sudo 又读取不到密钥,因为账户不对。
最后只能先创建目录,并把文件拥有者改为当前用户 ec2-user ,然后再指定目录 clone,真麻烦,这问题卡了我2天时间。


私钥文件所有者非当前用户导致Permission denied (publickey)

生产密钥并添加到 GitHub 后还是提示
Permission denied (publickey)

ssh -vT git@github.com 显示 ssh 找不到 私钥文件

最后发现是使用 ssh-keygen 命令生成密钥对时加了 sudo 导致文件拥有者是 root ,当前用户无权限读取密钥文件
修改密钥拥有者为当前用户即可

sudo chown -R ec2-user github github.pub
sudo chgrp -R ec2-user github github.pub

Error: Permission denied (publickey)
https://help.github.com/en/articles/error-permission-denied-publickey


安装docker ce

Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。
参考笔记 Docker

安装 docker repo

安装 yum 仓库管理工具 yum-utils, 以及 device-mapper-persistent-data, lvm2

$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

安装 docker repo

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

安装完可以在 /etc/yum.repos.d/ 中看到 docker-ce.repo 文件
docker-ce.repo 中默认只有 docker-ce-stable 是开启的,即只开启稳定版的repo

yum安装最新版docker

sudo yum install docker-ce docker-ce-cli containerd.io
我安装的版本信息

已安装:
containerd.io.x86_64 0:1.2.10-3.2.el7
docker-ce.x86_64 3:19.03.5-3.el7
docker-ce-cli.x86_64 1:19.03.5-3.el7

作为依赖被安装:
container-selinux.noarch 2:2.107-3.el7

启动docker并验证

启动docker
sudo systemctl start docker
设置开机启动
sudo systemctl enable docker
验证
sudo docker run hello-world
注意必须加sudo,启动ducker需要root权限
此命令将从 dokcerhub 下载一个 hello-world 镜像并启动一个容器
看到如下提示说明安装正确
Hello from Docker!
This message shows that your installation appears to be working correctly.

将当前用户加入docker用户组

默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。
而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。
出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。
因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。
建立 docker 组:
sudo groupadd docker
将当前用户加入 docker 组:
sudo usermod -aG docker $USER
退出linux重新登录,不加 sudo 执行docker
docker run hello-world
成功说明当前用户加入docker用户组没问题。


yum安装 gcc/gcc-c++

如果需要手动编译安装软件,基本都会用到 gcc,如果没有的话执行 ./configure 配置源码时提示找不到gcc:

checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: no acceptable C compiler found in $PATH

使用yum安装gcc和g++:
sudo yum install gcc gcc-c++
注意:不需要单独安装make命令,make工具是系统默认包,是包含在Linux源代码里的,即使最小安装的linux发行版也有make工具。


yum安装java8

安装之前先看下是否自带了java,我装之前没看,没想到系统自带了java 7,导致后来启动spring服务失败,因为我打包是用java 8打的。
如果已安装了java 7,先卸载再安装java 8,当然安装之后再卸载也可以。
检索包含java的列表
yum list java*
可以看到在 aws的默认库 amzn2-core 中已有java

检索1.8的列表
yum list java-1.8*

安装1.8.0的所有文件(必须使用root用户)
sudo yum -y install java-1.8.0-openjdk*

查看 java 版本信息

$ java -version
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)

查看安装目录,先看看java命令的目录:

$ which java
/usr/bin/java
$ ll -h /usr/bin/java
lrwxrwxrwx 1 root root 22 Sep 16 06:13 /usr/bin/java -> /etc/alternatives/java
$ ll -h /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 12月 26 11:00 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre/bin/java

可知安装到了 /etc/alternatives/ 中


yum卸载jdk8

1、查看已安装的 java 版本
yum list installed | grep java

$ yum list installed | grep java
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
java-1.8.0-openjdk.x86_64                   1:1.8.0.232.b09-0.el7_7  @updates
java-1.8.0-openjdk-accessibility.x86_64     1:1.8.0.232.b09-0.el7_7  @updates
java-1.8.0-openjdk-accessibility-debug.x86_64
java-1.8.0-openjdk-debug.x86_64             1:1.8.0.232.b09-0.el7_7  @updates
java-1.8.0-openjdk-demo.x86_64              1:1.8.0.232.b09-0.el7_7  @updates
java-1.8.0-openjdk-demo-debug.x86_64        1:1.8.0.232.b09-0.el7_7  @updates
java-1.8.0-openjdk-devel.x86_64             1:1.8.0.232.b09-0.el7_7  @updates
java-1.8.0-openjdk-devel-debug.x86_64       1:1.8.0.232.b09-0.el7_7  @updates
java-1.8.0-openjdk-headless.x86_64          1:1.8.0.232.b09-0.el7_7  @updates
java-1.8.0-openjdk-headless-debug.x86_64    1:1.8.0.232.b09-0.el7_7  @updates
java-1.8.0-openjdk-javadoc.noarch           1:1.8.0.232.b09-0.el7_7  @updates
java-1.8.0-openjdk-javadoc-debug.noarch     1:1.8.0.232.b09-0.el7_7  @updates
java-1.8.0-openjdk-javadoc-zip.noarch       1:1.8.0.232.b09-0.el7_7  @updates
java-1.8.0-openjdk-javadoc-zip-debug.noarch 1:1.8.0.232.b09-0.el7_7  @updates
java-1.8.0-openjdk-src.x86_64               1:1.8.0.232.b09-0.el7_7  @updates
java-1.8.0-openjdk-src-debug.x86_64         1:1.8.0.232.b09-0.el7_7  @updates
java-atk-wrapper.x86_64                     0.30.4-5.el7             @base
javapackages-tools.noarch                   3.4.1-11.el7             @base
python-javapackages.noarch                  3.4.1-11.el7             @base
tzdata-java.noarch                          2019c-1.el7              @updates

2、卸载 java1.8 同时会卸载maven
yum -y remove java-1.8.0-openjdk*

$ sudo yum -y remove java-1.8.0-openjdk*
已加载插件:fastestmirror
正在解决依赖关系
--> 正在检查事务
---> 软件包 java-1.8.0-openjdk.x86_64.1.1.8.0.232.b09-0.el7_7 将被 删除
--> 正在处理依赖关系 java >= 1.7.0,它被软件包 apache-maven-3.5.2-1.el7.noarch 需要
--> 正在处理依赖关系 java,它被软件包 java-atk-wrapper-0.30.4-5.el7.x86_64 需要
---> 软件包 java-1.8.0-openjdk-accessibility.x86_64.1.1.8.0.232.b09-0.el7_7 将被 删除
---> 软件包 java-1.8.0-openjdk-accessibility-debug.x86_64.1.1.8.0.232.b09-0.el7_7 将被 删除
---> 软件包 java-1.8.0-openjdk-debug.x86_64.1.1.8.0.232.b09-0.el7_7 将被 删除
---> 软件包 java-1.8.0-openjdk-demo.x86_64.1.1.8.0.232.b09-0.el7_7 将被 删除
---> 软件包 java-1.8.0-openjdk-demo-debug.x86_64.1.1.8.0.232.b09-0.el7_7 将被 删除
---> 软件包 java-1.8.0-openjdk-devel.x86_64.1.1.8.0.232.b09-0.el7_7 将被 删除
---> 软件包 java-1.8.0-openjdk-devel-debug.x86_64.1.1.8.0.232.b09-0.el7_7 将被 删除
---> 软件包 java-1.8.0-openjdk-headless.x86_64.1.1.8.0.232.b09-0.el7_7 将被 删除
---> 软件包 java-1.8.0-openjdk-headless-debug.x86_64.1.1.8.0.232.b09-0.el7_7 将被 删除
---> 软件包 java-1.8.0-openjdk-javadoc.noarch.1.1.8.0.232.b09-0.el7_7 将被 删除
---> 软件包 java-1.8.0-openjdk-javadoc-debug.noarch.1.1.8.0.232.b09-0.el7_7 将被 删除
---> 软件包 java-1.8.0-openjdk-javadoc-zip.noarch.1.1.8.0.232.b09-0.el7_7 将被 删除
---> 软件包 java-1.8.0-openjdk-javadoc-zip-debug.noarch.1.1.8.0.232.b09-0.el7_7 将被 删除
---> 软件包 java-1.8.0-openjdk-src.x86_64.1.1.8.0.232.b09-0.el7_7 将被 删除
---> 软件包 java-1.8.0-openjdk-src-debug.x86_64.1.1.8.0.232.b09-0.el7_7 将被 删除
--> 正在检查事务
---> 软件包 apache-maven.noarch.0.3.5.2-1.el7 将被 删除
---> 软件包 java-atk-wrapper.x86_64.0.0.30.4-5.el7 将被 删除
--> 解决依赖关系完成

sdkman 安装 java21 和 maven

参考 SDKMAN


yum安装maven

安装maven yum源

通过 yum-config-manager 安装 maven 源
sudo yum-config-manager --add-repo http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo
或者直接 wget 把repo文件下载到 /etc/yum.repos.d/ 目录中
wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo

yum安装maven最新版

yum install -y apache-maven
查看 maven 版本

$ mvn -version
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T15:58:13+08:00)
Maven home: /usr/share/apache-maven
Java version: 1.8.0_232, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.1.3.el7.x86_64", arch: "amd64", family: "unix"

yum 安装 maven 后会自动设置 MAVEN_HOMEM2_HOME 环境变量, 并将 mvn 命令链接到 /usr/bin/mvn

$ env|egrep 'MAVEN_HOME|M2_HOME'
MAVEN_HOME=/usr/share/apache-maven
M2_HOME=/usr/share/apache-maven
$ ll -h /usr/bin/mvn
lrwxrwxrwx. 1 root root 31 12月 26 11:11 /usr/bin/mvn -> /usr/share/apache-maven/bin/mvn

安装mysql及远程访问

安装mysql

和普通linux下安装mysql大致相同,看mysql官网的文档即可。
或参考笔记 MySQL-Linux安装
root/123456

需要注意的是 linux 版本是 RHEL/CentOS 6.x ,mysql源要安装6.x的,否则安装报错。

Getting Started with MySQL - Installing and Starting MySQL
https://dev.mysql.com/doc/mysql-getting-started/en/#mysql-getting-started-installing

创建可远程访问的mysql账号

创建一个账号,Host为%,即允许所有主机连接,并给账号授权。
然后在命令行中验证可以本地登录mysql

配置防火墙放开3306端口

mysql安装并配置可远程连接的账号后还是会连接失败,报错:

$ mysql -u username -h xx.xx.xx.xx -ppassword;
ERROR 2002 (HY000): Can't connect to MySQL server on 'xx.xx.xx.xx' (36)

因为Lightsail防火墙默认阻断了除ssh 22和http 80端口外的所有流量
编辑防火墙配置,添加允许所有来源的3306端口入站流量

远程连接mysql数据库

之后便可利用aws提供的 公网IP 远程连接mysql访问
可以在Windows或Mac命令行中登录,也可以使用Navicat或DataGrip等图形界面登录

C:\Users\xxx> mysql -u username -h xx.xx.xx.xx -p
Enter password: *******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 39
Server version: 5.6.41 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

通过自定义域名远程连接MySQL数据库

到这里已经可以通过给定的公网IP远程连接mysql,但还是不方便,因为IP记不住,如果自己有域名,可以配个域名解析,更方便。
在自己的DNS提供商处配置自定义域名解析到这个公网IP,这样就可以使用域名远程连接了。
比如在阿里云上,我有个域名 devgou.com, 新加个二级域名: mysql.devgou.com 解析到aws提供的公网IP,然后就可以使用域名访问了。
mysql -u usrname -h mysql.devgou.com -ppasword
注意解析到 IPv4 地址要选择A记录,解析到域名要选CNAME记录。

迁移数据库

把 ec2 mysql 上的数据迁移到 Lightsail mysql中
1、从 ec2 数据库中导出 blog 库到本地文件中,本地执行:

mysqldump -h xx.xx.xx.xx -u username -ppassword --databases blog > ~/blog.bak;

2、在 Lightsail的mysql中创建 blog库,登录lightsail mysql执行

create database blog;

3、导入本地文件到Lightsail mysql中,本地执行:

mysql -h xx.xx.xx.xx -u username -ppassword blog < ~/blog.bak;

注意:
1、导入前必须先创建对应的数据库,否则报错。
2、导入和导出使用的mysql账号必须有对应库的权限以及可远程连接。


搭建邮件服务器(todo)

安装客户端mailx/配置发送代理postfix/安装配置接收代理dovecot

详见笔记 Linux上搭建邮件服务器
RHEL/CentOS 7.x 即使最小安装版也自带 postfix 作为默认的邮件MTA
但需要自行安装 mail 命令和 dovecot

配置防火墙开放25/110/143端口

SMTP(Simple Mail Transfer Protocol) 发送邮件 所使用的标准协议, SSL协议(SMTPS)使用465/994端口, 非SSL协议使用25端口;
IMAP(Internet Message Access Protocol) 接收邮件 使用的标准协议之一, SSL协议(IMAPS)使用993端口, 非SSL协议使用143端口;
POP3(Post Office Protocol 3) 接收邮件 使用的标准协议之一, SSL协议(POP3S)使用995端口, 非SSL协议使用110端口。

邮件服务器的DNS域名解析

一开始我想直接创建MX记录指向我的VPS 公网IP,发现阿里云上没法这么设置,提示MX记录的记录值必须是域名形式。
所以只能是先创建一个子域名A记录,比如 mail.devgou.com 指向 公网IP,然后再创建MX记录指向 mail.devgou.com


邮件服务器DNS配置

yum安装nodejs和npm

Installing Node.js via package manager
https://nodejs.org/en/download/package-manager/

NodeSource Node.js Binary Distributions
https://github.com/nodesource/distributions/blob/master/README.md

使用官方脚本添加NodeSource源

nodejs官方制作了添加node源的在线脚本,直接下载执行就行,不需要再手动添加 epel 和 remi 源了

curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -

安装nodejs

按照安装NodeSource源时输出信息的提示,使用yum来安装nodejs

sudo yum install -y nodejs

安装nodejs时自动会安装npm工具,完成后查看版本验证安装成功:

[centos@centos git]$ node -v
v8.17.0
[centos@centos git]$ npm -v
6.13.4

yum安装nodejs
https://www.jianshu.com/p/695d9cafcd4e


npm安装hexo

然后进入 hexo 目录,依次执行下面命令:
sudo npm install -g hexo-cli,安装hexo最新版
安装目录

/usr/bin/hexo -> /usr/lib/node_modules/hexo-cli/bin/hexo

sudo npm install --unsafe-perm,根据package.json安装依赖,因为.gitignore文件中配置了将node_modules/文件夹忽略,所以之前安装的插件并不会备份到远程Git仓库,但是我们备份了package.json文件,直接使用npm install方法就可以根据dependencies配置安装所有的依赖包。
注:不需要单独安装hexo-deployer-git,已经添加在package.json中,npm install就一起安装了。
安装时遇到问题

npm ERR! code EACCES
npm ERR! syscall scandir
npm ERR! path /root/.npm/_logs
npm ERR! errno -13
npm ERR!
npm ERR! Your cache folder contains root-owned files, due to a bug in
npm ERR! previous versions of npm which has since been addressed.
npm ERR!
npm ERR! To permanently fix this problem, please run:
npm ERR!   sudo chown -R 1000:1000 "/root/.npm"

根据提示执行 sudo chown -R 1000:1000 "/root/.npm"
执行完还是报这个错。
后来升级了 npm 和 node 版本,还是不行,最后 su 到 root 账户安装解决了问题。

注意不需要执行hexo init指令,因为hexo需要的文件目录我们已经有了,如果执行hexo init会将已有文件覆盖掉。


python2升级python3

CentOS 7 自带 Python 2.7.5, 升级为 python 3.7
参考笔记 Python/python2升级python3


上一篇 Hexo博客(27)2019博客重构

下一篇 Spring-Cloud-Netflix-Eureka

阅读
评论
6.5k
阅读预计28分钟
创建日期 2019-12-21
修改日期 2023-12-07
类别

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论