1.前置
摸索 aws 云服务器一段时间了,所以也想写一篇博客介绍一下搭建服务器过程中踩的一些坑,这是我的第一篇博客,以后也会分享自己探索技术的一些实践。废话不多说直接开始。
1.1.免费注册 aws 服务器
aws 目前是可以注册一年免费使用的,在 aws 官网上我们可以看到如下:
点击注册账户即可白嫖。
1.2.实例选择(免费 x64 架构-1gb 内存,10-30g 磁盘空间,超过限制收费)
进入控制台界面,我们先选择区域,切换到你想要的区域:
点击实例,并创建实例:
这里创建实例的时候,会让你选择什么操作系统,按自己喜好来,当然 Mac 和 Windows 是收费的,架构推荐 x64,因为大部分软件都是这个架构的,安装起来会很方便。
这里我有一个小 tips 就是如果要创建多个实例的话,可以选择创建一部分 Arm 架构的,因为这个架构提供 2g,2 核的免费配置,性能更好点,如果服务器运行程序更耗性能的话推荐这个, 但是需要注意的是这个有每月 750 免费小时的限制,基本上只能启动一个实例。
接下来就是创建登录密钥和防火墙规则:
密钥创建完会在本地生成.pem 文件用来登录 ssh, 安全组第一次选择创建,后续可以复用现有的,安全组一般要勾选允许 ssh,http,https 流量。下面一小节会介绍。
1.3.弹性 ip,ipv6 配置,流量规则限制
创建完成之后,需要绑定弹性 IP,确保实例和分配的 ip 是绑定的,避免重启导致 ip 更新:
点击弹性 ip-> 分配弹性 ip 地址
分配之后点击关联弹性 ip,并绑定对应的实例即可:
ipv6 配置,参考该文献即可,可以不配置,如果服务器下载出现问题配置下试试(Assign an IPv6 address to an EC2 instance (dual stack) – 4sysops)
流量规则限制:这个可以允许/排除部分流量,非常关键,如果服务器访问或者下载出现问题,大概率是这边没配置好:
在安全组中选择入站规则并编辑,通常允许所有流量(ipv4/ipv6)即可,出站规则类似,需要注意的是除了这里的实例防火墙,子网防火墙也会影响,子网防火墙需要点实例所属的子网:
在网络 acl 编辑类似的出站入站规则即可:
以往配置完成,就可以通过 ssh 登录服务器了:
ssh -i "your/path/to/.pem" username@ip
通过以上命令登录服务器,pem 文件是你创建密钥时的密钥文件,用户名是登录的用户,ip 是共有 dns, 比如:
以上就是使用 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)
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于