跳转至

阿里云服务器配置

创建密钥对,通过密钥登录服务器

点击远程连接,在登录窗口选择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 登录失败,可以检查以下几个方面:

  1. SSH 服务是否启动:确认 SSH 服务正在运行。
sudo systemctl status ssh
  1. 防火墙设置:确保防火墙没有阻止 SSH 端口(默认是端口 22)。
sudo ufw allow ssh    # 对于 UFW 防火墙
sudo systemctl restart ufw
  1. 查看 SSH 日志:如果你遇到问题,可以查看 /var/log/auth.log/var/log/secure(取决于你的发行版)以获取更多的调试信息。
sudo tail -f /var/log/auth.log

总结

  1. 使用 useradd 创建用户,并设置密码。
  2. 配置 SSH 服务并确保它运行。
  3. 如果使用密钥认证,配置用户的 ~/.ssh/authorized_keys 文件。
  4. 确保防火墙允许 SSH 端口的流量。
  5. 测试 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

效果:

官网 GoAccess - Get Started

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的用户、组是否和当前用户一致