三年前购买的阿里云服务器要到期了,2核4G新人首单,三年只需要不到一千元。一看续费价格,我直接告辞。
趁着双十一,想再薅一把羊毛,可惜每一家云服务器的新人首单都只能购买一年的。想了想先试试腾讯云的轻量级云服务器,2核2G,40G的 SSD,300GB/月流量包,系统为Ubuntu22.04LST。
我的主要的用途的有个公网的IP,解析个域名,然后反向代理到自己的物理主机(电信公网,IP会动态改变,不开放80/443等端口)。因为基本上所有的应用都安装在我自己的物理机,所以对配置要求要不高,而且我也没什么特别的用途,因此就买了这个较低的配置。
ufw
ufw默认是安装好的, 但是没启用,允许下22端口,然后启用,然后允许下80和443端扣线
sudo ufw status
sudo ufw allow 22
sudo ufw enable
jdk
一键安装,没什么好说的。
apt-cache search openjdk
sudo apt-get install openjdk-18-jdk
java -version
结果,search后,复制的时候大意了,安装了个jdk18,后面只好卸载了
sudo apt-get purge openjdk*
重装
nginx
一键安装,没什么好说的
apt-cache search nginx
sudo apt install nginx
nginx -v #nginx version: nginx/1.18.0 (Ubuntu)
sudo systemctl enable nginx.service
博客域名这里希望能做一个特殊处理,就是反向代理默认代理我的家庭小主机,然后在家庭小主机关机的时候默认访问服务器上的博客。
类似这样:
upstream blog {
server xuqiudong.us.to:10084;
server localhost:10084 backup;
}
但是我的xuqiudong.us.to域名是ddns,对应的ip是会变化的,而nginx代理的是会缓存ip的,这就很头疼了。
nginx
的resolve解决方案是有的,HTTP 负载平衡|NGINX Plus,但是这属于商业版。
网上也有一些解决方案, 就是加上第三方module,但是需要修改源码,重新编译,我重试了一下,个人觉得比较麻烦,不利于nginx
升级,暂时搁浅。反正在家用主机挂了的时候,还能使用云服务器上的(我在这上面进行单独了部署,数据库也做了从库,会备份小主机上的mysql
).
https://www.nginx.org.cn/plug/detail/349
redis
一键安装,没什么好说的。
apt-search redis-server
# 版本是 6.0.16
apt-cache show redis-server
redis-server -v
打开配置文件sudo vim /etc/redis/redis.conf
, 默认绑定127.0.0.1,开启protected-mode,以及 daemonize
, 我只习惯性的加一个密码,然后重启 sudo service redis restart
sudo vim /etc/redis/redis.conf
sudo service redis restart
#测试下 确实修改成功了
redis-cli
auth password
并且上次记录了安装过程,通过apt安装,非常快。
apt-search mysql-server
sudo apt install mysql-server-8.0
# 看看默认账号和密码
sudo cat /etc/mysql/debian.cnf
# 登录mysql创建root 和授权
create user 'root'@'%' identified by 'password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xxxx';
取消本地地址绑定:
/etc/mysql/mysql.conf.d/mysqld.cnf中注释掉 bind-address = 127.0.0.1
mysql
服务管理:
sudo service mysql status # 查看服务状态
sudo service mysql start # 启动服务
sudo service mysql stop # 停止服务
sudo service mysql restart # 重启服务
三分钟,搞定,,本机成功登陆。
新建个远程账号,远程一测试,居然连不通,telnet也不通,ufw
我也是allow的,为什么不通呢?想到以前阿里云也是有自己的在控制台中另外配置的端口防火墙策略的,登录腾讯云管理,果然,默认给了开了443、80、22、3389、ICMP/ALL,加了个3306瞬间就能访问了。
顺便做一个主从备份,毕竟家里的小主机可能会存在断电的情况
参照我之前的另外一篇文章:新增从库的时候先把数据库和数据导入到腾讯云。
临窗旋墨-mysql8.0 主从备份(ubutu22.04到centos7.9) (xuqiudong.cn)
只迁移一个blog项目,作为备份,默认会反向代理到小主机,只有小主机挂了才会使用腾讯云上的备份的blog项目。
chown
为当前用户,chmod +x springboot.sh
基于letsencrypt 免费的https, 使用acme.sh脚本处理
非root用户进行下列操作的时候先
sudo su
一下,不然后面的一些自动化难以进行
下载安装 curl https://get.acme.sh | sh -s email=xuduochoua@163.com
创建一个acme shell的alias:在 ~/.bashrc
加入一行:alias acme.sh=~/.acme.sh/acme.sh
自动dns
方式生成通配证书,(刚好我的域名供应商阿里云提供 api
自动添加 txt 记录) ,若手动添加的话,则无法自动更新证书,每次都需要手动再次重新解析验证域名所有权
可以把对应的token 添加到环境变量中(注意大小写) vim ~/.bash_profile (设置后记得 source一下) 或者export
export Ali_Key="LTAI5tMpNnGkUaCViw4iVdGV"
export Ali_Secret="5Jhqm7Wh0sHHTgYXZUcVHPnziOjUyY"
生成通配符证书:acme.sh --issue --dns dns_ali -d xuqiudong.cn -d *.xuqiudong.cn --debug
(查看已经生成证书: acme.sh --info -d xuqiudong.cn
)
copy/安装证书到nginx
acme.sh --install-cert -d xuqiudong.cn \
--key-file /etc/nginx/pem/key.pem \
--fullchain-file /etc/nginx/pem/full.pem \
--reloadcmd "service nginx force-reload"
自动更新,已经安装,查看 crontab -l
已存在如下定时器
22 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null