阿里云服务器配置¶
创建密钥对,通过密钥登录服务器
点击远程连接,在登录窗口选择ssh连接,然后选择创建密钥对时下载的文件。
登录之后可以设置root密码:
sudo passwd root
通过vscode登录服务器¶
先安装ssh插件
按ctrl+shif+p,搜索ssh,打开ssh配置文件
根据自己情况添加以下内容
Host root 8.138.xxx.xxx
HostName 8.138.xxx.xxx
User root
IdentityFile ~/.ssh/root_myserver.pem
~/.ssh
路径在windows上相当于C:\Users\你的用户名\.ssh
点击箭头处就可以登录了
其他服务器、其他用户登录方式类似
创建用户¶
在 Linux 系统中创建用户并允许通过 SSH 登录,可以分为几个步骤。以下是详细的步骤:
1. 创建用户¶
首先,我们使用 useradd
命令创建一个新用户,并确保创建了用户的主目录。通常,我们还会为用户设置一个密码。
sudo useradd -m -s /bin/bash username
-m
:创建用户的主目录(如果用户没有主目录,会自动创建)。-s /bin/bash
:指定用户登录时使用的默认 shell。
示例:创建一个名为 johndoe
的用户:
sudo useradd -m -s /bin/bash johndoe
2. 设置用户密码¶
创建用户后,我们需要为其设置密码。使用 passwd
命令:
sudo passwd johndoe
系统会提示你输入并确认新密码。
3. 配置 SSH 访问¶
为了让用户通过 SSH 登录,首先需要确保用户的 SSH 配置是允许的。通常,SSH 配置文件是 /etc/ssh/sshd_config
,我们需要检查和修改其中的一些设置。
3.1 确保 SSH 服务运行¶
确保 SSH 服务已安装并正在运行。如果 SSH 服务没有安装,可以通过以下命令进行安装:
# 对于基于 Debian/Ubuntu 的系统
sudo apt-get install openssh-server
# 对于基于 RHEL/CentOS 的系统
sudo yum install openssh-server
安装完成后,启动 SSH 服务并设置开机自启动:
sudo systemctl start ssh
sudo systemctl enable ssh
3.2 修改 SSH 配置文件(如果需要)¶
编辑 /etc/ssh/sshd_config
文件,确保以下配置项是正确的:
- 允许用户登录:默认情况下,所有用户都可以通过 SSH 登录。你可以检查
AllowUsers
配置项,确保没有限制用户。
sudo nano /etc/ssh/sshd_config
-
确保没有限制
AllowUsers
,或者你可以手动添加允许登录的用户:AllowUsers johndoe
-
密码认证:确保密码认证是启用的,尤其是如果你希望使用密码登录 SSH。
PasswordAuthentication yes
如果想使用公钥认证而非密码认证,请将 PasswordAuthentication
设置为 no
,并进行公钥配置。
3.3 重启 SSH 服务¶
修改完配置文件后,重启 SSH 服务使配置生效:
sudo systemctl restart ssh
4. 配置 SSH 密钥认证(可选)¶
如果你不希望每次使用密码登录,可以配置 SSH 密钥对认证。这里是如何操作的:
4.1 生成 SSH 密钥对(参考【编程->Git与Github】一文)¶
在本地机器上(客户端),你可以使用 ssh-keygen
生成一个 SSH 密钥对:
ssh-keygen -t ed25519 -C "your_email@example.com"
默认情况下,生成的公钥和私钥存储在 ~/.ssh/id_rsa
和 ~/.ssh/id_rsa.pub
文件中。
4.2 将公钥添加到新用户的 ~/.ssh/authorized_keys
文件中¶
登录到服务器(作为 root 用户或具有 sudo 权限的用户),将公钥复制到新用户的 .ssh/authorized_keys
文件中。假设你已经有了本地生成的公钥 id_rsa.pub
,可以使用 scp
或直接复制内容。
首先,确保新用户的 .ssh
目录存在并具有正确的权限:
sudo mkdir -p /home/johndoe/.ssh
sudo chmod 700 /home/johndoe/.ssh
sudo chown johndoe:johndoe /home/johndoe/.ssh
然后,将公钥内容添加到 authorized_keys
文件中:
sudo nano /home/johndoe/.ssh/authorized_keys
将公钥内容粘贴到 authorized_keys
文件中,保存并退出。
确保 authorized_keys
文件的权限正确:
sudo chmod 600 /home/johndoe/.ssh/authorized_keys
sudo chown johndoe:johndoe /home/johndoe/.ssh/authorized_keys
4.3 测试 SSH 登录¶
从本地机器尝试使用 SSH 登录到服务器:
ssh johndoe@server_ip
如果配置正确,应该可以成功登录。
5. 调试与故障排除¶
如果 SSH 登录失败,可以检查以下几个方面:
- SSH 服务是否启动:确认 SSH 服务正在运行。
sudo systemctl status ssh
- 防火墙设置:确保防火墙没有阻止 SSH 端口(默认是端口 22)。
sudo ufw allow ssh # 对于 UFW 防火墙
sudo systemctl restart ufw
- 查看 SSH 日志:如果你遇到问题,可以查看
/var/log/auth.log
或/var/log/secure
(取决于你的发行版)以获取更多的调试信息。
sudo tail -f /var/log/auth.log
总结¶
- 使用
useradd
创建用户,并设置密码。 - 配置 SSH 服务并确保它运行。
- 如果使用密钥认证,配置用户的
~/.ssh/authorized_keys
文件。 - 确保防火墙允许 SSH 端口的流量。
- 测试 SSH 登录。
如果有任何问题或进一步的需求,请随时告诉我!
开发端口¶
除了在linux中使用sudo ufw allow 端口号
之外,还需要阿里云控制台开发端口
选择其他端口选择手动添加
域名解析¶
pass
开启HTTPS¶
我使用的是lets encrypt
用一个linux客户端可以快速启用Certbot
按照其说明进行操作即可
后续对域名添加https,只需类似命令
sudo certbot --nginx
或
sudo certbot certonly --nginx
关于宝塔¶
nginx配置文件在/www/server/panel/vhost/nginx
,也可也在界面端操作
访问统计¶
我使用的时goaccess
安装 apt-get install goaccess
使用:goaccess /www/wwwlogs/sx3kj.top.log -c
效果:
python项目¶
gunicorn¶
项目结构
结束所有包含gunicorn的进程
ps aux | grep gunicorn | awk '{print $2}' | xargs kill
启动
把下面代码写入run.sh文件
venv/bin/python3 venv/bin/gunicorn -c /www/wwwroot/api.sx3kj.top/gunicorn_conf.py api.asgi:application
通过nohup bash run.sh &
gunicorn_conf.py文件:
# 项目目录
chdir = '/www/wwwroot/api.sx3kj.top'
# 指定进程数
workers = 4
# 指定每个进程开启的线程数
threads = 2
#启动用户
user = 'www'
# 启动模式
worker_class = 'uvicorn.workers.UvicornWorker'
# 绑定的ip与端口
bind = '0.0.0.0:8000'
# 设置进程文件目录(用于停止服务和重启服务,请勿删除)
pidfile = '/www/wwwroot/api.sx3kj.top/gunicorn.pid'
# 设置访问日志和错误信息日志路径
accesslog = '/www/wwwlogs/python/api_sx3kj_top/gunicorn_acess.log'
errorlog = '/www/wwwlogs/python/api_sx3kj_top/gunicorn_error.log'
# 日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
# debug:调试级别,记录的信息最多;
# info:普通级别;
# warning:警告消息;
# error:错误消息;
# critical:严重错误消息;
loglevel = 'info'
# 自定义设置项请写到该处
# 最好以上面相同的格式 <注释 + 换行 + key = value> 进行书写,
# PS: gunicorn 的配置文件是python扩展形式,即".py"文件,需要注意遵从python语法,
# 如:loglevel的等级是字符串作为配置的,需要用引号包裹起来
uwsgi.ini
[uwsgi]
#项目目录
chdir=/www/wwwroot/api.sx3kj.top
#指定项目application
wsgi-file=/www/wwwroot/api.sx3kj.top/api/asgi.py
#python 程序内用以启动的application 变量名
callable=application
# 进程个数
processes=4
# 线程个数
threads=2
#指定启动时的pid文件路径(用于停止服务和重启服务,请勿删除)
pidfile=/www/wwwroot/api.sx3kj.top/uwsgi.pid
# 指定ip及端口
# 默认http模式,可切换至socket模式
http=0.0.0.0:8080
#socket=0.0.0.0:8080
#启动uwsgi的用户名和用户组
uid=www
gid=www
#启用主进程
master=true
# 设置缓冲区大小
buffer-size = 32768
# 后台运行,并输出日志
daemonize = /www/wwwlogs/python/api_sx3kj_top/uwsgi.log
启动不成功查看日志:
tail /www/wwwlogs/python/api_sx3kj_top/gunicorn_error.log
如果有类似错误
wdh99@iZ7xvfuhs2l3j7rycy5cjaZ:/www/wwwroot/api.sx3kj.top$ tail /www/wwwlogs/python/api_sx3kj_top/gunicorn_error.log
File "/www/wwwroot/api.sx3kj.top/venv/lib/python3.12/site-packages/uvicorn/workers.py", line 32, in __init__
super().__init__(*args, **kwargs)
File "/www/wwwroot/api.sx3kj.top/venv/lib/python3.12/site-packages/gunicorn/workers/base.py", line 65, in __init__
self.tmp = WorkerTmp(cfg)
^^^^^^^^^^^^^^
File "/www/wwwroot/api.sx3kj.top/venv/lib/python3.12/site-packages/gunicorn/workers/workertmp.py", line 29, in __init__
util.chown(name, cfg.uid, cfg.gid)
File "/www/wwwroot/api.sx3kj.top/venv/lib/python3.12/site-packages/gunicorn/util.py", line 164, in chown
os.chown(path, uid, gid)
PermissionError: [Errno 1] Operation not permitted: '/tmp/wgunicorn-4f6txcjy'
请检查uwsgi.ini和gunicorn_conf.py的用户、组是否和当前用户一致