Skip to content

服务器迁移流程

发表于
更新于
字数
阅读量

1、服务器端

1、服务器安全组设置
  入口规则开端口22,443,80,8000-8888。(重要)
2、改主机名:hostnamectl set-hostname swj
3、apt update
4、apt upgrade
5、如内存不足,增加虚拟盘
6、查看架构 uname -p,管理员登录 sudo -i

2、安装 docker

docker ali 源

sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl start docker
docker -v

//注意,arm的cpu,dockerhub上的大部分镜像都是x86_64架构下的,在使用dockerhub等平台的镜像时,一定要注意其架构是否支持aarch64!

docker mirror

//测试mirror有效性  sudo docker pull docker-0.unsee.tech/hello-world
//https://blog.csdn.net/u014390502/article/details/143472743
"https://",
//镜像加速器
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://iro0ypfv.mirror.aliyuncs.com",
    "https://f24b8a86bbc248afa74f4e1a86815585.mirror.swr.myhuaweicloud.com",
    "https://docker.m.daocloud.io",
    "https://dockerpull.cn",
    "https://docker-0.unsee.tech",
    "https://docker.imgdb.de"
  ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

docker-compose

curl -SL https://github.com/docker/compose/releases/download/v2.22.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
 注:直接下载docker-compose二进制文件安装,直接下载后上传/usr/local/bin可更快。https://github.com/docker/compose/releases/download/v2.22.0/docker-compose-linux-x86_64
2、添加可执行权限
chmod +x /usr/local/bin/docker-compose
3、查看版本
docker-compose --version

4、登录ali镜像,以便拉取images
$ docker login --username=indal@126.com registry.cn-shenzhen.aliyuncs.com

5、
docker pull mcr.microsoft.com/dotnet/aspnet:8.0

docker-compose up nginx中,出错后,将目录nginx.conf删除,上传文件
nginx stream模块先不启动

docker-compose.yml

bash
---
version: "3.4"
services:
  nginx:
    image: registry.cn-shenzhen.aliyuncs.com/shuze/nginx:1.26.0
    container_name: base-nginx
    volumes:
      - /root/nginx/nginx.conf:/etc/nginx/nginx.conf
      - /root/nginx/conf:/etc/nginx/conf.d
      - /root/nginx/log:/var/log/nginx
      - /root/nginx/cert:/etc/ssl/certificates
      - /root/nginx/html:/usr/share/nginx/html
    environment:
      - TZ=Asia/Shanghai
    network_mode: host #替代-port
    restart: always
  portainer:
    image: registry.cn-shenzhen.aliyuncs.com/shuze/portainer-ce:2.20.3
    container_name: base-portainer
    ports:
      - "8020:9000"
    volumes:
      - /root/portainer/data:/data
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
    environment:
      - TZ=Asia/Shanghai
  redis:
    image: registry.cn-shenzhen.aliyuncs.com/shuze/redis:7.0
    container_name: base-redis
    ports:
      - "8022:6379"
    command: --requirepass "password"
    volumes:
      - /root/redis/data:/data
      - /root/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - /root/redis/logs:/logs
    restart: always

3、nginx

docker exec -it base-nginx /bin/bash
docker exec base-nginx  nginx -s reload

nginx gzip 开启,在 docker/etc/nginx/nginx.conf 文件中增加

    gzip on;
    gzip_buffers 32 4K;
    gzip_comp_level 6;
    gzip_types application/json text/css text/javascript application/javascript text/xml application/xml application/xml+rss text/plain;
    gzip_min_length 1000;  # 最小压缩长度
    gzip_disable "MSIE [1-6]\."; #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
    gzip_vary on;

nginx stream 模块,解决 redis、postgres 的 tcp 问题

# shuze.net.stream
upstream postgres {
    server 120.79.58.102:8026;
}
upstream redis {
    server 120.79.58.102:8022;
    server 8.134.14.22:8022 down;
}
server {
   listen 8222 ;
  proxy_pass redis;
}
server {
   listen 8226;
   proxy_pass postgres;
}

