去年此时,用了三年的两台华为云主机到期了,再续费成本已是天价。原本准备搬迁到成本更低的云服务厂商,结果发现自己实在懒得搬迁 nginx,gogs 等一堆的服务,最后降主机数量,降配置,降带宽续了1年,现在马上又要到期了,此时手里已经有了腾讯云的3年便宜云主机,必须要搬迁了。
不想再跟以前一样一个个的去搭建各种服务,于是尝试容器化部署。对 docker 实在还是不熟悉,前后折腾了快一天,才算勉强在容器上跑起了 nginx 和 gogs。其实自己挺愿意探索技术,写点心得什么的,只是这几年经济形势不好,公司组织结构调整,部门转型做产品,早已没有了往日的那份清闲,终日卷的要死,我的心中一直很矛盾,一方面恨不得马上退休享受生活,另一方面又暗暗盼望着哪怕这样卷着,自己也能一直在公司里狗下去,毕竟就算不再升级,当前的收入也是让人安心的。只是未来太多不确定性,我找不到平衡点,难以做决定,未来总是在迷雾中,向前的每一步都是摸索,只有回头时才会发现当年的自己有多么幼稚和愚蠢,然后周而复始……
# 服务搬迁:- 从原来的主机服务迁移到容器化部署
- 迁移 Nginx(含证书)
- 迁移 GOGS
- 迁移相关定时任务和脚本
迁移 Nginx
启动 Nginx 服务
1 | docker run -d -p 80:80 -p 443:443 --name nginx --add-host host.docker.internal:host-gateway --network ice-network --network-alias nginx -v /root/opt/nginx/html:/usr/share/nginx/html -v /root/opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/opt/nginx/logs:/var/log/nginx -v /root/opt/nginx/cert:/data/cert nginx |
- –add-host :使容器可以访问本地的服务
- –network:使容器间共享网络,可以彼此访问
- -v:将配置文件、内容、日志、证书目录映射到本地
证书之前用的是 certbot 的免费证书,每3个月更新一次,有点麻烦,刚才迁移服务时才发现腾讯云提供免费的证书,每年更新即可。
Nginx 中的配置
可以直接使用 –network-alias gogs 中的别名,注意后面的端口号是容器内的端口号
可以使用 host.docker.internal 访问宿主机上的服务
upstream gitserver {
server gogs:3000;
}
upstream grafana {
server host.docker.internal:2999;
}
配置 SSL 访问和证书、秘钥路劲
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name welooking.cn;
#rewrite ^(.*)$ https://$host$1 permanent;
if ($server_port = 80) {
rewrite ^(.*)$ https://$host$1 permanent;
}
root /usr/share/nginx/html/blog;
ssl_certificate "/data/cert/welooking.cn_bundle.crt";
ssl_certificate_key "/data/cert/welooking.cn.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
迁移 Gogs
1 | docker run -d --name=gogs --network ice-network --network-alias gogs -p 10022:22 -p 10300:3000 -v /root/opt/gogs:/data gogs/gogs |
- –network:使容器间共享网络,可以彼此访问
- –network-alias:指定别名,以便在容器中使用
- -v:将数据目录映射到本地
Git Repo 的配置
1 | 将原本华为云主机上的 git repo 目录拷贝到腾讯云后,会出现无法 git pull 的问题 |
处理方案:
- 执行 git config pull.rebase false
- 修改 .git/config 文件,修改其中的 url,注意这里是 https
1 | [remote "origin"] |
让人抓狂的问题:不管怎么尝试,死活无法push,在gogs页面上也不能上传文件,编辑或者新建都失败……
网上搜了半天都是说什么权限问题,可以强制提交什么,都是扯淡……
1 | git credential-'cache store: -c: line 0: unexpected EOF while looking for matching `'' |
主要原因就是在于 gogs 有一大堆默认的 hook 要执行,这些 hook 跟之前安装的 gogs 路径有关,需要做重置操作。
1 | 控制面板-> 管理员操作-> 重新同步所有仓库的钩子 |
PS:8天的春节假期一闪而过,明早又要上班了,可我还想,再放……500天……