珂珂的个人博客 - 一个程序猿的个人网站

阿里云Ubuntu 重0开始

由于服务器快到期了,之前服务器一直在深圳决定搬到离家近的成都。先建立了个按量付费的成都服务器测试下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禁用下缓存


上一篇:个人代码全部开源

下一篇:阿里云Ubuntu 重0开始


0 评论

查看所有评论

给个评论吧