5、数据库初始化

!!!可以从Navicat Premium 16中直接传输。postgres比mysql对内存要求更小。mysql=>postgres,最终还是采用笨办法,把数据库导为json后再在vs中update-data后,导入json。总的来说比其它方法简单。
update-database
1、authserver
1)生成模块,从中把AUTHSERVER单独取出
abp new Shuze -t module --no-ui --database-provider ef -dbms  MySQL -csf --connection-string Server=shuze.net;Port=3306;Database=ShuzeAuth;User=root;Password=;sslmode=none;CharSet=utf8;AllowUserVariables=True; --version 7.0.0
2)更换为mysql数据库
3)appsettings.json配置,种子设置
4)update-database

2、commonservice
1)
add-migration MysqlToPostgresInitCommon  -c  CommonServiceHttpApiHostMigrationsDbContext
add-migration MysqlToPostgresInitAuth -c AuthServiceHttpApiHostMigrationsDbContext
add-migration MysqlToPostgresInitFileStorage -c FileStorageHttpApiHostMigrationsDbContext
2)
update-database  -Context AuthServiceHttpApiHostMigrationsDbContext
update-database  -Context FileStorageHttpApiHostMigrationsDbContext
update-database  -Context CommonServiceHttpApiHostMigrationsDbContext

dbcontext命令中以查询context

Remove-Migration

EF Core删除迁移的命令是Remove-Migration。一次只删除一个迁移,并且仅删除尚未应用到数据库的最新迁移。如果强行删除已经应用到数据库的迁移,会抛出异常。

删除尚未应用到数据库的最新迁移
直接运行Remove-Migration命令即可。

删除已经应用到数据库的迁移
假设我们已经按顺序应用了Migration1、Migration2和Migration3,想要删除Migration2和Migration3。

首先要撤销迁移对数据库造成的更改。即我们需要回滚Migration2和Migration3的更改,再执行迁移Migraiton1,将数据库的状态和当前需要回滚的模型状态搞成一致。实现方法很简单,想要回滚Migration2和Migration3,我们直接执行Update-Database Migration1即可。因为2和3是在1之后应用的,所以执行该指令可以直接撤销2和3的更改。EF Core还会从__EFMigrationsHistory表中删除2和3的迁移记录。

然后需要删除2和3的Migration代码文件。不应手动删除,应当使用命令Remove-Migration 文件名,即:

Remove-Migration Migration3
Remove-Migration Migration2


3、导入数据菜单数据,设置角色权限

api/CommonService/menu/importDataFromUploadTxt,

api/CommonService/menu/initRoleMenu

4、数据库恢复

5、postgresql
出错:UTC [747271] LOG:  invalid length of startup packet
注意连接字符串为userid


出错:由于目标计算机积极拒绝,无法连接。
要检查网址及端口是否正确,连接字符串是否正确

5、问题及处理

2g 内存不足处理

阿里云,内存不够(2g2m),监控里面系统磁盘 BPS(bit/s)突然飙升并且整个服务器卡死。

1创建名为 swapfile 、大小为 2G 的 swap 文件(执行需要几十秒):
dd  if=/dev/zero  of=/var/swapfile  bs=1024  count=2097152
2用 mkswap 命令建立 swap 分区,并指定 swap 文件是刚才创建好的 /var/swapfile
mkswap /var/swapfile
3 激活 swap 分区, 如果出现提示【不安全的权限 0644,建议使用 0600】,可以忽略,也可以听从建议修改权限。
swapon /var/swapfile
chmod -R 0600 /var/swapfile
4开机自动挂载 swap 分区
echo  "/var/swapfile  swap  swap  defaults  0  0" >>  /etc/fstab
echo "vm.swappiness = 10"  >>  /etc/sysctl.conf
reboot

https://blog.csdn.net/weixin_39334709/article/details/105536380

text
swapoff -v /var/swapfile