下面是一个完整教程 ,帮助你快速搭建一个基础的 Samba 服务,并允许其他用户访问你的共享目录。
sudo apt update
sudo apt install samba -y
安装完成后,Samba 会自动启动。
Samba 的主配置文件位于:
/etc/samba/smb.conf
建议先做一个备份:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
你可以选择共享一个现有目录,比如 /home/dellevin/shared
。
mkdir -p /home/dellevin/shared
sudo nano /etc/samba/smb.conf
在文件末尾添加如下内容(以共享 shared
目录为例):
[Shared]
comment = Shared Folder
path = /home/dellevin/shared
browseable = yes
read only = no
writable = yes
valid users = dellevin
[Shared]
:共享名称(客户端看到的名字)path
:要共享的目录路径read only = no
和 writable = yes
表示允许写入valid users
:允许访问该共享的用户你需要为允许访问的用户设置 Samba 密码(即使该用户已存在 Linux 系统中):
sudo smbpasswd -a dellevin
系统会提示你输入并确认 Samba 密码。
⚠️ 注意:这个密码可以和系统密码不同。
sudo systemctl restart smbd
sudo systemctl enable smbd
systemctl status smbd
确保服务状态是 active (running)
。
打开“此电脑”或资源管理器,在地址栏输入:
\\你的Ubuntu服务器IP地址
例如:
\\192.168.1.100
然后输入用户名 dellevin
和你在 smbpasswd
中设置的密码即可访问。
打开文件管理器(如 Nautilus),按下 Ctrl + L
输入:
smb://192.168.1.100
或者使用命令行挂载:
sudo mount -t cifs //192.168.1.100/Shared /mnt/shared -o user=dellevin
如果你启用了防火墙 UFW,需要开放 Samba 所需端口:
sudo ufw allow 'Samba'
操作 | 命令 |
---|---|
安装 Samba | sudo apt install samba |
配置文件位置 | /etc/samba/smb.conf |
添加共享目录 | 在配置文件中添加[ShareName] 块 |
设置 Samba 用户密码 | sudo smbpasswd -a username |
重启 Samba | sudo systemctl restart smbd |
开机自启 | sudo systemctl enable smbd |
查看服务状态 | systemctl status smbd |
客户端访问地址 | \\IP地址 或smb://IP地址 |
sudo vim /etc/systemd/system/frp-panel.service
[Unit]
Description=FRP Panel Service
After=network.target
[Service]
User=root
WorkingDirectory=/home/dellevin/frp
ExecStart=/home/dellevin/frp/frp-panel client -s 4f448b4a-1c0f-486d-9f42-aed90f288da5 -i admin.c.home-services --api-url http://152.136.153.72:9000 --rpc-url grpc://152.136.153.72:9001
Restart=always
RestartSec=10s
[Install]
WantedBy=multi-user.target
User=
:运行该服务的用户(这里是 root
)WorkingDirectory=
:程序运行时的工作目录ExecStart=
:要执行的完整命令Restart=always
:异常退出后自动重启RestartSec=10s
:重启前等待 10 秒sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable frp-panel.service
sudo systemctl start frp-panel.service
查看运行状态:
sudo systemctl status frp-panel.service
如果显示 active (running)
,说明服务已成功运行。
你可以使用 journalctl
查看服务日志:
journalctl -u frp-panel.service -f
sudo systemctl disable 服务名称
你可以运行以下命令查看该服务的状态:
systemctl is-enabled frp-panel
如果输出是:
disabled
说明已经成功取消开机启动了
]]>lsblk命令用于列出所有可用的存储设备及其分区信息
df -h 查看挂载点、文件系统类型、已用空间、可用空间等。
root@dellevin-ubuntu:/# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 63.9M 1 loop /snap/core20/2318
loop1 7:1 0 87M 1 loop /snap/lxd/29351
loop2 7:2 0 38.8M 1 loop /snap/snapd/21759
sda 8:0 0 119.2G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 117.2G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 117.2G 0 lvm /
sdb 8:16 0 465.8G 0 disk
└─sdb1 8:17 0 465.8G 0 part
root@dellevin-ubuntu:/# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 578M 1.2M 577M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 115G 7.1G 102G 7% /
tmpfs 2.9G 0 2.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 130M 1.7G 8% /boot
tmpfs 578M 4.0K 578M 1% /run/user/1000
可以看到sdb并没有挂载
sudo mkfs.ext4 /dev/sdb1
将这块硬盘格式
化为 ext4
文件系统
root@dellevin-ubuntu:/mnt# sudo mkfs.ext4 /dev/sdb1
mke2fs 1.46.5 (30-Dec-2021)
/dev/sdb1 contains a ntfs file system labelled '系统'
Proceed anyway? (y,N) y
Creating filesystem with 122096000 4k blocks and 30531584 inodes
Filesystem UUID: 86424462-d372-4894-89b2-3186bb52b237
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks):
done
Writing superblocks and filesystem accounting information: done
sudo mount /dev/sdb1 /mnt/500Data
创建挂载点并挂载硬盘
root@dellevin-ubuntu:/mnt# mkdir 500Data
root@dellevin-ubuntu:/mnt# ls
500Data
root@dellevin-ubuntu:/mnt# sudo mount /dev/sdb1 /mnt/500Data
root@dellevin-ubuntu:/mnt# df -h | grep sdb1
/dev/sdb1 458G 28K 435G 1% /mnt/500Data
root@dellevin-ubuntu:/mnt# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 578M 1.2M 577M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 115G 7.1G 102G 7% /
tmpfs 2.9G 0 2.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 130M 1.7G 8% /boot
tmpfs 578M 4.0K 578M 1% /run/user/1000
/dev/sdb1 458G 28K 435G 1% /mnt/500Data
设置开机自动挂载
sudo blkid | grep /dev/sdb1
查看硬盘UUID
root@dellevin-ubuntu:/mnt/500Data# sudo blkid | grep /dev/sdb1
/dev/sdb1: UUID="86424462-d372-4894-89b2-3186bb52b237" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="1ea79eea-01"
vim /etc/fstab
然后编辑 fstab
添加一行:
UUID=86424462-d372-4894-89b2-3186bb52b237 /mnt/500Data ext4 defaults 0 2
]]>创建一个空文件作为交换空间: 使用 dd
命令来创建一个指定大小的文件。我们将创建一个 2GB 的文件 /swapfile
。
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
设置适当的权限: 设置正确的文件权限以确保安全,防止非授权访问。
sudo chmod 600 /swapfile
初始化交换文件: 使用 mkswap
命令来设置这个文件为交换空间。
sudo mkswap /swapfile
激活交换文件: 使用 swapon
命令来启用新的交换空间。
sudo swapon /swapfile
验证交换空间: 再次使用 free -h
或者 swapon --show
来确认交换空间已经正确添加。
free -h
# 或者
sudo swapon --show
使更改永久生效: 编辑 /etc/fstab
文件,添加一行以确保在系统重启后仍然可以使用新创建的交换空间。 打开 /etc/fstab
文件:
sudo vi /etc/fstab
在文件末尾添加如下行:
/swapfile none swap sw 0 0
调整 Swappiness 参数(可选): 如果你想要调整内核对 swap 的使用倾向,可以通过编辑 /etc/sysctl.conf
文件来设置 vm.swappiness
参数。例如,将其设置为 10 可能是一个合理的选择。
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
完成以上步骤后,系统应该已经有了 2GB 的 swap 空间,并且它会在每次启动时自动加载。
]]>maven 官网地址:https://maven.apache.org/download.cgi
下载完成后,上传到 linux
创建 maven 文件夹
mkdir -p /usr/local/maven
解压 maven 安装包到 maven 文件夹
tar -zxvf apache-maven-3.8.5-bin.tar.gz -C /usr/local/maven
进入maven 目录
cd /usr/local/maven/apache-maven-3.8.5/
进入 conf 目录
cd conf/
创建 maven 资源库目录
mkdir -p /m2/respository
编辑 settings.xml 文件
vim settings.xml
设置指定的存放位置为
<localRepository>/m2/repository</localRepository>
更改镜像源
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url><http://maven.aliyun.com/nexus/content/groups/public/></url>
<mirrorOf>central</mirrorOf>
</mirror>
vim /etc/profile
添加 maven 环境变量内容
MAVEN_HOME=/usr/local/maven/apache-maven-3.8.5
PATH=$MAVEN_HOME/bin:$PATH
export MAVEN_HOME PATH
重新加载配置文件
source /etc/profile
测试查看版本
mvn -version
]]>进入官网找到下载地址 https://redis.io/download
右键Download按钮,选择复制链接。
进入到Xshell控制台(默认当前是root根目录),输入wget 将上面复制的下载链接粘贴上,如下命令:
wget <http://download.redis.io/releases/redis-5.0.7.tar.gz
>
下载完成后进行解压
tar -zvxf redis-5.0.7.tar.gz
移动redis目录
一般都会将redis目录放置到 /usr/local/redis目录,所以这里输入下面命令将目前在/root目录下的redis-5.0.7文件夹更改目录,同时更改文件夹名称为redis。
mv /root/redis-5.0.7 /usr/local/redis
编译
cd到/usr/local/redis目录,输入命令make执行编译命令,接下来控制台会输出各种编译过程中输出的内容。
make
安装
输入以下命令make PREFIX=/usr/local/redis install
这里多了一个关键字 PREFIX=
这个关键字的作用是编译的时候用于指定程序存放的路径。比如我们现在就是指定了redis必须存放在/usr/local/redis目录。假设不添加该关键字Linux会将可执行文件存放在/usr/local/bin目录,
库文件会存放在/usr/local/lib目录。配置文件会存放在/usr/local/etc目录。其他的资源文件会存放在usr/local/share目录。这里指定号目录也方便后续的卸载,后续直接rm -rf /usr/local/redis 即可删除redis。
根据上面的操作已经将redis安装完成了。在目录/usr/local/redis 输入下面命令启动redis
后台启动(在配置文件设置了daemonize属性为yes则跟后台进程方式启动其实一样)
./bin/redis-server& ./redis.conf
显示启动方式
./bin/redis-server ./redis.conf
You will need to explicitly install a Java runtime environment, because Oracle's Java RPMs are incorrect and fail to register as providing a java dependency. Thus, adding an explicit dependency requirement on Java would force installation of the OpenJDK JVM.
本文采用rpm形式安装,下载网址
https://archives.jenkins-ci.org/redhat-stable/
rpm安装:
rpm -ivh jenkins-2.164.1-1.1.noarch.rpm
配置jenkis的端口:
vim /etc/sysconfig/jenkins
找到修改端口号:
JENKINS\_PORT="8080" 修改此端口号
新版Jenkins配置文件需要在启动service里面更改
vim /usr/lib/systemd/system/jenkins.service
编辑更改这一行
Environment="JENKINS_PORT=7998”
启动jenkins
service jenkins start
service jenkins stop
service jenkins restart
启动失败日志:
[root@iZuefw6wnv6uycZ ~]# systemctl status jenkins.service
● jenkins.service - LSB: Jenkins Automation Server
Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
Active: failed (Result: exit-code) since Tue 2024-12-10 13:35:05 CST; 12s ago
Docs: man:systemd-sysv-generator(8)
Process: 15057 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=1/FAILURE)
Dec 10 13:35:05 iZuefw6wnv6uycZ systemd[1]: Starting LSB: Jenkins Automation Server...
Dec 10 13:35:05 iZuefw6wnv6uycZ runuser[15062]: pam_unix(runuser:session): session opened for user jenkins by (uid=0)
Dec 10 13:35:05 iZuefw6wnv6uycZ jenkins[15057]: Starting Jenkins bash: /usr/bin/java: No such file or directory
Dec 10 13:35:05 iZuefw6wnv6uycZ runuser[15062]: pam_unix(runuser:session): session closed for user jenkins
Dec 10 13:35:05 iZuefw6wnv6uycZ jenkins[15057]: [FAILED]
Dec 10 13:35:05 iZuefw6wnv6uycZ systemd[1]: jenkins.service: control process exited, code=exited status=1
Dec 10 13:35:05 iZuefw6wnv6uycZ systemd[1]: Failed to start LSB: Jenkins Automation Server.
Dec 10 13:35:05 iZuefw6wnv6uycZ systemd[1]: Unit jenkins.service entered failed state.
Dec 10 13:35:05 iZuefw6wnv6uycZ systemd[1]: jenkins.service failed.
可以查看到这里面Starting Jenkins bash: /usr/bin/java: No such file or directory
表示在/usr/bin/java
找到不到java环境,但我是配置了的。所以这里需要配置到对应路径的软连接
ln -s /home/env/java/jdk1.8.0_431/bin/java /usr/bin/java
再次启动则启动成功
[root@iZuefw6wnv6uycZ ~]# service jenkins start
Starting jenkins (via systemctl): [ OK ]
[root@iZuefw6wnv6uycZ ~]# systemctl status jenkins.service
● jenkins.service - LSB: Jenkins Automation Server
Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
Active: active (running) since Tue 2024-12-10 13:39:59 CST; 6s ago
Docs: man:systemd-sysv-generator(8)
Process: 15095 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/jenkins.service
└─15114 /usr/bin/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins....
Dec 10 13:39:58 iZuefw6wnv6uycZ systemd[1]: Starting LSB: Jenkins Automation Server...
Dec 10 13:39:58 iZuefw6wnv6uycZ runuser[15100]: pam_unix(runuser:session): session opened for user jenkins by (uid=0)
Dec 10 13:39:59 iZuefw6wnv6uycZ runuser[15100]: pam_unix(runuser:session): session closed for user jenkins
Dec 10 13:39:59 iZuefw6wnv6uycZ systemd[1]: Started LSB: Jenkins Automation Server.
Dec 10 13:39:59 iZuefw6wnv6uycZ jenkins[15095]: Starting Jenkins [ OK ]
在浏览器中访问ip:端口
, 首次进入会要求输入初始密码,
初始密码在:/var/lib/jenkins/secrets/initialAdminPassword
查看密码:
[root@iZuefw6wnv6uycZ ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
e912eae446234c02bdc5a8aea1de6b04
接下来选择“Install suggested plugins”安装默认的插件,Jenkins就下载相关的插件进行安装,有时候因为访问外网原因,可以选择手动安装,进入界面自己选择安装。
然后在世配置管理员命令和密码即可
]]>解压文件
tar -zxvf jdk-8u431-linux-x64.tar.gz -C /home/env/java/
设置环境变量
vim /etc/profile
在文件最末尾加上
export JAVA_HOME=/home/env/java/jdk1.8.0_431
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
使环境变量生效
source /etc/profile
配置软连接
ln -s /home/env/java/jdk1.8.0_431/bin/java /usr/bin/java
检查
java -version
删除软连接并重新配置
确认现有软连接
ls -l /usr/bin/java
删除
rm /usr/bin/java
重新配置
ln -s /env/java/jdk-21.0.3/bin/java /usr/bin/java
]]>CDN 就是内容分发网络的意思,其英文全称为 Content Delivery Network。简单地说,CDN 可以提前把数据存在离用户最近的数据节点,从而避免长途跋涉经过长途骨干网,最终达到减少骨干网负担、提高访问速度的目的。其实很好理解,就是你访问网站的时候数据如果经过的那个cdn,就会有个缓存,如果你再次访问的时候,就会读取那个cdn的缓存,就不用再跑很远去找你的服务器了。
好了,闲话不多说,现在开始实操。
一台国外服务器10.0.0.1 绑定域名 www.ittoolman.com
一台国内服务器10.0.0.2
需要在所有CDN服务器节点安装Nginx。也就是链接10.0.0.2,给这台服务器安装nginx,这里我是用的是xiaoz的一键Nginx安装包。如果想自己用的话可以自己设置nginx。
wget https://raw.githubusercontent.com/helloxz/nginx-cdn/master/nginx.sh
chmod +x nginx.sh && ./nginx.sh
反向代在这里你把它理解成CDN节点就行了
在10.0.0.2上编辑hosts,这样做的目的就是告知服务器从哪里去获取网站数据,也就是回源地址,需要在CDN上做如下修改
vi /etc/hosts
10.0.0.1 www.ittoolman.com
配置一下各种目录
#创建缓存目录
mkdir -p /data/wwwroot/caches/www.ittoolman.com
#设置缓存目录权限
chown -R www:www /data/wwwroot/caches/www.ittoolman.com
#如果网站是https创建证书路径
mkdir -p /data/wwwssl/www.ittoolman.com
#创建配置文件
vi /usr/local/nginx/conf/vhost/ittoolman.com.conf
在ittoolman.com.conf
中添加下面的内容,缓存目录/缓存时间请根据实际情况调整,详细参数和含义请自行百度。
proxy_cache_path /data/wwwroot/caches/www.ittoolman.com levels=1:2 keys_zone=ittoolman:50m inactive=30m max_size=50m;
# HTTP 请求重定向到 HTTPS(可选)
server {
listen 80;
server_name www.ittoolman.com;
return 301 https://$host$request_uri;
}
# HTTPS 配置
server {
listen 443 ssl;
server_name www.ittoolman.com;
# 设置 SSL 证书和私钥路径
ssl_certificate /data/wwwssl/www.ittoolman.com/fullchain.pem;
ssl_certificate_key /data/wwwssl/www.ittoolman.com/privkey.pem;
# 优化ssl配置
ssl_session_timeout 1d;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_stapling on;
ssl_stapling_verify on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
access_log /data/wwwlogs/www.ittoolman.com_nginx.log combined;
# 自定义 Server 头
server_tokens off;
add_header Server ittoolmanCDN;
# 启用缓存
location / {
proxy_ssl_verify off;
proxy_pass https://www.ittoolman.com;
proxy_set_header Accept-Encoding "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache ittoolman;
proxy_cache_valid 200 304 30m;
proxy_cache_valid 301 24h;
proxy_cache_valid 500 502 503 504 0s;
proxy_cache_valid any 1s;
proxy_cache_min_uses 1;
expires 12h;
proxy_redirect off;
}
}
nginx整体配置为
user www www;
worker_processes auto;
worker_rlimit_nofile 50000;
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 51200;
#worker_connections 1024;
multi_accept on;
}
http {
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 1024m;
client_body_buffer_size 10m;
sendfile on;
tcp_nopush on;
keepalive_timeout 120;
server_tokens off;
tcp_nodelay on;
proxy_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;
#开启Brotli压缩
brotli on;
brotli_comp_level 6;
#最小长度
brotli_min_length 512;
brotli_types text/plain text/javascript text/css text/xml text/x-component application/javascript application/x-javascript application/xml application/json application/xhtml+xml application/rss+xml application/atom+xml application/x-font-ttf application/vnd.ms-fontobject image/svg+xml image/x-icon font/opentype;
brotli_static always;
gzip on;
gzip_buffers 16 8k;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
gzip_types
text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
text/javascript application/javascript application/x-javascript
text/x-json application/json application/x-web-app-manifest+json
text/css text/plain text/x-component
font/opentype application/x-font-ttf application/vnd.ms-fontobject
image/x-icon;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
#If you have a lot of static files to serve through Nginx then caching of the files' metadata (not the actual files' contents) can save some latency.
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
#limit connection
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
include cdn/*.conf;
include vhost/*.conf;
}
所有配置写完之后,需要检测文件是否写的正确,以及重载nginx配置让配置生效。
# 检查文件是否正确,如果是正确的,会有个successful提示
/usr/local/nginx/sbin/nginx -t
# 重载nginx配置
/usr/local/nginx/sbin/nginx -s reload
在腾讯云/阿里云/cloudflare等dns服务商上面添加a解析
主机记录:www
记录类型:A
记录值:10.0.0.2
做完之后,等待一段时间让其生效,再次访问网站查看
server有这个,表示已经弄好了。
]]>但是又遇到了一个问题,由于我本人懒得备案,导致又拍云,腾讯云的cdn解析都没办法使用,毕竟都需要备案才能使用(可恶啊)。看了几篇帖子之后,他们说阿里云国外版可以cdn国内加速,我申请了一下,但是需要手机号。。。好的,还是pass了。最后还是选择了免费的cloudflare的加速。
先是添加网站,然后再域名提供商填写上cloudflare的ns解析值。等一会就验证过了。好了,这样就配置好了。。。但是,毕竟是国外的加速,用在国内cdn加速还是一坨屎,完全随缘了属于是。。。。
最后贴一张自己写的主页www.ittoolman.com