前言
搭建网站过程中遇到经验、技术、流程等问题,在解决后觉得有必要归纳总结下,以方便自己的记忆的同时可以帮助他人,因为我的服务器和域名都是在腾讯云上处理的,所以相关快捷链接我均放置腾讯云的,还望体谅。
须知
搭建网站需要完成如下事项
- 服务器
- 域名
- SSL 证书
- DNS 解析配置
- Git (解决项目存储&拉取)
- Web 服务
- Supervisor 守护进程
服务器(0 ~ 1天)
购买须知
国内的价格均是按照购买时间提供不同的折扣优惠,在 3年以上就打 5折,当然如果有学生证那就是打骨折。
一. 购买服务器
购买域名可以在腾讯云&阿里云进行购买, 服务器购买链接;
建议选择 ubuntu ,另外因为是云服务器所以支持弹性扩容,一般来讲可以买一个标品,后续在升级硬盘容量、带宽、内存、CPU 即可, 我买的 3年价格是 3006。
二. 安装访问服务
购买完成后,自己就会提示您安装哪些服务,选择需要的即可,我这边是自己定制安装的,所以就跳过这。
- 下载 SSH 客户机(用于连接服务器),XSHELL, 如果是家庭和学校使用可以选择免费许可,只需要填写邮箱即可,若企业使用可以下载 PUTTY 或直接用腾讯云后台访问控制台。
- 配置 SSH 密钥(比传统的密码更安全,并且可以免登)相关配置链接,示意图如下所示;
创建完成后,会生成 pem 文件,请妥善保存,随后选择绑定实例服务器即可。 - 访问服务器, 打开对应 XSHELL 软件,创建并且绑定刚才保存的 pem 文件,如下图所示
- 此时双击即可进入该服务器。
三. 相关命令汇总
# 更新相关软件包索引或包列表
sudo apt update
#切换 root, 可以解决许多权限问题
sudo su -
四:在对应腾讯云后台记录相关公网 IP
域名 (15 ~ 40天)
购买须知
- 域名一旦付款注册成功是不能退款,所以一定要选好一个域名;
- 国内都要完成实名认证(除外 .org / .name 除外),要准备自己的身份证和手机号;
- 国内域名都要备案。
一. 购买域名
购买域名可以在腾讯云&阿里云进行购买, 相关:域名购买链接;
在二级域名满意的情况下,尽可能选择 com、cn 、net一级域名, com、net 的域名往往比其他域名要贵,在 2-3倍的情况,例如我买的 puppet-king.com 75一年(不过这只是首年的价格,续购会涨价…)
二. 实名认证&域名备案
备案域名相关问题链接
国内域名都要备案,而备案是按照工作日计算的,不同的省份时间不等,例如江苏是 20个工作日、上海是 10个工作日,没有对应身份证位置可以提供相关居住证明;
完成域名实名认证后,需等待3个自然日(非腾讯云注册的域名需要满3个工作日)后再提交备案申请。
- 需要确认主体,如果是个人需要有效身份证;
- 基础信息校验, 这里需要选择域名和云资源(即服务器,貌似这个时候就要购买一个啦)
- 填写网站相关资料,提交申请
这里需要注意的备案是两步, 1是腾讯云这类的运营商的审查(0 ~ 2天),作用是预检,因为万一到对应省份的管局拒绝了,就要重头在来,不过腾讯云这类检查过了基本上都没有问题,然后会在后面会收到电话和短信,记得查收。
SSL 证书(0 ~ 1天)
证书可以申请免费的,只是根据国家要求只能申请 1年的,需要记得及时更新;
这里的证书是可以申请多个,以配置不同的二级域名的(泛域名需要花钱买),腾讯云可以免费申请 50个。
申请好了会收到邮件通知,这个时候可以登录上述地址访问查看,下载对应证书文件,因为我们是搭建 Nginx 服务,所以选择 Nginx,如图所示
下载后,保存对应 zip 文件,之后在服务器相关在进行配置说明。
DNS 解析配置 (15 ~ 30分钟)
相关地址:DNSPod
添加对应 A类 记录,记录值记得填写 IP地址, 如示例图所示
添加完成后, 0 ~ 30分钟就会生效
特别说明
除了 A类记录, 还有 CNAME 类型,配合 七牛云存储 可以实现 CDN的实现,可以让别人更快捷的访问你的资源;
此外我们还可以配置属于自己的企业邮箱,可以登录腾讯企业邮,绑定自己的域名即可,未实名的可以创建 10个企业邮箱。
Git
相关链接: GitHub
因为都是在本地开发,而传统的 ftp 的上传难免有遗漏和操作繁琐,所以选择使用 git 来解决文件同步问题。
SSH 相关命令
# 安装 git 服务, 记得生成生成 证书
sudo apt install git
# git 证书配置命令
# 配置全局昵称和邮箱
git config --global user.name “自己喜欢的昵称”
git config --global user.email “自己的邮箱”
# 生成公钥、秘钥(填自己的邮箱,执行后需要按几次 enter 直到结束)
ssh-keygen -t rsa -C “自己的邮箱”
# 访问 /root/.ssh 目录
# 修改 config, 确保访问 gitlab、 github 使用对应 ssh
cd /root/.ssh && vim config
# 粘贴如下内容, 这里配置 github
Host github.com
IdentityFile ~/.ssh/github
User git
# 导出 id_ras.pub 公钥, 方便访问 github 后粘贴内容
sz id_ras.pub
服务端常用命令
# 初始化生成 git init 文件
git init
# 克隆项目到本地
git clone 地址
# 拉取远端资源
git pull origin 分支
# 查看最近修改记录
git log -p -2
Supervisor 配置
配置目录: /etc/supervisor/
创建子进程文件,在 conf.d 目录下, 创建 xxx.conf 文件, 示例文件如下
#项目
[program:xxx]
#脚本目录
directory=/home/blog/
#脚本执行命令
command=hexo s
#多进程名称肯定不同,匹配多个
process_name=%(program_name)s_%(process_num)01d
#启动多个进程
numprocs=1
#supervisor启动的时候是否随着同时启动,默认True
autostart=true
#当程序exit的时候,这个program不会自动重启,默认unexpected,设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如
果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的
autorestart=false
#这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了。默认值为1
startsecs=1
#脚本运行的用户身份
user = root
#日志输出
stderr_logfile=/tmp/blog_stderr.log
stdout_logfile=/tmp/blog_stdout.log
#把stderr重定向到stdout,默认 false
redirect_stderr = true
#stdout日志文件大小,默认 50MB
stdout_logfile_maxbytes = 20MB
#stdout日志文件备份数
stdout_logfile_backups = 20
相关命令
# 在每次创建新文件或修改配置后,需要重新加载配置
supervisorctl reload
# 查看当前运行状态
supervisorctl status
# 关闭服务器, 可以使用 all、或指定进程,支持通配符 *
supervisorctl stop
# 开启服务器, 可以使用 all、或指定进程,支持通配符 *
supervisorctl start
特别说明
若出现命令未生效,需要先启动 supervisord 服务, 在使用 supervisorctl;
该进程无法读取环境变量,需要在文件中单独配置,可以新增一行 environment=GOCACHE=“/root/.cache/go-build”,GOPATH=“/home/GoProject”,SMS_ENV_MODE=“release” 这类。
若出现有时候启动不了可以查看对应错误日志,也可以使用 lsof -i:端口号,来看是否因为端口占用
Nginx 配置
配置目录: /etc/nginx/
配置文件修改示例
server {
listen 443 ssl;
server_name 自己的域名;
ssl_certificate cert/自己的证书.pem;
ssl_certificate_key cert/自己的密钥.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:自己的端口号;
}
}
这里需要注意的是,nginx 实现的作用是反向代理,因为一台服务器可能要运行多个服务,所以需要通过 443 端口接受信息转发给 web 服务, 另外相关配置文件均是从 SSL证书 环节 下载下来的,可以使用如下命令导入对应文件
# 导入文件
rz
相关命令
# 开启
service nginx start
# 关闭
service nginx stop
# 重启
service nginx restart
# 平滑加载配置
service nginx reload