由于服务器快到期了,之前服务器一直在深圳决定搬到离家近的成都。先建立了个按量付费的成都服务器测试下ping延迟, ping深圳服务器是36ms ping成都服务器延迟是7ms 所以差距还是挺大的。
由于之前服务器是centos stream 现在决定换成ubuntu了,那只好从0开始部署。
一、设置虚拟内存
服务器只有2G物理内存,那么首先增加虚拟内存
先创建一个目录
mkdir -p /mnt/data/mem
创建一个4G的文件
fallocate -l 64G /mnt/data/mem/swapfile
如果fallocate不可用,也可使用dd命令
dd if=/dev/zero of=/mnt/data/mem/swapfile bs=1G count=4
设置权限
chmod 600 /mnt/data/mem/swapfile
将文件格式化为swap空间
mkswap /mnt/data/mem/swapfile
启用swap文件
swapon /mnt/data/mem/swapfile
验证swap是否可用
swapon --show
为了重启后仍然保留这个swap 还需要编辑/etc/fstab
在文件末尾增加
/mnt/data/mem/swapfile none swap sw 0 0
但深圳centos我是配置的
/home/swapfile swap swap default 0 0
然后调整swappiness控制交换频率,范围是0到100,值越高,系统越频繁地使用swap,默认值通常是60
编辑文件/etc/sysctl.conf
在末尾增加vm.swappiness = 60 放在开头也行
应用更改
sysctl -p
验证swappiness值
cat /proc/sys/vm/swappiness
以上就完成了虚拟内存设置,如果要修改虚拟内存大小
先禁用当前交换空间
swapoff -a
删除现有的swap文件
rm /mnt/data/mem/swapfile
然后重新执行上面的步骤
二、安装docker
先了解docker.io 和docker.ce
docker.io比较早,docker.ce是社区版,docker.io支持的平台较少,更新频率较慢,docker-ce还包括对Swarm等Docker工具的支持,并具有更丰富的社区支持和文档资料。
docker.io 好像可以直接apt install docker.io 而docker-ce则要多一些步骤
首先apt update ,阿里云服务器上的ubuntu好像自带了阿里云镜像源?所以不需要配置源了
然后安装一些软件
apt install apt-transport-https ca-certificates curl software-properties-common
安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
官方的好像被墙了curl -fsSL https://download.docker.com/linux/ubuntu/gpg
写入软件源信息
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
再次apt update
安装docker-ce
apt install docker-ce
其他包
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
查看docker版本
docker -v
查看docker状态
systemctl status docker
测试docker是否正常
docker run hello-world
我这里会报错
sudo docker run hello-world Unable to find image 'hello-world:latest' locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers). See 'docker run --help'.
咋个是docker.io的
那么更改下源,我这里发现/etc/docker下没有文件,那么用vim
vim /etc/docker/daemon.json
添加以下内容
{ "registry-mirrors": [ "https://dockerproxy.com", "https://hub-mirror.c.163.com", "https://mirror.baidubce.com", "https://ccr.ccs.tencentyun.com" ] }
重启docker
systemctl daemon-reload systemctl restart docker
检查配置是否成功
docker info
看看输出结果是否有上面的镜像url
然后再运行
docker run hello-world
然后安装docker-compose
apt install docker-compose
但是发现这样安装的版本比较低
docker-compose version
先移除
apt remove docker-compose
用github 上安装
curl -L "https://github.com/docker/compose/releases/download/v2.29.7/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
如果有新版本,将上面的版本号替换一下
但发现十分缓慢,那么就在本地用迅雷下载一下了,在github releases 更多上找到 docker-compose-linux-x86_64 重命名为docker-compose 复制到服务器上/usr/local/bin/ 目录中,
发现这个目录中已经有个docker-compose ,其实它是上面命令没有下载完的
再赋予执行权限
chmod +x /usr/local/bin/docker-compose
但我发现进行上面操作后并不能 docker-compose version
docker compose官方github
ou can download Docker Compose binaries from the release page on this repository.
Rename the relevant binary for your OS to docker-compose and copy it to $HOME/.docker/cli-plugins
Or copy it into one of these folders to install it system-wide:
/usr/local/lib/docker/cli-plugins OR /usr/local/libexec/docker/cli-plugins
/usr/lib/docker/cli-plugins OR /usr/libexec/docker/cli-plugins
(might require making the downloaded file executable with chmod +x)
我发现我的在/usr/libexec/docker/cli-plugins
运行 ./docker-compose version 发现就是最新版2.29.7
我发现docker pull 镜像有时还是会失败,这里可以添加自己阿里云的镜像服务的地址,但好像只能自己的阿里云服务器能访问?
三、安装mysql
这里我们安装8.0
先更新软件源
apt update
安装mysql
apt install mysql-server -y
查看版本
mysql --version
查看运行状态
systemctl status mysql
以数字ip形式显示mysql的tcp监听状态
netstat -tln
设置MySQL的root密码
安装后首次是不需要密码的
mysql -u root
修改密码
alter user 'root'@'localhost' identified with mysql_native_password by '123456';
设置允许远程登陆
use mysql; update user set host='%' where user='root'; flush privileges; # 权限刷新 exit;
到这里,其实还是不能远程登陆
还需要修改nano /etc/mysql/mysql.conf.d/mysqld.cnf
修改bind-address = 0.0.0.0
重启
systemctl restart mysql
然后再阿里云防火墙开放端口
远程连接后新建一个数据库,编码选择utf8mb4
新建一个表,再字段中随便插入一些大小写英文和中文,用select * from table like '%xxxx%'
发现xxxx 不区分大小写,中文也显示正常,但是表名区分大小写。
为了解决这个问题,找到方法,
在/etc/mysql/mysql.conf.d/mysqld.cnf 配置文件最后增加lower_case_table_names=1
但这里增加了是重启不了mysql服务的,因为这个只允许在初始化数据库之前配置,实际上如果在安装mysql之前就有这个配置文件,安装mysql的时候会提示是否使用它,此时忽略表名大小写就会生效。由于卸载mysql 会移除这个文件,
所以先对它进行一个备份再卸载mysql 后复原
停止mysql
systemctl stop mysql
备份配置文件
cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.backup
卸载之前安装的mysql
apt-get --purge autoremove mysql-server
删除目录
rm -rf /var/lib/mysql
还原配置文件
cp /etc/mysql/mysql.conf.d/mysqld.cnf.backup /etc/mysql/mysql.conf.d/mysqld.cnf
顺便把bind-address 改成0.0.0.0
在[mysqld]下添加lower_case_table_names=1
重新安装mysql
apt-get install mysql-server
安装的时候会提示已经包含配置文件,此时选N
然后重复之前的步骤就行了。
四、安装Nginx
这个最简单 直接apt install nginx就行了
然后就可以访问 ip:80端口了
五、mysql数据迁移
先在源数据库服务器上执行备份,此命令只能备份一个数据库
mysqldump -u root -p db_app > db_app.sql
然后输入密码后就会备份到当前目录
再在目标数据库上新建一个数据库db_app
再把备份的sql文件复制到目标服务器上
再目标服务器上运行
mysql -u root -p db_app < db_app.sql
我试过如果不建立数据库会提示数据库不存在,所以先建立下,导入完成后查看数据是否全在。
六、安装.NET 运行环境
这里没必要安装sdk 只需要安装运行时,选择安装 ASP.NET Core 运行时,因为它同时包括 .NET 和 ASP.NET Core 运行时
apt-get install -y aspnetcore-runtime-8.0
安装完成后 运行dotnet -v 是看不到,因为没安装sdk 但可以用dotnet xxx.dll
七、安装Redis
不知apt install redis 和apt install redis-server有啥区别
按官网的直接 apt install redis
查看状态systemctl status redis-server 会没有显示,但apt install redis-server后直接就有状态了
接下来
systemctl enable redis-server
然后启动服务
systemctl start redis-server
然后查看状态可以看到正在运行
systemctl enable redis-server
官网安装
sudo apt-get install lsb-release curl gpg curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg sudo chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list sudo apt-get update sudo apt-get install redis
Redis will start automatically, and it should restart at boot time. If Redis doesn't start across reboots, you may need to manually enable it:
sudo systemctl enable redis-server sudo systemctl start redis-server
验证redis是否正常工作
redis-cli
然后再输入ping
修改绑定为0.0.0.0 不然只能服务器本机访问
修改/etc/redis/redis.conf
找到bind 127.0.0.1 ::1 将127.0.0.1 改为0.0.0.0
增加密码
找到requirepass 取消掉注释 修改为requirepass 123456
protected-mode我没有动
八、恢复nginx 配置
centos 版本 nginx/1.20.1
ubuntu版本nginx/1.18.0 (Ubuntu)
修改/etc/nginx/nginx.conf
发现里面有include /etc/nginx/sites-enabled/*;
这个文件夹里已经有个default了 就是默认的80端口配置,现在只需要在这个文件夹中新增文件,然后将以前的server { } 复制过来
但发现centos 里的nginx没这个目录。
九、迁移gitea服务器
git服务器是docker中部署的gitea
将整个gitea目录复制到新服务器中
修改docker-compose.yml
注意image: gitea/gitea:1.21.3 版本需要保持不变,我试过用 latest 会导致git服务器无法访问
mysql 配置的host 不能是127.0.0.1 需要改成服务器的ip, 因为这是在docker中的,我就是没注意到这里导致无法访问mysql启动不了
这里我发现无法拉取1.21.3 镜像,那么可以先在原服务器上先把镜像打包
docker save -o gitea.tar gitea/gieta:1.21.3
然后在新服务器上导入
docker load --input gitea.tar
然后docker images 一下看是否导入成功
最后转到docker-compose.yml 所在目录
docker-compose up -d
可以docker logs gitea 看下日志是否启动成功
10.20
今天晚上发现nginx托管的静态资源 无法打开报403 但昨天就没此问题怀疑昨天还是用的之前深圳服务器的缓存,几经查找最终解决是将/etc/nginx/nginx.conf 第一行的user 改成root, 另外发现页面打开有问题需要F12禁用下缓存
11.07
今天发现xxxx.kecq.com 居然能访问,而且页面是git页面,本意是禁止访问的,查看nginx配置也无问题,最后在配置文件中加了
server { listen 80; listen 443 ssl; server_name ~^(.+)\.kecq\.com$; location / { return 403; }