教程 - 关于免费白嫖一年 aws ec2 服务器部署自己的站点

本贴最后更新于 525 天前,其中的信息可能已经时移世异

1.前置

摸索 aws 云服务器一段时间了,所以也想写一篇博客介绍一下搭建服务器过程中踩的一些坑,这是我的第一篇博客,以后也会分享自己探索技术的一些实践。废话不多说直接开始。

1.1.免费注册 aws 服务器

aws 目前是可以注册一年免费使用的,在 aws 官网上我们可以看到如下:image.png

点击注册账户即可白嫖。

1.2.实例选择(免费 x64 架构-1gb 内存,10-30g 磁盘空间,超过限制收费)

进入控制台界面,我们先选择区域,切换到你想要的区域:

image.png

点击实例,并创建实例:

image.png

这里创建实例的时候,会让你选择什么操作系统,按自己喜好来,当然 Mac 和 Windows 是收费的,架构推荐 x64,因为大部分软件都是这个架构的,安装起来会很方便。

这里我有一个小 tips 就是如果要创建多个实例的话,可以选择创建一部分 Arm 架构的,因为这个架构提供 2g,2 核的免费配置,性能更好点,如果服务器运行程序更耗性能的话推荐这个, 但是需要注意的是这个有每月 750 免费小时的限制,基本上只能启动一个实例。

image.png

接下来就是创建登录密钥和防火墙规则:

image.png

密钥创建完会在本地生成.pem 文件用来登录 ssh, 安全组第一次选择创建,后续可以复用现有的,安全组一般要勾选允许 ssh,http,https 流量。下面一小节会介绍。

1.3.弹性 ip,ipv6 配置,流量规则限制

创建完成之后,需要绑定弹性 IP,确保实例和分配的 ip 是绑定的,避免重启导致 ip 更新:

点击弹性 ip-> 分配弹性 ip 地址

image.png

分配之后点击关联弹性 ip,并绑定对应的实例即可:

image.png

ipv6 配置,参考该文献即可,可以不配置,如果服务器下载出现问题配置下试试(Assign an IPv6 address to an EC2 instance (dual stack) – 4sysops

流量规则限制:这个可以允许/排除部分流量,非常关键,如果服务器访问或者下载出现问题,大概率是这边没配置好:

image.png

在安全组中选择入站规则并编辑,通常允许所有流量(ipv4/ipv6)即可,出站规则类似,需要注意的是除了这里的实例防火墙,子网防火墙也会影响,子网防火墙需要点实例所属的子网:

image.png

在网络 acl 编辑类似的出站入站规则即可:

image.png

以往配置完成,就可以通过 ssh 登录服务器了:

ssh -i "your/path/to/.pem" username@ip

通过以上命令登录服务器,pem 文件是你创建密钥时的密钥文件,用户名是登录的用户,ip 是共有 dns, 比如:

image.png

以上就是使用 aws 服务器的主要过程了,小伙伴们动手试一试吧,实际可能会有很多坑,结合这个教程摸索。

2.正文(部署个人博客)

我翻看了一些博客系统,最终选择 solo,主要因为是国人研发,很方便,很轻量,很简单,也是开源的(开源万岁!!!)。废话不多说直接开始正文:

官网地址:solo

既然我们选择了 linux 服务器,那最好就是用 docker 部署,原因无它,安装方便,屏蔽了底层操作系统,省去各种安装依赖,这里官网也有教程,感兴趣的去看看。

2.1. 安装 docker

apt install docker.io

下载完后,启动 docker 的 daemon 进程:

service docker start 

拉取 solo 镜像:

docker pull b3log/solo

2.2. 安装 mysql

这里我选择启动另一个实例来安装 mysql,过程和前置知识类似。

启动完实例后,docker 下载 mysql:

docker pull mysql

运行 mysql 镜像:

 docker run -p 3306:3306 --name mysql --restart=always --privileged=true \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
-p 3306:3306:指定宿主机端口与容器端口映射关系
--name mysql:创建的容器名称
--restart=always:总是跟随docker启动
--privileged=true:获取宿主机root权限
-v /usr/local/mysql/log:/var/log/mysql:映射日志目录,宿主机:容器
-v /usr/local/mysql/data:/var/lib/mysql:映射数据目录,宿主机:容器
-v /usr/local/mysql/conf:/etc/mysql:映射配置目录,宿主机:容器
-v /etc/localtime:/etc/localtime:ro:让容器的时钟与宿主机时钟同步,避免时区的问题,ro是read only的意思,就是只读。
-e MYSQL_ROOT_PASSWORD=123456:指定mysql环境变量,root用户的密码为123456
-d mysql:latest:后台运行mysql容器,版本是latest。

启动完容器,进入:

docker exec -it your_container_id bash

登录 mysql:

mysql -uroot -p

密码 123456

创建数据库:

create database solo default character set utf8mb4 collate utf8mb4_general_ci;
create user 'root'@'your_blog_instance_ip' identified by '123456';
grant all privileges on *.* to 'root'@'your_blog_instance_ip';
flush privileges;

需要注意的是,IP 地址应该是博客系统所在实例的 ip,因为服务所在实例不同,所以需要在 mysql 创建该博客对应的账户,以便博客系统启动的时候访问 mysql 并创建表。

2.3. docker 启动该博客系统

我们可以在第一个创建的实例上运行博客系统:

docker run --detach --name solo --network=host \
    --env RUNTIME_DB="MYSQL" \
    --env JDBC_USERNAME="root" \
    --env JDBC_PASSWORD="123456" \
    --env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
    --env JDBC_URL="jdbc:mysql://your_mysql_instance_ip:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true" \
    b3log/solo --listen_port=8080 --server_scheme=http --server_host=localhost --server_port=

需要注意的是 jdbc url 对应的 ip 是 mysql 所在的实例 ip,启动的时侯如果不指定端口,默认使用 8080,注意端口占用问题。

3.总结

现学现用哈,这个博客也是自己实际操作搭建起来的,因为是 aws 免费服务器,所以支持并发访问量极低,如果卡顿,不用猜一定是被人挤爆了,所以见谅,后续我会同步博客内容到其他技术平台,这个博客系统就当是自己的秘密小站吧。

我的 GitHub:peterhpc123 (github.com)

  • AWS
    11 引用 • 28 回帖
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    493 引用 • 918 回帖
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    691 引用 • 535 回帖
1 操作
peterh 在 2023-06-27 23:40:05 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...