你知道这个博客是怎么搭的吗?!
首先声明,这是博客搭建的一小部分,且本人小菜鸡,本文就纯纯写写玩玩,难免漏洞百出🙂
配置Nginx
web服务器软件,可以让别人通过网址访问服务器上的网站、接口、文件。nginx轻量,占有内存少,并发能力强,在负载均衡和反向代理领域表现出众,处理静态资源也更👍
理解反向代理与负载均衡
与正向代理(梯子)相反——代理客户端的,隐藏了客户端;反向代理是代理服务端的,隐藏了服务端。通俗讲就是,访问一个网站时,请求并没有直接打到真正的业务服务器上,而是先到了一台中间服务器。 我们能感受到的:一个域名承载整个网站的所有服务、网站高并发下依然流畅、隐藏了内部架构,提升安全性(做 HTTPS 证书管理,后端内部用 HTTP 通信简单高效)等
负载均衡是把访问流量分摊到多台服务器上,我暂时用不上
具体配置
针对我这个博客,先不管主配置/etc/nginx/nginx.conf,因为它有include /etc/nginx/sites-enabled/*;所以主要是修改它的子配置
在sites-available下增加了blog和gitea两个配置文件,gitea配的是反向代理,虽然这样意义不大(可以有完全自己的代码托管,包括cicd绑定的也完全是自己域名下的仓库,但我服务器性能不行,现在把它停掉了,用的是gitea官方的托管)但也算是把学的知识运用一下,理解了一下反向代理
server { listen 80; server_name git.marvinhers.site; # 把gitea服务暴露出来 location / { proxy_pass http://127.0.0.1:3000; # 转发的后端服务地址 proxy_set_header Host $host; # 客户端访问的真实域名 proxy_set_header X-Real-IP $remote_addr; # 真实客户IP } }实现负载均衡示例
server{ listen 80; server_name marvinhers.site;
location / { proxy_pass http://backend_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}upstream backend_servers{ server 192.168.1.12:8080 weight=3; # 服务器内网地址 server 192.168.1.11:8080 weight=1;}因为我们当下只是在/etc/nginx/sites-available下创的文件,而实际生效是在sites-enabled/,上线服务就软链接一下👍
# 软链接启用配置ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/# 测试配置无误nginx -tnginx -s reload负载均衡可参考 Nginx 服务器安装及配置文件详解 | 菜鸟教程
先用certbot简单配一下吧,以后使用泛域名证书再改用acme.sh
certbot --nginx -d marvinhers.site -d git.marvinhers.site# 验证你对域名的所有权 签发免费的 SSL/TLS 证书 修改 Nginx 配置,让网站支持 HTTPS 设置证书自动续期,避免过期。预留一下
acme.sh,然后还有很多知识如 DDNS VPN 内网穿透 Cloudflare Tunnel 虚拟组网 还没学
在Gitea上实现CICD
其实我在怀疑有没有必要,GithubActions肯定更简单,gitea虽然轻量但要自己装runner。就像Gemini说的 “技术是用来服务生活的,不是用来折腾自己的。”
开启actions功能
服务器里我是以docker形式部署的gitea
docker exec -it gitea bashvim /data/gitea/conf/app.ini# 添加以下然后退出容器# [actions]# ENABLED=truedocker restart gitea开启act runner(与服务器绑定)
Act Runner是一个独立的小程序,它从 Gitea 那里领任务(比如“有人推送代码了,去执行 .gitea/workflows/deploy.yml 文件里的命令”),然后在服务器上执行这些命令。 推荐是在docker里运行的,这里建议看官方文档是如何注册运行的。
# 这里展示一下 /root/runner/docker-compose.yml# 关于令牌,建议参考官方文档services: runner: image: gitea/act_runner:nightly environment: CONFIG_FILE: /config.yaml GITEA_INSTANCE_URL: "https://gitea.com" GITEA_RUNNER_REGISTRATION_TOKEN: "{Token}" GITEA_RUNNER_NAME: "marvin-runner" GITEA_RUNNER_LABELS: "ubuntu-latest,self-hosted" volumes: # 实现 服务器 和 Act Runner容器 之间的文件互通 - ./config.yaml:/config.yaml - ./data:/data - /var/run/docker.sock:/var/run/docker.sock - /var/www/blog:/var/www/blog令牌(Token)是一个注册认证,绑定runner到你的Gitea实例,连接gitea服务器,有不同级别,可复用,可重置。在仓库页面可获取仓库级别token。
然后 docker compose up -d docker compose logs -f 看到Runner registered successfully代表这个runner和gitea仓库对上了。
终于workflows(与服务器绑定+1)
具体deploy.yml长啥样不展示了,这里讲一下我踩的坑。 因为服务器性能无比一般,所以构建博客都十分耗内存,采用
on: push: branches: [ master ] paths: - 'dist/**' # 只在 dist 目录下的文件发生变化时触发是的,这要求每次都先在本地pnpm run build构建后再git提交,虽然这某种程度违背了cicd…但也避免了OOM,是服务器性能拉的无奈之举
同步到服务器
- name: 同步到服务器 uses: appleboy/scp-action@master with: host: ${{ secrets.SERVER_IP }} username: ${{ secrets.SERVER_USER }} port: ${{ secrets.SERVER_PORT }} key: ${{ secrets.SERVER_SSH_KEY }} source: "dist/" target: "/var/www/blog/" overwrite: true strip_components: 1secrets.SERVER_SSH_KEY来自服务器上的生成密钥
cd ~/.sshssh-keygen -t rsa -f id_rsa -N ""cat id_rsa.pub >> authorized_keyschmod 600 authorized_keyschmod 700 ~/.ssh支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!