linux部署环境
安装Dotnet
手动安装
安装目录推荐在/opt目录中 。/opt专为第三方应用设计,符合Linux文件系统标准(FHS)。
- 下载 dotnet-runtime-8.0.0-linux-x64.tar.gz
- sudo mkdir -p /opt/dotnet
- 解压
tar -xzvf aspnetcore-runtime-8.0.12-linux-x64.tar.gz -C /opt/dotnet - 配置环境变量
echo 'export DOTNET_ROOT=/opt/dotnet' >> ~/.bashrc
echo 'export PATH=$PATH:$DOTNET_ROOT' >> ~/.bashrc
- 加载环境变量
source ~/.bashrc
Alibaba Cloud Linux
添加dotnet存储库
sudo rpm -Uvh https://packages.microsoft.com/config/centos/8/packages-microsoft-prod.rpm
安装运行环境
sudo dnf install aspnetcore-runtime-8.0
测试安装
dotnet --list-runtimes
安装Docker
手动安装
适用于无法联网或需要离线部署的服务器。准备好两个文件:二进制包 docker-20.10.23.tgz 和守护进程文件 docker.service。
-
解压二进制包
tar -xzvf docker-20.10.23.tgz -
将解压出的可执行文件拷贝到
/usr/bin目录sudo cp docker/* /usr/bin/ -
注册 docker.service 守护进程
将
docker.service文件拷贝到/etc/systemd/system/目录:sudo cp docker.service /etc/systemd/system/docker.service文件内容如下:[Unit]Description=Docker Application Container EngineDocumentation=https://docs.docker.comAfter=network-online.target firewalld.serviceWants=network-online.target[Service]Type=notify# the default is not to use systemd for cgroups because the delegate issues still# exists and systemd currently does not support the cgroup feature set required# for containers run by dockerExecStart=/usr/bin/dockerdExecReload=/bin/kill -s HUP $MAINPID# Having non-zero Limit*s causes performance problems due to accounting overhead# in the kernel. We recommend using cgroups to do container-local accounting.LimitNOFILE=infinityLimitNPROC=infinityLimitCORE=infinity# Uncomment TasksMax if your systemd version supports it.# Only systemd 226 and above support this version.TasksMax=infinityTimeoutStartSec=0# set delegate yes so that systemd does not reset the cgroups of docker containersDelegate=yes# kill only the docker process, not all processes in the cgroupKillMode=process# restart the docker process if it exits prematurelyRestart=on-failureStartLimitBurst=3StartLimitInterval=60s[Install]WantedBy=multi-user.target -
设置文件可执行权限并启动服务
sudo chmod +x /etc/systemd/system/docker.servicesudo systemctl daemon-reloadsudo systemctl start dockersudo systemctl enable docker -
验证安装
docker infodocker version
Alibaba Cloud Linux
-
添加 Docker 官方仓库
使用 yum-config-manager 添加 Docker 的官方软件源。由于 Alibaba Cloud Linux 与 CentOS 兼容,我们直接使用 CentOS 的仓库地址。
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo在国内服务器上,如果访问 Docker 官方仓库速度较慢,可以考虑使用国内的镜像源,例如阿里云的镜像源。将上面的命令替换为:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -
安装最新版本的 Docker Engine
这个命令会安装 Docker 社区版 (docker-ce)、命令行工具 (docker-ce-cli)、容器运行时 (containerd.io) 以及最新的 Docker Compose 。
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin -
安装配置
启动 Docker 服务
sudo systemctl start docker设置开机自启
sudo systemctl enable docker验证安装
docker info
安装PostgresSql数据库
加载镜像到docker中
docker load -i postgres_15.13.tar
启动postgres
docker run -d \
--name postgres-serever \
--restart=unless-stopped \
-e POSTGRES_PASSWORD=123456 \
-p 5432:5432 \
-v pgdata:/var/lib/postgresql/data \
postgres:15.13
安装MSSQL
下载镜像或者加载镜像
docker pull mcr.microsoft.com/mssql/server:2022-latest
启动MSSQL
docker run --name sql_server \
-e "ACCEPT_EULA=Y" \
-e 'MSSQL_SA_PASSWORD=!Passw0rd' \
-p 1433:1433 \
-v sql_data:/var/opt/mssql \
--restart unless-stopped \
-d mcr.microsoft.com/mssql/server:2022-latest
参数说明:
- ACCEPT_EULA 接受最终用户许可协议。这是运行 SQL Server 镜像的强制要求。
- MSSQL_SA_PASSWORD 设置 sa 用户的密码。你需要设置一个足够复杂的密码。
在 Bash 中,! 是一个特殊字符,用于历史扩展(History Expansion)。当你输入 !sometext 时,Bash 会尝试在你之前执行过的命令历史中,找到最近一条以 sometext 开头的命令,并用它来替换 !sometext。
要解决这个问题,你需要阻止 Bash 对 ! 字符进行特殊处理。最简单的方法是使用单引号 (') 代替双引号 (") 来包裹密码。
安装Mysql数据库
加载镜像到docker中
docker load -i mysql_8.0.34.tar
启动mysql
docker run -d \
--restart=unless-stopped \
--name mysql-server \
--privileged \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=logimaster \
-v logimaster_sqldata:/var/lib/mysql \
mysql:8.0.34 \
--lower-case-table-names=1
表名大小写
服务器是Windows,使用软件备份数据表名都是小写的。开发环境使用mysql的docker环境,需要测试数据库时发生错误。
查阅文档发现只有在创建容器时指定 lower_case_table_names=1 才可以生效。

在大多数情况下,这需要在第一次启动MySQL服务器之前在MySQL选项文件中配置lower_case_table_names。
故修改my.cnf 无效。
需要在第一次启动mysql容器时指定参数:--lower-case-table-names=1
lower-case-table-names 参数解释:
- 0:表名和数据库名区分大小写,同时在比较时也区分大小写。
- 1:表名和数据库名不区分大小写,但在比较时区分大小写。
- 2:表名和数据库名不区分大小写,并且在比较时也不区分大小写。
安装phpmyadmin
加载镜像到docker中
docker load -i phpmyadmin_5.2.1.tar
启动phpmyadmin
docker run -d --name phpmyadmin --restart=always --link mysql-server:db -p 8081:80 phpmyadmin:5.2.1-apache
托管
编写守护进程文件
以下以.NET程序Rcs注册服务为例。
在/etc/systemd/system 下新建文件文件rcs.service,文件需以.service结尾。内容为:
[Unit]
Description= Rcs
#服务描述:服务的描述说明,用于识别服务用途
After=network.target
#表示该服务应该在网络服务启动之后再启动。
[Service]
WorkingDirectory=/home/Rcs
#工作目录:指定服务运行时的工作目录
ExecStart=/usr/bin/dotnet /home/Rcs/Rcs.dll --urls="http://192.168.1.1:8000" --environment=Production
#启动:启动命令,这里是运行一个 .NET 应用程序
Restart=always
#服务崩溃时自动重启
RestartSec=25
#如果服务出现问题会在25秒后重启
SyslogIdentifier=Rcs
# 系统日志中的标识符
User=root
#以 root 用户身份运行服务
[Install]
WantedBy=multi-user.target
#指定服务应在多用户模式下启动
服务命令
注册服务
systemctl enable rcs.service
启动服务
systemctl start rcs.service
重启服务
systemctl restart rcs.service
停止服务
systemctl stop rcs.service
查看服务状态
systemctl status rcs
卸载
先停止服务
systemctl stop rcs.service
禁用服务
systemctl disable rcs.service
删除服务文件
rm /etc/systemd/system/rcs.service
重新加载systemd管理器配置
systemctl daemon-reload
Mysql数据库备份
数据库备份非常重要,最好每天定时备份数据。
编写备份脚本
新建备份脚本
touch backup.sh
chmod +x backup.sh
编写脚本内容
#!/bin/bash
BACKUP_DIR=/root/LogiMaster/db_backup/
#备份数据库文件目录
TIMESTAMP=$(date +"%F")
CONTAINER_NAME=mysql-server
#mysql docker 容器名称,该例子中使用docker运行mysql
MYSQL_USER=root
#数据库账号
MYSQL_PASSWORD=******
#数据库密码
DATABASE_NAME=innolight_tongling
#数据库名
docker exec ${CONTAINER_NAME} mysqldump -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${DATABASE_NAME} > ${BACKUP_DIR}/backup_${DATABASE_NAME}_${TIMESTAMP}.sql
#执行备份命令
# Optional: Remove backups older than 30 days
find ${BACKUP_DIR} -type f -name "*.sql" -mtime +30 -exec rm {} \;
编写好脚本后尝试运行一次,检测是否有错误。
配置定时任务
crontab -e
编写如下配置
0 2 * * * /root/LogiMaster/backup.sh
定时服务命令
查看服务状态
systemctl status crond
启动服务
systemctl start crond
停止服务
systemctl stop crond