云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

从零开始:Code-Push-Server私有化部署

jxf315 2025-01-11 14:04:52 教程文章 34 ℃

什么是 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直接可执行文件,希望留言,不吝赐教 : )

最近发表
标签列表