跳到主要内容

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