如何自动化部署项目?折腾服务器之旅~
本篇文章讲的不是如何把一个项目部署上线,而是如何自动化上线。
开发了一个需求管理和发布系统。
通过这个系统,可以创建需求、创建发布计划、创建分支、部署到测试环境、部署到生产环境、正式上线、合并代码等。
一、功能设计
9.9元的阿里云服务器真的很慢,但还是足够折腾完这个项目。 用3个目录来模拟不同的环境。
目录存放project存放所有的项目,比如本系统的前后端代码。pre-dir预发环境,当然是用来测试的。pro-dir生产环境,测试没问题,部署上线。一图胜千言。
二、系统页面
我的任务
接到一个新的需求,可以新建一个需求,并创建开发分支。
发布队列
开发结束之后,便可以到发布队列中,部署到预发环境进行测试。 测试通过指定Cookie 就可以访问到测试的代码。最终再进行线上部署。
项目信息
二、技术栈
前端技术栈
Vue + elementUI,具体代码在Github,感兴趣的可以看下并点个star哈~✨
服务端技术栈
非常常见的Node.js(Koa2) + Mysql + Redis + Pm2。 具体代码在Github,感兴趣的可以看下并点个star哈~✨
三、Redis和Session配置
// utils/Store.jsconst Redis = require("ioredis");const { Store } = require("koa-session2"); class RedisStore extends Store { constructor() { super(); this.redis = new Redis(); } async get(sid, ctx) { let data = await this.redis.get(`SESSION:${sid}`); return JSON.parse(data); } async set(session, { sid = this.getID(24), maxAge = 1000 * 60 * 60 } = {}, ctx) { try { console.log(`SESSION:${sid}`); // Use redis set EX to automatically drop expired sessions await this.redis.set(`SESSION:${sid}`, JSON.stringify(session), 'EX', maxAge / 1000); } catch (e) {} return sid; } async destroy(sid, ctx) { return await this.redis.del(`SESSION:${sid}`); }} module.exports = RedisStore;复制代码// 入口文件const session = require("koa-session2");const Store = require("./utils/Store.js");// session配置app.use(session({ store: new Store(), key: "SESSIONID