[腾讯云][阿里云]网站迁移小结

前几天腾讯云的客服打电话过来,告知网站内容不符合个人备案的要求,不能出现外部链接,给了一周的整改时间。个人不太想修改之前的内容,所以购买了阿里云的香港服务器,重新部署网站,小结网站迁移的过程

内容列表

  1. 之前网站架构概述
  2. 迁移网站架构介绍
  3. 源码管理
  4. Nginx部署

之前网站架构概述

  • 域名/解析:阿里云
  • 服务器:腾讯云

在阿里云上申请了域名和解析,将静态文件部署到腾讯云上。之前网址:https://www.zhujian.tech

迁移网站架构介绍

  • 域名/解析
    • 实现一:阿里云
    • 实现二:Namesilo/DNSPod
  • 转发服务器:腾讯云
  • 部署服务器:阿里云(香港)

Namesilo上申请了新的域名,在DNSPod上解析到香港服务器:https://blog.zhujian.life

之前的网址进行反向代理;同时新设置了一个二级域名,解析到阿里云服务器上:https://blog.zhujian.tech

参考:

[namesilo][dnspod]域名申请和解析

[阿里云][域名解析]URL转发

源码管理

  1. 对于源码而言,其托管到三个远程服务器:Gitlab(本地)、Githubaliyun code
  2. 对于编译文件而言,其托管到两个远程服务器:香港服务器和aliyun code

使用Docker Jenkins进行自动化操作,,其传送编译文件到Github和香港服务器很困难,所以实现如下:

  1. 在本地发送源代码到Gitlab(本地)、Githubaliyun code
  2. Gitlab触发Jenkins进行编译,发送编译文件到aliyun code;另外新建一个仓库,加入一个test文件(内容自定),推送到腾讯云服务器
  3. 在腾讯云服务器仓库中,通过hooks文件post-receive将新的推送消息发送给阿里云服务器
  4. 在阿里云服务器仓库中,通过hooks文件post-receive下载aliyun code仓库的编译文件,进行工作目录和裸仓库分离

就是因为卡,所以通过腾讯云服务器到推送消息发送到阿里云香港服务器;并利用aliyun code进行编译文件的传送

因为服务器在香港,所以通过travis-ci的方式进行编译构建可能会更简单

参考:

创建裸仓库

工作目录和裸仓库分离

远程分支替换本地分支

自建服务器

在腾讯云和阿里云服务器中,创建用户git,创建仓库地址/data/repositories/blogs.git,创建工作目录地址/data/workspace/blogs

腾讯云post-receive文件实现如下:

1
2
3
4
5
6
#!/bin/sh

git config --global user.name "xxx"
git config --global user.email "xxx@xxx.com"

git push --force git@blog.zhujian.life:/data/repositories/blogs.git master

阿里云post-receive文件实现如下:

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

git --work-tree=/data/workspace/blogs --git-dir=/data/repositories/blogs.git remote add origin git@code.aliyun.com:zjZSTU/blog.zhujian.life.git

git --work-tree=/data/workspace/blogs --git-dir=/data/repositories/blogs.git fetch origin master

git --work-tree=/data/workspace/blogs --git-dir=/data/repositories/blogs.git checkout -f

git --work-tree=/data/workspace/blogs --git-dir=/data/repositories/blogs.git reset --hard origin/master

git --work-tree=/data/workspace/blogs --git-dir=/data/repositories/blogs.git remote remove origin

注意 1:在云服务器上的操作均是在git用户下实现,需要额外配置/etc/sudoers,保证git用户能够在data路径下操作

1
2
3
4
5
...
# User privilege specification
root ALL=(ALL:ALL) ALL
git ALL=(ALL:ALL) ALL
...

注意 2:需要配置.ssh/config,防止上传时需要人工确认

1
2
3
4
5
6
$ cat config 
Host blog.zhujian.life
StrictHostKeyChecking no
$ cat config
Host code.aliyun.com
StrictHostKeyChecking no

Nginx部署

使用Docker Nginx进行网站转发和部署

参考:

托管网站

docker安装nginx

[译]NGINX Reverse Proxy

同时需要注意ssl证书的配置

参考:

[阿里云]配置HTTPs

[腾讯云]配置HTTPs

腾讯云上的Nginx配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ cat proxy.conf 
server {
listen 9980;
server_name zhujian.tech www.zhujian.tech;

charset utf-8;

ssl on;
ssl_certificate cert/a.pem;
ssl_certificate_key cert/a.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # 阿里云和腾讯云会有差别
ssl_prefer_server_ciphers on;


location / {
proxy_buffering on;
proxy_buffers 128 8k;
proxy_buffer_size 8k;
proxy_pass https://blog.zhujian.life/;
}
}

阿里云上的配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
server {
#SSL 访问端口号为 443
listen 443 ssl;
#填写绑定证书的域名
server_name blog.zhujian.life;

charset utf-8;

#证书文件名称
ssl_certificate /etc/nginx/conf/1_blog.zhujian.life_bundle.crt;
#私钥文件名称
ssl_certificate_key /etc/nginx/conf/2_blog.zhujian.life.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;

location / {
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
#root /var/www/www.domain.com;
root /opt/www;
index index.html index.htm;
}

error_page 404 /404.html;
}
server {
listen 80;
#填写绑定证书的域名
server_name blog.zhujian.life;
#把http的域名请求转成https
return 301 https://$host$request_uri;
}
坚持原创技术分享,您的支持将鼓励我继续创作!