网站首页 > 教程文章 正文
什么是 CodePush?相信你在打开这篇文章之前,已经对它有所了解,所以这里就不再赘述。今天,我们将带你一步一步地,从零开始,详细介绍如何部署 Code-Push Server,帮助你实现私有化的热更新服务。
本文部署环境以及物料
操作系统:Linux 64
数据库:mysql-8.0.40
缓存:redis-7.0.11
源码版本控制:git
运行环境:node21
文件存储:oss
安装mysql
1、从 MySQL 官方下载页面 (https://dev.mysql.com/downloads)获取对应版本,下载完成后,你将得到名为 mysql-8.0.40-linux-glibc2.28-x86_64.tar.xz 的压缩包。假设下载目录为 /opt/soft,目标安装目录为/usr/local/mysql,你可以进入该目录并解压文件。具体操作如下:
cd /opt/soft
tar -xJf mysql-8.0.40-linux-glibc2.28-x86_64.tar.xz
mv /opt/soft/mysql-8.0.40-linux-glibc2.28-x86_64 /usr/local/mysql
2、添加系统mysql组和mysql用户,并更改权限。
groupadd mysql
useradd -r -g mysql mysql
3、新建一个文件夹/usr/local/data/mysql,并授权,用于存放持久化数据。
mkdir /usr/local/data/mysql
chown mysql:mysql -R /usr/local/data/mysql
4、配置my.cnf文件,这个文件在这个路径(没有研究源码,我想改个路径,死活报错,先这么着吧),/etc/my.cnf,如果没有这个文件需要手动创建。
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/usr/local/data/mysql
log-error=/usr/local/data/mysql/mysql.log
pid-file=/usr/local/data/mysql/mysql.pid
socket=/tmp/mysql.sock
#character config
# 允许最大连接数
max_connections=200
# 服务端使用的默认字符集
character-set-server=utf8mb4
# 创建新表时将使?的默认存储引擎
default-storage-engine=INNODB
# 表名和列名都会强制转换为小写
lower_case_table_names=1
# 服务器允许的最大数据包大小
max_allowed_packet=16M
# 禁用符号链接
symbolic-links=0
# binglog配置
server-id=1
log-bin=mysql-bin
log_bin_index=binlog.index
binlog_format=ROW
# binlog过期清理时间;
binlog_expire_logs_seconds=259200
# binlog每个日志文件大小;
max_binlog_size=1024m
# binlog缓存大小;
binlog_cache_size=128m
# 最大binlog缓存大小。
max_binlog_cache_size=1024m
5、初始化mysql,需要保持/usr/local/data/mysql为空
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize
6、配置自启动服务
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
7、配置全局环境变量,编辑 /etc/profile 文件,在最后添加下面文字。
export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
8、刷新配置,使之立即生效
source /etc/profile
9、启动mysql服务
service mysqld start
# 开机启动
chkconfig mysqld on
PS:如果你是在root用户下,执行安装步骤,一定要注意目录的权限。因为root用户下安装,初始化生成的文件的权限还是属于root用户,这时候启动有可能报错。只要查看报错的提示,重新给文件授权到mysql用户就可以了。例如:chown mysql:mysql -R /usr/local/data/mysql
chmod -R 755 /usr/local/data/mysql
10、登录mysql,修改密码,并设置root用户远程登录(不建议这么做,我是图方便,你可以新建用户)
# 查看密码
sudo cat /usr/local/data/mysql/mysql.log | grep password
#登录
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
mysql>use mysql
mysql>update user set host='%' where user='root' limit 1;
mysql>flush privileges;
mysql>exit
11、添加test用户,并给它授权codepush数据库的全部权限(如果你直接用root用户,这步可以略)
create user 'test'@'%' identified by '123456';
grant all privileges on codepush.* to 'test'@'%';
flush privileges;
到此,mysql已经安装完毕。
安装redis
1、从 http://download.redis.io/releases/ 找到你需要的版本,我选择的是redis-7.0.11.tar.gz。假设下载目录为 /opt/soft,解压下载好的redis压缩包。
cd /opt/soft
tar -zxvf redis-7.0.11.tar.gz
2、安装redis依赖
sudo yum install -y gcc gcc-c++ make
3、进入redis安装包解压后的目录,编译并安装到指定目录
cd /opt/soft/redis-7.0.11
make PREFIX=/usr/local/redis install
4、配置文件,拷贝redis.conf到安装目录下,并新建持久化目录
cp redis.conf /usr/local/redis/bin/
mkdir -p /usr/local/redis/data
5、修改配置文件/usr/local/redis/bin/redis.conf,内容如下
#开启保护
protected-mode yes
#开启远程连接
bind 0.0.0.0
#自定义密码
requirepass 123456
port 6379
timeout 0
# 900s内至少一次写操作则执行bgsave进行RDB持久化
save 900 1
save 300 10
save 60 10000
# 后台运行
daemonize yes
rdbcompression yes
# 持久化文件名
dbfilename dump.rdb
# 持久化目录
dir /usr/local/redis/data
appendonly yes
appendfsync everysec
6、创建启动文件
# 进入该目录
cd /etc/rc.d/init.d
# 新建文件
vim redis
#!/bin/sh
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/usr/local/redis/bin/redis.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -a "123456" -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
7、启动、停止redis
# 修改权限
chmod 755 /etc/init.d/redis
# 进入目录
cd /etc/rc.d/init.d
# 启动
./redis start
# 停止
./redis stop
8、配置开机自启动
# 进入目录
cd /etc/rc.d/init.d
# 设置reids自启动
chkconfig redis on
# 或者执行
systemctl enable redis
9、启动服务
service redis start
到此,redis已经安装完毕。
通过源代码直接部署codepush-server
1、下载源码到指定目录 /opt/web/codepush,由于主分支更新比较慢,我自己魔改了一些配置,方便发布不同的环境。
cd /opt/web
git clone https://gitee.com/cly2012/code-push-server-ts.git
mv /opt/web/code-push-server-ts /opt/web/codepush
2、添加不同环境的配置文件,默认是dev环境。
cd /opt/web/codepush
vim .env.dev
NODE_ENV=dev
COMPOSE_PROJECT_NAME=code-push-server
RDS_HOST="127.0.0.1"
RDS_PORT="3306"
RDS_USERNAME="root"
RDS_DATABASE="codepush"
RDS_PASSWORD="123456"
REDIS_HOST="127.0.0.1"
REDIS_PORT="6379"
REDIS_PASSWORD="123456"
REDIS_DB="1"
OSS_ACCESS_KEY_ID=""
OSS_SECRET_ACCESS_KEY=""
OSS_ENDPOINT="https://你的oss 端点"
OSS_BUCKET_NAME="你的oss bucket"
OSS_PREFIX="codepush/dev"
OSS_DOWNLOAD_URL="https://你的oss绑定的域名/codepush/dev"
STORAGE_TYPE="支持不同的存储方式,这里填oss,如果是本地文件形式,这里填local"
DATA_DIR="STORAGE_TYPE=local时,这个配置才生效,为本地文件目录"
TOKEN_SECRET="自定义加密串"
3、编译源码
cd /opt/web/codepush
npm install
npm build
4、初始化数据库并启动
cd /opt/web/codepush
# 初始化数据库
node ./bin/db.js init
# 直接运行
node --env-file=.env.dev ./bin/www.js
5、配置自启动
cd /usr/lib/systemd/system
vim codepush.service
[Unit]
Description=codepush
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/node-v21.7.3-linux-x64/bin/node --env-file=.env.dev ./bin/www.js
ExecStop=/bin/kill -s QUIT $MAINPID
WorkingDirectory=/opt/web/codepush
StandardOutput=file:/opt/web/codepush/logs/info.log
StandardError=file:/opt/web/codepush/logs/error.log
[Install]
WantedBy=multi-user.target
# 重新加载配置文件
sudo systemctl daemon-reload
# 启用
sudo systemctl enable codepush.service
# 启动
sudo systemctl start codepush.service
到此,codepush-server已经部署完毕。游览器打开 http://你部署服务器的ip:3000,默认登录账号admin,密码123456
总结
其实部署过程总体很顺利,本来打算使用 pkg 进行打包,可能pkg版本太低了且停更了的原因,但尝试了几次后发现有些文件无法打包进来,导致应用无法正常运行。于是我决定将源代码复制到服务器上进行打包,虽然这样看起来不够专业,但考虑到时间有限,最终还是成功部署起来了。现在只需要绑定域名,就可以正常使用了。等后续有空了再研究。如果屏幕前的您知道怎么打包源码<nodejs环境>成linux直接可执行文件,希望留言,不吝赐教 : )
猜你喜欢
- 2025-01-11 免费零代码平台一键Docker云安装,快速搭建应用
- 2025-01-11 Linux 下安装最新版 MySQL
- 2025-01-11 超详细的linux部署mysql5.7实战
- 2025-01-11 Mysql 使用中常见的错误
- 2025-01-11 【Docker】部署Jira&Confluence
- 2025-01-11 Mysql:下载、安装、部署、修改密码步骤
- 2025-01-11 修改编码格式MySQL
- 2025-01-11 erpnext V15安装
- 2025-01-11 MySQL常见错误处理方法
- 2025-01-11 MySQL5.7升级到8.0过程详解
- 最近发表
-
- 一个可以用来练手的C++开源编译器!
- Linux开发工具使用指南(linux软件开发工具)
- Linux下Makefile文件的模式规则和自动化变量
- 程序员的副业秘籍!一款可以快速搭建各类系统的后台管理系统
- postgresql自定义函数实现,通过contrib模块进行扩展
- Linux GCC编译及Makefile使用(gcc makefile编写)
- wordpress独立站上线两周没收录?原来是robots.txt搞的鬼…
- make sure用法解析(make sure sth)
- 每天一个 Python 库:Django全能Web框架,一站式后台开发
- Makefile实践(makefile经典教程)
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)