Ubuntu 初始化系统
vim 基础命令
vi 是 Linux 自带的文本编辑器,仅有基础的文本编辑功能,vim 是基于 vi 扩展出来的程序,具有更强的编辑功能和文字着色功能。vi 和 vim 大部分的指令相同,这里推荐使用 vim 。
vim 总共分为三种模式,命令模式(Command Mode)、输入模式(Insert Mode)和命令行模式(Command-Line Mode)。日常使用的话基本只用前两种模式。
命令模式
使用vim 编辑时默认进入的是命令模式,在此状态下输入的字符均被解析为命令。
| 命令 | 解释 |
|---|---|
| i | 进入输入模式 |
| u | 撤销上次操作 |
| :w | 保存文件 |
| :wq | 保存并退出文件 |
| :q | 退出文件 |
| :q! | 强制退出文件(未保存的内容不会被保存) |
输入模式
在输入模式下,文件左下角或右下角会有 INSERT 或 插入 字样,如果是新文件会有New File 或 新文件 字样。
| 按键 | 解释 |
|---|---|
| enter | 换行 |
| backspace | 删除前一个字符 |
| del | 删除后一个字符 |
| 方向键 | 上下左右移动 |
| home / end | 到行首或行尾 |
| page up / page down | 上/下翻页 |
| insert | 替换模式 / 输入模式 切换 |
| ese | 退出输入模式到命令模式 |
| 其他任意字符键 | 输入内容 |
IP/端口 查看
在大部分 Linux 系统中都可默认使用以下命令查看服务器网口信息。类似于 windows 的 ipconfig 命令。
ifconfig
如果遇到没有ifconfig命令,也可通过以下命令安装相关工具来支持。
apt install net-tools
同时该工具还带来了端口查看功能。查看已占用端口。
netstat -atunp
也可通过 grep 命令来过滤
netstat -atunp | grep 3306
安装 Nginx
检查安装
输入以下命令查看包的安装状态。
dpkg -s nginx
如输出 install ok installed 则表明安装成功。
安装命令
在有外部网络的环境下:
apt install nginx
输入 继续完成安装。
安装完成后需检查安装是否成功。
查看结果
在另一台可访问该服务器的机器上输入该服务器的 IP 地址即可查看默认网站。
如果输出为 "Welcome to nginx!" 则表示 nginx 部署成功,否则需依据错误代码查询解决。
Nginx 网站部署
了解 nginx 部署原理
Nginx 是一款高性能的 Web 和反向代理服务器,它广泛用于部署静态和动态网站。其核心功能包括Web服务器、反向代理、负载均衡、缓存等功能。当用户访问一个网站时,浏览器会向 Nginx 发送 HTTP 请求。Nginx 收到请求后,根据配置文件中的规则来处理请求。
配置文件
Nginx 拥有两部分,其中位于 /etc/nginx/nginx.conf中的内容为主配置文件,该文件不可删除,删除后影响Nginx 服务运行,位于/etc/nginx/conf.d 目录下的配置文件是模块配置文件,通过会在该目录下新增多个配置文件,一个文件就是一个站点,对于主配置文件,我们原则上不进行改动。
主配置文件初始化
http {
client_max_body_size 5M;
map $host $html_root {
default /web/dotnet;
}
}
在http 配置节下面加入以下代码:
client_max_body_size 接口单次最大响应的数据容量,如果做文件上传可能因为次数据过小而导致上传失败,同时如果过大则可能造成接口无线超时。
default 用户配置项目公共路径。
结构
server {
listen 80;
server_name localhost;
location / {
root /var/www/html;
index index.html index.htm;
}
}
上述结构就是一个简单的,可访问的静态网站托管的模块配置文件结构,解释:
listen 监听端口, 对于同IP地址,不同的网站需配置不同的监听端口。对于不同域名或IP的网站,可以配置相同的监听端口。
server_name 绑定的域名或IP地址。
location 匹配的路由地址,/ 表示匹配所有路径。
root 表示工作目录,即静态网站的所属目录。
index 表示启动文件名称,上述配置匹配了 index.html 和 index.htm (htm文件格式是HTML2.0的标准,原则上已经不在提供支持)。
检查配置文件是否正确
nginx -t
该命令用于检查书写的配置是否正确,如果显示ok则表示书写正确,如果提示xx文件xx行,则表示该位置书写错误。每次更新nginx配置前已经要执行检查,如果应用了错误的配置会导致nginx服务不可用。
重载Nginx服务配置
平滑重启,用于重新加载 Nginx 的配置文件而不中断现有的连接。
nginx -s -reload
重新启动 nginx 服务, 会暂时中断nginx上的现有连接。
systemc restart nginx
建议新增或更新配置时使用第一个命令重新加载配置。
服务管理
在 ubuntu 中,系统默认使用 systemctl 进行任务管理,该组件会在系统启动时自动加载并运行拥有 multi-user.target 标识的任务。同时也可以手动管理任务的运行状态。
链接自启动任务
systemcel enable <服务名称>
通过该命令可以建立一个自动启动任务的快捷链接(类似于超链接),如果任务配置中没有 multi-user.target 标识,任务也不能完成开机自启动。
启动/停止任务
启动任务:
systemctl start <任务名称>
停止任务:
systemctl stop <任务名称>
重新启动任务:
systemctl restart <任务名称>
该命令不会有任务返回,如果执行该命令时系统卡住时间过长,则有极大的可能任务启动失败(也可能任务本身需要很多资源)。
检查任务状态
systemctl status <任务名称>
如果输出中包含 active (running) 则表示该任务正在运行中,active (fail) 则表示任务启动失败, incative (dead) 则表示任务未启动。
任务输出日志
输出任务前 xx 行日志,xx是要输出的行数
journalctl -u <任务名称> -n xx
实时跟踪任务日志
journalctl -u <任务名称> -f
查询指定时间后的日志
journalctl -u <任务名称> --suince "日期"
查询指定时间前的日志
journalctl -u <任务名称> --until "日期"
|结合可查询指定日期内的日志。
查询指定等级的日志
journalctl -u <任务名称> --level err
安装 MySQL
检查安装
输入以下命令查看包的安装状态。
dpkg -s mysql-server
如输出 install ok installed 则表明安装成功。
安装命令
这里使用DEB包来实现安装指定版本的效果,如需其他安装方式请自行搜索。
DEB官方网站:MySQL :: Download MySQL APT Repository 点击下载后,需点击下方 No Tanks, Just download
下载后放到linux的某个目录下,这里建议是root目录下,因为这是默认目录。
安装DEB包
dpkg -i <文件路径>
apt install -f
apt install mysql-server
输入 继续完成安装。
安装完成后需检查安装是否成功。
初始化MySQL
执行初始化脚本
mysql_secure_installation
该脚本会引导你完成以下步骤:
- 设置 root 用户密码。
- 删除匿名用户。
- 禁用远程 root 登录。
- 删除测试数据库并移除访问权限。
- 重新加载权限表。
登录到Mysql
mysql -u root -p
默认初始化密码可能为空,所以直接回车即可登录。
修改用户
一般部署时会采用AB账户的形式对MySQL进行配置,即A账户为root,此账户为超级管理员账户,不允许对外连接,B账户为普通账户,允许对外连接,同时由A账户赋予表权限和执行权限。
修改A账户密码
ALTER USER 'your_username'@'%' IDENTIFIED BY 'newrootpassword';
创建B账户
CREATE USER 'your_username'@'%' IDENTIFIED BY 'your_password';
授予B账户权限
GRANT ALL PRIVILEGES ON *.* TO 'your_username'@'%';
FLUSH PRIVILEGES;
|这里授予所有表的权限,一般不建议。
|如果外部无法通过3306访问MySQL 一定要检查 ufw 是否启动,或者 SELinux 是否启用, SELinux会阻止特定端口外的其他端口访问。
|如果通过 netstat -tuln | grep ':3306 ' 查询到MySQL绑定了127.0.0.1这种回环地址,则需要前往配置文件 /etc/mysql/my.cnf 中更改。
安装 Redis
检查安装
输入以下命令查看包的安装状态。
dpkg -s redis-server
如输出 install ok installed 则表明安装成功。
安装命令
在有外部网络的环境下:
apt install redis-server
输入 继续完成安装。
安装完成后需检查安装是否成功。
编辑Redis配置
文件路径是 /etc/redis/redis.conf
修改 bind 行,将 127.0.0.1 更改为 0.0.0.0 以允许远程连接:
bind 0.0.0.0
修改 requirepass 行以设置密码:
requirepass your_password
如果希望 Redis 作为后台进程运行,可以将 daemonize 设为 yes:
daemonize yes
配置 Redis 的最大内存使用量,避免占用过多内存:
maxmemory 128mb
保存退出后启用Redis即可。
安装 EMQX(MQTT中间网关)
检查安装
输入以下命令查看包的安装状态。
dpkg -s emqx
如输出 install ok installed 则表明安装成功。
安装命令
这里使用DEB包来实现安装指定版本的效果,如需其他安装方式请自行搜索。
DEB官方网站:下载 EMQX 开源版 点击下载。
下载后放到linux的某个目录下,这里建议是root目录下,因为这是默认目录。
或者可以通过 weget下载(这里版本是5.8.1,网站内也有安装教程)
wget https://www.emqx.com/zh/downloads/broker/5.8.1/emqx-5.8.1-ubuntu24.04-amd64.deb
安装DEB包
apt install <文件路径>
输入 继续完成安装。
安装完成后需检查安装是否成功。
启动EMQX
systemctl enable emqx
systemctl start emqx
启动后记得检查运行状态
管理后台
在浏览器中输入 http://你的IP:18083 进入管理后台
默认账户:admin
默认密码:public
.NET 环境安装
.NET 6 在 Ubuntu 24.04 的 Ubuntu 后向移植包存储库中提供,而不是在内置包存储库中提供。
检查安装
输入以下命令查看包的安装状态。
dpkg -s dotnet-sdk-6.0
如输出 install ok installed 则表明安装成功。
安装命令
在有外部网络的环境下: 下载 .NET 6.0 (Linux、macOS 和 Windows)
wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
chmod +x ./dotnet-install.sh
./dotnet-install.sh --version 版本去官网查看 --install-dir /usr/local/dotnet
ln -s /usr/local/dotnet /usr/bin/dotnet
输入 继续完成安装。
安装完成后需检查安装是否成功。
查看结果
使用以下命令查看安装的模板
dotnet --version
SELinux
Ubuntu 没有该组件,所以无需设置。
cat /etc/selinux/config
如果输出中包含 SELINUX=disabled 则表示SELinux未启用,无需更改,否则需要将参数改为 disabled 并重启服务器。
码恒VUE前端项目发布
前端项目发布相对简单,只需将文件上传到某个目录下并填写Nginx站点配置即可完成发布。
nginx配置
vim /etc/nginx/conf.d/文件名称
server {
listen 80;
server_name localhost;
# 如果项目使用了gzip,下面这堆gzip开头的配置可以放开
gzip on;
gzip_min_length 1k;
gzip_comp_level 9;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
location / {
root $html_root/你的目录;
index index.html;
try_files $uri $uri/ /index.html;
}
}
以上配置仅需更改以下三个地方:
- listen 监听的端口
- server_name 你需要绑定的IP地址或域名
- root 你的前端文件目录
|注释:$html_root 是预先在 nginx.conf 中声明的变量。
|注释:如果项目中未使用 gzip 建议把这些 gzip 开头的配置使用 # 注释。
前端更新
删掉所有文件后替换。
码恒.NET后端项目发布
后端项目需要配置Nginx代理外还需创建系统任务来保证自动运行。
nginx配置
vim /etc/nginx/conf.d/文件名称
map $http_connection $connection_upgrade {
"~*Upgrade" $http_connection;
default keep-alive;
}
server {
listen 80;
server_name digitals.mh-barcode.com;
location / {
proxy_pass http://localhost:5010;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
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;
}
}
以上配置仅需更改以下三个地方:
- listen 监听的端口
- server_name 你需要绑定的IP地址或域名
- proxy_pass 你的后端程序在本地运行的地址,一般都是
localhost仅需更改端口,端口可在项目配置文件appsetting.json查看。
systemctl 任务配置
vim /lib/systemd/system/文件名称
[Unit]
Description=MHS_Digital
[Service]
WorkingDirectory=/web/dotnet/Digital/interface
ExecStart=/usr/bin/dotnet /web/dotnet/Digital/interface/MhAdmin.Web.Entry.dll
Restart=always
# Restart Service after 10 seconds if the dotnet service crashes;
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=mhadmin-digital
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
以上配置仅需更改以下四个地方:
Description 你的文件名称(不含扩展名)
WorkingDirectory 你的后端项目所在目录
ExecStart
/usr/bin/dotnet无需更改,仅需将后面的路径指向你的项目文件即可,新框架的名称是MhAdmin.Web.Entry.dll,旧项目的名称是WebApiServser.dll, 该名称无特殊设置一般就是你的启动项目名称。SyslogIdentifier 一般为
mhadmin-开头,后面加上小写的项目英文名称
| 注解: 务必区分大小写
更新项目
将需更新的文件替换进项目文件夹内进行覆盖即可。
使用以下重启项目即可。
systemctl restart 任务名称
systemctl status 任务名称
