标签: debian

  • Debian使用服务单元部署asp.net core

    创建 /etc/systemd/system/your_app.service 文件,替换为适合你的应用的名称:

    [Unit]
    Description=ASP.NET Core Application
    
    [Service]
    WorkingDirectory=/path/to/your_app/publish
    ExecStart=/usr/bin/dotnet /path/to/your_app/publish/your_app.dll
    Restart=always
    RestartSec=10
    SyslogIdentifier=dotnet-your_app
    User=www-data
    Environment=ASPNETCORE_ENVIRONMENT=Production
    
    [Install]
    WantedBy=multi-user.target
    • WorkingDirectory:应用程序的工作目录(发布目录)。
    • ExecStart:启动应用的命令,这里指定 dotnet 和应用的 DLL 文件路径。
    • Restart:配置应用异常退出时自动重启。
    • SyslogIdentifier:指定日志标识符,可以方便地过滤日志。
    • User:指定运行服务的用户(例如 www-data,避免使用 root 用户)。
    • Environment:指定环境变量(如 Production)。

    启动并启用服务

    sudo systemctl enable your_app.service
    sudo systemctl start your_app.service

    查看服务状态:

    sudo systemctl status your_app.service

    查看服务日志:

    sudo journalctl -u your_app.service

    nginx 反代模板:

    server {
        listen 80;
        server_name your_domain.com;
    
        location / {
            proxy_pass https://lwbj.cn:5000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection keep-alive;
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

    查看实时日志输出

    要实时查看应用的日志输出,可以使用以下命令:

    sudo journalctl -u your_app.service -f
    • -u your_app.service 指定服务名称,替换为你的服务文件名称。
    • -f 表示实时跟踪日志输出(类似 tail -f)。

    查看全部日志

    查看应用自启动以来的全部日志:

    sudo journalctl -u your_app.service

    这将显示该服务的全部日志记录。

    按时间范围查看日志

    可以按时间范围筛选日志,例如查看过去一小时的日志:

    sudo journalctl -u your_app.service --since "1 hour ago"

    或者查看特定日期之后的日志:

    sudo journalctl -u your_app.service --since "2024-11-01"

    按关键字过滤日志

    如果你只想查看特定关键字的日志,例如包含错误信息的日志,可以使用 grep 命令进行过滤:

    sudo journalctl -u your_app.service | grep "error"

     清除指定服务的日志

    要清除特定服务(如 ASP.NET Core 应用)的日志,可以使用 journalctl 的 –vacuum 选项。虽然 journalctl 没有直接提供按服务清除的功能,但可以通过指定服务名来筛选日志,再结合清除命令:

    sudo journalctl --vacuum-size=100M -u your_app.service

    这将限制日志文件的总大小为 100MB,多余的日志会被删除。将 100M 替换为你期望的日志限制大小。

    清除日志到指定时间点

    你可以通过 –vacuum-time 参数清除指定时间之前的所有日志数据:

    sudo journalctl --vacuum-time=7d

    这将清除 7 天之前的所有日志数据,包括所有服务的日志(不是仅 ASP.NET Core 应用)。

    清除所有 journald 日志

    如果你希望彻底清除所有 journald 日志数据(适用于开发或测试环境,生产环境需谨慎),可以使用以下命令:

    sudo journalctl --vacuum-size=1M

    这会将日志数据限制为 1MB,基本相当于清空所有日志数据。

    如果你希望彻底清除所有 journald 日志数据(适用于开发或测试环境,生产环境需谨慎),可以使用以下命令:

    sudo journalctl –vacuum-size=1M

    删除 journal 日志文件

    可以手动删除存储在 /var/log/journal/ 目录下的日志文件。这样会清空所有服务的日志,建议谨慎使用。

    sudo rm -rf /var/log/journal/*
    sudo systemctl restart systemd-journald

    定期清理

    可以在 journald 配置文件 /etc/systemd/journald.conf 中设置日志的最大保留大小或时间,定期清理旧日志。

  • Debian12安装dotnet sdk

    安装微软源:

    wget https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    
    sudo dpkg -i packages-microsoft-prod.deb
    
    rm packages-microsoft-prod.deb

    安装 SDK

    sudo apt-get update && sudo apt-get install -y dotnet-sdk-9.0

    安装运行时

    sudo apt-get update &&  sudo apt-get install -y aspnetcore-runtime-9.0

    作为 ASP.NET Core 运行时的一种替代方法,你可以安装不包含 ASP.NET Core 支持的 .NET 运行时:将上一命令中的 aspnetcore-runtime-9.0 替换为 dotnet-runtime-9.0:

    sudo apt-get install -y dotnet-runtime-9.0

    使用 apt 更新 .NET

    当有新的小版本更新时,只需使用以下命令通过 apt 进行升级:

    sudo apt-get update
    sudo apt-get upgrade

    参考:https://learn.microsoft.com/zh-cn/dotnet/core/install/linux-debian?tabs=dotnet9

  • Debian 安装 killall 命令

    昨天部署一台 Debian 12 服务器,发现竟然没有killall命令,那么就来安装一下吧。

    执行apt install psmisc命令安装 psmic 包,这个包的官方仓库是 https://gitlab.com/psmisc/psmisc ,描述是“一组使用 proc 文件系统的小型实用程序”,包含以下六个实用工具:

    • fuser – 使用文件或套接字识别进程
    • killall – 根据名称终止进程,例如 killall -HUP named
    • prtstat – 打印进程的统计信息
    • pslog – 打印进程的日志路径
    • pstree – 以树的形式显示当前正在运行的进程
    • peekfd – 显示通过文件描述符传输的数据

    安装完成后,就可以使用killall命令根据进程名称终止进程了。

    后记:

    2025年了,时间仿佛飞一般,一年转瞬即逝,新的一年已经到来,等过完了春节就到了阳历二月,再有十个月就是 2026 年了。所以,不要蹉跎岁月,有什么想法要抓紧时间去干。

  • 查看Debian开机启动项

    查看所有启用的服务:

    systemctl list-unit-files --type=service

    该命令会列出所有服务的启动状态,其中标记为 enabled 的服务会在开机时自动启动。

    查看当前正在运行的服务:

    systemctl list-units --type=service

    这个命令会列出当前正在运行的服务,已启动的服务会标记为 running。

    systemctl list-unit-files --type=service 输出 列表太长,如果不想看整个列表,只想简单地查看启用的服务,可以运行以下命令:

    systemctl list-unit-files --type=service | grep enabled

    这个命令会列出所有启用(enabled)的服务,只有那些会在系统启动时自动启动的服务会被显示。

    查看当前运行的服务

    systemctl list-units --type=service --state=running

    这个命令会显示当前正在运行的服务,但它不会直接列出所有已配置为开机启动的服务。它只会列出系统启动后当前处于运行状态的服务。

    检查特定服务是否设置为开机启动

    systemctl is-enabled <service-name>

    例如,要查看 ssh 服务是否在开机时启动:

    systemctl is-enabled ssh

    如果返回 enabled,则表示该服务已配置为开机启动。

    使用 grep 筛选开机启动的服务(更简洁的命令)

    systemctl list-unit-files --type=service | awk '$2=="enabled" {print $1}'

    这个命令会只输出那些标记为 enabled 的服务名称,避免显示其他无关的服务信息。

    最后,也可以查看/etc/init.d/目录(SysVinit 脚本,这个适合于老旧的系统,新系统中也会有这个目录,但不太推荐使用了

    ls /etc/init.d/
  • 查看Debian内核版本

    查看已安装的内核列表:

    dpkg --list | grep linux-image

    查看当前使用中的内核版本:

    uname -r

    如果有新内核,需要重启系统,重新启动后,会自动使用最新版本的内核。

    最好不要折腾内核,稳定性第一!

    查看kexec是否安装 :

    dpkg -l | grep kexec-tools

    安装 :

    apt install kexec-tools

    正常来说不需要这个东西,感觉没什么用,都要重启了,也不差那几秒。所以说,更新的时候如果有新内核,提示是否使用kexec,那么选No就行了,正常重启即可。

  • Debian12安装PHP7.4

    请注意:PHP7.4已经于2022年11月28日停止维护。

    安装sury源:

    #!/bin/sh
    # To add this repository please do:
    if [ "$(whoami)" != "root" ]; then
        SUDO=sudo
    fi
    ${SUDO} apt-get update
    ${SUDO} apt-get -y install lsb-release ca-certificates curl
    ${SUDO} curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
    ${SUDO} dpkg -i /tmp/debsuryorg-archive-keyring.deb
    ${SUDO} sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
    ${SUDO} apt-get update

    安装PHP7.4:

    apt install -y php7.4-fpm php7.4-mysql php7.4-mbstring php7.4-curl php7.4-xml php7.4-imagick php7.4-zip php7.4-gd php7.4-intl php7.4-bcmath
  • Debian+Nginx+PHP HTTPS配置模板

    Nginx+PHP+HTTPS的配置模板,如果要部署其它网站,可以基于此进行修改:

    # 处理 HTTP 请求,所有请求都重定向到 https://lwbj.cn
    server {
        listen 80;
        server_name lwbj.cn www.lwbj.cn;  # 同时匹配带 www 和不带 www 的域名
    
        # 所有请求都重定向到 https://lwbj.cn
        return 301 https://lwbj.cn$request_uri;
    }
    
    # 处理不带 www 的 HTTPS 请求,重定向到带 www 的域名
    server {
        listen 443 ssl http2;
        server_name lwbj.cn;  # 不带 www 的域名
    
        ssl_certificate /etc/nginx/ssl/www.lwbj.cn.pem;  # 证书路径
        ssl_certificate_key /etc/nginx/ssl/www.lwbj.cn.key;  # 证书路径
    
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
        ssl_ecdh_curve secp384r1;
        ssl_session_timeout 10m;
        ssl_session_cache shared:SSL:10m;
        ssl_session_tickets off;
        ssl_stapling on;
        ssl_stapling_verify on;
    
        # 重定向所有不带 www 的 HTTPS 请求到 www.lwbj.cn
        return 301 https://lwbj.cn$request_uri;
    }
    
    # 处理带 www 的 HTTPS 请求
    server {
        listen 443 ssl http2;
        root /var/www/www.lwbj.cn; # 确保这里是正确的根目录路径
        index index.html index.htm index.php index.nginx-debian.html;
    
        server_name  www.lwbj.cn;
        client_max_body_size 20m;
    
        ssl_certificate /etc/nginx/ssl/www.lwbj.cn.pem; # 确保证书路径正确
        ssl_certificate_key /etc/nginx/ssl/www.lwbj.cn.net.key; # 确保证书路径正确
    
        #加上TLSv1,HTTPS检测会报PCI DSS不合规
        ssl_protocols  TLSv1.2 TLSv1.3;# Requires nginx >= 1.13.0 else use TLSv1.2
        ssl_prefer_server_ciphers on;
        ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
        ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
        ssl_session_timeout 10m;
        ssl_session_cache shared:SSL:10m;
        ssl_session_tickets off; # Requires nginx >= 1.5.9
        ssl_stapling on; # Requires nginx >= 1.3.7
        ssl_stapling_verify on; # Requires nginx => 1.3.7
    
        location / {
            try_files $uri $uri/ /index.php?$args;
        }
    
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        }
    }
  • Debian+Nginx+PHP配置模板

    Nginx+PHP+HTTP的配置模板,如果要部署其它网站,可以基于此进行修改:

    server {
        listen 80;
        root /var/www/www.example.com;
        # Add index.php to the list if you are using PHP
        index index.html index.htm index.php index.nginx-debian.html;
    
        server_name www.example.com example.com;
    
        client_max_body_size 20m;
    
        location / {
            try_files $uri $uri/ /index.php?$args;
        }
    
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
    
            # With php-fpm (or other unix sockets):
            fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        }
    }
  • Debian配置系统时区

    运行命令:

    dpkg-reconfigure tzdata

    根据需要选择,很简单。

    dpkg-reconfigure tzdata 是一个用于重新配置系统时区的命令。

    在基于 Debian 的 Linux 系统(如 Ubuntu)中,tzdata 是一个提供时区信息的软件包。通过运行 dpkg-reconfigure tzdata,你可以重新设置系统的时区,以确保系统显示的时间是正确的。

    设置完成后,命令会显示类似以下的信息:

    Current default time zone: 'Asia/Shanghai'
    Local time is now:      Fri Nov 29 18:45:00 CST 2024
    Universal Time is now:  Fri Nov 29 10:45:00 UTC 2024

    可以执行date命令以查看当前时间。

  • Debian 开启 BBR 算法

    1、修改系统变量

    echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
    echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

    2、保存生效

    sysctl -p

    3、查看内核是否已开启BBR

    sysctl net.ipv4.tcp_available_congestion_control

    显示以下即已开启:

    net.ipv4.tcp_available_congestion_control = bbr cubic reno

    4、查看BBR是否启动

    lsmod | grep bbr

    显示以下即启动成功:

    tcp_bbr                20480  1