跳到主要内容

linux部署环境

安装Dotnet

手动安装

安装目录推荐在/opt目录中 。/opt专为第三方应用设计,符合Linux文件系统标准(FHS)。

  1. 下载 dotnet-runtime-8.0.0-linux-x64.tar.gz
  2. sudo mkdir -p /opt/dotnet
  3. 解压 tar -xzvf aspnetcore-runtime-8.0.12-linux-x64.tar.gz -C /opt/dotnet
  4. 配置环境变量
echo 'export DOTNET_ROOT=/opt/dotnet' >> ~/.bashrc
echo 'export PATH=$PATH:$DOTNET_ROOT' >> ~/.bashrc
  1. 加载环境变量 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

  1. 解压二进制包

    tar -xzvf docker-20.10.23.tgz
  2. 将解压出的可执行文件拷贝到 /usr/bin 目录

    sudo cp docker/* /usr/bin/
  3. 注册 docker.service 守护进程

    docker.service 文件拷贝到 /etc/systemd/system/ 目录:

    sudo cp docker.service /etc/systemd/system/

    docker.service 文件内容如下:

    [Unit]
    Description=Docker Application Container Engine
    Documentation=https://docs.docker.com
    After=network-online.target firewalld.service
    Wants=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 docker
    ExecStart=/usr/bin/dockerd
    ExecReload=/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=infinity
    LimitNPROC=infinity
    LimitCORE=infinity
    # Uncomment TasksMax if your systemd version supports it.
    # Only systemd 226 and above support this version.
    TasksMax=infinity
    TimeoutStartSec=0
    # set delegate yes so that systemd does not reset the cgroups of docker containers
    Delegate=yes
    # kill only the docker process, not all processes in the cgroup
    KillMode=process
    # restart the docker process if it exits prematurely
    Restart=on-failure
    StartLimitBurst=3
    StartLimitInterval=60s

    [Install]
    WantedBy=multi-user.target
  4. 设置文件可执行权限并启动服务

    sudo chmod +x /etc/systemd/system/docker.service
    sudo systemctl daemon-reload
    sudo systemctl start docker
    sudo systemctl enable docker
  5. 验证安装

    docker info
    docker version

Alibaba Cloud Linux

  1. 添加 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

  2. 安装最新版本的 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

  3. 安装配置

    启动 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 才可以生效。

docker-mysql.png

在大多数情况下,这需要在第一次启动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